Salome HOME
Add tutorial help page.
[modules/shaper.git] / src / ModelHighAPI / ModelHighAPI_Dumper.cpp
index 304a95b97e1b0c588d953123ee8f8c8c8414dec2..e7b03dd00fde6d212038676d32fbe982893f0f71 100644 (file)
@@ -25,6 +25,7 @@
 #include <GeomAPI_Pnt.h>
 #include <GeomAPI_Dir.h>
 #include <GeomAPI_ShapeExplorer.h>
+#include <GeomAlgoAPI_NExplode.h>
 
 #include <GeomDataAPI_Dir.h>
 #include <GeomDataAPI_Point.h>
@@ -164,6 +165,17 @@ const std::string& ModelHighAPI_Dumper::name(const EntityPtr& theEntity,
       if (aNbFeatures.first == anId && aNbFeatures.second < anId) {
         // name is not user-defined
         isDefaultName = true;
+
+        // check there are postponed features of this kind,
+        // dump their names, because the sequence of features may be changed
+        for (std::list<EntityPtr>::const_iterator aPpIt = myPostponed.begin();
+            aPpIt != myPostponed.end(); ++aPpIt) {
+          FeaturePtr aCurFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*aPpIt);
+          if (aCurFeature && aCurFeature->getKind() == aKind) {
+            myNames[*aPpIt].myIsDefault = false;
+            isDefaultName = false;
+          }
+        }
       }
 
       if (anId > aNbFeatures.second)
@@ -565,12 +577,28 @@ bool ModelHighAPI_Dumper::isDumped(const AttributeRefListPtr& theRefList) const
   return true;
 }
 
+static bool isSketchSub(const FeaturePtr& theFeature)
+{
+  static const std::string SKETCH("Sketch");
+  CompositeFeaturePtr anOwner = ModelAPI_Tools::compositeOwner(theFeature);
+  return anOwner && anOwner->getKind() == SKETCH;
+}
+
 bool ModelHighAPI_Dumper::isDefaultColor(const ResultPtr& theResult) const
 {
   AttributeIntArrayPtr aColor = theResult->data()->intArray(ModelAPI_Result::COLOR_ID());
   if (!aColor || !aColor->isInitialized())
     return true;
 
+  // check the result belongs to sketch entity, do not dump color in this way
+  ResultConstructionPtr aResConstr =
+      std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(theResult);
+  if (aResConstr) {
+    FeaturePtr aFeature = ModelAPI_Feature::feature(theResult->data()->owner());
+    if (isSketchSub(aFeature))
+      return true;
+  }
+
   std::string aSection, aName, aDefault;
   theResult->colorConfigInfo(aSection, aName, aDefault);
 
@@ -1040,6 +1068,7 @@ ModelHighAPI_Dumper& ModelHighAPI_Dumper::operator<<(
   }
 
   myDumpBuffer << "\"" << aShape->shapeTypeStr();
+  bool aStandardDump = true;
   if (isDumpByGeom) {
     // check the selected item is a ResultPart;
     // in this case it is necessary to get shape with full transformation
@@ -1064,8 +1093,18 @@ ModelHighAPI_Dumper& ModelHighAPI_Dumper::operator<<(
 
     myDumpBuffer << anIndex << "\", ";
     *this << aMiddlePoint;
+    aStandardDump = false;
+  } if (theAttrSelect->isWeakNaming() ||
+    (myWeakNamingSelection && aShape.get() && theAttrSelect->context().get() &&
+       aShape != theAttrSelect->context()->shape())) { // weak naming for local selection only
+    GeomAlgoAPI_NExplode aNExplode(theAttrSelect->context()->shape(), aShape->shapeType());
+    int anIndex = aNExplode.index(aShape);
+    if (anIndex != 0) { // found a week-naming index, so, export it
+      myDumpBuffer<<"\", \""<<theAttrSelect->context()->data()->name()<<"\", "<<anIndex;
+      aStandardDump = false;
+    }
   }
-  else
+  if (aStandardDump)
     myDumpBuffer << "\", \"" << theAttrSelect->namingName() << "\"";
   myDumpBuffer << ")";
   return *this;