optimize vertices reselection during vertex manipulations

This commit is contained in:
Garux 2018-12-21 14:45:12 +03:00
parent ab0f376d4a
commit 9186d18353
2 changed files with 13 additions and 13 deletions

View File

@ -309,10 +309,8 @@ void Brush::buildBRep(){
} }
if( m_vertexModeOn ){ if( m_vertexModeOn ){
for( const auto& i : m_vertexModeVertices )
if( i.m_selected )
for ( Observers::iterator o = m_observers.begin(); o != m_observers.end(); ++o ) for ( Observers::iterator o = m_observers.begin(); o != m_observers.end(); ++o )
( *o )->vertex_select( i.m_vertexTransformed ); ( *o )->vertex_select();
} }
} }
m_BRep_evaluation = false; m_BRep_evaluation = false;

View File

@ -1553,7 +1553,7 @@ virtual void edge_push_back( SelectableEdge& edge ) = 0;
virtual void vertex_clear() = 0; virtual void vertex_clear() = 0;
virtual void vertex_push_back( SelectableVertex& vertex ) = 0; virtual void vertex_push_back( SelectableVertex& vertex ) = 0;
virtual void vertex_select( const Vector3& vertex ) = 0; virtual void vertex_select() = 0;
virtual void vertex_snap( const float snap ) = 0; virtual void vertex_snap( const float snap ) = 0;
virtual void DEBUG_verify() const = 0; virtual void DEBUG_verify() const = 0;
@ -3206,10 +3206,12 @@ void gather( Brush::VertexModeVertices& vertexModeVertices ) const {
} }
while ( faceVertex.getFace() != m_vertex->m_faceVertex.getFace() ); while ( faceVertex.getFace() != m_vertex->m_faceVertex.getFace() );
} }
void vertex_select( const Vector3& vertex ){ bool vertex_select( const Vector3& vertex ){
if( vector3_length_squared( vertex - m_vertex->getFace().getWinding()[m_vertex->m_faceVertex.getVertex()].vertex ) < ( 0.1 * 0.1 ) ){ if( vector3_length_squared( vertex - m_vertex->getFace().getWinding()[m_vertex->m_faceVertex.getVertex()].vertex ) < ( 0.1 * 0.1 ) ){
setSelected( true ); setSelected( true );
return true;
} }
return false;
} }
}; };
@ -3407,13 +3409,13 @@ void vertex_push_back( SelectableVertex& vertex ){
m_vertexInstances.push_back( VertexInstance( m_faceInstances, vertex ) ); m_vertexInstances.push_back( VertexInstance( m_faceInstances, vertex ) );
} }
void vertex_select( const Vector3& vertex ){ void vertex_select(){
bool selected = false;
for( const auto& v : m_brush.m_vertexModeVertices )
if( v.m_selected )
for( auto& i : m_vertexInstances ) for( auto& i : m_vertexInstances )
i.vertex_select( vertex ); selected |= i.vertex_select( v.m_vertexTransformed );
for ( const auto& i : m_faceInstances ) if( !selected && !m_vertexInstances.empty() )
if( i.selectedComponents( SelectionSystem::eVertex ) ) //got something selected, okay
return;
if( !m_vertexInstances.empty() )
m_vertexInstances[0].setSelected( true ); //select at least something to prevent transform interruption after removing all selected vertices during vertexModeTransform m_vertexInstances[0].setSelected( true ); //select at least something to prevent transform interruption after removing all selected vertices during vertexModeTransform
} }