return theIPnt * myDimension;
}
+#include <TopoDS_Compound.hxx>
+#include <BRep_Builder.hxx>
+#include <BRepBuilderAPI_MakeVertex.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+//#define USE_COMPOUND
std::vector<Handle_AIS_InteractiveObject> CurveCreator_Curve::constructSection( int theISection ) const
{
std::vector<Handle_AIS_InteractiveObject> aSectionRepresentation;
CurveCreator::SectionType aSectType = getSectionType( theISection );
- int aSectSize = getNbPoints( theISection );
+ int aPointSize = getNbPoints( theISection );
bool aSectIsClosed = isClosed( theISection );
-
if( aSectType == CurveCreator::Polyline )
{
+#ifdef USE_COMPOUND
+ BRep_Builder aBuilder;
+ TopoDS_Compound aComp;
+ aBuilder.MakeCompound(aComp);
+
+ int iPoint = 0;
+ gp_Pnt aPrevPoint, aPoint;
+ if ( aPointSize == 1 ) {
+ getPoint( theISection, iPoint, aPrevPoint );
+ TopoDS_Vertex aVertex = BRepBuilderAPI_MakeVertex( aPrevPoint ).Vertex();
+ aBuilder.Add( aComp, aVertex );
+ }
+ else if ( aPointSize > 1 ) {
+ TopoDS_Edge aPointEdge;
+ TopoDS_Vertex aVertex;
+ getPoint( theISection, iPoint, aPrevPoint );
+ aVertex = BRepBuilderAPI_MakeVertex( aPrevPoint ).Vertex();
+ aBuilder.Add( aComp, aVertex );
+ iPoint++;
+ for( ; iPoint < aPointSize; iPoint++ ) {
+ getPoint( theISection, iPoint, aPoint );
+ aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex();
+ aBuilder.Add( aComp, aVertex );
+ aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge();
+ aBuilder.Add( aComp, aPointEdge );
+ aPrevPoint = aPoint;
+ }
+ if( isClosed( theISection ) && ( aPointSize > 2 ) ) {
+ getPoint( theISection, 0, aPoint );
+ aVertex = BRepBuilderAPI_MakeVertex( aPoint ).Vertex();
+ aBuilder.Add( aComp, aVertex );
+ aPointEdge = BRepBuilderAPI_MakeEdge( aPrevPoint, aPoint ).Edge();
+ aBuilder.Add( aComp, aPointEdge );
+ }
+ AIS_Shape* aShape = new AIS_Shape( aComp );
+ //aShape->SetSelectionMode( AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) );
+ aSectionRepresentation.push_back( aShape );
+ }
+#else
int iPoint = 0;
- for( ; iPoint < ( aSectSize - 1 ) ; iPoint++ ){
+ for( ; iPoint < ( aPointSize - 1 ) ; iPoint++ ){
Handle_AIS_Point anAISPnt = getAISPoint(theISection, iPoint);
aSectionRepresentation.push_back( anAISPnt );
Handle_AIS_Line aLine = getAISLine( theISection, iPoint, iPoint+1 );
aSectionRepresentation.push_back( aLine );
}
- if( aSectSize != 0 ){
+ if( aPointSize != 0 ){
Handle_AIS_Point anAISPnt = getAISPoint(theISection, iPoint);
aSectionRepresentation.push_back( anAISPnt );
- if( isClosed(theISection) && ( aSectSize > 1 ) ){
+ if( isClosed(theISection) && ( aPointSize > 1 ) ){
Handle_AIS_Line aLine = getAISLine( theISection, iPoint, 0 );
aSectionRepresentation.push_back( aLine );
}
}
+#endif
}
else if( aSectType == CurveCreator::Spline )
{
+#ifdef USE_COMPOUND
+
+#else
std::vector<double> aPoints;
- for( int iPoint = 0; iPoint < aSectSize; iPoint++ )
+ for( int iPoint = 0; iPoint < aPointSize; iPoint++ )
{
Handle_AIS_Point anAISPnt = getAISPoint( theISection, iPoint );
aSectionRepresentation.push_back( anAISPnt );
aPoints.push_back( aY );
}
- if( aSectSize > 1 )
+ if( aPointSize > 1 )
{
Handle(Geom_BSplineCurve) aBSplineCurve;
// fill array for algorithm by the received coordinates
Handle(AIS_Shape) aShape = new AIS_Shape( aWire );
aSectionRepresentation.push_back( aShape );
}
+#endif
}
return aSectionRepresentation;
}
myDisplayer->redisplayAIS(myAISCurve, false);
#else
myDisplayer->erase( false );
+//#ifndef USE_COMPOUND
myDisplayer->display( constructWire(), true );
+//#else
+ /*std::vector<Handle_AIS_InteractiveObject> anAISObjects = constructWire();
+ int aSelMode = AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX );
+ Handle(AIS_InteractiveContext) aContext = myDisplayer->getAISContext();
+ for( int i = 0 ; i < anAISObjects.size() ; i++ ){
+ Handle_AIS_InteractiveObject anAISObject = anAISObjects[i];
+ //anAISObject->SetSelectionMode( aSelMode );
+ aContext->Display( anAISObject, Standard_False );
+ //aContext->Display( anAISObject, 0, aSelMode, Standard_False, Standard_True );
+ }
+ aContext->UpdateCurrentViewer();
+ */
+//#endif
#endif
}
}
}
return aCurveRepresentation;
}
+
+void CurveCreator_Curve::getPoint( const int theISection, const int theIPoint,
+ gp_Pnt& thePoint ) const
+{
+ double anX, anY, aZ;
+ getCoordinates( theISection, theIPoint, anX, anY, aZ );
+ thePoint = gp_Pnt( anX, anY, aZ);
+}