From: nds Date: Tue, 3 Dec 2013 14:19:51 +0000 (+0000) Subject: OCC functionality moving out from the widget X-Git-Tag: BR_hydro_v_0_4~78 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=1e9be94cc5ff4ad886099c507462d5b70f6d71f9;p=modules%2Fhydro.git OCC functionality moving out from the widget --- diff --git a/src/HYDROCurveCreator/CurveCreator_AISCurve.cxx b/src/HYDROCurveCreator/CurveCreator_AISCurve.cxx index dde3a416..923d0384 100644 --- a/src/HYDROCurveCreator/CurveCreator_AISCurve.cxx +++ b/src/HYDROCurveCreator/CurveCreator_AISCurve.cxx @@ -51,14 +51,6 @@ void CurveCreator_AISCurve::getPoint( const int theISection, const int theIPoint double anX, anY, aZ; myCurve->getCoordinates( theISection, theIPoint, anX, anY, aZ ); thePoint = gp_Pnt( anX, anY, aZ); - /* - double anX, anY, aZ; - - std::deque aPoint = myCurve->getPoint( theSectionId, thePointId ); - anX = aPoint[0]; - anY = aPoint[1]; - aZ = aPoint[2]; - thePoint = gp_Pnt( anX, anY, aZ);*/ } #define MAKE_BUILDER_USE diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.cxx b/src/HYDROCurveCreator/CurveCreator_Curve.cxx index 25939c14..99845e43 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.cxx @@ -185,36 +185,83 @@ int CurveCreator_Curve::toICoord(const int theIPnt) const return theIPnt * myDimension; } +#include +#include +#include +#include +//#define USE_COMPOUND std::vector CurveCreator_Curve::constructSection( int theISection ) const { std::vector 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 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 ); @@ -227,7 +274,7 @@ std::vector CurveCreator_Curve::constructSection( aPoints.push_back( aY ); } - if( aSectSize > 1 ) + if( aPointSize > 1 ) { Handle(Geom_BSplineCurve) aBSplineCurve; // fill array for algorithm by the received coordinates @@ -256,6 +303,7 @@ std::vector CurveCreator_Curve::constructSection( Handle(AIS_Shape) aShape = new AIS_Shape( aWire ); aSectionRepresentation.push_back( aShape ); } +#endif } return aSectionRepresentation; } @@ -365,7 +413,21 @@ void CurveCreator_Curve::redisplayCurve() myDisplayer->redisplayAIS(myAISCurve, false); #else myDisplayer->erase( false ); +//#ifndef USE_COMPOUND myDisplayer->display( constructWire(), true ); +//#else + /*std::vector 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 } } @@ -1073,3 +1135,11 @@ std::vector CurveCreator_Curve::constructWire() co } 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); +} diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.hxx b/src/HYDROCurveCreator/CurveCreator_Curve.hxx index 0baf0775..0f8e887f 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.hxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.hxx @@ -270,6 +270,8 @@ public: /***********************************************/ virtual ListAISObjects constructWire() const; + void getPoint( const int theSectionId, const int thePointId, gp_Pnt& thePoint ) const; + public: Handle(CurveCreator_AISCurve) myAISCurve; bool myIsLocked; diff --git a/src/HYDROCurveCreator/CurveCreator_Displayer.h b/src/HYDROCurveCreator/CurveCreator_Displayer.h index 92ed520b..fcd28056 100644 --- a/src/HYDROCurveCreator/CurveCreator_Displayer.h +++ b/src/HYDROCurveCreator/CurveCreator_Displayer.h @@ -16,6 +16,8 @@ public: CurveCreator_Displayer(Handle_AIS_InteractiveContext theContext ); ~CurveCreator_Displayer(void); + Handle_AIS_InteractiveContext getAISContext() { return myContext; } + void display( AISObjectsList theCurveObjects, bool isUpdate ); void erase( bool isUpdate ); void highlight( const AISObjectsList& theObjects, bool isHL ); diff --git a/src/HYDROCurveCreator/CurveCreator_Utils.cxx b/src/HYDROCurveCreator/CurveCreator_Utils.cxx index 73b429b4..12d7ee7d 100644 --- a/src/HYDROCurveCreator/CurveCreator_Utils.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Utils.cxx @@ -119,10 +119,14 @@ std::list CurveCreator_Utils::getSelectedPoints( Handle(AIS_InteractiveCo // function : setLocalPointContext // purpose : Open/close the viewer local context //======================================================================= +//#define USE_COMPOUND void CurveCreator_Utils::setLocalPointContext( Handle(AIS_InteractiveContext) theContext, const bool theOpen ) { +#ifdef USE_COMPOUND + return; +#endif if ( !theContext ) return; @@ -146,8 +150,8 @@ void CurveCreator_Utils::setLocalPointContext( if ( anAIS->IsKind( STANDARD_TYPE( AIS_Shape ) ) ) { theContext->Load( anAIS, -1/*selection mode*/, true/*allow decomposition*/ ); - theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_WIRE ) ); - //theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) ); + //theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_WIRE ) ); + theContext->Activate( anAIS, AIS_Shape::SelectionMode( (TopAbs_ShapeEnum)TopAbs_VERTEX ) ); } else if ( anAIS->DynamicType() != STANDARD_TYPE(AIS_Trihedron) ) { diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.cxx b/src/HYDROCurveCreator/CurveCreator_Widget.cxx index a1133ba4..e3bc69f8 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Widget.cxx @@ -1402,6 +1402,14 @@ void CurveCreator_Widget::setSelectedPonts( const CurveCreator_ICurve::SectionTo } } } + if ( thePoints.size() > 0 && aListToSelect.First() == aListToSelect.Last() ) { + /*TopExp_Explorer aExpF(myShape,TopAbs_FACE); + for (; aExpF.More(); aExpF.Next()) + { + const TopoDS_Face& aFace = TopoDS::Face(aExpF.Current()); + }*/ + } + ic->ClearSelected( Standard_False ); setObjectsSelected( aListToSelect );