refactor brush transform evaluation code to reduce amount of unneeded evaluations to 0
improvable: don't evaluateBRep on shader changed, perhaps more fix: brush vertex manip: no vertexModeFree() after identity transform (mouse forth and back / rotate dialog 0 / insertion w/o move) = selects vertices on undo fix: brush vertex manip: tex vertex lock: broken for 220 use brush::vertexmode code to delete selected brush components
This commit is contained in:
@@ -145,7 +145,6 @@ Callback m_changed;
|
||||
Callback m_apply;
|
||||
TransformModifierType m_type;
|
||||
public:
|
||||
bool m_transformFrozen = true;
|
||||
|
||||
TransformModifier( const Callback& changed, const Callback& apply ) :
|
||||
m_translation( c_translation_identity ),
|
||||
@@ -181,13 +180,85 @@ void setSkew( const Skew& value ){
|
||||
void freezeTransform(){
|
||||
if ( !isIdentity() ) {
|
||||
m_apply();
|
||||
m_translation = c_translation_identity;
|
||||
m_rotation = c_rotation_identity;
|
||||
m_scale = c_scale_identity;
|
||||
m_skew = c_skew_identity;
|
||||
m_transformFrozen = true;
|
||||
setIdentity();
|
||||
m_changed();
|
||||
}
|
||||
}
|
||||
const Translation& getTranslation() const {
|
||||
return m_translation;
|
||||
}
|
||||
const Rotation& getRotation() const {
|
||||
return m_rotation;
|
||||
}
|
||||
const Scale& getScale() const {
|
||||
return m_scale;
|
||||
}
|
||||
const Skew& getSkew() const {
|
||||
return m_skew;
|
||||
}
|
||||
Matrix4 calculateTransform() const {
|
||||
return matrix4_transform_for_components( getTranslation(), getRotation(), getScale(), getSkew() );
|
||||
}
|
||||
private:
|
||||
bool isIdentity() const {
|
||||
return m_translation == c_translation_identity
|
||||
&& m_rotation == c_rotation_identity
|
||||
&& m_scale == c_scale_identity
|
||||
&& m_skew == c_skew_identity;
|
||||
}
|
||||
void setIdentity(){
|
||||
m_translation = c_translation_identity;
|
||||
m_rotation = c_rotation_identity;
|
||||
m_scale = c_scale_identity;
|
||||
m_skew = c_skew_identity;
|
||||
}
|
||||
};
|
||||
|
||||
class BrushTransformModifier : public Transformable
|
||||
{
|
||||
Translation m_translation;
|
||||
Rotation m_rotation;
|
||||
Scale m_scale;
|
||||
Skew m_skew;
|
||||
Callback m_changed;
|
||||
Callback m_apply;
|
||||
TransformModifierType m_type;
|
||||
public:
|
||||
bool m_transformFrozen = true;
|
||||
|
||||
BrushTransformModifier( const Callback& changed, const Callback& apply ) :
|
||||
m_translation( c_translation_identity ),
|
||||
m_rotation( c_quaternion_identity ),
|
||||
m_scale( c_scale_identity ),
|
||||
m_skew( c_skew_identity ),
|
||||
m_changed( changed ),
|
||||
m_apply( apply ),
|
||||
m_type( TRANSFORM_PRIMITIVE ){
|
||||
}
|
||||
void setType( TransformModifierType type ){
|
||||
m_type = type;
|
||||
}
|
||||
TransformModifierType getType() const {
|
||||
return m_type;
|
||||
}
|
||||
void setTranslation( const Translation& value ){
|
||||
m_translation = value;
|
||||
m_changed();
|
||||
}
|
||||
void setRotation( const Rotation& value ){
|
||||
m_rotation = value;
|
||||
m_changed();
|
||||
}
|
||||
void setScale( const Scale& value ){
|
||||
m_scale = value;
|
||||
m_changed();
|
||||
}
|
||||
void setSkew( const Skew& value ){
|
||||
m_skew = value;
|
||||
m_changed();
|
||||
}
|
||||
void freezeTransform(){
|
||||
m_apply();
|
||||
m_transformFrozen = true;
|
||||
}
|
||||
const Translation& getTranslation() const {
|
||||
@@ -211,6 +282,12 @@ bool isIdentity() const {
|
||||
&& m_scale == c_scale_identity
|
||||
&& m_skew == c_skew_identity;
|
||||
}
|
||||
void setIdentity(){
|
||||
m_translation = c_translation_identity;
|
||||
m_rotation = c_rotation_identity;
|
||||
m_scale = c_scale_identity;
|
||||
m_skew = c_skew_identity;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user