void exportState( FaceShader& faceShader ) const {
faceShader.setShader( m_shader.c_str() );
- faceShader.setFlags( m_flags );
+ //faceShader.setFlags( m_flags );
+ faceShader.m_flags = m_flags;
}
};
Texdef_FitTexture( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
}
-void fitW( const Vector3& normal, const Winding& winding, float s_repeat, float t_repeat ){
- Texdef_FitTextureW( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
-}
-
-void fitH( const Vector3& normal, const Winding& winding, float s_repeat, float t_repeat ){
- Texdef_FitTextureH( m_projection, m_shader.width(), m_shader.height(), normal, winding, s_repeat, t_repeat );
-}
-
void emitTextureCoordinates( Winding& winding, const Vector3& normal, const Matrix4& localToWorld ){
Texdef_EmitTextureCoordinates( m_projection, m_shader.width(), m_shader.height(), winding, normal, localToWorld );
}
texdefChanged();
}
-void FitTextureW( float s_repeat, float t_repeat ){
- undoSave();
- m_texdef.fitW( m_plane.plane3().normal(), m_winding, s_repeat, t_repeat );
- texdefChanged();
-}
-
-void FitTextureH( float s_repeat, float t_repeat ){
- undoSave();
- m_texdef.fitH( m_plane.plane3().normal(), m_winding, s_repeat, t_repeat );
- texdefChanged();
-}
-
void EmitTextureCoordinates(){
Texdef_EmitTextureCoordinates( m_texdefTransformed, m_shader.width(), m_shader.height(), m_winding, plane3().normal(), g_matrix4_identity );
}
continue;
}
+ if( buffer[swap].points.empty() ){
+ //globalErrorStream() << "windingForClipPlane: about to feed empty winding\n";
+ break;
+ }
+
buffer[!swap].clear();
#if BRUSH_CONNECTIVITY_DEBUG
}
-typedef const Plane3* PlanePointer;
-typedef PlanePointer* PlanesIterator;
-
class VectorLightList : public LightList
{
typedef std::vector<const RendererLight*> Lights;
}
}
-void selectPlane( Selector& selector, const Line& line, PlanesIterator first, PlanesIterator last, const PlaneCallback& selectedPlaneCallback ){
+void selectPlane( Selector& selector, const Line& line, const PlaneCallback& selectedPlaneCallback ){
for ( Winding::const_iterator i = getFace().getWinding().begin(); i != getFace().getWinding().end(); ++i )
{
Vector3 v( vector3_subtracted( line_closest_point( line, ( *i ).vertex ), ( *i ).vertex ) );
}
}
+bool trySelectPlane( const Line& line ){
+ for ( Winding::const_iterator i = getFace().getWinding().begin(); i != getFace().getWinding().end(); ++i ){
+ Vector3 v( vector3_subtracted( line_closest_point( line, ( *i ).vertex ), ( *i ).vertex ) );
+ double dot = vector3_dot( getFace().plane3().normal(), v );
+ if ( dot <= 0 ) {
+ return false;
+ }
+ }
+ return true;
+}
+
void transformComponents( const Matrix4& matrix ){
if ( isSelected() ) {
m_face->transform( matrix, false );
Selector_add( selector, *this, best );
}
}
+
+void selectVerticesOnPlanes( SelectionTest& test ){
+ Line line( test.getNear(), test.getFar() );
+ FaceVertexId faceVertex = m_vertex->m_faceVertex;
+ do
+ {
+ if( m_faceInstances[faceVertex.getFace()].trySelectPlane( line ) ){
+ //m_faceInstances[faceVertex.getFace()].select_vertex( faceVertex.getVertex(), true );
+ setSelected( true );
+ }
+ faceVertex = next_vertex( m_vertex->m_faces, faceVertex );
+ }
+ while ( faceVertex.getFace() != m_vertex->m_faceVertex.getFace() );
+}
};
class BrushInstanceVisitor
void setSelected( bool select ){
m_selectable.setSelected( select );
+ if ( !select && parent() ){
+ Selectable* sel_parent = Instance_getSelectable( *parent() );
+ if ( sel_parent && sel_parent->isSelected() )
+ sel_parent->setSelected( false );
+ }
}
void update_selected() const {
}
}
-void selectPlanes( Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback ){
- test.BeginMesh( localToWorld() );
-
- PlanePointer brushPlanes[c_brush_maxFaces];
- PlanesIterator j = brushPlanes;
-
- for ( Brush::const_iterator i = m_brush.begin(); i != m_brush.end(); ++i )
+void invertComponentSelection( SelectionSystem::EComponentMode mode ){
+ switch ( mode )
+ {
+ case SelectionSystem::eVertex:
+ {
+ for ( VertexInstances::iterator i = m_vertexInstances.begin(); i != m_vertexInstances.end(); ++i )
+ {
+ ( *i ).setSelected( !( *i ).isSelected() );
+ }
+ }
+ break;
+ case SelectionSystem::eEdge:
{
- *j++ = &( *i )->plane3();
+ for ( EdgeInstances::iterator i = m_edgeInstances.begin(); i != m_edgeInstances.end(); ++i )
+ {
+ ( *i ).setSelected( !( *i ).isSelected() );
+ }
}
+ break;
+ case SelectionSystem::eFace:
+ {
+ for ( FaceInstances::iterator i = m_faceInstances.begin(); i != m_faceInstances.end(); ++i )
+ {
+ if( !( *i ).getFace().isFiltered() )
+ ( *i ).setSelected( mode, !( *i ).isSelected() );
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+void selectPlanes( Selector& selector, SelectionTest& test, const PlaneCallback& selectedPlaneCallback ){
+ test.BeginMesh( localToWorld() );
for ( FaceInstances::iterator i = m_faceInstances.begin(); i != m_faceInstances.end(); ++i )
{
- ( *i ).selectPlane( selector, Line( test.getNear(), test.getFar() ), brushPlanes, j, selectedPlaneCallback );
+ ( *i ).selectPlane( selector, Line( test.getNear(), test.getFar() ), selectedPlaneCallback );
}
}
}
+void selectVerticesOnPlanes( SelectionTest& test ){
+ test.BeginMesh( localToWorld() );
+
+ for ( VertexInstances::iterator i = m_vertexInstances.begin(); i != m_vertexInstances.end(); ++i ){
+ ( *i ).selectVerticesOnPlanes( test );
+ }
+}
+
+
void transformComponents( const Matrix4& matrix ){
for ( FaceInstances::iterator i = m_faceInstances.begin(); i != m_faceInstances.end(); ++i )
{