-// Copyright (C) 2014-2020 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2022 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <TopoDS_Builder.hxx>
#include <TopoDS_Edge.hxx>
#include <BRepMesh_IncrementalMesh.hxx>
+#include <Standard_Version.hxx>
+#include <Prs3d_Arrow.hxx>
+#include <GeomAdaptor_Curve.hxx>
+#include <TopExp.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
+
+#if OCC_VERSION_HEX > 0x070400
+#include <StdPrs_ToolTriangulatedShape.hxx>
+#endif
//*******************************************************************************************
}
Set(aShape);
- // Activate individual repaintng if this is a part of compsolid
- ResultBodyPtr aResOwner = ModelAPI_Tools::bodyOwner(myResult);
- SetAutoHilight(aResOwner.get() == NULL);
+ // VSV: bos22744: The AutoHilight mode is swithced off because it produces different
+ // behaviour of selection for simple shape and compound. For example when selection mode
+ // is Vertex the shape is selected by vertex, but compound is selected by whole shape
+ //ResultBodyPtr aResOwner = ModelAPI_Tools::bodyOwner(myResult);
+ //SetAutoHilight(aResOwner.get() == NULL);
// Set own free boundaries aspect in order to have free
// and unfree boundaries with different colors
catch (...) {
return;
}
+ if (myResult.get() && ModelAPI_Tools::isShowEdgesDirection(myResult))
+ {
+ TopExp_Explorer Exp(myshape, TopAbs_EDGE);
+ for (; Exp.More(); Exp.Next()) {
+ TopoDS_Edge anEdgeE = TopoDS::Edge(Exp.Current());
+ if (anEdgeE.IsNull())
+ continue;
+
+ // draw curve direction (issue 0021087)
+ anEdgeE.Orientation(TopAbs_FORWARD);
+
+ TopoDS_Vertex aV1, aV2;
+ TopExp::Vertices(anEdgeE, aV1, aV2);
+ gp_Pnt aP1 = BRep_Tool::Pnt(aV1);
+ gp_Pnt aP2 = BRep_Tool::Pnt(aV2);
+
+ double fp, lp;
+ gp_Vec aDirVec;
+ Handle(Geom_Curve) C = BRep_Tool::Curve(anEdgeE, fp, lp);
+
+ if (C.IsNull()) continue;
+
+ if (anEdgeE.Orientation() == TopAbs_FORWARD)
+ C->D1(lp, aP2, aDirVec);
+ else {
+ C->D1(fp, aP1, aDirVec);
+ aP2 = aP1;
+ }
+ GeomAdaptor_Curve aAdC;
+ aAdC.Load(C, fp, lp);
+ Standard_Real aDist = GCPnts_AbscissaPoint::Length(aAdC, fp, lp);
+
+ if (aDist > gp::Resolution()) {
+ gp_Dir aDir;
+ if (anEdgeE.Orientation() == TopAbs_FORWARD)
+ aDir = aDirVec;
+ else
+ aDir = -aDirVec;
+
+ Prs3d_Arrow::Draw(thePresentation->CurrentGroup(), aP2, aDir, M_PI / 180.*5., aDist / 10.);
+ }
+ }
+ }
// visualize hidden sub-shapes transparent
if (myResult.get()) {
//********************************************************************
bool ModuleBase_ResultPrs::appendVertexSelection(const Handle(SelectMgr_Selection)& aSelection,
- const Standard_Integer theMode)
+ const Standard_Integer /*theMode*/)
{
if (Shape().ShapeType() == TopAbs_VERTEX) {
const TopoDS_Shape& aShape = Shape();
int aPriority = StdSelect_BRepSelectionTool::GetStandardPriority(aShape, TopAbs_VERTEX);
+#if OCC_VERSION_HEX > 0x070400
+ double aDeflection = StdPrs_ToolTriangulatedShape::GetDeflection(aShape, myDrawer);
+#else
double aDeflection = Prs3d::GetDeflection(aShape, myDrawer);
-
+#endif
/// The cause of this method is the last parameter of BRep owner setting into True.
/// That means that owner should behave like it comes from decomposition. (In this case, OCCT
/// visualizes it in Ring style) OCCT version is 7.0.0 with path for SHAPER module.
Handle(StdSelect_BRepOwner) aOwner = new StdSelect_BRepOwner(aShape, aPriority, Standard_True);
StdSelect_BRepSelectionTool::ComputeSensitive(aShape, aOwner, aSelection,
- aDeflection, myDrawer->HLRAngle(), 9, 500);
+ aDeflection, myDrawer->DeviationAngle(), 9, 500);
NCollection_Vector<Handle(SelectMgr_SensitiveEntity)> anEntities = aSelection->Entities();