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:
Garux
2018-12-13 19:13:26 +03:00
parent 868ff8fe50
commit 9eff327c70
6 changed files with 178 additions and 46 deletions

View File

@@ -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;
}
};