From: spo Date: Tue, 21 Jun 2016 07:01:00 +0000 (+0300) Subject: DEBUG X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=14fc829a24fd05e9bcd2917ec8130a360c138e7f;p=modules%2Fshaper.git DEBUG --- diff --git a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp index 73a35fd22..e212bf40d 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,10 @@ 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()); + data()->addAttribute(ExchangePlugin_ImportFeature::FEATURES_ID(), ModelAPI_AttributeRefList::typeId()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ExchangePlugin_ImportFeature::GROUP_LIST_ID()); + ModelAPI_Session::get()->validators()->registerNotObligatory( + getKind(), ExchangePlugin_ImportFeature::FEATURES_ID()); } /* @@ -138,23 +135,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 +160,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,13 +185,13 @@ 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); +// +// 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); } } catch (XAO::XAO_Exception& e) { @@ -204,6 +201,79 @@ 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()); + // if the object is last, remove it from the list (needed to skip empty transaction on edit of sketch feature) + if (aList->object(aList->size(true) - 1, true) == theFeature) { + aList->remove(theFeature); + } else { + // to keep the persistent sub-elements indexing, do not remove elements from list, + // but substitute by nulls + aList->substitute(theFeature, ObjectPtr()); + } +} + +int ExchangePlugin_ImportFeature::numberOfSubs(bool forTree) const +{ + if (forTree) + return 0; + return data()->reflist(FEATURES_ID())->size(false); +} + +std::shared_ptr ExchangePlugin_ImportFeature::subFeature( + const int theIndex, bool forTree) +{ + if (forTree) + return FeaturePtr(); + + 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, diff --git a/src/ExchangePlugin/ExchangePlugin_ImportFeature.h b/src/ExchangePlugin/ExchangePlugin_ImportFeature.h index 566a7b9e5..d882bc759 100644 --- a/src/ExchangePlugin/ExchangePlugin_ImportFeature.h +++ b/src/ExchangePlugin/ExchangePlugin_ImportFeature.h @@ -2,13 +2,14 @@ // File: ExchangePlugin_ImportFeature.h // Created: Aug 28, 2014 -// Author: Sergey BELASH +// Authors: Sergey BELASH, Sergey POKHODENKO #ifndef EXCHANGEPLUGIN_IMPORTFEATURE_H_ #define EXCHANGEPLUGIN_IMPORTFEATURE_H_ -#include -#include +#include "ExchangePlugin.h" + +#include #include #include @@ -20,7 +21,7 @@ * * The list of supported formats is defined in the configuration file. */ -class ExchangePlugin_ImportFeature : public ModelAPI_Feature +class ExchangePlugin_ImportFeature : public ModelAPI_CompositeFeature { public: /// Feature kind @@ -35,11 +36,11 @@ class ExchangePlugin_ImportFeature : public ModelAPI_Feature static const std::string MY_FILE_PATH_ID("file_path"); return MY_FILE_PATH_ID; } - /// attribute name of group list - inline static const std::string& GROUP_LIST_ID() + /// All features (list of references) + inline static const std::string& FEATURES_ID() { - static const std::string MY_GROUP_LIST_ID("group_list"); - return MY_GROUP_LIST_ID; + static const std::string MY_FEATURES_ID("Features"); + return MY_FEATURES_ID; } /// Default constructor EXCHANGEPLUGIN_EXPORT ExchangePlugin_ImportFeature(); @@ -61,6 +62,24 @@ class ExchangePlugin_ImportFeature : public ModelAPI_Feature /// Reimplemented from ModelAPI_Feature::isPreviewNeeded(). Returns false. EXCHANGEPLUGIN_EXPORT virtual bool isPreviewNeeded() const { return false; } + /// Reimplemented from ModelAPI_CompositeFeature::addFeature() + virtual std::shared_ptr addFeature(std::string theID); + + /// Reimplemented from ModelAPI_CompositeFeature::numberOfSubs() + virtual int numberOfSubs(bool forTree = false) const; + + /// Reimplemented from ModelAPI_CompositeFeature::subFeature() + virtual std::shared_ptr subFeature(const int theIndex, bool forTree = false); + + /// Reimplemented from ModelAPI_CompositeFeature::subFeatureId() + virtual int subFeatureId(const int theIndex) const; + + /// Reimplemented from ModelAPI_CompositeFeature::isSub() + virtual bool isSub(ObjectPtr theObject) const; + + /// Reimplemented from ModelAPI_CompositeFeature::removeFeature() + virtual void removeFeature(std::shared_ptr theFeature); + protected: /// Performs the import of the file EXCHANGEPLUGIN_EXPORT void importFile(const std::string& theFileName); diff --git a/src/ExchangePlugin/ExchangePlugin_Tools.cpp b/src/ExchangePlugin/ExchangePlugin_Tools.cpp index 51f22b82b..5a65fc1da 100644 --- a/src/ExchangePlugin/ExchangePlugin_Tools.cpp +++ b/src/ExchangePlugin/ExchangePlugin_Tools.cpp @@ -34,6 +34,8 @@ std::string ExchangePlugin_Tools::selectionType2xaoDimension(const std::string& std::string ExchangePlugin_Tools::xaoDimension2selectionType(const std::string& theDimension) { +// return theDimension; + if (theDimension == "vertex") return "Vertices"; else if (theDimension == "edge") diff --git a/src/ExchangePlugin/plugin-Exchange.xml b/src/ExchangePlugin/plugin-Exchange.xml index 47d6d85a0..84a73e07e 100644 --- a/src/ExchangePlugin/plugin-Exchange.xml +++ b/src/ExchangePlugin/plugin-Exchange.xml @@ -7,7 +7,7 @@ id="Import" title="Import" tooltip="Import a file" - icon=":icons/Exchange/import.png" + icon="icons/Exchange/import.png" document="Part"> @@ -17,7 +17,7 @@ id="Export" title="Export" tooltip="Export to file" - icon=":icons/Exchange/export.png"> + icon="icons/Exchange/export.png"> diff --git a/src/ParametersPlugin/ParametersPlugin_msg_ru.ts b/src/ParametersPlugin/ParametersPlugin_msg_ru.ts index 35b636acd..b764a4a70 100644 --- a/src/ParametersPlugin/ParametersPlugin_msg_ru.ts +++ b/src/ParametersPlugin/ParametersPlugin_msg_ru.ts @@ -63,12 +63,12 @@ QObject - + Warning - + Selected objects can be used in Part documents which are not loaded: %1. Whould you like to continue?