- TopoDS_Edge aEdge1 = TopoDS::Edge(aShape1);
- TopoDS_Edge aEdge2 = TopoDS::Edge(aShape2);
-
- Standard_Real aStart, aEnd;
- Handle(Geom_Curve) aCurve1 = BRep_Tool::Curve(aEdge1, aStart, aEnd);
- Handle(Geom_Curve) aCurve2 = BRep_Tool::Curve(aEdge2, aStart, aEnd);
-
- GeomAdaptor_Curve aAdaptor1(aCurve1);
- GeomAdaptor_Curve aAdaptor2(aCurve2);
- if (aAdaptor1.GetType() == GeomAbs_Circle)
- return aAdaptor2.GetType() == GeomAbs_Line;
- else if (aAdaptor2.GetType() == GeomAbs_Circle)
- return aAdaptor1.GetType() == GeomAbs_Line;
+ std::shared_ptr<GeomAPI_Shape> aShapePtr(new GeomAPI_Shape);
+ aShapePtr->setImpl(new TopoDS_Shape(aShape));
+ GeomAPI_Edge aEdge1(aShapePtr);
+
+ if (aEdge1.isLine() || aEdge1.isArc()) {
+ if (aList.size() == 2) {
+ // Check second selection
+ aPrs = aList.last();
+ const TopoDS_Shape& aShape2 = aPrs.shape();
+ if (aShape2.IsNull())
+ return false;
+
+ if (aShape2.ShapeType() != TopAbs_EDGE)
+ return false;
+
+ std::shared_ptr<GeomAPI_Shape> aShapePtr2(new GeomAPI_Shape);
+ aShapePtr2->setImpl(new TopoDS_Shape(aShape2));
+ GeomAPI_Edge aEdge2(aShapePtr2);
+ if (aEdge1.isLine() && aEdge2.isArc())
+ return true;
+ else if (aEdge1.isArc() && aEdge2.isLine())
+ return true;
+ else
+ return false;
+ } else
+ return true;
+ }