Salome HOME
bos #29482 Export of colors and names to STEP.
authormpv <mpv@opencascade.com>
Thu, 28 Apr 2022 12:06:00 +0000 (15:06 +0300)
committervsr <vsr@opencascade.com>
Thu, 2 Jun 2022 13:05:44 +0000 (16:05 +0300)
29 files changed:
src/ExchangePlugin/CMakeLists.txt
src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp
src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp
src/ExchangePlugin/Test/TestStep1.py [new file with mode: 0644]
src/ExchangePlugin/Test/TestStep2.py [new file with mode: 0644]
src/ExchangePlugin/Test/data/pipe_with_colors_and_names.stp [new file with mode: 0644]
src/ExchangePlugin/Test/tests.set
src/GDMLPlugin/CMakeLists.txt
src/GeomAlgoAPI/GeomAlgoAPI_BoundingBox.cpp
src/GeomAlgoAPI/GeomAlgoAPI_BoundingBox.h
src/GeomAlgoAPI/GeomAlgoAPI_STEPExport.cpp
src/GeomAlgoAPI/GeomAlgoAPI_STEPExport.h
src/GeomAlgoAPI/GeomAlgoAPI_STEPImportXCAF.cpp
src/GeomAlgoAPI/GeomAlgoAPI_STEPImportXCAF.h
src/Model/Model_BodyBuilder.cpp
src/Model/Model_Document.cpp
src/Model/Model_Session.cpp
src/Model/Model_Session.h
src/ModelAPI/CMakeLists.txt
src/ModelAPI/ModelAPI_Events.cpp
src/ModelAPI/ModelAPI_Events.h
src/ModelAPI/ModelAPI_Session.h
src/ModelHighAPI/CMakeLists.txt
src/ModelHighAPI/ModelHighAPI_Dumper.cpp
src/ModelHighAPI/ModelHighAPI_FeatureStore.cpp
src/ModelHighAPI/ModelHighAPI_Services.cpp
src/SketchPlugin/CMakeLists.txt
src/XGUI/CMakeLists.txt
src/XGUI/XGUI_Workshop.cpp

index 841cc4cd440482ee4d43f1b10afb5b9177d07119..aa8e054b007aea97b44cf4236731083491569ddc 100755 (executable)
@@ -32,7 +32,6 @@ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/Events
                     ${PROJECT_SOURCE_DIR}/src/XAO
                     ${PROJECT_SOURCE_DIR}/src/ConstructionPlugin
                     ${PROJECT_SOURCE_DIR}/src/PartSetPlugin
-                    ${OpenCASCADE_INCLUDE_DIR}
                     ${QT_INCLUDES}
 )
 
index f8fd34a8a452fdae87e740c119275135cbef6092..54400c68680dcd2c1f5242bf3d192cabc3b04435 100644 (file)
@@ -27,7 +27,6 @@
 #include <ostream>
 #endif
 
-
 #include <Config_Common.h>
 #include <Config_PropManager.h>
 
@@ -153,7 +152,6 @@ void ExchangePlugin_ExportFeature::attributeChanged(const std::string& theID)
     string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(
       string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value());
   }
-
 }
 
 /*
@@ -205,6 +203,7 @@ void ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName,
   AttributeSelectionListPtr aSelectionListAttr =
       this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID());
   std::list<GeomShapePtr> aShapes;
+  std::list<ResultPtr> aContexts;
   for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) {
     AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i);
 
@@ -218,7 +217,10 @@ void ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName,
     if (aCurShape.get() == NULL)
       aCurShape = anAttrSelection->context()->shape();
     if (aCurShape.get() != NULL)
+    {
       aShapes.push_back(aCurShape);
+      aContexts.push_back(anAttrSelection->context());
+    }
   }
 
   // Store compound if we have more than one shape.
@@ -231,7 +233,7 @@ void ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName,
   if (aFormatName == "BREP") {
     aResult = BREPExport(theFileName, aFormatName, aShape, anError);
   } else if (aFormatName == "STEP") {
-    aResult = STEPExport(theFileName, aFormatName, aShape, anError);
+    aResult = STEPExport(theFileName, aShapes, aContexts, anError);
   } else if (aFormatName.substr(0, 4) == "IGES") {
     aResult = IGESExport(theFileName, aFormatName, aShape, anError);
   } else {
index a4f1e54ddf7dfdf4c8a07cb370ef7a455763e5d4..91c6c188a00d5b18321ebabc99022ef2a647b93e 100644 (file)
@@ -168,19 +168,16 @@ void ExchangePlugin_ImportFeature::importFile(const std::string& theFileName)
   data()->setName(Locale::Convert::toWString(anObjectName));
 
   ResultBodyPtr aResult = document()->createBody(data());
-
-  bool anColorGroupSelected = boolean(ExchangePlugin_ImportFeature::STEP_COLORS_ID())->value();
-  bool anMaterialsGroupSelected =
-                        boolean(ExchangePlugin_ImportFeature::STEP_MATERIALS_ID())->value();
+  bool anColorGroupSelected = false, anMaterialsGroupSelected = false;
   if (anExtension == "BREP" || anExtension == "BRP") {
     aGeomShape = BREPImport(theFileName, anExtension, anError);
   } else if (anExtension == "STEP" || anExtension == "STP") {
-    bool anScalInterUnits =
-            boolean(ExchangePlugin_ImportFeature::STEP_SCALE_INTER_UNITS_ID())->value();
+    bool anScalInterUnits = boolean(STEP_SCALE_INTER_UNITS_ID())->value();
+    anColorGroupSelected = boolean(STEP_COLORS_ID())->value();
+    anMaterialsGroupSelected = boolean(STEP_MATERIALS_ID())->value();
 
     // Process groups/fields
-    std::shared_ptr<ModelAPI_AttributeRefList> aRefListOfGroups =
-    std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(data()->attribute(FEATURES_ID()));
+    AttributeRefListPtr aRefListOfGroups = reflist(FEATURES_ID());
 
     // Remove previous groups/fields stored in RefList
     std::list<ObjectPtr> anGroupList = aRefListOfGroups->list();
diff --git a/src/ExchangePlugin/Test/TestStep1.py b/src/ExchangePlugin/Test/TestStep1.py
new file mode 100644 (file)
index 0000000..6682379
--- /dev/null
@@ -0,0 +1,330 @@
+# 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+from salome.shaper import model
+
+from SketchAPI import *
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+model.addParameter(Part_1_doc, "LGX", '3.0')
+model.addParameter(Part_1_doc, "LGY", '2.825')
+model.addParameter(Part_1_doc, "HTR", '1.2')
+
+### Create Sketch
+Sketch_1 = model.addSketch(Part_1_doc, model.standardPlane("YOZ"))
+
+### Create SketchLine
+SketchLine_1 = Sketch_1.addLine(0, 0, 1.165, 0)
+
+### Create SketchProjection
+SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_1 = SketchProjection_1.createdFeature()
+Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchPoint_1.result())
+
+### Create SketchProjection
+SketchProjection_2 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OY"), False)
+SketchLine_2 = SketchProjection_2.createdFeature()
+Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.result())
+
+### Create SketchLine
+SketchLine_3 = Sketch_1.addLine(1.165, 0, 1.165, 0.5)
+Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_3.startPoint())
+Sketch_1.setVertical(SketchLine_3.result())
+
+### Create SketchLine
+SketchLine_4 = Sketch_1.addLine(1.165, 0.5, 1.665, 0.5)
+Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
+Sketch_1.setHorizontal(SketchLine_4.result())
+
+### Create SketchLine
+SketchLine_5 = Sketch_1.addLine(1.665, 0.5, 1.665, 0)
+Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint())
+Sketch_1.setVertical(SketchLine_5.result())
+
+### Create SketchLine
+SketchLine_6 = Sketch_1.addLine(1.665, 0, 2.825, 0)
+Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_6.startPoint())
+Sketch_1.setHorizontal(SketchLine_6.result())
+
+### Create SketchLine
+SketchLine_7 = Sketch_1.addLine(2.825, 0, 2.825, 1.2)
+Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_7.startPoint())
+Sketch_1.setVertical(SketchLine_7.result())
+
+### Create SketchLine
+SketchLine_8 = Sketch_1.addLine(2.825, 1.2, 0, 1.2)
+Sketch_1.setCoincident(SketchLine_7.endPoint(), SketchLine_8.startPoint())
+
+### Create SketchProjection
+SketchProjection_3 = Sketch_1.addProjection(model.selection("EDGE", "PartSet/OZ"), False)
+SketchLine_9 = SketchProjection_3.createdFeature()
+Sketch_1.setCoincident(SketchLine_8.endPoint(), SketchLine_9.result())
+Sketch_1.setHorizontal(SketchLine_8.result())
+
+### Create SketchLine
+SketchLine_10 = Sketch_1.addLine(0, 1.2, 0, 0)
+Sketch_1.setCoincident(SketchLine_8.endPoint(), SketchLine_10.startPoint())
+Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_10.endPoint())
+Sketch_1.setLength(SketchLine_8.result(), "LGY")
+Sketch_1.setLength(SketchLine_10.result(), "HTR")
+Sketch_1.setLength(SketchLine_3.result(), "HTR/1.2*0.5")
+Sketch_1.setLength(SketchLine_4.result(), "LGY/2.825*0.5")
+Sketch_1.setLength(SketchLine_1.result(), "LGY/2.825*1.165")
+Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_2.result())
+model.do()
+
+### Create Face
+Face_1 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_1")])
+
+### Create Sketch
+Sketch_2 = model.addSketch(Part_1_doc, model.standardPlane("XOZ"))
+
+### Create SketchLine
+SketchLine_11 = Sketch_2.addLine(0, 0, 0.9999999999999999, 0)
+
+### Create SketchProjection
+SketchProjection_4 = Sketch_2.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_10_EndVertex"), False)
+SketchPoint_2 = SketchProjection_4.createdFeature()
+Sketch_2.setCoincident(SketchLine_11.startPoint(), SketchPoint_2.result())
+
+### Create SketchProjection
+SketchProjection_5 = Sketch_2.addProjection(model.selection("EDGE", "PartSet/OX"), False)
+SketchLine_12 = SketchProjection_5.createdFeature()
+Sketch_2.setCoincident(SketchLine_11.endPoint(), SketchLine_12.result())
+
+### Create SketchLine
+SketchLine_13 = Sketch_2.addLine(0.9999999999999999, 0, 1, 0.95)
+Sketch_2.setCoincident(SketchLine_11.endPoint(), SketchLine_13.startPoint())
+Sketch_2.setVertical(SketchLine_13.result())
+
+### Create SketchLine
+SketchLine_14 = Sketch_2.addLine(1, 0.95, 2.25, 0.95)
+Sketch_2.setCoincident(SketchLine_13.endPoint(), SketchLine_14.startPoint())
+Sketch_2.setHorizontal(SketchLine_14.result())
+
+### Create SketchLine
+SketchLine_15 = Sketch_2.addLine(2.25, 0.95, 2.25, 0)
+Sketch_2.setCoincident(SketchLine_14.endPoint(), SketchLine_15.startPoint())
+Sketch_2.setCoincident(SketchLine_15.endPoint(), SketchLine_12.result())
+
+### Create SketchLine
+SketchLine_16 = Sketch_2.addLine(2.25, 0, 3, 0)
+Sketch_2.setCoincident(SketchLine_15.endPoint(), SketchLine_16.startPoint())
+Sketch_2.setCoincident(SketchLine_16.endPoint(), SketchLine_12.result())
+
+### Create SketchLine
+SketchLine_17 = Sketch_2.addLine(3, 0, 3, 1.2)
+Sketch_2.setCoincident(SketchLine_16.endPoint(), SketchLine_17.startPoint())
+
+### Create SketchLine
+SketchLine_18 = Sketch_2.addLine(3, 1.2, 0, 1.2)
+Sketch_2.setCoincident(SketchLine_17.endPoint(), SketchLine_18.startPoint())
+
+### Create SketchProjection
+SketchProjection_6 = Sketch_2.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_10_StartVertex"), False)
+SketchPoint_3 = SketchProjection_6.createdFeature()
+Sketch_2.setCoincident(SketchLine_18.endPoint(), SketchPoint_3.result())
+Sketch_2.setHorizontal(SketchLine_18.result())
+Sketch_2.setVertical(SketchLine_17.result())
+Sketch_2.setVertical(SketchLine_15.result())
+Sketch_2.setLength(SketchLine_11.result(), "LGX/3.")
+Sketch_2.setLength(SketchLine_14.result(), "LGX/3.*1.25")
+Sketch_2.setLength(SketchLine_18.result(), "LGX")
+Sketch_2.setLength(SketchLine_13.result(), "HTR/1.2*0.95")
+
+### Create SketchLine
+SketchLine_19 = Sketch_2.addLine(0, 1.2, 0, 0)
+Sketch_2.setCoincident(SketchLine_18.endPoint(), SketchLine_19.startPoint())
+Sketch_2.setCoincident(SketchLine_11.startPoint(), SketchLine_19.endPoint())
+model.do()
+
+### Create Face
+Face_2 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_2")])
+
+### Create Sketch
+Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "Face_1_1"))
+
+### Create SketchLine
+SketchLine_20 = Sketch_3.addLine(1.325, 0, 0, 0)
+Sketch_3.setHorizontal(SketchLine_20.result())
+
+### Create SketchProjection
+SketchProjection_7 = Sketch_3.addProjection(model.selection("VERTEX", "Face_1_1/Modified_Vertex&Sketch_1/SketchLine_10_EndVertex&Sketch_1/SketchLine_1_StartVertex"), False)
+SketchPoint_4 = SketchProjection_7.createdFeature()
+Sketch_3.setCoincident(SketchLine_20.endPoint(), SketchPoint_4.result())
+
+### Create SketchLine
+SketchLine_21 = Sketch_3.addLine(0, 0, 0, 1.2)
+Sketch_3.setVertical(SketchLine_21.result())
+
+### Create SketchLine
+SketchLine_22 = Sketch_3.addLine(0, 1.2, 1.325, 1.2)
+Sketch_3.setHorizontal(SketchLine_22.result())
+Sketch_3.setLength(SketchLine_22.result(), "LGY/2.825*1.325")
+
+### Create SketchLine
+SketchLine_23 = Sketch_3.addLine(1.325, 1.2, 1.325, 0)
+Sketch_3.setCoincident(SketchLine_23.endPoint(), SketchLine_20.startPoint())
+Sketch_3.setCoincident(SketchLine_20.endPoint(), SketchLine_21.startPoint())
+Sketch_3.setCoincident(SketchLine_21.endPoint(), SketchLine_22.startPoint())
+Sketch_3.setCoincident(SketchLine_22.endPoint(), SketchLine_23.startPoint())
+Sketch_3.setVertical(SketchLine_23.result())
+
+### Create SketchProjection
+SketchProjection_8 = Sketch_3.addProjection(model.selection("EDGE", "Face_1_1/Modified_Edge&Sketch_1/SketchLine_8"), False)
+SketchLine_24 = SketchProjection_8.createdFeature()
+Sketch_3.setCoincident(SketchLine_22.endPoint(), SketchLine_24.result())
+model.do()
+
+### Create Face
+Face_3 = model.addFace(Part_1_doc, [model.selection("COMPOUND", "all-in-Sketch_3")])
+
+### Create Translation
+Translation_1 = model.addTranslation(Part_1_doc, [model.selection("COMPOUND", "all-in-Face_3")], axis = model.selection("EDGE", "PartSet/OX"), distance = "LGX", keepSubResults = True)
+
+### Create Plane
+Plane_4 = model.addPlane(Part_1_doc, model.selection("VERTEX", "Sketch_2/SketchLine_17_EndVertex"), model.selection("VERTEX", "Translation_1_1_1/MV:Translated&Sketch_3/SketchLine_22_EndVertex&Sketch_3/SketchLine_23_StartVertex"), model.selection("VERTEX", "Face_1_1/Modified_Vertex&Sketch_1/SketchLine_8_StartVertex&Sketch_1/SketchLine_7_EndVertex"))
+
+### Create Sketch
+Sketch_4 = model.addSketch(Part_1_doc, model.selection("FACE", "Plane_1"))
+
+### Create SketchLine
+SketchLine_25 = Sketch_4.addLine(0, 0, 3, 0)
+
+### Create SketchProjection
+SketchProjection_9 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_3/SketchLine_21_EndVertex"), False)
+SketchPoint_5 = SketchProjection_9.createdFeature()
+Sketch_4.setCoincident(SketchLine_25.startPoint(), SketchPoint_5.result())
+
+### Create SketchProjection
+SketchProjection_10 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_2/SketchLine_17_EndVertex"), False)
+SketchPoint_6 = SketchProjection_10.createdFeature()
+Sketch_4.setCoincident(SketchLine_25.endPoint(), SketchPoint_6.result())
+
+### Create SketchLine
+SketchLine_26 = Sketch_4.addLine(3, 0, 3, 1.325)
+Sketch_4.setCoincident(SketchLine_25.endPoint(), SketchLine_26.startPoint())
+
+### Create SketchProjection
+SketchProjection_11 = Sketch_4.addProjection(model.selection("VERTEX", "Translation_1_1_1/MV:Translated&Sketch_3/SketchLine_22_EndVertex&Sketch_3/SketchLine_23_StartVertex"), False)
+SketchPoint_7 = SketchProjection_11.createdFeature()
+Sketch_4.setCoincident(SketchLine_26.endPoint(), SketchPoint_7.result())
+
+### Create SketchLine
+SketchLine_27 = Sketch_4.addLine(3, 1.325, 0, 2.825)
+Sketch_4.setCoincident(SketchLine_26.endPoint(), SketchLine_27.startPoint())
+
+### Create SketchProjection
+SketchProjection_12 = Sketch_4.addProjection(model.selection("VERTEX", "Sketch_1/SketchLine_7_EndVertex"), False)
+SketchPoint_8 = SketchProjection_12.createdFeature()
+Sketch_4.setCoincident(SketchLine_27.endPoint(), SketchPoint_8.result())
+
+### Create SketchLine
+SketchLine_28 = Sketch_4.addLine(0, 2.825, 0, 0)
+Sketch_4.setCoincident(SketchLine_27.endPoint(), SketchLine_28.startPoint())
+Sketch_4.setCoincident(SketchLine_25.startPoint(), SketchLine_28.endPoint())
+model.do()
+
+### Create Face
+Face_4 = model.addFace(Part_1_doc, [model.selection("FACE", "Sketch_4/Face-SketchLine_25r-SketchLine_26f-SketchLine_27f-SketchLine_28f")])
+
+### Create Sketch
+Sketch_5 = model.addSketch(Part_1_doc, model.selection("FACE", "Face_4_1"))
+
+### Create SketchLine
+SketchLine_29 = Sketch_5.addLine(1.5, 0, 1.5, 1.6)
+
+### Create SketchProjection
+SketchProjection_13 = Sketch_5.addProjection(model.selection("EDGE", "Face_4_1/Modified_Edge&Sketch_4/SketchLine_25"), False)
+SketchLine_30 = SketchProjection_13.createdFeature()
+Sketch_5.setCoincident(SketchLine_29.startPoint(), SketchLine_30.result())
+Sketch_5.setVertical(SketchLine_29.result())
+Sketch_5.setLength(SketchLine_29.result(), "LGY/2.825*1.6")
+Sketch_5.setHorizontalDistance(SketchAPI_Line(SketchLine_30).startPoint(), SketchLine_29.startPoint(), "LGX*0.5")
+model.do()
+
+### Create Partition
+Partition_1_objects = [model.selection("FACE", "Face_1_1"),
+                       model.selection("FACE", "Face_2_1"),
+                       model.selection("COMPOUND", "Translation_1_1"),
+                       model.selection("FACE", "Face_4_1")]
+Partition_1 = model.addPartition(Part_1_doc, Partition_1_objects, keepSubResults = True)
+
+### Create Extrusion
+Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Partition_1_1_4")], model.selection(), "HTR", 0, "Faces|Wires")
+
+### Create Recover
+Recover_1 = model.addRecover(Part_1_doc, Extrusion_1, [Partition_1.result()], True)
+
+### Create Extrusion
+Extrusion_2_objects = [model.selection("VERTEX", "Recover_1_1_3/Modified_Vertex&Sketch_3/SketchLine_20_StartVertex&Sketch_3/SketchLine_23_EndVertex"),
+                       model.selection("VERTEX", "[Recover_1_1_2/Modified_Edge&Sketch_2/SketchLine_16]e[Recover_1_1_2/Modified_Edge&Sketch_3/SketchLine_21&Sketch_2/SketchLine_17]e"),
+                       model.selection("VERTEX", "[Recover_1_1_1/Modified_Edge&Sketch_1/SketchLine_1]e[Recover_1_1_1/Modified_Edge&Sketch_2/SketchLine_19&Sketch_1/SketchLine_10]e"),
+                       model.selection("VERTEX", "Recover_1_1_1/Modified_Vertex&Sketch_1/SketchLine_7_StartVertex&Sketch_1/SketchLine_6_EndVertex")]
+Extrusion_2 = model.addExtrusion(Part_1_doc, Extrusion_2_objects, model.selection("EDGE", "PartSet/OZ"), 0, "HTR")
+
+### Create Partition
+Partition_2_objects = [model.selection("COMPOUND", "all-in-Extrusion_1"),
+                       model.selection("COMPOUND", "all-in-Recover_1"),
+                       model.selection("COMPOUND", "all-in-Extrusion_2")]
+Partition_2 = model.addPartition(Part_1_doc, Partition_2_objects, keepSubResults = True)
+Partition_2.result().setName("Structure")
+Partition_2.result().subResult(0).setName("Hangar")
+Partition_2.result().subResult(0).setColor(170, 0, 0)
+Partition_2.result().subResult(1).setName("Mur_1")
+Partition_2.result().subResult(2).setName("Mur_2")
+Partition_2.result().subResult(3).setName("Mur_3")
+Partition_2.result().subResult(4).setName("Poteau_1")
+Partition_2.result().subResult(5).setName("Poteau_2")
+Partition_2.result().subResult(6).setName("Poteau_3")
+Partition_2.result().subResult(7).setName("Poteau_4")
+
+file_name = model.getTmpFileName('teststep1', '.stp')
+
+### Export to STEP format
+Export_1 = model.exportToFile(Part_1_doc, file_name,
+                              [model.selection("COMPOUND", "Structure")])
+
+### Import from step
+Import_1 = model.addImportSTEP(Part_1_doc, file_name, True, True, True)
+
+model.end()
+
+# Check the imported names and colors correspond to the exported ones
+res = Import_1.result()
+assert(file_name.find(res.name()[:-3]) > 0) # the higher level compound name equals to the file name
+assert(res.subResult(0).name() == "Hangar")
+assert(res.subResult(1).name() == "Mur_1")
+assert(res.subResult(2).name() == "Mur_2")
+assert(res.subResult(3).name() == "Mur_3")
+assert(res.subResult(4).name() == "Poteau_1")
+assert(res.subResult(5).name() == "Poteau_2")
+assert(res.subResult(6).name() == "Poteau_3")
+assert(res.subResult(7).name() == "Poteau_4")
+# get color of "Hangar": 3 components in the array attribute
+hangarBody = model.modelAPI_ResultBody(Import_1.feature().firstResult()).subResult(0)
+assert(hangarBody.data().intArray("Color").size() == 3)
+assert(hangarBody.data().intArray("Color").value(0) == 170)
+assert(hangarBody.data().intArray("Color").value(1) == 0)
+assert(hangarBody.data().intArray("Color").value(2) == 0)
diff --git a/src/ExchangePlugin/Test/TestStep2.py b/src/ExchangePlugin/Test/TestStep2.py
new file mode 100644 (file)
index 0000000..5eacb92
--- /dev/null
@@ -0,0 +1,68 @@
+# 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
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+#
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+#
+
+from salome.shaper import model
+
+import os
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+### Import from step
+data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), "data")
+#data_dir = os.path.join(os.path.dirname(os.path.abspath("C:\\NewGEOM\\SALOME-9.8.0D\\MODULES\\SRC\\SHAPER_SRC\\src\\ExchangePlugin\\Test\\TestStep2.py")), "data")
+Import_1 = model.addImportSTEP(Part_1_doc, os.path.join(data_dir, "pipe_with_colors_and_names.stp"), True, True, True)
+
+model.end()
+
+def checkColor(body, rComponent, gComponent, bComponent):
+  assert(body.data().intArray("Color").size() == 3)
+  assert(body.data().intArray("Color").value(0) == rComponent)
+  assert(body.data().intArray("Color").value(1) == gComponent)
+  assert(body.data().intArray("Color").value(2) == bComponent)
+
+# Check the imported names and colors correspond to the exported ones
+res = Import_1.result()
+assert(res.name() == "pipe_with_colors_and_names_1") # the higher level compound name equals to the file name
+assert(res.subResult(0).name() == "2WCL-2.0-316-7-01")
+assert(res.subResult(1).name() == "2WCL-2.0-316-7-01__1")
+assert(res.subResult(2).name() == "2WCL-2.0-316-7-01__2")
+assert(res.subResult(3).name() == "B7WWW-2.0-304-7-01")
+assert(res.subResult(4).name() == "B7WWW-2.0-304-7-01__1")
+assert(res.subResult(5).name() == "2WCL-2.0-316-7-01__3")
+assert(res.subResult(6).name() == "RNT-304-2.000-0.065-WL-7_oa_0")
+assert(res.subResult(7).name() == "RNT-304-2.000-0.065-WL-7_oa_1")
+assert(res.subResult(8).name() == "RNT-304-2.000-0.065-WL-7_oa_2")
+assert(res.subResult(9).name() == "RNT-304-2.000-0.065-WL-7_oa_3")
+assert(res.subResult(10).name() == "RNT-304-2.000-0.065-WL-7_oa_4")
+rootBody = model.modelAPI_ResultBody(Import_1.feature().firstResult())
+checkColor(rootBody.subResult(0), 153, 33, 0)
+checkColor(rootBody.subResult(1), 153, 33, 0)
+checkColor(rootBody.subResult(2), 153, 33, 0)
+checkColor(rootBody.subResult(3), 153, 33, 0)
+checkColor(rootBody.subResult(4), 153, 33, 0)
+checkColor(rootBody.subResult(5), 153, 33, 0)
+checkColor(rootBody.subResult(6), 0, 12, 132)
+checkColor(rootBody.subResult(7), 0, 12, 132)
+checkColor(rootBody.subResult(8), 0, 12, 132)
+checkColor(rootBody.subResult(9), 0, 12, 132)
+checkColor(rootBody.subResult(10), 0, 12, 132)
diff --git a/src/ExchangePlugin/Test/data/pipe_with_colors_and_names.stp b/src/ExchangePlugin/Test/data/pipe_with_colors_and_names.stp
new file mode 100644 (file)
index 0000000..64766f0
--- /dev/null
@@ -0,0 +1,1191 @@
+ISO-10303-21;
+HEADER;
+/* Generated by software containing ST-Developer
+ * from STEP Tools, Inc. (www.steptools.com)
+ */
+/* OPTION: strings as raw bytes, not using required /X/ escapes */
+
+FILE_DESCRIPTION(
+/* description */ ('Unknown'),
+/* implementation_level */ '2;1');
+
+FILE_NAME(
+/* name */ 'Test SE Step',
+/* time_stamp */ '2019-10-01T09:25:56-04:00',
+/* author */ ('Unknown'),
+/* organization */ ('Unknown'),
+/* preprocessor_version */ 'ST-DEVELOPER v16.7',
+/* originating_system */ 'DEX',
+/* authorisation */ $);
+
+FILE_SCHEMA (('AUTOMOTIVE_DESIGN {1 0 10303 214 3 1 1}'));
+ENDSEC;
+
+DATA;
+#10=PROPERTY_DEFINITION_REPRESENTATION(#14,#12);
+#11=PROPERTY_DEFINITION_REPRESENTATION(#15,#13);
+#12=REPRESENTATION('',(#16),#940);
+#13=REPRESENTATION('',(#17),#940);
+#14=PROPERTY_DEFINITION('pmi validation property','',#959);
+#15=PROPERTY_DEFINITION('pmi validation property','',#959);
+#16=VALUE_REPRESENTATION_ITEM('number of annotations',COUNT_MEASURE(0.));
+#17=VALUE_REPRESENTATION_ITEM('number of views',COUNT_MEASURE(0.));
+#18=ELLIPSE('',#583,35.9210244842764,25.4);
+#19=ELLIPSE('',#584,35.9210244842769,25.4);
+#20=ELLIPSE('',#593,33.5861578927989,23.749);
+#21=ELLIPSE('',#594,33.5861578927984,23.749);
+#22=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#44,#961);
+#23=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#45,#962);
+#24=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#46,#963);
+#25=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#47,#965);
+#26=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#48,#966);
+#27=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#49,#967);
+#28=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#50,#969);
+#29=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#51,#971);
+#30=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#52,#973);
+#31=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#53,#975);
+#32=CONTEXT_DEPENDENT_SHAPE_REPRESENTATION(#54,#977);
+#33=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2WCL-2.0-316-7-01',
+'2WCL-2.0-316-7-01','2WCL-2.0-316-7-01',#978,#979,'');
+#34=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2WCL-2.0-316-7-01',
+'2WCL-2.0-316-7-01','2WCL-2.0-316-7-01',#978,#979,'');
+#35=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2WCL-2.0-316-7-01',
+'2WCL-2.0-316-7-01','2WCL-2.0-316-7-01',#978,#979,'');
+#36=NEXT_ASSEMBLY_USAGE_OCCURRENCE('B7WWW-2.0-304-7-01',
+'B7WWW-2.0-304-7-01','B7WWW-2.0-304-7-01',#978,#980,'');
+#37=NEXT_ASSEMBLY_USAGE_OCCURRENCE('B7WWW-2.0-304-7-01',
+'B7WWW-2.0-304-7-01','B7WWW-2.0-304-7-01',#978,#980,'');
+#38=NEXT_ASSEMBLY_USAGE_OCCURRENCE('2WCL-2.0-316-7-01',
+'2WCL-2.0-316-7-01','2WCL-2.0-316-7-01',#978,#979,'');
+#39=NEXT_ASSEMBLY_USAGE_OCCURRENCE('RNT-304-2.000-0.065-WL-7_oa_0',
+'RNT-304-2.000-0.065-WL-7_oa_0','RNT-304-2.000-0.065-WL-7_oa_0',#978,#981,
+'');
+#40=NEXT_ASSEMBLY_USAGE_OCCURRENCE('RNT-304-2.000-0.065-WL-7_oa_1',
+'RNT-304-2.000-0.065-WL-7_oa_1','RNT-304-2.000-0.065-WL-7_oa_1',#978,#982,
+'');
+#41=NEXT_ASSEMBLY_USAGE_OCCURRENCE('RNT-304-2.000-0.065-WL-7_oa_2',
+'RNT-304-2.000-0.065-WL-7_oa_2','RNT-304-2.000-0.065-WL-7_oa_2',#978,#983,
+'');
+#42=NEXT_ASSEMBLY_USAGE_OCCURRENCE('RNT-304-2.000-0.065-WL-7_oa_3',
+'RNT-304-2.000-0.065-WL-7_oa_3','RNT-304-2.000-0.065-WL-7_oa_3',#978,#984,
+'');
+#43=NEXT_ASSEMBLY_USAGE_OCCURRENCE('RNT-304-2.000-0.065-WL-7_oa_4',
+'RNT-304-2.000-0.065-WL-7_oa_4','RNT-304-2.000-0.065-WL-7_oa_4',#978,#985,
+'');
+#44=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#553,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#55)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#45=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#553,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#56)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#46=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#553,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#57)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#47=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#555,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#58)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#48=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#555,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#59)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#49=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#553,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#60)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#50=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#556,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#61)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#51=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#557,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#62)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#52=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#558,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#63)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#53=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#559,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#64)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#54=(
+REPRESENTATION_RELATIONSHIP(' ',' ',#560,#554)
+REPRESENTATION_RELATIONSHIP_WITH_TRANSFORMATION(#65)
+SHAPE_REPRESENTATION_RELATIONSHIP()
+);
+#55=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#578);
+#56=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#579);
+#57=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#580);
+#58=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#598);
+#59=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#599);
+#60=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#600);
+#61=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#609);
+#62=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#618);
+#63=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#627);
+#64=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#636);
+#65=ITEM_DEFINED_TRANSFORMATION(' ',' ',#561,#645);
+#66=SHAPE_REPRESENTATION_RELATIONSHIP('','',#553,#73);
+#67=SHAPE_REPRESENTATION_RELATIONSHIP('','',#555,#74);
+#68=SHAPE_REPRESENTATION_RELATIONSHIP('','',#556,#75);
+#69=SHAPE_REPRESENTATION_RELATIONSHIP('','',#557,#76);
+#70=SHAPE_REPRESENTATION_RELATIONSHIP('','',#558,#77);
+#71=SHAPE_REPRESENTATION_RELATIONSHIP('','',#559,#78);
+#72=SHAPE_REPRESENTATION_RELATIONSHIP('','',#560,#79);
+#73=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#538),#941);
+#74=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#539),#942);
+#75=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#540),#943);
+#76=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#541),#944);
+#77=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#542),#945);
+#78=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#543),#946);
+#79=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#544),#947);
+#80=TOROIDAL_SURFACE('',#570,76.073,25.4);
+#81=TOROIDAL_SURFACE('',#575,76.073,23.749);
+#82=CYLINDRICAL_SURFACE('',#568,25.4);
+#83=CYLINDRICAL_SURFACE('',#572,25.4);
+#84=CYLINDRICAL_SURFACE('',#573,23.749);
+#85=CYLINDRICAL_SURFACE('',#577,23.749);
+#86=CYLINDRICAL_SURFACE('',#581,25.4);
+#87=CYLINDRICAL_SURFACE('',#589,25.4);
+#88=CYLINDRICAL_SURFACE('',#590,23.749);
+#89=CYLINDRICAL_SURFACE('',#595,23.749);
+#90=CYLINDRICAL_SURFACE('',#601,23.749);
+#91=CYLINDRICAL_SURFACE('',#608,25.4);
+#92=CYLINDRICAL_SURFACE('',#610,23.749);
+#93=CYLINDRICAL_SURFACE('',#617,25.4);
+#94=CYLINDRICAL_SURFACE('',#619,23.749);
+#95=CYLINDRICAL_SURFACE('',#626,25.4);
+#96=CYLINDRICAL_SURFACE('',#628,23.749);
+#97=CYLINDRICAL_SURFACE('',#635,25.4);
+#98=CYLINDRICAL_SURFACE('',#637,23.749);
+#99=CYLINDRICAL_SURFACE('',#644,25.4);
+#100=ORIENTED_EDGE('',*,*,#176,.F.);
+#101=ORIENTED_EDGE('',*,*,#177,.T.);
+#102=ORIENTED_EDGE('',*,*,#178,.T.);
+#103=ORIENTED_EDGE('',*,*,#179,.T.);
+#104=ORIENTED_EDGE('',*,*,#177,.F.);
+#105=ORIENTED_EDGE('',*,*,#180,.F.);
+#106=ORIENTED_EDGE('',*,*,#180,.T.);
+#107=ORIENTED_EDGE('',*,*,#181,.F.);
+#108=ORIENTED_EDGE('',*,*,#179,.F.);
+#109=ORIENTED_EDGE('',*,*,#181,.T.);
+#110=ORIENTED_EDGE('',*,*,#176,.T.);
+#111=ORIENTED_EDGE('',*,*,#182,.T.);
+#112=ORIENTED_EDGE('',*,*,#182,.F.);
+#113=ORIENTED_EDGE('',*,*,#183,.T.);
+#114=ORIENTED_EDGE('',*,*,#178,.F.);
+#115=ORIENTED_EDGE('',*,*,#183,.F.);
+#116=ORIENTED_EDGE('',*,*,#184,.T.);
+#117=ORIENTED_EDGE('',*,*,#185,.T.);
+#118=ORIENTED_EDGE('',*,*,#186,.T.);
+#119=ORIENTED_EDGE('',*,*,#187,.T.);
+#120=ORIENTED_EDGE('',*,*,#188,.T.);
+#121=ORIENTED_EDGE('',*,*,#189,.T.);
+#122=ORIENTED_EDGE('',*,*,#189,.F.);
+#123=ORIENTED_EDGE('',*,*,#186,.F.);
+#124=ORIENTED_EDGE('',*,*,#185,.F.);
+#125=ORIENTED_EDGE('',*,*,#190,.F.);
+#126=ORIENTED_EDGE('',*,*,#191,.F.);
+#127=ORIENTED_EDGE('',*,*,#192,.F.);
+#128=ORIENTED_EDGE('',*,*,#193,.F.);
+#129=ORIENTED_EDGE('',*,*,#188,.F.);
+#130=ORIENTED_EDGE('',*,*,#192,.T.);
+#131=ORIENTED_EDGE('',*,*,#193,.T.);
+#132=ORIENTED_EDGE('',*,*,#187,.F.);
+#133=ORIENTED_EDGE('',*,*,#191,.T.);
+#134=ORIENTED_EDGE('',*,*,#184,.F.);
+#135=ORIENTED_EDGE('',*,*,#190,.T.);
+#136=ORIENTED_EDGE('',*,*,#194,.F.);
+#137=ORIENTED_EDGE('',*,*,#195,.T.);
+#138=ORIENTED_EDGE('',*,*,#194,.T.);
+#139=ORIENTED_EDGE('',*,*,#196,.T.);
+#140=ORIENTED_EDGE('',*,*,#195,.F.);
+#141=ORIENTED_EDGE('',*,*,#197,.F.);
+#142=ORIENTED_EDGE('',*,*,#196,.F.);
+#143=ORIENTED_EDGE('',*,*,#197,.T.);
+#144=ORIENTED_EDGE('',*,*,#198,.F.);
+#145=ORIENTED_EDGE('',*,*,#199,.T.);
+#146=ORIENTED_EDGE('',*,*,#198,.T.);
+#147=ORIENTED_EDGE('',*,*,#200,.T.);
+#148=ORIENTED_EDGE('',*,*,#199,.F.);
+#149=ORIENTED_EDGE('',*,*,#201,.F.);
+#150=ORIENTED_EDGE('',*,*,#200,.F.);
+#151=ORIENTED_EDGE('',*,*,#201,.T.);
+#152=ORIENTED_EDGE('',*,*,#202,.F.);
+#153=ORIENTED_EDGE('',*,*,#203,.T.);
+#154=ORIENTED_EDGE('',*,*,#202,.T.);
+#155=ORIENTED_EDGE('',*,*,#204,.T.);
+#156=ORIENTED_EDGE('',*,*,#203,.F.);
+#157=ORIENTED_EDGE('',*,*,#205,.F.);
+#158=ORIENTED_EDGE('',*,*,#204,.F.);
+#159=ORIENTED_EDGE('',*,*,#205,.T.);
+#160=ORIENTED_EDGE('',*,*,#206,.T.);
+#161=ORIENTED_EDGE('',*,*,#207,.F.);
+#162=ORIENTED_EDGE('',*,*,#206,.F.);
+#163=ORIENTED_EDGE('',*,*,#208,.F.);
+#164=ORIENTED_EDGE('',*,*,#207,.T.);
+#165=ORIENTED_EDGE('',*,*,#209,.T.);
+#166=ORIENTED_EDGE('',*,*,#208,.T.);
+#167=ORIENTED_EDGE('',*,*,#209,.F.);
+#168=ORIENTED_EDGE('',*,*,#210,.T.);
+#169=ORIENTED_EDGE('',*,*,#211,.F.);
+#170=ORIENTED_EDGE('',*,*,#210,.F.);
+#171=ORIENTED_EDGE('',*,*,#212,.F.);
+#172=ORIENTED_EDGE('',*,*,#211,.T.);
+#173=ORIENTED_EDGE('',*,*,#213,.T.);
+#174=ORIENTED_EDGE('',*,*,#212,.T.);
+#175=ORIENTED_EDGE('',*,*,#213,.F.);
+#176=EDGE_CURVE('',#214,#214,#252,.T.);
+#177=EDGE_CURVE('',#215,#215,#253,.F.);
+#178=EDGE_CURVE('',#216,#216,#254,.T.);
+#179=EDGE_CURVE('',#217,#217,#255,.F.);
+#180=EDGE_CURVE('',#218,#218,#256,.F.);
+#181=EDGE_CURVE('',#219,#219,#257,.F.);
+#182=EDGE_CURVE('',#220,#220,#258,.F.);
+#183=EDGE_CURVE('',#221,#221,#259,.F.);
+#184=EDGE_CURVE('',#222,#222,#260,.T.);
+#185=EDGE_CURVE('',#223,#224,#18,.T.);
+#186=EDGE_CURVE('',#224,#223,#19,.F.);
+#187=EDGE_CURVE('',#225,#225,#261,.T.);
+#188=EDGE_CURVE('',#226,#226,#262,.T.);
+#189=EDGE_CURVE('',#227,#227,#263,.F.);
+#190=EDGE_CURVE('',#228,#228,#264,.T.);
+#191=EDGE_CURVE('',#229,#229,#265,.T.);
+#192=EDGE_CURVE('',#230,#231,#20,.F.);
+#193=EDGE_CURVE('',#231,#230,#21,.T.);
+#194=EDGE_CURVE('',#232,#232,#266,.F.);
+#195=EDGE_CURVE('',#233,#233,#267,.F.);
+#196=EDGE_CURVE('',#234,#234,#268,.T.);
+#197=EDGE_CURVE('',#235,#235,#269,.T.);
+#198=EDGE_CURVE('',#236,#236,#270,.F.);
+#199=EDGE_CURVE('',#237,#237,#271,.F.);
+#200=EDGE_CURVE('',#238,#238,#272,.T.);
+#201=EDGE_CURVE('',#239,#239,#273,.T.);
+#202=EDGE_CURVE('',#240,#240,#274,.F.);
+#203=EDGE_CURVE('',#241,#241,#275,.F.);
+#204=EDGE_CURVE('',#242,#242,#276,.T.);
+#205=EDGE_CURVE('',#243,#243,#277,.T.);
+#206=EDGE_CURVE('',#244,#244,#278,.F.);
+#207=EDGE_CURVE('',#245,#245,#279,.F.);
+#208=EDGE_CURVE('',#246,#246,#280,.T.);
+#209=EDGE_CURVE('',#247,#247,#281,.T.);
+#210=EDGE_CURVE('',#248,#248,#282,.F.);
+#211=EDGE_CURVE('',#249,#249,#283,.F.);
+#212=EDGE_CURVE('',#250,#250,#284,.T.);
+#213=EDGE_CURVE('',#251,#251,#285,.T.);
+#214=VERTEX_POINT('',#819);
+#215=VERTEX_POINT('',#821);
+#216=VERTEX_POINT('',#824);
+#217=VERTEX_POINT('',#826);
+#218=VERTEX_POINT('',#829);
+#219=VERTEX_POINT('',#832);
+#220=VERTEX_POINT('',#836);
+#221=VERTEX_POINT('',#839);
+#222=VERTEX_POINT('',#846);
+#223=VERTEX_POINT('',#848);
+#224=VERTEX_POINT('',#849);
+#225=VERTEX_POINT('',#852);
+#226=VERTEX_POINT('',#855);
+#227=VERTEX_POINT('',#857);
+#228=VERTEX_POINT('',#861);
+#229=VERTEX_POINT('',#863);
+#230=VERTEX_POINT('',#865);
+#231=VERTEX_POINT('',#866);
+#232=VERTEX_POINT('',#876);
+#233=VERTEX_POINT('',#878);
+#234=VERTEX_POINT('',#881);
+#235=VERTEX_POINT('',#884);
+#236=VERTEX_POINT('',#889);
+#237=VERTEX_POINT('',#891);
+#238=VERTEX_POINT('',#894);
+#239=VERTEX_POINT('',#897);
+#240=VERTEX_POINT('',#902);
+#241=VERTEX_POINT('',#904);
+#242=VERTEX_POINT('',#907);
+#243=VERTEX_POINT('',#910);
+#244=VERTEX_POINT('',#915);
+#245=VERTEX_POINT('',#917);
+#246=VERTEX_POINT('',#920);
+#247=VERTEX_POINT('',#923);
+#248=VERTEX_POINT('',#928);
+#249=VERTEX_POINT('',#930);
+#250=VERTEX_POINT('',#933);
+#251=VERTEX_POINT('',#936);
+#252=CIRCLE('',#563,23.749);
+#253=CIRCLE('',#564,25.4);
+#254=CIRCLE('',#566,23.749);
+#255=CIRCLE('',#567,25.4);
+#256=CIRCLE('',#569,25.4);
+#257=CIRCLE('',#571,25.4);
+#258=CIRCLE('',#574,23.749);
+#259=CIRCLE('',#576,23.749);
+#260=CIRCLE('',#582,25.4);
+#261=CIRCLE('',#585,25.4);
+#262=CIRCLE('',#587,23.749);
+#263=CIRCLE('',#588,25.4);
+#264=CIRCLE('',#591,23.7489999999999);
+#265=CIRCLE('',#592,23.7489999999993);
+#266=CIRCLE('',#602,23.749);
+#267=CIRCLE('',#603,23.749);
+#268=CIRCLE('',#605,25.4);
+#269=CIRCLE('',#607,25.4);
+#270=CIRCLE('',#611,23.749);
+#271=CIRCLE('',#612,23.749);
+#272=CIRCLE('',#614,25.4);
+#273=CIRCLE('',#616,25.4);
+#274=CIRCLE('',#620,23.749);
+#275=CIRCLE('',#621,23.749);
+#276=CIRCLE('',#623,25.4);
+#277=CIRCLE('',#625,25.4);
+#278=CIRCLE('',#629,23.749);
+#279=CIRCLE('',#630,23.749);
+#280=CIRCLE('',#632,25.4);
+#281=CIRCLE('',#634,25.4);
+#282=CIRCLE('',#638,23.749);
+#283=CIRCLE('',#639,23.749);
+#284=CIRCLE('',#641,25.4);
+#285=CIRCLE('',#643,25.4);
+#286=EDGE_LOOP('',(#100));
+#287=EDGE_LOOP('',(#101));
+#288=EDGE_LOOP('',(#102));
+#289=EDGE_LOOP('',(#103));
+#290=EDGE_LOOP('',(#104));
+#291=EDGE_LOOP('',(#105));
+#292=EDGE_LOOP('',(#106));
+#293=EDGE_LOOP('',(#107));
+#294=EDGE_LOOP('',(#108));
+#295=EDGE_LOOP('',(#109));
+#296=EDGE_LOOP('',(#110));
+#297=EDGE_LOOP('',(#111));
+#298=EDGE_LOOP('',(#112));
+#299=EDGE_LOOP('',(#113));
+#300=EDGE_LOOP('',(#114));
+#301=EDGE_LOOP('',(#115));
+#302=EDGE_LOOP('',(#116));
+#303=EDGE_LOOP('',(#117,#118));
+#304=EDGE_LOOP('',(#119));
+#305=EDGE_LOOP('',(#120));
+#306=EDGE_LOOP('',(#121));
+#307=EDGE_LOOP('',(#122));
+#308=EDGE_LOOP('',(#123,#124));
+#309=EDGE_LOOP('',(#125));
+#310=EDGE_LOOP('',(#126));
+#311=EDGE_LOOP('',(#127,#128));
+#312=EDGE_LOOP('',(#129));
+#313=EDGE_LOOP('',(#130,#131));
+#314=EDGE_LOOP('',(#132));
+#315=EDGE_LOOP('',(#133));
+#316=EDGE_LOOP('',(#134));
+#317=EDGE_LOOP('',(#135));
+#318=EDGE_LOOP('',(#136));
+#319=EDGE_LOOP('',(#137));
+#320=EDGE_LOOP('',(#138));
+#321=EDGE_LOOP('',(#139));
+#322=EDGE_LOOP('',(#140));
+#323=EDGE_LOOP('',(#141));
+#324=EDGE_LOOP('',(#142));
+#325=EDGE_LOOP('',(#143));
+#326=EDGE_LOOP('',(#144));
+#327=EDGE_LOOP('',(#145));
+#328=EDGE_LOOP('',(#146));
+#329=EDGE_LOOP('',(#147));
+#330=EDGE_LOOP('',(#148));
+#331=EDGE_LOOP('',(#149));
+#332=EDGE_LOOP('',(#150));
+#333=EDGE_LOOP('',(#151));
+#334=EDGE_LOOP('',(#152));
+#335=EDGE_LOOP('',(#153));
+#336=EDGE_LOOP('',(#154));
+#337=EDGE_LOOP('',(#155));
+#338=EDGE_LOOP('',(#156));
+#339=EDGE_LOOP('',(#157));
+#340=EDGE_LOOP('',(#158));
+#341=EDGE_LOOP('',(#159));
+#342=EDGE_LOOP('',(#160));
+#343=EDGE_LOOP('',(#161));
+#344=EDGE_LOOP('',(#162));
+#345=EDGE_LOOP('',(#163));
+#346=EDGE_LOOP('',(#164));
+#347=EDGE_LOOP('',(#165));
+#348=EDGE_LOOP('',(#166));
+#349=EDGE_LOOP('',(#167));
+#350=EDGE_LOOP('',(#168));
+#351=EDGE_LOOP('',(#169));
+#352=EDGE_LOOP('',(#170));
+#353=EDGE_LOOP('',(#171));
+#354=EDGE_LOOP('',(#172));
+#355=EDGE_LOOP('',(#173));
+#356=EDGE_LOOP('',(#174));
+#357=EDGE_LOOP('',(#175));
+#358=FACE_BOUND('',#286,.T.);
+#359=FACE_BOUND('',#287,.T.);
+#360=FACE_BOUND('',#288,.T.);
+#361=FACE_BOUND('',#289,.T.);
+#362=FACE_BOUND('',#290,.T.);
+#363=FACE_BOUND('',#291,.T.);
+#364=FACE_BOUND('',#292,.T.);
+#365=FACE_BOUND('',#293,.T.);
+#366=FACE_BOUND('',#294,.T.);
+#367=FACE_BOUND('',#295,.T.);
+#368=FACE_BOUND('',#296,.T.);
+#369=FACE_BOUND('',#297,.T.);
+#370=FACE_BOUND('',#298,.T.);
+#371=FACE_BOUND('',#299,.T.);
+#372=FACE_BOUND('',#300,.T.);
+#373=FACE_BOUND('',#301,.T.);
+#374=FACE_BOUND('',#302,.T.);
+#375=FACE_BOUND('',#303,.T.);
+#376=FACE_BOUND('',#304,.T.);
+#377=FACE_BOUND('',#305,.T.);
+#378=FACE_BOUND('',#306,.T.);
+#379=FACE_BOUND('',#307,.T.);
+#380=FACE_BOUND('',#308,.T.);
+#381=FACE_BOUND('',#309,.T.);
+#382=FACE_BOUND('',#310,.T.);
+#383=FACE_BOUND('',#311,.T.);
+#384=FACE_BOUND('',#312,.T.);
+#385=FACE_BOUND('',#313,.T.);
+#386=FACE_BOUND('',#314,.T.);
+#387=FACE_BOUND('',#315,.T.);
+#388=FACE_BOUND('',#316,.T.);
+#389=FACE_BOUND('',#317,.T.);
+#390=FACE_BOUND('',#318,.T.);
+#391=FACE_BOUND('',#319,.T.);
+#392=FACE_BOUND('',#320,.T.);
+#393=FACE_BOUND('',#321,.T.);
+#394=FACE_BOUND('',#322,.T.);
+#395=FACE_BOUND('',#323,.T.);
+#396=FACE_BOUND('',#324,.T.);
+#397=FACE_BOUND('',#325,.T.);
+#398=FACE_BOUND('',#326,.T.);
+#399=FACE_BOUND('',#327,.T.);
+#400=FACE_BOUND('',#328,.T.);
+#401=FACE_BOUND('',#329,.T.);
+#402=FACE_BOUND('',#330,.T.);
+#403=FACE_BOUND('',#331,.T.);
+#404=FACE_BOUND('',#332,.T.);
+#405=FACE_BOUND('',#333,.T.);
+#406=FACE_BOUND('',#334,.T.);
+#407=FACE_BOUND('',#335,.T.);
+#408=FACE_BOUND('',#336,.T.);
+#409=FACE_BOUND('',#337,.T.);
+#410=FACE_BOUND('',#338,.T.);
+#411=FACE_BOUND('',#339,.T.);
+#412=FACE_BOUND('',#340,.T.);
+#413=FACE_BOUND('',#341,.T.);
+#414=FACE_BOUND('',#342,.T.);
+#415=FACE_BOUND('',#343,.T.);
+#416=FACE_BOUND('',#344,.T.);
+#417=FACE_BOUND('',#345,.T.);
+#418=FACE_BOUND('',#346,.T.);
+#419=FACE_BOUND('',#347,.T.);
+#420=FACE_BOUND('',#348,.T.);
+#421=FACE_BOUND('',#349,.T.);
+#422=FACE_BOUND('',#350,.T.);
+#423=FACE_BOUND('',#351,.T.);
+#424=FACE_BOUND('',#352,.T.);
+#425=FACE_BOUND('',#353,.T.);
+#426=FACE_BOUND('',#354,.T.);
+#427=FACE_BOUND('',#355,.T.);
+#428=FACE_BOUND('',#356,.T.);
+#429=FACE_BOUND('',#357,.T.);
+#430=PLANE('',#562);
+#431=PLANE('',#565);
+#432=PLANE('',#586);
+#433=PLANE('',#596);
+#434=PLANE('',#597);
+#435=PLANE('',#604);
+#436=PLANE('',#606);
+#437=PLANE('',#613);
+#438=PLANE('',#615);
+#439=PLANE('',#622);
+#440=PLANE('',#624);
+#441=PLANE('',#631);
+#442=PLANE('',#633);
+#443=PLANE('',#640);
+#444=PLANE('',#642);
+#445=ADVANCED_FACE('',(#358,#359),#430,.F.);
+#446=ADVANCED_FACE('',(#360,#361),#431,.F.);
+#447=ADVANCED_FACE('',(#362,#363),#82,.T.);
+#448=ADVANCED_FACE('',(#364,#365),#80,.T.);
+#449=ADVANCED_FACE('',(#366,#367),#83,.T.);
+#450=ADVANCED_FACE('',(#368,#369),#84,.F.);
+#451=ADVANCED_FACE('',(#370,#371),#81,.F.);
+#452=ADVANCED_FACE('',(#372,#373),#85,.F.);
+#453=ADVANCED_FACE('',(#374,#375,#376),#86,.T.);
+#454=ADVANCED_FACE('',(#377,#378),#432,.F.);
+#455=ADVANCED_FACE('',(#379,#380),#87,.T.);
+#456=ADVANCED_FACE('',(#381,#382,#383),#88,.F.);
+#457=ADVANCED_FACE('',(#384,#385),#89,.F.);
+#458=ADVANCED_FACE('',(#386,#387),#433,.F.);
+#459=ADVANCED_FACE('',(#388,#389),#434,.F.);
+#460=ADVANCED_FACE('',(#390,#391),#90,.F.);
+#461=ADVANCED_FACE('',(#392,#393),#435,.T.);
+#462=ADVANCED_FACE('',(#394,#395),#436,.F.);
+#463=ADVANCED_FACE('',(#396,#397),#91,.T.);
+#464=ADVANCED_FACE('',(#398,#399),#92,.F.);
+#465=ADVANCED_FACE('',(#400,#401),#437,.T.);
+#466=ADVANCED_FACE('',(#402,#403),#438,.F.);
+#467=ADVANCED_FACE('',(#404,#405),#93,.T.);
+#468=ADVANCED_FACE('',(#406,#407),#94,.F.);
+#469=ADVANCED_FACE('',(#408,#409),#439,.T.);
+#470=ADVANCED_FACE('',(#410,#411),#440,.F.);
+#471=ADVANCED_FACE('',(#412,#413),#95,.T.);
+#472=ADVANCED_FACE('',(#414,#415),#96,.F.);
+#473=ADVANCED_FACE('',(#416,#417),#441,.F.);
+#474=ADVANCED_FACE('',(#418,#419),#442,.T.);
+#475=ADVANCED_FACE('',(#420,#421),#97,.T.);
+#476=ADVANCED_FACE('',(#422,#423),#98,.F.);
+#477=ADVANCED_FACE('',(#424,#425),#443,.F.);
+#478=ADVANCED_FACE('',(#426,#427),#444,.T.);
+#479=ADVANCED_FACE('',(#428,#429),#99,.T.);
+#480=CLOSED_SHELL('',(#445,#446,#447,#448,#449,#450,#451,#452));
+#481=CLOSED_SHELL('',(#453,#454,#455,#456,#457,#458,#459));
+#482=CLOSED_SHELL('',(#460,#461,#462,#463));
+#483=CLOSED_SHELL('',(#464,#465,#466,#467));
+#484=CLOSED_SHELL('',(#468,#469,#470,#471));
+#485=CLOSED_SHELL('',(#472,#473,#474,#475));
+#486=CLOSED_SHELL('',(#476,#477,#478,#479));
+#487=STYLED_ITEM('',(#494),#538);
+#488=STYLED_ITEM('',(#495),#539);
+#489=STYLED_ITEM('',(#496),#540);
+#490=STYLED_ITEM('',(#497),#541);
+#491=STYLED_ITEM('',(#498),#542);
+#492=STYLED_ITEM('',(#499),#543);
+#493=STYLED_ITEM('',(#500),#544);
+#494=PRESENTATION_STYLE_ASSIGNMENT((#501));
+#495=PRESENTATION_STYLE_ASSIGNMENT((#502));
+#496=PRESENTATION_STYLE_ASSIGNMENT((#503));
+#497=PRESENTATION_STYLE_ASSIGNMENT((#504));
+#498=PRESENTATION_STYLE_ASSIGNMENT((#505));
+#499=PRESENTATION_STYLE_ASSIGNMENT((#506));
+#500=PRESENTATION_STYLE_ASSIGNMENT((#507));
+#501=SURFACE_STYLE_USAGE(.BOTH.,#508);
+#502=SURFACE_STYLE_USAGE(.BOTH.,#509);
+#503=SURFACE_STYLE_USAGE(.BOTH.,#510);
+#504=SURFACE_STYLE_USAGE(.BOTH.,#511);
+#505=SURFACE_STYLE_USAGE(.BOTH.,#512);
+#506=SURFACE_STYLE_USAGE(.BOTH.,#513);
+#507=SURFACE_STYLE_USAGE(.BOTH.,#514);
+#508=SURFACE_SIDE_STYLE('',(#515));
+#509=SURFACE_SIDE_STYLE('',(#516));
+#510=SURFACE_SIDE_STYLE('',(#517));
+#511=SURFACE_SIDE_STYLE('',(#518));
+#512=SURFACE_SIDE_STYLE('',(#519));
+#513=SURFACE_SIDE_STYLE('',(#520));
+#514=SURFACE_SIDE_STYLE('',(#521));
+#515=SURFACE_STYLE_FILL_AREA(#522);
+#516=SURFACE_STYLE_FILL_AREA(#523);
+#517=SURFACE_STYLE_FILL_AREA(#524);
+#518=SURFACE_STYLE_FILL_AREA(#525);
+#519=SURFACE_STYLE_FILL_AREA(#526);
+#520=SURFACE_STYLE_FILL_AREA(#527);
+#521=SURFACE_STYLE_FILL_AREA(#528);
+#522=FILL_AREA_STYLE('',(#529));
+#523=FILL_AREA_STYLE('',(#530));
+#524=FILL_AREA_STYLE('',(#531));
+#525=FILL_AREA_STYLE('',(#532));
+#526=FILL_AREA_STYLE('',(#533));
+#527=FILL_AREA_STYLE('',(#534));
+#528=FILL_AREA_STYLE('',(#535));
+#529=FILL_AREA_STYLE_COLOUR('',#536);
+#530=FILL_AREA_STYLE_COLOUR('',#536);
+#531=FILL_AREA_STYLE_COLOUR('',#537);
+#532=FILL_AREA_STYLE_COLOUR('',#537);
+#533=FILL_AREA_STYLE_COLOUR('',#537);
+#534=FILL_AREA_STYLE_COLOUR('',#537);
+#535=FILL_AREA_STYLE_COLOUR('',#537);
+#536=COLOUR_RGB('',0.800000011920929,0.400000005960464,0.);
+#537=COLOUR_RGB('',0.,0.24705882370472,0.749019622802734);
+#538=MANIFOLD_SOLID_BREP('',#480);
+#539=MANIFOLD_SOLID_BREP('',#481);
+#540=MANIFOLD_SOLID_BREP('',#482);
+#541=MANIFOLD_SOLID_BREP('',#483);
+#542=MANIFOLD_SOLID_BREP('',#484);
+#543=MANIFOLD_SOLID_BREP('',#485);
+#544=MANIFOLD_SOLID_BREP('',#486);
+#545=SHAPE_DEFINITION_REPRESENTATION(#960,#553);
+#546=SHAPE_DEFINITION_REPRESENTATION(#959,#554);
+#547=SHAPE_DEFINITION_REPRESENTATION(#964,#555);
+#548=SHAPE_DEFINITION_REPRESENTATION(#968,#556);
+#549=SHAPE_DEFINITION_REPRESENTATION(#970,#557);
+#550=SHAPE_DEFINITION_REPRESENTATION(#972,#558);
+#551=SHAPE_DEFINITION_REPRESENTATION(#974,#559);
+#552=SHAPE_DEFINITION_REPRESENTATION(#976,#560);
+#553=SHAPE_REPRESENTATION('2WCL-2.0-316-7-01',(#561),#941);
+#554=SHAPE_REPRESENTATION('Asm1',(#561,#578,#579,#580,#598,#599,#600,#609,
+#618,#627,#636,#645),#940);
+#555=SHAPE_REPRESENTATION('B7WWW-2.0-304-7-01',(#561),#942);
+#556=SHAPE_REPRESENTATION('RNT-304-2.000-0.065-WL-7_oa_0',(#561),#943);
+#557=SHAPE_REPRESENTATION('RNT-304-2.000-0.065-WL-7_oa_1',(#561),#944);
+#558=SHAPE_REPRESENTATION('RNT-304-2.000-0.065-WL-7_oa_2',(#561),#945);
+#559=SHAPE_REPRESENTATION('RNT-304-2.000-0.065-WL-7_oa_3',(#561),#946);
+#560=SHAPE_REPRESENTATION('RNT-304-2.000-0.065-WL-7_oa_4',(#561),#947);
+#561=AXIS2_PLACEMENT_3D('',#816,#646,#647);
+#562=AXIS2_PLACEMENT_3D('',#817,#648,#649);
+#563=AXIS2_PLACEMENT_3D('',#818,#650,#651);
+#564=AXIS2_PLACEMENT_3D('',#820,#652,#653);
+#565=AXIS2_PLACEMENT_3D('',#822,#654,#655);
+#566=AXIS2_PLACEMENT_3D('',#823,#656,#657);
+#567=AXIS2_PLACEMENT_3D('',#825,#658,#659);
+#568=AXIS2_PLACEMENT_3D('',#827,#660,#661);
+#569=AXIS2_PLACEMENT_3D('',#828,#662,#663);
+#570=AXIS2_PLACEMENT_3D('',#830,#664,#665);
+#571=AXIS2_PLACEMENT_3D('',#831,#666,#667);
+#572=AXIS2_PLACEMENT_3D('',#833,#668,#669);
+#573=AXIS2_PLACEMENT_3D('',#834,#670,#671);
+#574=AXIS2_PLACEMENT_3D('',#835,#672,#673);
+#575=AXIS2_PLACEMENT_3D('',#837,#674,#675);
+#576=AXIS2_PLACEMENT_3D('',#838,#676,#677);
+#577=AXIS2_PLACEMENT_3D('',#840,#678,#679);
+#578=AXIS2_PLACEMENT_3D('',#841,#680,#681);
+#579=AXIS2_PLACEMENT_3D('',#842,#682,#683);
+#580=AXIS2_PLACEMENT_3D('',#843,#684,#685);
+#581=AXIS2_PLACEMENT_3D('',#844,#686,#687);
+#582=AXIS2_PLACEMENT_3D('',#845,#688,#689);
+#583=AXIS2_PLACEMENT_3D('',#847,#690,#691);
+#584=AXIS2_PLACEMENT_3D('',#850,#692,#693);
+#585=AXIS2_PLACEMENT_3D('',#851,#694,#695);
+#586=AXIS2_PLACEMENT_3D('',#853,#696,#697);
+#587=AXIS2_PLACEMENT_3D('',#854,#698,#699);
+#588=AXIS2_PLACEMENT_3D('',#856,#700,#701);
+#589=AXIS2_PLACEMENT_3D('',#858,#702,#703);
+#590=AXIS2_PLACEMENT_3D('',#859,#704,#705);
+#591=AXIS2_PLACEMENT_3D('',#860,#706,#707);
+#592=AXIS2_PLACEMENT_3D('',#862,#708,#709);
+#593=AXIS2_PLACEMENT_3D('',#864,#710,#711);
+#594=AXIS2_PLACEMENT_3D('',#867,#712,#713);
+#595=AXIS2_PLACEMENT_3D('',#868,#714,#715);
+#596=AXIS2_PLACEMENT_3D('',#869,#716,#717);
+#597=AXIS2_PLACEMENT_3D('',#870,#718,#719);
+#598=AXIS2_PLACEMENT_3D('',#871,#720,#721);
+#599=AXIS2_PLACEMENT_3D('',#872,#722,#723);
+#600=AXIS2_PLACEMENT_3D('',#873,#724,#725);
+#601=AXIS2_PLACEMENT_3D('',#874,#726,#727);
+#602=AXIS2_PLACEMENT_3D('',#875,#728,#729);
+#603=AXIS2_PLACEMENT_3D('',#877,#730,#731);
+#604=AXIS2_PLACEMENT_3D('',#879,#732,#733);
+#605=AXIS2_PLACEMENT_3D('',#880,#734,#735);
+#606=AXIS2_PLACEMENT_3D('',#882,#736,#737);
+#607=AXIS2_PLACEMENT_3D('',#883,#738,#739);
+#608=AXIS2_PLACEMENT_3D('',#885,#740,#741);
+#609=AXIS2_PLACEMENT_3D('',#886,#742,#743);
+#610=AXIS2_PLACEMENT_3D('',#887,#744,#745);
+#611=AXIS2_PLACEMENT_3D('',#888,#746,#747);
+#612=AXIS2_PLACEMENT_3D('',#890,#748,#749);
+#613=AXIS2_PLACEMENT_3D('',#892,#750,#751);
+#614=AXIS2_PLACEMENT_3D('',#893,#752,#753);
+#615=AXIS2_PLACEMENT_3D('',#895,#754,#755);
+#616=AXIS2_PLACEMENT_3D('',#896,#756,#757);
+#617=AXIS2_PLACEMENT_3D('',#898,#758,#759);
+#618=AXIS2_PLACEMENT_3D('',#899,#760,#761);
+#619=AXIS2_PLACEMENT_3D('',#900,#762,#763);
+#620=AXIS2_PLACEMENT_3D('',#901,#764,#765);
+#621=AXIS2_PLACEMENT_3D('',#903,#766,#767);
+#622=AXIS2_PLACEMENT_3D('',#905,#768,#769);
+#623=AXIS2_PLACEMENT_3D('',#906,#770,#771);
+#624=AXIS2_PLACEMENT_3D('',#908,#772,#773);
+#625=AXIS2_PLACEMENT_3D('',#909,#774,#775);
+#626=AXIS2_PLACEMENT_3D('',#911,#776,#777);
+#627=AXIS2_PLACEMENT_3D('',#912,#778,#779);
+#628=AXIS2_PLACEMENT_3D('',#913,#780,#781);
+#629=AXIS2_PLACEMENT_3D('',#914,#782,#783);
+#630=AXIS2_PLACEMENT_3D('',#916,#784,#785);
+#631=AXIS2_PLACEMENT_3D('',#918,#786,#787);
+#632=AXIS2_PLACEMENT_3D('',#919,#788,#789);
+#633=AXIS2_PLACEMENT_3D('',#921,#790,#791);
+#634=AXIS2_PLACEMENT_3D('',#922,#792,#793);
+#635=AXIS2_PLACEMENT_3D('',#924,#794,#795);
+#636=AXIS2_PLACEMENT_3D('',#925,#796,#797);
+#637=AXIS2_PLACEMENT_3D('',#926,#798,#799);
+#638=AXIS2_PLACEMENT_3D('',#927,#800,#801);
+#639=AXIS2_PLACEMENT_3D('',#929,#802,#803);
+#640=AXIS2_PLACEMENT_3D('',#931,#804,#805);
+#641=AXIS2_PLACEMENT_3D('',#932,#806,#807);
+#642=AXIS2_PLACEMENT_3D('',#934,#808,#809);
+#643=AXIS2_PLACEMENT_3D('',#935,#810,#811);
+#644=AXIS2_PLACEMENT_3D('',#937,#812,#813);
+#645=AXIS2_PLACEMENT_3D('',#938,#814,#815);
+#646=DIRECTION('',(0.,0.,1.));
+#647=DIRECTION('',(1.,0.,0.));
+#648=DIRECTION('',(-1.,0.,0.));
+#649=DIRECTION('',(0.,0.,1.));
+#650=DIRECTION('',(1.,0.,0.));
+#651=DIRECTION('',(0.,0.,-1.));
+#652=DIRECTION('',(-1.,0.,0.));
+#653=DIRECTION('',(0.,0.,1.));
+#654=DIRECTION('',(0.,0.,1.));
+#655=DIRECTION('',(1.,0.,0.));
+#656=DIRECTION('',(0.,0.,1.));
+#657=DIRECTION('',(1.,0.,0.));
+#658=DIRECTION('',(0.,0.,1.));
+#659=DIRECTION('',(1.,0.,0.));
+#660=DIRECTION('',(1.,0.,0.));
+#661=DIRECTION('',(0.,0.,-1.));
+#662=DIRECTION('',(1.,0.,1.82427244985927E-16));
+#663=DIRECTION('',(-1.82427244985927E-16,0.,1.));
+#664=DIRECTION('',(0.,1.,0.));
+#665=DIRECTION('',(0.,0.,1.));
+#666=DIRECTION('',(0.,0.,1.));
+#667=DIRECTION('',(-1.,0.,0.));
+#668=DIRECTION('',(-1.30238988214013E-32,0.,1.));
+#669=DIRECTION('',(1.,0.,1.30238988214013E-32));
+#670=DIRECTION('',(1.,0.,0.));
+#671=DIRECTION('',(0.,0.,-1.));
+#672=DIRECTION('',(1.,0.,1.82427244985927E-16));
+#673=DIRECTION('',(-1.82427244985927E-16,0.,1.));
+#674=DIRECTION('',(0.,1.,0.));
+#675=DIRECTION('',(0.,0.,1.));
+#676=DIRECTION('',(0.,0.,1.));
+#677=DIRECTION('',(-1.,0.,0.));
+#678=DIRECTION('',(-1.30238988214013E-32,0.,1.));
+#679=DIRECTION('',(1.,0.,1.30238988214013E-32));
+#680=DIRECTION('',(0.,0.,1.));
+#681=DIRECTION('',(1.,0.,0.));
+#682=DIRECTION('',(1.,-1.13184868918778E-16,1.89893263065044E-16));
+#683=DIRECTION('',(-1.89893263065044E-16,-3.88578058618805E-16,1.));
+#684=DIRECTION('',(-2.19899415078935E-16,-4.69099741641213E-17,1.));
+#685=DIRECTION('',(-1.,1.66533453693773E-16,-2.19899415078935E-16));
+#686=DIRECTION('',(1.,0.,-1.3934689237845E-14));
+#687=DIRECTION('',(-1.3934689237845E-14,0.,-1.));
+#688=DIRECTION('',(-1.,0.,1.31287847657678E-15));
+#689=DIRECTION('',(1.31287847657678E-15,0.,1.));
+#690=DIRECTION('',(0.707106781186543,0.,-0.707106781186552));
+#691=DIRECTION('',(0.707106781186552,0.,0.707106781186543));
+#692=DIRECTION('',(0.707106781186552,0.,0.707106781186543));
+#693=DIRECTION('',(0.707106781186543,0.,-0.707106781186552));
+#694=DIRECTION('',(1.,0.,-4.78925809218609E-16));
+#695=DIRECTION('',(-4.78925809218609E-16,0.,-1.));
+#696=DIRECTION('',(0.,0.,-1.));
+#697=DIRECTION('',(-1.,0.,0.));
+#698=DIRECTION('',(0.,0.,-1.));
+#699=DIRECTION('',(-1.,0.,0.));
+#700=DIRECTION('',(0.,0.,-1.));
+#701=DIRECTION('',(-1.,0.,0.));
+#702=DIRECTION('',(-1.83697019872103E-16,0.,1.));
+#703=DIRECTION('',(1.,0.,1.83697019872103E-16));
+#704=DIRECTION('',(1.,0.,-1.3934689237845E-14));
+#705=DIRECTION('',(-1.3934689237845E-14,0.,-1.));
+#706=DIRECTION('',(-1.,0.,1.31287847657678E-15));
+#707=DIRECTION('',(1.31287847657678E-15,0.,1.));
+#708=DIRECTION('',(1.,0.,-4.78925809218609E-16));
+#709=DIRECTION('',(-4.78925809218609E-16,0.,-1.));
+#710=DIRECTION('',(0.707106781186552,0.,0.707106781186543));
+#711=DIRECTION('',(0.707106781186543,0.,-0.707106781186552));
+#712=DIRECTION('',(0.707106781186543,0.,-0.707106781186552));
+#713=DIRECTION('',(0.707106781186552,0.,0.707106781186543));
+#714=DIRECTION('',(-1.83697019872103E-16,0.,1.));
+#715=DIRECTION('',(1.,0.,1.83697019872103E-16));
+#716=DIRECTION('',(1.,0.,-4.78925809218609E-16));
+#717=DIRECTION('',(-4.78925809218609E-16,0.,-1.));
+#718=DIRECTION('',(-1.,0.,1.31287847657678E-15));
+#719=DIRECTION('',(1.31287847657678E-15,0.,1.));
+#720=DIRECTION('',(1.,-3.33066907387547E-16,3.17334150243134E-16));
+#721=DIRECTION('',(3.17334150243134E-16,3.33066907387547E-16,-1.));
+#722=DIRECTION('',(1.40027729191297E-14,1.11022302462517E-16,1.));
+#723=DIRECTION('',(-1.,-1.01794941766887E-16,1.40027729191297E-14));
+#724=DIRECTION('',(1.85507098144317E-16,-4.53173733155194E-16,1.));
+#725=DIRECTION('',(-1.,1.96451595765668E-16,1.85507098144317E-16));
+#726=DIRECTION('',(0.,1.,0.));
+#727=DIRECTION('',(-1.05008862849387E-30,0.,1.));
+#728=DIRECTION('',(0.,1.,0.));
+#729=DIRECTION('',(1.,0.,0.));
+#730=DIRECTION('',(0.,1.,0.));
+#731=DIRECTION('',(1.,0.,0.));
+#732=DIRECTION('',(0.,1.,0.));
+#733=DIRECTION('',(-1.05008862849387E-30,0.,1.));
+#734=DIRECTION('',(0.,1.,0.));
+#735=DIRECTION('',(1.,0.,0.));
+#736=DIRECTION('',(0.,1.,0.));
+#737=DIRECTION('',(-1.05008862849387E-30,0.,1.));
+#738=DIRECTION('',(0.,1.,0.));
+#739=DIRECTION('',(1.,0.,0.));
+#740=DIRECTION('',(0.,1.,0.));
+#741=DIRECTION('',(-1.05008862849387E-30,0.,1.));
+#742=DIRECTION('',(2.7622018602606E-15,1.05008862849387E-30,-1.));
+#743=DIRECTION('',(-3.80163609184884E-16,1.,0.));
+#744=DIRECTION('',(4.93038065763132E-32,1.,0.));
+#745=DIRECTION('',(5.19347695802905E-30,0.,1.));
+#746=DIRECTION('',(0.,1.,0.));
+#747=DIRECTION('',(1.,0.,0.));
+#748=DIRECTION('',(0.,1.,0.));
+#749=DIRECTION('',(1.,0.,0.));
+#750=DIRECTION('',(0.,1.,0.));
+#751=DIRECTION('',(5.19347695802905E-30,0.,1.));
+#752=DIRECTION('',(0.,1.,0.));
+#753=DIRECTION('',(1.,0.,0.));
+#754=DIRECTION('',(0.,1.,0.));
+#755=DIRECTION('',(5.19347695802905E-30,0.,1.));
+#756=DIRECTION('',(0.,1.,0.));
+#757=DIRECTION('',(1.,0.,0.));
+#758=DIRECTION('',(4.93038065763132E-32,1.,0.));
+#759=DIRECTION('',(5.19347695802905E-30,0.,1.));
+#760=DIRECTION('',(-1.,-5.19347695802905E-30,1.34625469127775E-14));
+#761=DIRECTION('',(0.,1.,3.85772245896491E-16));
+#762=DIRECTION('',(0.,1.,0.));
+#763=DIRECTION('',(1.,0.,0.));
+#764=DIRECTION('',(0.,1.,0.));
+#765=DIRECTION('',(1.,0.,0.));
+#766=DIRECTION('',(0.,1.,0.));
+#767=DIRECTION('',(1.,0.,0.));
+#768=DIRECTION('',(0.,1.,0.));
+#769=DIRECTION('',(1.,0.,0.));
+#770=DIRECTION('',(0.,1.,0.));
+#771=DIRECTION('',(1.,0.,0.));
+#772=DIRECTION('',(0.,1.,0.));
+#773=DIRECTION('',(1.,0.,0.));
+#774=DIRECTION('',(0.,1.,0.));
+#775=DIRECTION('',(1.,0.,0.));
+#776=DIRECTION('',(0.,1.,0.));
+#777=DIRECTION('',(1.,0.,0.));
+#778=DIRECTION('',(1.8197155661376E-16,-3.2878598448249E-31,-1.));
+#779=DIRECTION('',(1.80679876899854E-15,1.,0.));
+#780=DIRECTION('',(6.16297582203915E-33,-1.,0.));
+#781=DIRECTION('',(-1.,-6.16297582203915E-33,0.));
+#782=DIRECTION('',(0.,1.,0.));
+#783=DIRECTION('',(1.,-6.16297582203915E-33,0.));
+#784=DIRECTION('',(0.,1.,0.));
+#785=DIRECTION('',(1.,-6.16297582203915E-33,0.));
+#786=DIRECTION('',(0.,1.,0.));
+#787=DIRECTION('',(1.,0.,0.));
+#788=DIRECTION('',(0.,1.,0.));
+#789=DIRECTION('',(1.,6.16297582203915E-33,0.));
+#790=DIRECTION('',(0.,1.,0.));
+#791=DIRECTION('',(1.,0.,0.));
+#792=DIRECTION('',(0.,1.,0.));
+#793=DIRECTION('',(1.,6.16297582203915E-33,0.));
+#794=DIRECTION('',(6.16297582203915E-33,-1.,0.));
+#795=DIRECTION('',(-1.,-6.16297582203915E-33,0.));
+#796=DIRECTION('',(-1.,0.,0.));
+#797=DIRECTION('',(0.,1.,4.69099741641213E-17));
+#798=DIRECTION('',(0.,-1.,0.));
+#799=DIRECTION('',(-5.95461454756772E-31,0.,-1.));
+#800=DIRECTION('',(0.,1.,0.));
+#801=DIRECTION('',(1.,0.,0.));
+#802=DIRECTION('',(0.,1.,0.));
+#803=DIRECTION('',(1.,0.,0.));
+#804=DIRECTION('',(0.,1.,0.));
+#805=DIRECTION('',(5.95461454756772E-31,0.,1.));
+#806=DIRECTION('',(0.,1.,0.));
+#807=DIRECTION('',(1.,0.,0.));
+#808=DIRECTION('',(0.,1.,0.));
+#809=DIRECTION('',(5.95461454756772E-31,0.,1.));
+#810=DIRECTION('',(0.,1.,0.));
+#811=DIRECTION('',(1.,0.,0.));
+#812=DIRECTION('',(0.,-1.,0.));
+#813=DIRECTION('',(-5.95461454756772E-31,0.,-1.));
+#814=DIRECTION('',(2.18365867936527E-15,-5.95461454756772E-31,-1.));
+#815=DIRECTION('',(2.72689802844946E-16,1.,0.));
+#816=CARTESIAN_POINT('',(0.,0.,0.));
+#817=CARTESIAN_POINT('',(76.2,0.,49.5008035838541));
+#818=CARTESIAN_POINT('',(76.2,0.,76.2));
+#819=CARTESIAN_POINT('',(76.2,0.,52.451));
+#820=CARTESIAN_POINT('',(76.2,0.,76.2));
+#821=CARTESIAN_POINT('',(76.2,0.,101.6));
+#822=CARTESIAN_POINT('',(23.749,0.,1.21430643318376E-14));
+#823=CARTESIAN_POINT('',(0.,0.,1.21430643318376E-14));
+#824=CARTESIAN_POINT('',(23.749,0.,1.21430643318376E-14));
+#825=CARTESIAN_POINT('',(7.07610529627525E-32,0.,1.21430643318376E-14));
+#826=CARTESIAN_POINT('',(25.4,0.,1.21430643318376E-14));
+#827=CARTESIAN_POINT('',(76.073,0.,76.2));
+#828=CARTESIAN_POINT('',(76.073,0.,76.2));
+#829=CARTESIAN_POINT('',(76.073,0.,101.6));
+#830=CARTESIAN_POINT('',(76.073,0.,0.127000000000026));
+#831=CARTESIAN_POINT('',(-9.62964972193618E-32,0.,0.126999999999988));
+#832=CARTESIAN_POINT('',(-25.4,0.,0.126999999999988));
+#833=CARTESIAN_POINT('',(0.,0.,-7.26683026080672));
+#834=CARTESIAN_POINT('',(76.073,0.,76.2));
+#835=CARTESIAN_POINT('',(76.073,0.,76.2));
+#836=CARTESIAN_POINT('',(76.073,0.,99.949));
+#837=CARTESIAN_POINT('',(76.073,0.,0.127000000000026));
+#838=CARTESIAN_POINT('',(-9.62964972193618E-32,0.,0.126999999999988));
+#839=CARTESIAN_POINT('',(-23.749,0.,0.126999999999988));
+#840=CARTESIAN_POINT('',(0.,0.,-7.26683026080672));
+#841=CARTESIAN_POINT('',(0.,0.,0.));
+#842=CARTESIAN_POINT('',(838.2,-8.62468701161088E-14,76.2000000000001));
+#843=CARTESIAN_POINT('',(914.4,-1.5426903878869E-13,787.4));
+#844=CARTESIAN_POINT('',(-70.7668302608067,1.96571103209653E-30,9.43689570931383E-13));
+#845=CARTESIAN_POINT('',(76.2,1.96571103209653E-30,-1.10424753702407E-12));
+#846=CARTESIAN_POINT('',(76.2,1.96571103209653E-30,25.3999999999989));
+#847=CARTESIAN_POINT('',(-1.43168537993691E-14,-4.33680868994201E-16,-4.24242171002803E-14));
+#848=CARTESIAN_POINT('',(1.25251877955614E-13,25.4,9.71445146547012E-14));
+#849=CARTESIAN_POINT('',(-1.43168537993691E-14,-25.4,-4.24242171002803E-14));
+#850=CARTESIAN_POINT('',(-1.43168537993691E-14,-4.33680868994201E-16,-4.24242171002803E-14));
+#851=CARTESIAN_POINT('',(-76.2,1.96571103209653E-30,1.0193991028235E-12));
+#852=CARTESIAN_POINT('',(-76.2,1.96571103209653E-30,-25.3999999999989));
+#853=CARTESIAN_POINT('',(-23.749,0.,76.2));
+#854=CARTESIAN_POINT('',(0.,0.,76.2));
+#855=CARTESIAN_POINT('',(-23.749,0.,76.2));
+#856=CARTESIAN_POINT('',(-2.8753632705178E-14,-8.67361737988404E-16,76.2));
+#857=CARTESIAN_POINT('',(-25.4000000000001,-8.67361737988404E-16,76.2));
+#858=CARTESIAN_POINT('',(-1.47559197909238E-14,-8.67361737988404E-16,9.71445146547012E-14));
+#859=CARTESIAN_POINT('',(-70.7668302608067,1.96571103209653E-30,9.43689570931383E-13));
+#860=CARTESIAN_POINT('',(76.2,0.,1.34049499275476E-13));
+#861=CARTESIAN_POINT('',(76.2,0.,23.749));
+#862=CARTESIAN_POINT('',(-76.2,0.,2.48065457064683E-13));
+#863=CARTESIAN_POINT('',(-76.2,0.,-23.7489999999991));
+#864=CARTESIAN_POINT('',(-1.43168537993691E-14,-4.33680868994201E-16,-4.24242171002803E-14));
+#865=CARTESIAN_POINT('',(1.25251877955614E-13,-23.749,9.71445146547012E-14));
+#866=CARTESIAN_POINT('',(-1.43168537993691E-14,23.749,-4.24242171002803E-14));
+#867=CARTESIAN_POINT('',(-1.43168537993691E-14,-4.33680868994201E-16,-4.24242171002803E-14));
+#868=CARTESIAN_POINT('',(-1.47559197909238E-14,-8.67361737988404E-16,9.71445146547012E-14));
+#869=CARTESIAN_POINT('',(-76.2,0.,-23.7489999999991));
+#870=CARTESIAN_POINT('',(76.2,0.,23.749));
+#871=CARTESIAN_POINT('',(609.6,-7.82026234956871E-14,863.6));
+#872=CARTESIAN_POINT('',(609.599999999989,1.81567576681962E-13,76.2000000000001));
+#873=CARTESIAN_POINT('',(609.600000000001,-4.25555852104498E-14,939.8));
+#874=CARTESIAN_POINT('',(0.,0.,0.));
+#875=CARTESIAN_POINT('',(1.84889274661175E-29,457.199999999989,0.));
+#876=CARTESIAN_POINT('',(23.749,457.199999999989,0.));
+#877=CARTESIAN_POINT('',(0.,0.,0.));
+#878=CARTESIAN_POINT('',(23.749,0.,0.));
+#879=CARTESIAN_POINT('',(1.84889274661175E-29,457.199999999989,0.));
+#880=CARTESIAN_POINT('',(1.84889274661175E-29,457.199999999989,0.));
+#881=CARTESIAN_POINT('',(25.4,457.199999999989,0.));
+#882=CARTESIAN_POINT('',(0.,0.,0.));
+#883=CARTESIAN_POINT('',(0.,0.,0.));
+#884=CARTESIAN_POINT('',(25.4,0.,0.));
+#885=CARTESIAN_POINT('',(0.,0.,0.));
+#886=CARTESIAN_POINT('',(76.2,-3.46944695195361E-15,76.2));
+#887=CARTESIAN_POINT('',(-4.93038065763132E-29,0.,0.));
+#888=CARTESIAN_POINT('',(9.86076131526265E-29,635.,0.));
+#889=CARTESIAN_POINT('',(23.749,635.,0.));
+#890=CARTESIAN_POINT('',(-4.93038065763132E-29,0.,0.));
+#891=CARTESIAN_POINT('',(23.749,0.,0.));
+#892=CARTESIAN_POINT('',(9.86076131526265E-29,635.,0.));
+#893=CARTESIAN_POINT('',(9.86076131526265E-29,635.,0.));
+#894=CARTESIAN_POINT('',(25.4,635.,0.));
+#895=CARTESIAN_POINT('',(-4.93038065763132E-29,0.,0.));
+#896=CARTESIAN_POINT('',(-4.93038065763132E-29,0.,0.));
+#897=CARTESIAN_POINT('',(25.4,0.,0.));
+#898=CARTESIAN_POINT('',(-4.93038065763132E-29,0.,0.));
+#899=CARTESIAN_POINT('',(609.599999999999,-5.89805981832114E-14,787.4));
+#900=CARTESIAN_POINT('',(0.,0.,0.));
+#901=CARTESIAN_POINT('',(0.,152.527000000011,0.));
+#902=CARTESIAN_POINT('',(23.749,152.527000000011,0.));
+#903=CARTESIAN_POINT('',(0.,0.,0.));
+#904=CARTESIAN_POINT('',(23.749,0.,0.));
+#905=CARTESIAN_POINT('',(0.,152.527000000011,0.));
+#906=CARTESIAN_POINT('',(0.,152.527000000011,0.));
+#907=CARTESIAN_POINT('',(25.4,152.527000000011,0.));
+#908=CARTESIAN_POINT('',(0.,0.,0.));
+#909=CARTESIAN_POINT('',(0.,0.,0.));
+#910=CARTESIAN_POINT('',(25.4,0.,0.));
+#911=CARTESIAN_POINT('',(0.,0.,0.));
+#912=CARTESIAN_POINT('',(685.799999999989,1.83880688453542E-13,76.2));
+#913=CARTESIAN_POINT('',(0.,0.,0.));
+#914=CARTESIAN_POINT('',(0.,-635.127,0.));
+#915=CARTESIAN_POINT('',(23.749,-635.127,0.));
+#916=CARTESIAN_POINT('',(0.,0.,0.));
+#917=CARTESIAN_POINT('',(23.749,-1.46364512797608E-31,0.));
+#918=CARTESIAN_POINT('',(0.,-635.127,0.));
+#919=CARTESIAN_POINT('',(0.,-635.127,0.));
+#920=CARTESIAN_POINT('',(25.4,-635.127,0.));
+#921=CARTESIAN_POINT('',(0.,0.,0.));
+#922=CARTESIAN_POINT('',(0.,0.,0.));
+#923=CARTESIAN_POINT('',(25.4,1.56539585879795E-31,0.));
+#924=CARTESIAN_POINT('',(0.,0.,0.));
+#925=CARTESIAN_POINT('',(914.4,-1.14491749414469E-13,152.4));
+#926=CARTESIAN_POINT('',(0.,0.,0.));
+#927=CARTESIAN_POINT('',(7.39557098644699E-29,-152.527,0.));
+#928=CARTESIAN_POINT('',(23.749,-152.527,0.));
+#929=CARTESIAN_POINT('',(0.,0.,0.));
+#930=CARTESIAN_POINT('',(23.749,0.,0.));
+#931=CARTESIAN_POINT('',(7.39557098644699E-29,-152.527,0.));
+#932=CARTESIAN_POINT('',(7.39557098644699E-29,-152.527,0.));
+#933=CARTESIAN_POINT('',(25.4,-152.527,0.));
+#934=CARTESIAN_POINT('',(0.,0.,0.));
+#935=CARTESIAN_POINT('',(0.,0.,0.));
+#936=CARTESIAN_POINT('',(25.4,0.,0.));
+#937=CARTESIAN_POINT('',(0.,0.,0.));
+#938=CARTESIAN_POINT('',(838.327,-1.49186218934005E-13,863.6));
+#939=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#487,#488,
+#489,#490,#491,#492,#493),#940);
+#940=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#948))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('Asm1','TOP_LEVEL_ASSEMBLY_PART')
+);
+#941=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#949))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('2WCL-2.0-316-7-01','COMPONENT_PART')
+);
+#942=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#950))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('B7WWW-2.0-304-7-01','COMPONENT_PART')
+);
+#943=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#951))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('RNT-304-2.000-0.065-WL-7_oa_0','COMPONENT_PART')
+);
+#944=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#952))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('RNT-304-2.000-0.065-WL-7_oa_1','COMPONENT_PART')
+);
+#945=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#953))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('RNT-304-2.000-0.065-WL-7_oa_2','COMPONENT_PART')
+);
+#946=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#954))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('RNT-304-2.000-0.065-WL-7_oa_3','COMPONENT_PART')
+);
+#947=(
+GEOMETRIC_REPRESENTATION_CONTEXT(3)
+GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#955))
+GLOBAL_UNIT_ASSIGNED_CONTEXT((#958,#957,#956))
+REPRESENTATION_CONTEXT('RNT-304-2.000-0.065-WL-7_oa_4','COMPONENT_PART')
+);
+#948=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#949=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#950=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#951=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#952=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#953=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#954=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#955=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.005),#958,
+'DISTANCE_ACCURACY_VALUE','Maximum Tolerance applied to model');
+#956=(
+NAMED_UNIT(*)
+SI_UNIT($,.STERADIAN.)
+SOLID_ANGLE_UNIT()
+);
+#957=(
+NAMED_UNIT(*)
+PLANE_ANGLE_UNIT()
+SI_UNIT($,.RADIAN.)
+);
+#958=(
+LENGTH_UNIT()
+NAMED_UNIT(*)
+SI_UNIT(.MILLI.,.METRE.)
+);
+#959=PRODUCT_DEFINITION_SHAPE('','',#978);
+#960=PRODUCT_DEFINITION_SHAPE('','',#979);
+#961=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#33);
+#962=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#34);
+#963=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#35);
+#964=PRODUCT_DEFINITION_SHAPE('','',#980);
+#965=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#36);
+#966=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#37);
+#967=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#38);
+#968=PRODUCT_DEFINITION_SHAPE('','',#981);
+#969=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#39);
+#970=PRODUCT_DEFINITION_SHAPE('','',#982);
+#971=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#40);
+#972=PRODUCT_DEFINITION_SHAPE('','',#983);
+#973=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#41);
+#974=PRODUCT_DEFINITION_SHAPE('','',#984);
+#975=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#42);
+#976=PRODUCT_DEFINITION_SHAPE('','',#985);
+#977=PRODUCT_DEFINITION_SHAPE(' ','NAUO PRDDFN',#43);
+#978=PRODUCT_DEFINITION('','',#994,#986);
+#979=PRODUCT_DEFINITION('','',#995,#987);
+#980=PRODUCT_DEFINITION('','',#996,#988);
+#981=PRODUCT_DEFINITION('','',#997,#989);
+#982=PRODUCT_DEFINITION('','',#998,#990);
+#983=PRODUCT_DEFINITION('','',#999,#991);
+#984=PRODUCT_DEFINITION('','',#1000,#992);
+#985=PRODUCT_DEFINITION('','',#1001,#993);
+#986=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#987=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#988=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#989=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#990=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#991=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#992=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#993=PRODUCT_DEFINITION_CONTEXT('',#1035,'design');
+#994=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1010,
+ .NOT_KNOWN.);
+#995=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1011,
+ .NOT_KNOWN.);
+#996=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1012,
+ .NOT_KNOWN.);
+#997=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1013,
+ .NOT_KNOWN.);
+#998=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1014,
+ .NOT_KNOWN.);
+#999=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1015,
+ .NOT_KNOWN.);
+#1000=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1016,
+ .NOT_KNOWN.);
+#1001=PRODUCT_DEFINITION_FORMATION_WITH_SPECIFIED_SOURCE('','',#1017,
+ .NOT_KNOWN.);
+#1002=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1010));
+#1003=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1011));
+#1004=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1012));
+#1005=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1013));
+#1006=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1014));
+#1007=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1015));
+#1008=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1016));
+#1009=PRODUCT_RELATED_PRODUCT_CATEGORY('','',(#1017));
+#1010=PRODUCT('Asm1','Asm1','Asm1',(#1026));
+#1011=PRODUCT('2WCL-2.0-316-7-01','2WCL-2.0-316-7-01',
+'2WCL-2.0-316-7-01',(#1027));
+#1012=PRODUCT('B7WWW-2.0-304-7-01','B7WWW-2.0-304-7-01',
+'B7WWW-2.0-304-7-01',(#1028));
+#1013=PRODUCT('RNT-304-2.000-0.065-WL-7_oa_0',
+'RNT-304-2.000-0.065-WL-7_oa_0','RNT-304-2.000-0.065-WL-7_oa_0',(#1029));
+#1014=PRODUCT('RNT-304-2.000-0.065-WL-7_oa_1',
+'RNT-304-2.000-0.065-WL-7_oa_1','RNT-304-2.000-0.065-WL-7_oa_1',(#1030));
+#1015=PRODUCT('RNT-304-2.000-0.065-WL-7_oa_2',
+'RNT-304-2.000-0.065-WL-7_oa_2','RNT-304-2.000-0.065-WL-7_oa_2',(#1031));
+#1016=PRODUCT('RNT-304-2.000-0.065-WL-7_oa_3',
+'RNT-304-2.000-0.065-WL-7_oa_3','RNT-304-2.000-0.065-WL-7_oa_3',(#1032));
+#1017=PRODUCT('RNT-304-2.000-0.065-WL-7_oa_4',
+'RNT-304-2.000-0.065-WL-7_oa_4','RNT-304-2.000-0.065-WL-7_oa_4',(#1033));
+#1018=PRODUCT_CATEGORY('','');
+#1019=PRODUCT_CATEGORY('','');
+#1020=PRODUCT_CATEGORY('','');
+#1021=PRODUCT_CATEGORY('','');
+#1022=PRODUCT_CATEGORY('','');
+#1023=PRODUCT_CATEGORY('','');
+#1024=PRODUCT_CATEGORY('','');
+#1025=PRODUCT_CATEGORY('','');
+#1026=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1027=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1028=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1029=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1030=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1031=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1032=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1033=PRODUCT_CONTEXT('',#1035,'mechanical');
+#1034=APPLICATION_PROTOCOL_DEFINITION('international standard',
+'automotive_design',2010,#1035);
+#1035=APPLICATION_CONTEXT(
+'core data for automotive mechanical design processes');
+ENDSEC;
+END-ISO-10303-21;
index b4e7d0a52888f51b534268a04ea1e0e89f6727f6..22bc7bf3024917bfc087bb321dc9fe93e33f2ae0 100755 (executable)
@@ -56,4 +56,6 @@ SET(TEST_NAMES
   TestImportPart_Multiple.py
   TestImportPart_ToEmptyPart.py
   TestImportPart_ToEmptyPartSet.py
-)
\ No newline at end of file
+  TestStep1.py
+  TestStep2.py
+)
index 416098c8f3e71f674ce6f250497d5799279a595c..a6888941e26066095b401647a1b46401545db0ec 100644 (file)
@@ -50,7 +50,6 @@ INCLUDE_DIRECTORIES(
   ../Events
   ../Config
   ../ModuleBase
-  ${OpenCASCADE_INCLUDE_DIR}
 )
 
 SET(PROJECT_LIBRARIES
index f2816d3700d8418d26674520da78f74fb9d32f47..15d894abd505683424093cd585b61abbd20f2500 100644 (file)
@@ -342,9 +342,9 @@ Standard_Boolean PreciseBoundingBox(const TopoDS_Shape &theShape, Bnd_Box &theBo
 
 //=================================================================================================
 bool GetBoundingBox(const std::shared_ptr<GeomAPI_Shape>& theShape,
-                    Standard_Real& theXmin,Standard_Real& theXmax,
-                    Standard_Real& theYmin,Standard_Real& theYmax,
-                    Standard_Real& theZmin,Standard_Real& theZmax,
+                    double& theXmin, double& theXmax,
+                    double& theYmin, double& theYmax,
+                    double& theZmin, double& theZmax,
                     std::string& theError)
 {
   #ifdef _DEBUG
index 5fc7fb6388ebcb601984d0d2c4b767f5dc32767c..575d5061d26dceb8778095894f679fc0e37b04da 100644 (file)
@@ -22,7 +22,6 @@
 
 #include <GeomAlgoAPI.h>
 #include <GeomAPI_Shape.h>
-#include <Standard_TypeDef.hxx>
 
 /// get the boundin box of theshape.
   /// \param theShape   the shape
@@ -36,9 +35,9 @@
   /// \param theError  error
 GEOMALGOAPI_EXPORT
 bool GetBoundingBox(const std::shared_ptr<GeomAPI_Shape>& theShape,
-                    Standard_Real& theXmin,Standard_Real& theXmax,
-                    Standard_Real& theYmin,Standard_Real& theYmax,
-                    Standard_Real& theZmin,Standard_Real& theZmax,
+                    double& theXmin, double& theXmax,
+                    double& theYmin, double& theYmax,
+                    double& theZmin, double& theZmax,
                     std::string& theError);
 
 #endif
index 3abbe482715b820b2dd9cfdd70292a8f7fd8b363..224840ec50b989f833cfc5dadecd8ac266c5fd1e 100644 (file)
 
 #include "GeomAlgoAPI_Tools.h"
 
-#include <TopoDS_Shape.hxx>
+#include <GeomAPI_Shape.h>
+#include <ModelAPI_ResultBody.h>
+#include <ModelAPI_AttributeIntArray.h>
 
-// OOCT includes
-#include <IFSelect_ReturnStatus.hxx>
-#include <STEPControl_Writer.hxx>
+#include <TDocStd_Document.hxx>
+#include <TDataStd_Name.hxx>
+#include <XCAFDoc_DocumentTool.hxx>
+#include <XCAFDoc_ShapeTool.hxx>
+#include <XCAFDoc_ColorTool.hxx>
+#include <STEPCAFControl_Writer.hxx>
 #include <Interface_Static.hxx>
+#include <Quantity_Color.hxx>
 
-bool STEPExport(const std::string& theFileName,
-                const std::string& /*theFormatName*/,
-                const std::shared_ptr<GeomAPI_Shape>& theShape,
-                std::string& theError)
+// a structure to manage step document exported attributes
+struct GeomAlgoAPI_STEPAttributes {
+  bool myHasColor; ///< true if color is defined
+  Quantity_Color myColor;
+  std::wstring myName;
+  Handle(XCAFDoc_ShapeTool) myShapeTool;
+  Handle(XCAFDoc_ColorTool) myColorTool;
+
+  GeomAlgoAPI_STEPAttributes(const TDF_Label& theMain) : myHasColor(false)
+  {
+    myShapeTool = XCAFDoc_DocumentTool::ShapeTool(theMain);
+    myShapeTool->SetAutoNaming(Standard_False);
+    myColorTool = XCAFDoc_DocumentTool::ColorTool(theMain);
+  }
+};
+
+static TDF_Label exportShape(const GeomShapePtr theShape, GeomAlgoAPI_STEPAttributes& theAttrs,
+  const GeomShapePtr theFatherShape, TDF_Label& theFaterID) {
+  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
+  TDF_Label aShapeLab;
+  if (!theFaterID.IsNull()) { // make sub-component of father's assembly
+    gp_Trsf aFatherTrsf;
+    if (theFatherShape.get())
+      aFatherTrsf = theFatherShape->implPtr<TopoDS_Shape>()->Location().Transformation();
+    TopLoc_Location aLocation = aFatherTrsf.Inverted() * aShape.Location();
+    static const TopLoc_Location anEmptyLoc;
+    aShape.Location(anEmptyLoc);
+    aShapeLab = theAttrs.myShapeTool->AddShape(aShape, Standard_False);
+    TDF_Label aRetLabel = theAttrs.myShapeTool->AddComponent(theFaterID, aShapeLab, aLocation);
+    if (!aRetLabel.IsNull())
+      aRetLabel.ForgetAttribute(TDataStd_Name::GetID());
+  }
+  else { // make a single shape
+    aShapeLab = theAttrs.myShapeTool->AddShape(aShape, Standard_False);
+    TDF_Label aRefShapeLab;
+    if (theAttrs.myShapeTool->GetReferredShape(aShapeLab, aRefShapeLab))
+      aShapeLab = aRefShapeLab;
+  }
+  TDataStd_Name::Set(aShapeLab, TCollection_ExtendedString(theAttrs.myName.c_str()));
+  if (theAttrs.myHasColor) {
+    TDF_Label aColorLab = theAttrs.myColorTool->AddColor(theAttrs.myColor);
+    theAttrs.myColorTool->SetColor(aShapeLab, aColorLab, XCAFDoc_ColorGen);
+  }
+  return aShapeLab;
+}
+
+/// Returns the attributes of the result: names and color
+static void getAttributes(const ResultPtr& theResult, GeomAlgoAPI_STEPAttributes& theAttrs)
 {
-  #ifdef _DEBUG
-  std::cout << "Export STEP into file " << theFileName << std::endl;
-  #endif
+  theAttrs.myName = theResult->data()->name();
+  AttributeIntArrayPtr aColorAttr = theResult->data()->intArray(ModelAPI_Result::COLOR_ID());
+  if (aColorAttr.get() && aColorAttr->size() > 2) {
+    theAttrs.myHasColor = true;
+    theAttrs.myColor.SetValues(aColorAttr->value(0) / 255., aColorAttr->value(1) / 255.,
+                               aColorAttr->value(2) / 255., Quantity_TOC_RGB);
+  }
+  else
+    theAttrs.myHasColor = false;
+}
 
-  if (!theShape.get()) {
-    theError = "STEP Export failed: An invalid argument";
-    return false;
+/// Performs the whole result export: as an assembly or a single one, but with results attributes.
+static void putResult(const ResultPtr& theResult, const GeomShapePtr theFatherShape,
+  TDF_Label& theFaterID, GeomAlgoAPI_STEPAttributes& theAttrs)
+{
+  GeomShapePtr aShape = theResult->shape();
+  if (!aShape.get() || aShape->isNull())
+    return;
+  ResultBodyPtr aBody = std::dynamic_pointer_cast<ModelAPI_ResultBody>(theResult);
+  if (aBody.get() && aBody->numberOfSubs()) { // make an assembly
+    getAttributes(theResult, theAttrs);
+    TDF_Label aBodyID = exportShape(aShape, theAttrs, theFatherShape, theFaterID);
+    int aNumSubs = aBody->numberOfSubs();
+    for (int a = 0; a < aNumSubs; a++) {
+      ResultBodyPtr aSub = aBody->subResult(a);
+      if (!aSub->isDisabled())
+        putResult(aSub, aShape, aBodyID, theAttrs);
+    }
+  }
+  else { // a simple shape-body
+    getAttributes(theResult, theAttrs);
+    exportShape(aShape, theAttrs, theFatherShape, theFaterID);
   }
+}
 
-  try
-  {
-    // Set "C" numeric locale to save numbers correctly
-    GeomAlgoAPI_Tools::Localizer loc;
+bool STEPExport(const std::string& theFileName,
+                const std::list<std::shared_ptr<GeomAPI_Shape> >& theShapes,
+                const std::list<std::shared_ptr<ModelAPI_Result> >& theResults,
+                std::string& theError)
+{
+  theError = "";
+  // prepare XCAF document to store the whole data structure there
+  Handle(TDocStd_Document) aDoc = new TDocStd_Document("BinXCAF");
+
+  GeomAlgoAPI_STEPAttributes anAttrs(aDoc->Main());
 
-    IFSelect_ReturnStatus status ;
-    //VRV: OCC 4.0 migration
-    STEPControl_Writer aWriter;
-    Interface_Static::SetCVal("xstep.cascade.unit","M");
+  std::list<std::shared_ptr<GeomAPI_Shape> >::const_iterator aShape = theShapes.cbegin();
+  std::list<std::shared_ptr<ModelAPI_Result> >::const_iterator aResult = theResults.cbegin();
+  for (; aShape != theShapes.cend(); aShape++, aResult++) {
+    TDF_Label aNullLab;
+    if (aResult->get() && !(*aShape)->isSame((*aResult)->shape()))
+    { // simple sub-shape
+      getAttributes(*aResult, anAttrs);
+      exportShape(*aShape, anAttrs, GeomShapePtr(), aNullLab);
+    }
+    else { // whole result selection
+      putResult(*aResult, GeomShapePtr(), aNullLab, anAttrs);
+    }
+  }
+  // store the XCAF document to STEP file
+  try {
+    GeomAlgoAPI_Tools::Localizer aLocalizer; // Set "C" numeric locale to save numbers correctly
+    STEPCAFControl_Writer aWriter;
+    Interface_Static::SetCVal("xstep.cascade.unit", "M");
+    Interface_Static::SetIVal("write.step.nonmanifold", 0); // 1 don't allow to export assemly tree
     Interface_Static::SetCVal("write.step.unit", "M");
-    Interface_Static::SetIVal("write.step.nonmanifold", 1);
-    status = aWriter.Transfer(theShape->impl<TopoDS_Shape>(), STEPControl_AsIs);
-    //VRV: OCC 4.0 migration
-    if( status == IFSelect_RetDone )
-      status = aWriter.Write(theFileName.c_str());
 
-    // Return previous locale
-    if( status == IFSelect_RetDone )
-      return true;
+    auto aStatus = aWriter.Transfer(aDoc, STEPControl_AsIs);
+    if (aStatus == IFSelect_RetDone)
+      aStatus = aWriter.Write(theFileName.c_str());
+    if (aStatus != IFSelect_RetDone)
+      theError = "STEP Export failed";
   }
-  catch (Standard_Failure)
-  {
+  catch (Standard_Failure exception) {
     theError = "Exception catched in STEPExport";
   }
-  return false;
+  return theError.empty();
 }
index 43db04f9d2b54148d25199aeef12ea543002f0c3..ce9928f69e1ad76e4735b26c1539f40cb52c9b39 100644 (file)
 #include <GeomAlgoAPI.h>
 
 #include <string>
+#include <list>
+#include <memory>
 
-#include <GeomAPI_Shape.h>
+class GeomAPI_Shape;
+class ModelAPI_Result;
 
-/// Implementation of the export STEP files algorithms
+/// Implementation of the export STEP files algorithms.
+/// In order to supposrt names and colors experted, theShapes list corresponds to theResults
+/// list elements one by one.
 GEOMALGOAPI_EXPORT
 bool STEPExport(const std::string& theFileName,
-                const std::string& theFormatName,
-                const std::shared_ptr<GeomAPI_Shape>& theShape,
+                const std::list<std::shared_ptr<GeomAPI_Shape> >& theShapes,
+                const std::list<std::shared_ptr<ModelAPI_Result> >& theResults,
                 std::string& theError);
 
 #endif /* GEOMALGOAPI_STEPEXPORT_H_ */
index 2d6f6ac602c1f36f1375549c0ef4726278ca1009..3daecc1b64424fc7bef3e3e8e3edc4aabe42f0e3 100644 (file)
@@ -40,6 +40,7 @@
 #include <TopoDS.hxx>
 #include <Transfer_TransientProcess.hxx>
 #include <TransferBRep.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 
 #include <XCAFApp_Application.hxx>
 #include <XCAFDoc_DocumentTool.hxx>
 #include <XCAFDoc_ShapeTool.hxx>
 #include <XSControl_TransferReader.hxx>
 #include <XSControl_WorkSession.hxx>
+#include <XCAFDoc_ColorTool.hxx>
+#include <XCAFDoc_MaterialTool.hxx>
 
 #include <Locale_Convert.h>
 
+// read geometry
+std::shared_ptr<GeomAPI_Shape> setGeom(const Handle(XCAFDoc_ShapeTool) &shapeTool,
+  const TDF_Label &theLabel,
+  std::string& theError);
+
+/// read attributs for  label
+void setShapeAttributes(const Handle(XCAFDoc_ShapeTool) &theShapeTool,
+  const Handle(XCAFDoc_ColorTool) &theColorTool,
+  const Handle(XCAFDoc_MaterialTool) &TheMaterialTool,
+  const TDF_Label &theLabel,
+  const TopLoc_Location &theLoc,
+  std::shared_ptr<ModelAPI_ResultBody> theResultBody,
+  std::map< std::wstring, std::list<std::wstring>> &theMaterialShape,
+  bool theIsRef);
+
+// store Materiel for theShapeLabel in the map theMaterialShape
+void storeMaterial(std::shared_ptr<ModelAPI_ResultBody> theResultBody,
+  const Handle(Standard_Transient) &theEnti,
+  const TopTools_IndexedMapOfShape &theIndices,
+  const Handle(Transfer_TransientProcess) &theTP,
+  const TDF_Label &theShapeLabel,
+  std::map< std::wstring, std::list<std::wstring>> &theMaterialShape);
+
 //=============================================================================
 TopoDS_Shape getShape(const Handle(Standard_Transient) &theEnti,
                       const Handle(Transfer_TransientProcess) &theTP)
@@ -89,7 +115,7 @@ std::shared_ptr<GeomAPI_Shape> readAttributes(STEPCAFControl_Reader &theReader,
   setShapeAttributes(shapeTool, colorTool, materialTool, mainLabel,
                      TopLoc_Location(),theResultBody,theMaterialShape,false);
 
-  std::shared_ptr<GeomAPI_Shape> ageom =  setgeom(shapeTool,mainLabel,theError);
+  std::shared_ptr<GeomAPI_Shape> ageom =  setGeom(shapeTool,mainLabel,theError);
 
   STEPControl_Reader aReader = theReader.ChangeReader();
 
@@ -119,7 +145,7 @@ std::shared_ptr<GeomAPI_Shape> readAttributes(STEPCAFControl_Reader &theReader,
 }
 
 //=============================================================================
-std::shared_ptr<GeomAPI_Shape> setgeom(const Handle(XCAFDoc_ShapeTool) &theShapeTool,
+std::shared_ptr<GeomAPI_Shape> setGeom(const Handle(XCAFDoc_ShapeTool) &theShapeTool,
                                        const TDF_Label& /*theLabel*/,
                                        std::string& theError)
 {
@@ -386,4 +412,3 @@ void storeMaterial( std::shared_ptr<ModelAPI_ResultBody>    theResultBody,
     }
   }
 }
-
index 621bdaa4eef0268f7bba18d80c223400b496bf4c..7b0d467d36a3e2101b4b1feb6068d11401c0e748 100644 (file)
 
 #include <GeomAlgoAPI.h>
 
-#include <XCAFDoc_ColorTool.hxx>
-#include <XCAFDoc_MaterialTool.hxx>
-
 #include <STEPCAFControl_Reader.hxx>
 
 #include <ModelAPI_ResultBody.h>
-#include <TopTools_IndexedMapOfShape.hxx>
 
- /// read Attributs of step file
- GEOMALGOAPI_EXPORT
- std::shared_ptr<GeomAPI_Shape>  readAttributes(STEPCAFControl_Reader &theReader,
-                                 std::shared_ptr<ModelAPI_ResultBody> theResultBody,
+/// read Attributs of step file
+std::shared_ptr<GeomAPI_Shape>  readAttributes(STEPCAFControl_Reader &theReader,
+                                std::shared_ptr<ModelAPI_ResultBody> theResultBody,
                                  const bool  theMaterials,
                                  std::map< std::wstring,std::list<std::wstring>> &theMaterialShape,
                                  std::string& theError);
-/// read attributs for  label
- GEOMALGOAPI_EXPORT
- void setShapeAttributes(const Handle(XCAFDoc_ShapeTool) &theShapeTool,
-                         const Handle(XCAFDoc_ColorTool) &theColorTool,
-                         const Handle(XCAFDoc_MaterialTool) &TheMaterialTool,
-                         const TDF_Label &theLabel,
-                         const TopLoc_Location &theLoc,
-                         std::shared_ptr<ModelAPI_ResultBody> theResultBody,
-                         std::map< std::wstring, std::list<std::wstring>> &theMaterialShape,
-                         bool theIsRef);
-
-// read geometry
-GEOMALGOAPI_EXPORT
-std::shared_ptr<GeomAPI_Shape> setgeom(const Handle(XCAFDoc_ShapeTool) &shapeTool,
-                                       const TDF_Label &theLabel,
-                                       std::string& theError);
-
-// store Materiel for theShapeLabel in the map theMaterialShape
-GEOMALGOAPI_EXPORT
-void storeMaterial(std::shared_ptr<ModelAPI_ResultBody> theResultBody,
-                   const Handle(Standard_Transient) &theEnti,
-                   const TopTools_IndexedMapOfShape &theIndices,
-                   const Handle(Transfer_TransientProcess) &theTP,
-                   const TDF_Label &theShapeLabel,
-                   std::map< std::wstring, std::list<std::wstring>> &theMaterialShape);
 
 #endif /* GEOMALGOAPI_STEPIMPORTXCAF_H_ */
index 94377cb83d4ec739c4f3d08f327ebb263d337f4d..b0427777b1eb5911b422df90e755e3ff9222890e 100644 (file)
@@ -529,7 +529,7 @@ void Model_BodyBuilder::generated(const GeomShapePtr& theOldShape,
   if (aNewShapeType == TopAbs_WIRE || aNewShapeType == TopAbs_SHELL) {
     // TODO: This is a workaround. New shape should be only vertex, edge or face.
     TopAbs_ShapeEnum aShapeTypeToExplore = aNewShapeType == TopAbs_WIRE ? TopAbs_EDGE : TopAbs_FACE;
-    aTag = TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG;
+    aTag = aNewShapeType == TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG;
     for (TopExp_Explorer anExp(aNewShape, aShapeTypeToExplore); anExp.More(); anExp.Next()) {
       builder(aTag)->Generated(anOldShape, anExp.Current());
     }
@@ -750,7 +750,7 @@ void Model_BodyBuilder::loadGeneratedShapes(const GeomMakeShapePtr& theAlgo,
         // TODO: This is a workaround. New shape should be only edge or face.
         TopAbs_ShapeEnum aShapeTypeToExplore = aNewShapeType == TopAbs_WIRE ? TopAbs_EDGE
                                                                             : TopAbs_FACE;
-        int aTag = TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG;
+        int aTag = aNewShapeType == TopAbs_WIRE ? GENERATED_EDGES_TAG : GENERATED_FACES_TAG;
         for (TopExp_Explorer anExp(aNewShape_, aShapeTypeToExplore); anExp.More(); anExp.Next()) {
           builder(aTag)->Generated(anOldSubShape_, anExp.Current());
           // store information about the external document reference to restore old shape on open
index 3aa8452ece4844c1228abfeaef8d91b8140edc21..72b11c77e8565323ebe981df5148813a66346818 100644 (file)
 #include <OSD_Path.hxx>
 #include <OSD_Protection.hxx>
 
-#ifdef TINSPECTOR
-#include <CDF_Directory.hxx>
-#endif
-
 #include <UTL.hxx>
 
 #include <climits>
@@ -111,13 +107,10 @@ static const Standard_GUID kEXTERNAL_SHAPE_REF("9aa5dd14-6d34-4a8d-8786-05842fd7
 Model_Document::Model_Document(const int theID, const std::string theKind)
     : myID(theID),
       myKind(theKind),
-      myDoc(new TDocStd_Document("BinOcaf")),  // binary OCAF format
       myIsActive(false),
       myIsSetCurrentFeature(false)
 {
-#ifdef TINSPECTOR
-  ModelAPI_Session::get()->application()->NewDocument("BinOcaf", myDoc);
-#endif
+  Model_Application::getApplication()->NewDocument("BinOcaf", myDoc);
   myObjs = new Model_Objects(myDoc->Main());
   myDoc->SetUndoLimit(UNDO_LIMIT);
   myTransactionSave = 0;
index 5456d832e98d199aa678f4724d925883d2bfba62..6071964562b64a637a18e8aedb50214109f339b0 100644 (file)
@@ -21,7 +21,6 @@
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Plugin.h>
 #include <Model_Data.h>
-#include <Model_Document.h>
 #include <Model_Objects.h>
 #include <Model_Application.h>
 #include <Model_Events.h>
@@ -674,3 +673,10 @@ void Model_Session::blockAutoUpdate(const bool theBlock)
     }
   }
 }
+
+#ifdef TINSPECTOR
+Handle(TDocStd_Application) Model_Session::application()
+{
+  return Model_Application::getApplication();
+}
+#endif
\ No newline at end of file
index 9dc711aba5f61f1ae34a9f0f30f7de24f60c1a9e..f01909bf769a272dc5e879ceff066f89b98e843d 100644 (file)
@@ -28,7 +28,7 @@
 #include <map>
 
 #ifdef TINSPECTOR
-#include "Model_Application.h"
+#include <TDocStd_Application.hxx>
 #endif
 
 class Model_Document;
@@ -163,9 +163,7 @@ class Model_Session : public ModelAPI_Session, public Events_Listener
   MODEL_EXPORT virtual void blockAutoUpdate(const bool theBlock);
 
 #ifdef TINSPECTOR
-  MODEL_EXPORT virtual Handle(TDocStd_Application) application() {
-    return Model_Application::getApplication();
-  }
+  MODEL_EXPORT virtual Handle(TDocStd_Application) application();
 #endif
 
  protected:
index 058e2de5161b1240a12ccb12136d85cf7e9bccca..bc53d70429272c4402e9e354c4a897127cdfb91a 100644 (file)
@@ -124,10 +124,6 @@ SET(PROJECT_LIBRARIES
 SET(CMAKE_SWIG_FLAGS -threads -w325,321,362,383,302,403,451,473)
 ADD_DEFINITIONS(-DMODELAPI_EXPORTS)
 
-IF(TKTInspector)
-    ADD_DEFINITIONS(-DTINSPECTOR)
-ENDIF()
-
 ADD_LIBRARY(ModelAPI SHARED ${PROJECT_SOURCES} ${PROJECT_HEADERS})
 SET_TARGET_PROPERTIES(ModelAPI PROPERTIES LINKER_LANGUAGE CXX)
 TARGET_LINK_LIBRARIES(ModelAPI ${PROJECT_LIBRARIES})
@@ -137,7 +133,6 @@ INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/Config
                     ${PROJECT_SOURCE_DIR}/src/GeomAPI
                     ${PROJECT_SOURCE_DIR}/src/GeomAlgoAPI
                     ${PROJECT_SOURCE_DIR}/src/Locale
-                    ${OpenCASCADE_INCLUDE_DIR}
 )
 
 
index 4a8caa8e470fc83ba30c9b058e20aaf27ee92c40..43cfc4d0c9b78b796bde7a973157f370b5bf0c04 100644 (file)
@@ -472,7 +472,8 @@ const ListOfShape& ModelAPI_ShapesFailedMessage::shapes() const
 }
 
 /// Creates an empty message
-ModelAPI_CheckConstraintsMessage::ModelAPI_CheckConstraintsMessage(const Events_ID theID, const void* theSender)
+ModelAPI_CheckConstraintsMessage::ModelAPI_CheckConstraintsMessage(
+  const Events_ID theID, const void* theSender)
   :Events_Message(theID, theSender)
 {
 }
index 277cc7db96d5b2c319f9a18713330132fcebd534..0802986fd84e395c6b95e3cd55bc0ff5ca31b91f 100644 (file)
@@ -668,7 +668,8 @@ class ModelAPI_CheckConstraintsMessage : public Events_Message
 {
 public:
   /// Creates an empty message
-  MODELAPI_EXPORT ModelAPI_CheckConstraintsMessage(const Events_ID theID, const void* theSender = 0);
+  MODELAPI_EXPORT ModelAPI_CheckConstraintsMessage(
+    const Events_ID theID, const void* theSender = 0);
   /// The virtual destructor
   MODELAPI_EXPORT virtual ~ModelAPI_CheckConstraintsMessage();
 
index ff65c45bad4f3e8db00f77655f9c550733d40100..42739259ca96f863d932a4b27af4672d54956de9 100644 (file)
 #include <list>
 #include <memory>
 
-#ifdef TINSPECTOR
-#include <Standard_Handle.hxx>
-#include <TDocStd_Application.hxx>
-#endif
-
 class ModelAPI_Feature;
 class ModelAPI_Plugin;
 class ModelAPI_Document;
@@ -146,10 +141,6 @@ class MODELAPI_EXPORT ModelAPI_Session
   /// Set state of the auto-update of features result in the application
   virtual void blockAutoUpdate(const bool theBlock) = 0;
 
-#ifdef TINSPECTOR
-  virtual Handle(TDocStd_Application) application() = 0;
-#endif
-
  protected:
   /// Sets the session interface implementation (once per application launch)
   static void setSession(std::shared_ptr<ModelAPI_Session> theManager);
index b0100f89b48d5ee2bff2a3e9f8e36f339da2e7b3..d8e270da4d065da3c737de6d59f4391638ebc454 100644 (file)
@@ -58,7 +58,6 @@ SET(PROJECT_LIBRARIES
   Locale
   ModelAPI
   ModelGeomAlgo
-  ModuleBase
 )
 
 ADD_DEFINITIONS(-DMODELHIGHAPI_EXPORTS -DWNT)
@@ -88,9 +87,7 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/Locale
   ${PROJECT_SOURCE_DIR}/src/ModelAPI
   ${PROJECT_SOURCE_DIR}/src/ModelGeomAlgo
-  ${PROJECT_SOURCE_DIR}/src/ModuleBase
   ${PROJECT_SOURCE_DIR}/src/PartSetPlugin
-  ${OpenCASCADE_INCLUDE_DIR}
 )
 
 set(SWIG_MODULE_ModelHighAPI_EXTRA_DEPS
index bcd3a206922c42784610015cd7ac8f446cca4503..a7a84cefd3de6c7760fb546e721702ce617d9058 100644 (file)
 
 #include <PartSetPlugin_Part.h>
 
-#include <OSD_OpenFile.hxx>
-
 #include <fstream>
+#include <iomanip>
+#include <cctype>
+#include <cmath>
 
 // ===========    Implementation of storage of dumped data    ===========
 static const int THE_DUMP_PRECISION = 16;
@@ -260,8 +261,7 @@ void ModelHighAPI_Dumper::DumpStorage::restoreReservedBuffer()
 bool ModelHighAPI_Dumper::DumpStorage::exportTo(const std::string& theFilename,
                                                 const ModulesSet& theUsedModules)
 {
-  std::ofstream aFile;
-  OSD_OpenStream(aFile, theFilename.c_str(), std::ofstream::out);
+  std::ofstream aFile(theFilename.c_str(), std::ofstream::out);
   if (!aFile.is_open())
     return false;
 
index c6c2f5f13be4d2965a2492ef1665a86c6c9264de..83653fece020cec6571aaa43da5d7ba6c885a237 100644 (file)
 #include <GeomDataAPI_Point.h>
 #include <GeomDataAPI_Point2D.h>
 #include <GeomAlgoAPI_ShapeTools.h>
+#include <GeomAPI_ShapeExplorer.h>
 #include <GeomAPI_Pnt.h>
 
 #include <Locale_Convert.h>
 
-#include <TopoDS_Shape.hxx>
-#include <TopExp_Explorer.hxx>
-
 #include <ios>
 #include <cmath>
+#include <sstream>
+#include <iomanip>
 
 #define PRECISION 6
 #define TOLERANCE (1.e-7)
@@ -403,19 +403,17 @@ std::string ModelHighAPI_FeatureStore::dumpAttr(const AttributePtr& theAttr) {
 }
 
 std::string ModelHighAPI_FeatureStore::dumpShape(std::shared_ptr<GeomAPI_Shape>& theShape) {
-  TopoDS_Shape aShape = theShape->impl<TopoDS_Shape>();
-  if (aShape.IsNull()) {
+  if (theShape->isNull()) {
     return "null";
   }
   std::ostringstream aResult;
   // output the number of shapes of different types
-  TopAbs_ShapeEnum aType = TopAbs_COMPOUND;
-  for(; aType <= TopAbs_VERTEX; aType = TopAbs_ShapeEnum((int)aType + 1)) {
-    TopExp_Explorer anExp(aShape, aType);
+  GeomAPI_Shape::ShapeType aType = GeomAPI_Shape::COMPOUND;
+  for (; aType <= GeomAPI_Shape::VERTEX; aType = GeomAPI_Shape::ShapeType((int)aType + 1)) {
+    GeomAPI_ShapeExplorer anExp(theShape, aType);
     int aCount = 0;
-    for(; anExp.More(); anExp.Next()) aCount++;
-    TopAbs::Print(aType, aResult);
-    aResult<<": "<<aCount<<std::endl;
+    for (; anExp.more(); anExp.next()) aCount++;
+    aResult << anExp.current()->shapeTypeStr().c_str() <<  ": " << aCount << std::endl;
   }
   // output the main characteristics
   double aVolume = GeomAlgoAPI_ShapeTools::volume(theShape);
index 15fa5659a63061aaf2f7bc618b577ff01f76dbb5..3d993de00183fbe3796704fa5185f7c33b54665c 100644 (file)
@@ -26,8 +26,6 @@
 #include <ModelAPI_ResultConstruction.h>
 #include <ModelAPI_Events.h>
 
-#include <ModuleBase_Tools.h>
-
 #include <cmath>
 #include <sstream>
 
@@ -108,9 +106,8 @@ void begin()
     aNbTransactions = aNbUndo;
     ++aTransactionID;
   }
-  static std::string anOperationPrefix(ModuleBase_Tools::translate("", "Operation").toStdString());
   std::ostringstream aTransactionName;
-  aTransactionName << anOperationPrefix << "_" << aTransactionID;
+  aTransactionName << "Operation_" << aTransactionID;
   ModelAPI_Session::get()->startOperation(aTransactionName.str());
 }
 
index 8b6bee8019a43abcc8f4705704b534f397a1a696..d47bc5988f4b17ed905abdd650398078a4b4a6c0 100644 (file)
@@ -177,7 +177,6 @@ INCLUDE_DIRECTORIES(
   ../GeomAlgoAPI
   ../GeomDataAPI
   ../SketcherPrs
-  ${OpenCASCADE_INCLUDE_DIR}
 )
 
 INSTALL(TARGETS SketchPlugin DESTINATION ${SHAPER_INSTALL_PLUGIN_FILES})
index 97b01c2179c1d56c23cfd25b67bfd06768113a9d..0c3241e5234fad7958c8df9fe74b775fb5acc0b3 100644 (file)
@@ -204,6 +204,7 @@ SET(PROJECT_INCLUDES
     ${PROJECT_SOURCE_DIR}/src/GeomAPI
     ${PROJECT_SOURCE_DIR}/src/ModuleBase
     ${PROJECT_SOURCE_DIR}/src/GeomAlgoAPI
+    ${PROJECT_SOURCE_DIR}/src/Model
     ${OpenCASCADE_INCLUDE_DIR}
     ${SUIT_INCLUDE})
 
index febea937bccd31377007d727e76eb45294ccd7a7..67a525988a1da920e62436083d96ecc693507b71 100644 (file)
 #include <iterator>
 
 #ifdef TINSPECTOR
+#include <Model_Session.h>
 #include <TDocStd_Application.hxx>
 #include <inspector/TInspector_Communicator.hxx>
 #include <inspector/VInspector_CallBack.hxx>
@@ -1860,7 +1861,10 @@ void XGUI_Workshop::onContextMenuCommand(const QString& theId, bool isChecked)
   }
 #ifdef TINSPECTOR
   else if (theId == "TINSPECTOR_VIEW") {
-    Handle(TDocStd_Application) anApplication = ModelAPI_Session::get()->application();
+    std::shared_ptr<Model_Session> aSession =
+      std::dynamic_pointer_cast<Model_Session>(ModelAPI_Session::get());
+
+    Handle(TDocStd_Application) anApplication = aSession->application();
     if (!anApplication.IsNull())
     {
       if (!MyTCommunicator)