From: vsv Date: Thu, 12 Mar 2015 12:27:16 +0000 (+0300) Subject: Parallel constraint presentation created. X-Git-Tag: V_1.1.0~140^2 X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=68eb5da07c0994ad9d896bb717584effa065cab5;p=modules%2Fshaper.git Parallel constraint presentation created. --- diff --git a/src/SketcherPrs/SketcherPrs_Parallel.cpp b/src/SketcherPrs/SketcherPrs_Parallel.cpp index 74e97723b..ed23fc519 100644 --- a/src/SketcherPrs/SketcherPrs_Parallel.cpp +++ b/src/SketcherPrs/SketcherPrs_Parallel.cpp @@ -12,17 +12,26 @@ #include #include -#include -#include -#include #include #include + +#include +#include +#include + #include -#include +#include +#include +#include + #include -#include #include +#include +#include +#include + + extern std::shared_ptr getFeaturePoint(DataPtr theData, const std::string& theAttribute); @@ -56,6 +65,7 @@ SketcherPrs_Parallel::SketcherPrs_Parallel(SketchPlugin_Constraint* theConstrain myPntArray->AddVertex(0., 0., 0.); myPntArray->AddVertex(0. ,0., 0.); } + SetAutoHilight(Standard_False); } void SketcherPrs_Parallel::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager, @@ -107,6 +117,7 @@ void SketcherPrs_Parallel::Compute(const Handle(PrsMgr_PresentationManager3d)& t void SketcherPrs_Parallel::ComputeSelection(const Handle(SelectMgr_Selection)& aSelection, const Standard_Integer aMode) { + ClearSelected(); std::shared_ptr aLine1 = SketcherPrs_Tools::getLine(myConstraint, SketchPlugin_Constraint::ENTITY_A()); if (aLine1.get() == NULL) return; @@ -115,10 +126,74 @@ void SketcherPrs_Parallel::ComputeSelection(const Handle(SelectMgr_Selection)& a if (aLine2.get() == NULL) return; - Handle(SelectMgr_EntityOwner) eown = new SelectMgr_EntityOwner(this); - Handle(Select3D_SensitivePoint) aSP1 = new Select3D_SensitivePoint(eown, myPntArray->Vertice(1)); - Handle(Select3D_SensitivePoint) aSP2 = new Select3D_SensitivePoint(eown, myPntArray->Vertice(2)); + Handle(SelectMgr_EntityOwner) aOwn = new SelectMgr_EntityOwner(this); + Handle(Select3D_SensitivePoint) aSP1 = new Select3D_SensitivePoint(aOwn, myPntArray->Vertice(1)); + Handle(Select3D_SensitivePoint) aSP2 = new Select3D_SensitivePoint(aOwn, myPntArray->Vertice(2)); aSelection->Add(aSP1); aSelection->Add(aSP2); } +void SketcherPrs_Parallel::HilightSelected(const Handle(PrsMgr_PresentationManager3d)& thePM, + const SelectMgr_SequenceOfOwner& theOwners) +{ + + Handle( Prs3d_Presentation ) aSelectionPrs = GetSelectPresentation( thePM ); + aSelectionPrs->Clear(); + drawLines(aSelectionPrs, Quantity_NOC_WHITE); + + aSelectionPrs->SetDisplayPriority(9); + aSelectionPrs->Display(); + thePM->Highlight(this); +} + +void SketcherPrs_Parallel::HilightOwnerWithColor(const Handle(PrsMgr_PresentationManager3d)& thePM, + const Quantity_NameOfColor theColor, const Handle(SelectMgr_EntityOwner)& theOwner) +{ + thePM->Color(this, theColor); + + Handle( Prs3d_Presentation ) aHilightPrs = GetHilightPresentation( thePM ); + aHilightPrs->Clear(); + drawLines(aHilightPrs, theColor); + + if (thePM->IsImmediateModeOn()) + thePM->AddToImmediateList(aHilightPrs); +} + + +void SketcherPrs_Parallel::drawLines(const Handle(Prs3d_Presentation)& thePrs, Quantity_Color theColor) const +{ + std::shared_ptr aLine1 = SketcherPrs_Tools::getLine(myConstraint, SketchPlugin_Constraint::ENTITY_A()); + if (aLine1.get() == NULL) + return; + + std::shared_ptr aLine2 = SketcherPrs_Tools::getLine(myConstraint, SketchPlugin_Constraint::ENTITY_B()); + if (aLine2.get() == NULL) + return; + + Handle(Graphic3d_Group) aGroup = Prs3d_Root::NewGroup(thePrs); + + Handle(Graphic3d_AspectLine3d) aLineAspect = new Graphic3d_AspectLine3d(theColor, Aspect_TOL_SOLID, 2); + aGroup->SetPrimitivesAspect(aLineAspect); + + std::shared_ptr aPnt1 = aLine1->firstPoint(); + std::shared_ptr aPnt2 = aLine1->lastPoint(); + Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments(2, 1); + aLines->AddVertex(aPnt1->impl()); + aLines->AddVertex(aPnt2->impl()); + aGroup->AddPrimitiveArray(aLines); + + aPnt1 = aLine2->firstPoint(); + aPnt2 = aLine2->lastPoint(); + aLines = new Graphic3d_ArrayOfSegments(2, 1); + aLines->AddVertex(aPnt1->impl()); + aLines->AddVertex(aPnt2->impl()); + aGroup->AddPrimitiveArray(aLines); +} + +void SketcherPrs_Parallel::ClearSelected() +{ + Handle( Prs3d_Presentation ) aSelectionPrs = GetSelectPresentation( NULL ); + if( !aSelectionPrs.IsNull() ) { + aSelectionPrs->Clear(); + } +} diff --git a/src/SketcherPrs/SketcherPrs_Parallel.h b/src/SketcherPrs/SketcherPrs_Parallel.h index 5e39abb8f..5ead01c60 100644 --- a/src/SketcherPrs/SketcherPrs_Parallel.h +++ b/src/SketcherPrs/SketcherPrs_Parallel.h @@ -34,6 +34,18 @@ public: Standard_EXPORT SketcherPrs_Parallel(SketchPlugin_Constraint* theConstraint, const std::shared_ptr& thePlane); + //! Method which draws selected owners ( for fast presentation draw ) + Standard_EXPORT virtual void HilightSelected(const Handle(PrsMgr_PresentationManager3d)& thePM, + const SelectMgr_SequenceOfOwner& theOwners); + + //! Method which hilight an owner belonging to + //! this selectable object ( for fast presentation draw ) + Standard_EXPORT virtual void HilightOwnerWithColor(const Handle(PrsMgr_PresentationManager3d)& thePM, + const Quantity_NameOfColor theColor, const Handle(SelectMgr_EntityOwner)& theOwner); + + //! Method which clear all selected owners belonging + //! to this selectable object ( for fast presentation draw ) + Standard_EXPORT virtual void ClearSelected(); DEFINE_STANDARD_RTTI(SketcherPrs_Parallel) protected: @@ -47,6 +59,8 @@ protected: private: + void drawLines(const Handle(Prs3d_Presentation)& thePrs, Quantity_Color theColor) const; + SketchPlugin_Constraint* myConstraint; std::shared_ptr myPlane; Handle(Graphic3d_AspectMarker3d) myAspect;