X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_ImportFeature.cpp;h=4107115ce918ce816768289e9e340a3442d3bf73;hb=0213528bdfe5b97da3a23e34361d69944b825ffb;hp=73a35fd225aecf3cf6f1ca8e8d828ccc23a47d02;hpb=b91d191d1f7bbb768762c774c098f244fe79dc6d;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp index 73a35fd22..4107115ce 100644 --- a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp @@ -2,16 +2,12 @@ // File: ExchangePlugin_ImportFeature.cpp // Created: Aug 28, 2014 -// Author: Sergey BELASH +// Authors: Sergey BELASH, Sergey POKHODENKO #include #include #include -#ifdef _DEBUG -#include -#include -#endif #include #include @@ -57,9 +53,11 @@ ExchangePlugin_ImportFeature::~ExchangePlugin_ImportFeature() void ExchangePlugin_ImportFeature::initAttributes() { data()->addAttribute(ExchangePlugin_ImportFeature::FILE_PATH_ID(), ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ImportFeature::GROUP_LIST_ID(), ModelAPI_AttributeRefList::typeId()); + AttributePtr aFeaturesAttribute = data()->addAttribute(ExchangePlugin_ImportFeature::FEATURES_ID(), ModelAPI_AttributeRefList::typeId()); + aFeaturesAttribute->setIsArgument(false); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ExchangePlugin_ImportFeature::GROUP_LIST_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory( + getKind(), ExchangePlugin_ImportFeature::FEATURES_ID()); } /* @@ -138,23 +136,23 @@ void ExchangePlugin_ImportFeature::importXAO(const std::string& theFileName) XAO::Geometry* aXaoGeometry = aXao.getGeometry(); // use the geometry name or the file name for the feature - std::string aBodyName = aXaoGeometry->getName().empty() - ? GeomAlgoAPI_Tools::File_Tools::name(theFileName) - : aXaoGeometry->getName(); + std::string aBodyName = aXaoGeometry->getName(); + if (aBodyName.empty()) + aBodyName = GeomAlgoAPI_Tools::File_Tools::name(theFileName); data()->setName(aBodyName); ResultBodyPtr aResultBody = createResultBody(aGeomShape); setResult(aResultBody); // Process groups - AttributeRefListPtr aRefListOfGroups = reflist(ExchangePlugin_ImportFeature::GROUP_LIST_ID()); + std::shared_ptr aRefListOfGroups = + std::dynamic_pointer_cast(data()->attribute(FEATURES_ID())); // Remove previous groups stored in RefList std::list anGroupList = aRefListOfGroups->list(); std::list::iterator anGroupIt = anGroupList.begin(); for (; anGroupIt != anGroupList.end(); ++anGroupIt) { - std::shared_ptr aFeature = - std::dynamic_pointer_cast(*anGroupIt); + std::shared_ptr aFeature = ModelAPI_Feature::feature(*anGroupIt); if (aFeature) document()->removeFeature(aFeature); } @@ -163,7 +161,7 @@ void ExchangePlugin_ImportFeature::importXAO(const std::string& theFileName) for (int aGroupIndex = 0; aGroupIndex < aXao.countGroups(); ++aGroupIndex) { XAO::Group* aXaoGroup = aXao.getGroup(aGroupIndex); - std::shared_ptr aGroupFeature = document()->addFeature("Group", false); + std::shared_ptr aGroupFeature = addFeature("Group"); // group name if (!aXaoGroup->getName().empty()) @@ -188,14 +186,10 @@ void ExchangePlugin_ImportFeature::importXAO(const std::string& theFileName) aSelectionList->value(anElementIndex)->setId(aReferenceID); } - - aRefListOfGroups->append(aGroupFeature); - - // hide the group in the history - document()->setCurrentFeature(aGroupFeature, false); - // groups features is internal part of the import - aGroupFeature->setInHistory(aGroupFeature, false); } + // Top avoid problems in Object Browser update: issue #1647. + ModelAPI_EventCreator::get()->sendReordered( + std::dynamic_pointer_cast(aRefListOfGroups->owner())); } catch (XAO::XAO_Exception& e) { std::string anError = e.what(); @@ -204,6 +198,67 @@ void ExchangePlugin_ImportFeature::importXAO(const std::string& theFileName) } } +//============================================================================ +std::shared_ptr ExchangePlugin_ImportFeature::addFeature( + std::string theID) +{ + std::shared_ptr aNew = document()->addFeature(theID, false); + if (aNew) + data()->reflist(FEATURES_ID())->append(aNew); + // set as current also after it becomes sub to set correctly enabled for other subs + //document()->setCurrentFeature(aNew, false); + return aNew; +} + +void ExchangePlugin_ImportFeature::removeFeature( + std::shared_ptr theFeature) +{ + if (!data()->isValid()) + return; + AttributeRefListPtr aList = reflist(FEATURES_ID()); + aList->remove(theFeature); +} + +int ExchangePlugin_ImportFeature::numberOfSubs(bool forTree) const +{ + return data()->reflist(FEATURES_ID())->size(true); +} + +std::shared_ptr ExchangePlugin_ImportFeature::subFeature( + const int theIndex, bool forTree) +{ + ObjectPtr anObj = data()->reflist(FEATURES_ID())->object(theIndex, false); + FeaturePtr aRes = std::dynamic_pointer_cast(anObj); + return aRes; +} + +int ExchangePlugin_ImportFeature::subFeatureId(const int theIndex) const +{ + std::shared_ptr aRefList = std::dynamic_pointer_cast< + ModelAPI_AttributeRefList>(data()->attribute(FEATURES_ID())); + std::list aFeatures = aRefList->list(); + std::list::const_iterator anIt = aFeatures.begin(); + int aResultIndex = 1; // number of the counted (created) features, started from 1 + int aFeatureIndex = -1; // number of the not-empty features in the list + for (; anIt != aFeatures.end(); anIt++) { + if (anIt->get()) + aFeatureIndex++; + if (aFeatureIndex == theIndex) + break; + aResultIndex++; + } + return aResultIndex; +} + +bool ExchangePlugin_ImportFeature::isSub(ObjectPtr theObject) const +{ + // check is this feature of result + FeaturePtr aFeature = ModelAPI_Feature::feature(theObject); + if (aFeature) + return data()->reflist(FEATURES_ID())->isInList(aFeature); + return false; +} + //============================================================================ void ExchangePlugin_ImportFeature::loadNamingDS( std::shared_ptr theGeomShape,