X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModelHighAPI%2FModelHighAPI_Dumper.cpp;h=e7b03dd00fde6d212038676d32fbe982893f0f71;hb=b73fb7468bea81901dbeed8e229d742f788ec282;hp=6c8132447472323082217f3e427a091b81518185;hpb=cde8d0d7004a3ad4a36c6582e2bb5e27870806ad;p=modules%2Fshaper.git diff --git a/src/ModelHighAPI/ModelHighAPI_Dumper.cpp b/src/ModelHighAPI/ModelHighAPI_Dumper.cpp index 6c8132447..e7b03dd00 100644 --- a/src/ModelHighAPI/ModelHighAPI_Dumper.cpp +++ b/src/ModelHighAPI/ModelHighAPI_Dumper.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -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::const_iterator aPpIt = myPostponed.begin(); + aPpIt != myPostponed.end(); ++aPpIt) { + FeaturePtr aCurFeature = std::dynamic_pointer_cast(*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(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); @@ -1033,21 +1061,21 @@ ModelHighAPI_Dumper& ModelHighAPI_Dumper::operator<<( FeaturePtr aSelectedFeature; if (isDumpByGeom) { ResultPtr aRes = theAttrSelect->context(); - if (aRes) { + FeaturePtr aFeature = theAttrSelect->contextFeature(); + if (aRes && !aFeature) aSelectedFeature = ModelAPI_Feature::feature(aRes->data()->owner()); - if (aSelectedFeature) - isDumpByGeom = aSelectedFeature->isInHistory(); - } + isDumpByGeom = aSelectedFeature && aSelectedFeature->isInHistory(); } 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 // for correct calculation of the middle point ResultPartPtr aResPart = std::dynamic_pointer_cast(theAttrSelect->context()); - if (aResPart) + if (aResPart && aShape->shapeType() == GeomAPI_Shape::COMPOUND) aShape = aResPart->shape(); GeomPointPtr aMiddlePoint = aShape->middlePoint(); // calculate number of features, which could be selected by the same point @@ -1065,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<<"\", \""<context()->data()->name()<<"\", "<namingName() << "\""; myDumpBuffer << ")"; return *this;