X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModelAPI%2FModelAPI_Tools.cpp;h=1e57d36b76113351ad2aff3d4c04837c88fd2837;hb=80926f787b594a2e9b77ee5bd22f517bdb910f07;hp=7956c4dbb91966ec0a54917e62e6c7d0777b0e2b;hpb=3e67d539ff2a32111d8559201692fa04157fbc3b;p=modules%2Fshaper.git diff --git a/src/ModelAPI/ModelAPI_Tools.cpp b/src/ModelAPI/ModelAPI_Tools.cpp index 7956c4dbb..1e57d36b7 100755 --- a/src/ModelAPI/ModelAPI_Tools.cpp +++ b/src/ModelAPI/ModelAPI_Tools.cpp @@ -382,6 +382,7 @@ bool removeFeaturesAndReferences(const std::set& theFeatures, return ModelAPI_Tools::removeFeatures(aFeatures, false); } +//*********************************************************************** bool removeFeatures(const std::set& theFeatures, const bool theFlushRedisplay) { @@ -406,6 +407,7 @@ bool removeFeatures(const std::set& theFeatures, return true; } +//*********************************************************************** // Fills the references list by all references of the feature from the references map. // This is a recusive method to find references by next found feature in the map of references. // \param theFeature a feature to find references @@ -623,8 +625,9 @@ void getConcealedResults(const FeaturePtr& theFeature, } } -std::string getDefaultName(const std::shared_ptr& theResult, - const int theResultIndex) +std::pair getDefaultName( + const std::shared_ptr& theResult, + const int theResultIndex) { typedef std::list< std::pair < std::string, std::list > > ListOfReferences; @@ -646,7 +649,7 @@ std::string getDefaultName(const std::shared_ptr& theResult, if (aCompSolidRes == *anIt) break; aDefaultName << "_" << (aCompSolidResultIndex + 1) << "_" << (theResultIndex + 1); - return aDefaultName.str(); + return std::pair(aDefaultName.str(), false); } DataPtr aData = anOwner->data(); @@ -658,14 +661,20 @@ std::string getDefaultName(const std::shared_ptr& theResult, ListOfReferences::const_iterator aFoundRef = aReferences.end(); for (ListOfReferences::const_iterator aRefIt = aReferences.begin(); aRefIt != aReferences.end(); ++aRefIt) { - if (aSession->validators()->isConcealed(anOwner->getKind(), aRefIt->first)) { + bool isConcealed = aSession->validators()->isConcealed(anOwner->getKind(), aRefIt->first); + bool isMainArg = isConcealed && + aSession->validators()->isMainArgument(anOwner->getKind(), aRefIt->first); + if (isConcealed) { // check the referred object is a Body // (for example, ExtrusionCut has a sketch as a first attribute which is concealing) bool isBody = aRefIt->second.size() > 1 || (aRefIt->second.size() == 1 && aRefIt->second.front()->groupName() == ModelAPI_ResultBody::group()); - if (isBody && (aFoundRef == aReferences.end() || + if (isBody && (isMainArg || aFoundRef == aReferences.end() || aData->isPrecedingAttribute(aRefIt->first, aFoundRef->first))) aFoundRef = aRefIt; + + if (isMainArg) + break; } } @@ -687,7 +696,11 @@ std::string getDefaultName(const std::shared_ptr& theResult, ResultCompSolidPtr aParentCompSolid = ModelAPI_Tools::compSolidOwner(anObjRes); if (aParentCompSolid) anObjRes = aParentCompSolid; - return anObjRes->data()->name(); + + // return name of reference result only if it has been renamed by the user, + // in other case compose a default name + if (anObjRes->data()->hasUserDefinedName()) + return std::pair(anObjRes->data()->name(), true); } } @@ -698,7 +711,7 @@ std::string getDefaultName(const std::shared_ptr& theResult, // add unique prefix starting from second if (theResultIndex > 0 || theResult->groupName() == ModelAPI_ResultBody::group()) aDefaultName << "_" << theResultIndex + 1; - return aDefaultName.str(); + return std::pair(aDefaultName.str(), false); } } // namespace ModelAPI_Tools