#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);
myPntArray->AddVertex(0., 0., 0.);
myPntArray->AddVertex(0. ,0., 0.);
}
+ SetAutoHilight(Standard_False);
}
void SketcherPrs_Parallel::Compute(const Handle(PrsMgr_PresentationManager3d)& thePresentationManager,
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;
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();
+ }
+}
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:
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;