]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Parallel constraint presentation created.
authorvsv <vitaly.smetannikov@opencascade.com>
Thu, 12 Mar 2015 12:27:16 +0000 (15:27 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Thu, 12 Mar 2015 12:27:16 +0000 (15:27 +0300)
src/SketcherPrs/SketcherPrs_Parallel.cpp
src/SketcherPrs/SketcherPrs_Parallel.h

index 74e97723b7cc3874852792ad64f2bf337d4f2bdb..ed23fc51922f32a97c2606023c3ec33244e517b7 100644 (file)
 #include <SketchPlugin_Constraint.h>
 
 #include <AIS_Drawer.hxx>
-#include <Graphic3d_AspectMarker3d.hxx>
-#include <Prs3d_PointAspect.hxx>
-#include <Prs3d_Root.hxx>
 #include <gp_Pnt2d.hxx>
 #include <Image_AlienPixMap.hxx>
+
+#include <Prs3d_PointAspect.hxx>
+#include <Prs3d_Root.hxx>
+#include <Prs3d_LineAspect.hxx>
+
 #include <Graphic3d_MarkerImage.hxx>
-#include <SelectMgr_EntityOwner.hxx>
+#include <Graphic3d_AspectMarker3d.hxx>
+#include <Graphic3d_AspectLine3d.hxx>
+#include <Graphic3d_ArrayOfSegments.hxx>
+
 #include <Select3D_SensitivePoint.hxx>
-#include <SelectMgr_Selection.hxx>
 #include <Select3D_SensitiveSegment.hxx>
 
+#include <SelectMgr_SequenceOfOwner.hxx>
+#include <SelectMgr_Selection.hxx>
+#include <SelectMgr_EntityOwner.hxx>
+
+
 extern std::shared_ptr<GeomAPI_Pnt2d> 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<GeomAPI_Edge> 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<GeomAPI_Edge> aLine1 = SketcherPrs_Tools::getLine(myConstraint, SketchPlugin_Constraint::ENTITY_A());
+  if (aLine1.get() == NULL)
+    return;
+
+  std::shared_ptr<GeomAPI_Edge> 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<GeomAPI_Pnt> aPnt1 = aLine1->firstPoint();
+  std::shared_ptr<GeomAPI_Pnt> aPnt2 = aLine1->lastPoint();
+  Handle(Graphic3d_ArrayOfSegments) aLines = new Graphic3d_ArrayOfSegments(2, 1);
+  aLines->AddVertex(aPnt1->impl<gp_Pnt>());
+  aLines->AddVertex(aPnt2->impl<gp_Pnt>());
+  aGroup->AddPrimitiveArray(aLines);
+
+  aPnt1 = aLine2->firstPoint();
+  aPnt2 = aLine2->lastPoint();
+  aLines = new Graphic3d_ArrayOfSegments(2, 1);
+  aLines->AddVertex(aPnt1->impl<gp_Pnt>());
+  aLines->AddVertex(aPnt2->impl<gp_Pnt>());
+  aGroup->AddPrimitiveArray(aLines);
+}
+
+void SketcherPrs_Parallel::ClearSelected()
+{
+  Handle( Prs3d_Presentation ) aSelectionPrs = GetSelectPresentation( NULL );  
+  if( !aSelectionPrs.IsNull() ) {
+    aSelectionPrs->Clear(); 
+  }
+}
index 5e39abb8f9ce7e5ae8903e138a4daade630c9b5d..5ead01c60da6370ac619bdbef813a6f62b04a7a6 100644 (file)
@@ -34,6 +34,18 @@ public:
   Standard_EXPORT SketcherPrs_Parallel(SketchPlugin_Constraint* theConstraint, 
                                        const std::shared_ptr<GeomAPI_Ax3>& 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<GeomAPI_Ax3> myPlane;
   Handle(Graphic3d_AspectMarker3d) myAspect;