- if (anOriginal.ShapeType() == TopAbs_VERTEX) {
- P1 = BRep_Tool::Pnt(TopoDS::Vertex( anOriginal ));
- }
- else if ( anOriginal.ShapeType() == TopAbs_EDGE || anOriginal.ShapeType() == TopAbs_WIRE ) {
- BRepGProp::LinearProperties(anOriginal, System);
- P1 = System.CentreOfMass();
- }
- else if ( anOriginal.ShapeType() == TopAbs_FACE || anOriginal.ShapeType() == TopAbs_SHELL ) {
- BRepGProp::SurfaceProperties(anOriginal, System);
- P1 = System.CentreOfMass();
- }
- else {
- BRepGProp::VolumeProperties(anOriginal, System);
- P1 = System.CentreOfMass();
- }
+ gp_XYZ aDir2 = RI.GetDir2(); // can be set by previous execution
+ if (aDir2.Modulus() < gp::Resolution()) {
+ // Calculate direction as vector from the axis to the shape's center
+ gp_Pnt P1;
+ GProp_GProps System;
+
+ if (anOriginal.ShapeType() == TopAbs_VERTEX) {
+ P1 = BRep_Tool::Pnt(TopoDS::Vertex( anOriginal ));
+ }
+ else if ( anOriginal.ShapeType() == TopAbs_EDGE || anOriginal.ShapeType() == TopAbs_WIRE ) {
+ BRepGProp::LinearProperties(anOriginal, System);
+ P1 = System.CentreOfMass();
+ }
+ else if ( anOriginal.ShapeType() == TopAbs_FACE || anOriginal.ShapeType() == TopAbs_SHELL ) {
+ BRepGProp::SurfaceProperties(anOriginal, System);
+ P1 = System.CentreOfMass();
+ }
+ else {
+ BRepGProp::VolumeProperties(anOriginal, System);
+ P1 = System.CentreOfMass();
+ }
+
+ Handle(Geom_Line) Line = new Geom_Line(AX1);
+ GeomAPI_ProjectPointOnCurve aPrjTool( P1, Line );
+ gp_Pnt P2 = aPrjTool.NearestPoint();
+
+ if ( P1.IsEqual(P2, Precision::Confusion() ) ) return 0;