#include <Standard_TypeMismatch.hxx>
#include <Standard_ConstructionError.hxx>
+// Uncomment this definition to check if type of created shape is the same
+// as expected. For further details please see the Mantis issue
+// http://salome.mantis.opencascade.com/view.php?id=22674
+//#define RESULT_TYPE_CHECK
+
//modified by NIZNHY-PKV Wed Dec 28 13:48:20 2011f
//static
// void KeepEdgesOrder(const Handle(TopTools_HSequenceOfShape)& aEdges,
TopoDS_Shape aShape;
TCollection_AsciiString aWarning;
+#ifdef RESULT_TYPE_CHECK
TopAbs_ShapeEnum anExpectedType = TopAbs_SHAPE;
+#endif
BRep_Builder B;
if (aType == WIRE_EDGES) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_WIRE;
+#endif
Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
aShape = MakeWireFromEdges(aShapes, aTolerance);
}
else if (aType == FACE_WIRE) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_FACE;
+#endif
Handle(GEOM_Function) aRefBase = aCI.GetBase();
TopoDS_Shape aShapeBase = aRefBase->GetValue();
}
}
else if (aType == FACE_WIRES) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_FACE;
+#endif
// Try to build a face from a set of wires and edges
int ind;
}
}
else if (aType == SHELL_FACES) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_SHELL;
+#endif
Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
unsigned int ind, nbshapes = aShapes->Length();
}
else if (aType == SOLID_SHELL) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_SOLID;
+#endif
Handle(GEOM_Function) aRefShell = aCI.GetBase();
TopoDS_Shape aShapeShell = aRefShell->GetValue();
}
else if (aType == SOLID_SHELLS) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_SOLID;
+#endif
Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
unsigned int ind, nbshapes = aShapes->Length();
aShape = Sol;
}
else if (aType == COMPOUND_SHAPES) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_COMPOUND;
+#endif
Handle(TColStd_HSequenceOfTransient) aShapes = aCI.GetShapes();
unsigned int ind, nbshapes = aShapes->Length();
}
*/
else if (aType == EDGE_WIRE) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_EDGE;
+#endif
Handle(GEOM_Function) aRefBase = aCI.GetBase();
TopoDS_Shape aWire = aRefBase->GetValue();
aShape = MakeEdgeFromWire(aWire, LinTol, AngTol);
}
else if (aType == EDGE_CURVE_LENGTH) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_EDGE;
+#endif
GEOMImpl_IVector aVI (aFunction);
if (aME.IsDone())
aShape = aME.Shape();
} else if (aType == SHAPE_ISOLINE) {
+#ifdef RESULT_TYPE_CHECK
anExpectedType = TopAbs_EDGE;
+#endif
GEOMImpl_IIsoline aII (aFunction);
Handle(GEOM_Function) aRefFace = aII.GetFace();
aShape = aSfs->Shape();
}
+#ifdef RESULT_TYPE_CHECK
// Check if the result shape type is compatible with the expected.
const TopAbs_ShapeEnum aShType = aShape.ShapeType();
Standard_ConstructionError::Raise("Result type check failed");
}
}
+#endif
aFunction->SetValue(aShape);