X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModelHighAPI%2FModelHighAPI_Dumper.h;h=8cb9c5457eb0998048ed12f93aa17d42eb70dbc5;hb=2cb8023bec0da9fc7b138da0a467bca74d4b825c;hp=c653e50679cc51841ea97f463836550da4c254ef;hpb=622e6d07002bdb703c2d7e51a8b65dfcd9fbd377;p=modules%2Fshaper.git diff --git a/src/ModelHighAPI/ModelHighAPI_Dumper.h b/src/ModelHighAPI/ModelHighAPI_Dumper.h index c653e5067..8cb9c5457 100644 --- a/src/ModelHighAPI/ModelHighAPI_Dumper.h +++ b/src/ModelHighAPI/ModelHighAPI_Dumper.h @@ -1,18 +1,34 @@ -// Copyright (C) 2016-20xx CEA/DEN, EDF R&D --> - -// File: ModelHighAPI_Dumper.h -// Created: 1 August 2016 -// Author: Artem ZHIDKOV +// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or +// email : webmaster.salome@opencascade.com +// #ifndef ModelHighAPI_Dumper_H_ #define ModelHighAPI_Dumper_H_ #include "ModelHighAPI.h" +#include #include #include #include #include +#include #include class GeomAPI_Pnt; @@ -22,19 +38,31 @@ class GeomDataAPI_Dir; class GeomDataAPI_Point; class GeomDataAPI_Point2D; +class ModelAPI_Attribute; class ModelAPI_AttributeBoolean; class ModelAPI_AttributeDouble; class ModelAPI_AttributeInteger; class ModelAPI_AttributeRefAttr; +class ModelAPI_AttributeRefAttrList; +class ModelAPI_AttributeReference; +class ModelAPI_AttributeRefList; class ModelAPI_AttributeSelection; +class ModelAPI_AttributeSelectionList; class ModelAPI_AttributeString; +class ModelAPI_AttributeStringArray; class ModelAPI_CompositeFeature; class ModelAPI_Document; class ModelAPI_Entity; class ModelAPI_Feature; +class ModelAPI_Folder; +class ModelAPI_Object; +class ModelAPI_Result; -typedef std::shared_ptr EntityPtr; -typedef std::shared_ptr FeaturePtr; +typedef std::shared_ptr DocumentPtr; +typedef std::shared_ptr EntityPtr; +typedef std::shared_ptr FeaturePtr; +typedef std::shared_ptr FolderPtr; +typedef std::shared_ptr ResultPtr; /**\class ModelHighAPI_Dumper * \ingroup CPPHighAPI @@ -58,6 +86,11 @@ public: /// Destructor virtual ~ModelHighAPI_Dumper() {} + /// Set/unset flag to dump selection attributes by geometrical properties: + /// inner point in the selected shape + void setSelectionByGeometry(bool theDumpByGeom = true) + { myGeometricalSelection = theDumpByGeom; } + /// Dump given document into the file /// \return \c true, if succeed MODELHIGHAPI_EXPORT @@ -65,26 +98,59 @@ public: /// Add module to list of imported modules /// \param theModuleName name of the module to be imported - /// \param theObject name of the entity to be imported from the module (if empty, while module will be imported) + /// \param theObject name of the entity to be imported + /// from the module (if empty, while module will be imported) MODELHIGHAPI_EXPORT void importModule(const std::string& theModuleName, const std::string& theObject = std::string()); /// Returns name of specified entity + /// \param theEntity [in] named entity + /// \param theSaveNotDumped [in] + /// if \c true, the entity should be stored as not dumped (will be dumped automatically) + /// \param theUseEntityName [in] + /// if \c true, the entity name should be used "as is" without changing default name + /// \return name of the entity MODELHIGHAPI_EXPORT - const std::string& name(const EntityPtr& theEntity); + const std::string& name(const EntityPtr& theEntity, bool theSaveNotDumped = true, + bool theUseEntityName = false); /// Returns name of parent composite feature for specified entity MODELHIGHAPI_EXPORT const std::string& parentName(const FeaturePtr& theFeature); + /// Dump parameter feature only + virtual void dumpParameter(const FeaturePtr& theFeature) = 0; /// Dump given feature virtual void dumpFeature(const FeaturePtr& theFeature, const bool theForce = false) = 0; + /// Dump folder + virtual void dumpFolder(const FolderPtr& theFolder) = 0; + + /// Set feature postponed until all its dependencies are not dumped. + /// The name of the feature is stored anyway. + MODELHIGHAPI_EXPORT + void postpone(const EntityPtr& theEntity); + + /// Set a feature that should not be dumped anyway + MODELHIGHAPI_EXPORT + void doNotDumpFeature(const FeaturePtr& theFeature) + { myFeaturesToSkip.insert(theFeature); } + + /// Dump sub-feature name and color, without dumping feature creation. + /// Used for features which creates sub-features in their execute method. + /// \param theSubFeatureGet [in] method for getting sub-feature (e.g. "Feature_1.subFeature(0)") + /// \param theSubFeature [in] sub-feature + MODELHIGHAPI_EXPORT + void dumpSubFeatureNameAndColor(const std::string theSubFeatureGet, + const FeaturePtr& theSubFeature); /// Return name of getter for corresponding attribute virtual std::string attributeGetter(const FeaturePtr& theFeature, const std::string& theAttrName) const = 0; + /// Return name of wrapper feature + virtual std::string featureWrapper(const FeaturePtr& theFeature) const = 0; + /// Save all dumps into specified file MODELHIGHAPI_EXPORT bool exportTo(const std::string& theFileName); @@ -98,6 +164,9 @@ public: /// Dump string MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& operator<<(const std::string& theString); + /// Dump boolean + MODELHIGHAPI_EXPORT + ModelHighAPI_Dumper& operator<<(const bool theValue); /// Dump integer MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& operator<<(const int theValue); @@ -108,7 +177,7 @@ public: friend MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& operator<<(ModelHighAPI_Dumper& theDumper, - std::basic_ostream& (*theEndl)(std::basic_ostream&)); + std::basic_ostream& (*theEndl)(std::basic_ostream&)); /// Dump GeomAPI_Pnt in the following form: /// "GeomAPI_Pnt(X, Y, Z)" @@ -146,22 +215,67 @@ public: ModelHighAPI_Dumper& operator<<(const std::shared_ptr& theAttrStr); /// Dump name of entity and remember to dump "setName" if the entity has user-defined name MODELHIGHAPI_EXPORT - ModelHighAPI_Dumper& operator<<(const EntityPtr& theEntity); + ModelHighAPI_Dumper& operator<<(const FeaturePtr& theEntity); - /// Dump AttributeRefAttr + /// Dump folder + MODELHIGHAPI_EXPORT + ModelHighAPI_Dumper& operator<<(const FolderPtr& theFolder); + + /// Dump result MODELHIGHAPI_EXPORT - ModelHighAPI_Dumper& operator<<(const std::shared_ptr& theRefAttr); + ModelHighAPI_Dumper& operator<<(const ResultPtr& theResult); + + /// Dump Attribute + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theAttr); + /// Dump Object + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theObject); + + /// Dump AttributeRefAttr + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theRefAttr); + /// Dump AttributeRefAttrList as follows: + /// "[obj1, obj2, obj3, ...]" + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theRefAttrList); + /// Dump AttributeRefList as follows: + /// "[obj1, obj2, obj3, ...]" + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theRefList); /// Dump AttributeSelection + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theAttrSelect); + /// Dump AttributeSelectionList + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theAttrSelList); + /// Dump AttributeReference + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theReference); + /// Dump AttributeStringArray + MODELHIGHAPI_EXPORT ModelHighAPI_Dumper& + operator<<(const std::shared_ptr& theArray); + + /// Clear dump buffer MODELHIGHAPI_EXPORT - ModelHighAPI_Dumper& operator<<(const std::shared_ptr& theAttrSelect); + void clear(bool bufferOnly = false); + /// clear list of not dumped entities + MODELHIGHAPI_EXPORT void clearNotDumped(); + + /// Check the entity is already dumped + MODELHIGHAPI_EXPORT + bool isDumped(const EntityPtr& theEntity) const; + /// Check theRefAttr is already dumped + MODELHIGHAPI_EXPORT + bool isDumped(const std::shared_ptr& theRefAttr) const; + /// Check all objects in theRefList are already dumped + MODELHIGHAPI_EXPORT + bool isDumped(const std::shared_ptr& theRefList) const; protected: /// Dump "setName" command if last entity had user-defined name MODELHIGHAPI_EXPORT void dumpEntitySetName(); - /// Clear dump buffer - void clear(); - private: ModelHighAPI_Dumper(const ModelHighAPI_Dumper&); const ModelHighAPI_Dumper& operator=(const ModelHighAPI_Dumper&); @@ -169,19 +283,91 @@ private: /// Iterate all features in document and dump them into intermediate buffer bool process(const std::shared_ptr& theDoc); + /// Dump composite feature and all it sub-features + bool process(const std::shared_ptr& theComposite, + bool isForce = false); + /// Iterate all features in composite feature and dump them into intermediate buffer - bool process(const std::shared_ptr& theComposite); + /// \param theComposite [in] parent composite feature + /// \param theDumpModelDo [in] shows that command "model.do()" should be written at the end + MODELHIGHAPI_EXPORT + bool processSubs(const std::shared_ptr& theComposite, + bool theDumpModelDo = false); + + /// Stores names of results for the given feature + void saveResultNames(const FeaturePtr& theFeature); + + /// Check the result feature has default color + bool isDefaultColor(const ResultPtr& theResult) const; + + /// Check the result feature has default deflection + bool isDefaultDeflection(const ResultPtr& theResult) const; + + /// Check the result feature has default transparency + bool isDefaultTransparency(const ResultPtr& theResult) const; + + /// Dump postponed entities + void dumpPostponed(bool theDumpFolders = false); private: - typedef std::map > EntityNameMap; - typedef std::map > ModulesMap; + struct EntityName { + std::string myCurrentName; ///< default name of current feature + std::string myUserName; ///< user-defined name + bool myIsDefault; ///< \c true if the name is default + bool myIsDumped; ///< shows that the names of the feature are already stored + + EntityName() {} + + EntityName(const std::string& theCurName, const std::string& theUserName, bool theDefault) + : myCurrentName(theCurName), + myUserName(theUserName), + myIsDefault(theDefault), + myIsDumped(false) + {} + }; + + typedef std::map EntityNameMap; + typedef std::map > ModulesMap; + typedef std::map > > NbFeaturesMap; + + struct LastDumpedEntity { + EntityPtr myEntity; ///< last dumped entity + bool myUserName; ///< the entity hase user-defined name + /// results of this entity, which has user-defined names or specific colors + std::list myResults; + + LastDumpedEntity(EntityPtr theEntity, bool theUserName, + const std::list& theResults = std::list()) + : myEntity(theEntity), myUserName(theUserName), myResults(theResults) + {} + }; + typedef std::stack DumpStack; static ModelHighAPI_Dumper* mySelf; std::ostringstream myDumpBuffer; ///< intermediate buffer to store dumping data + std::ostringstream myFullDump; ///< full buffer of dumped data + ModulesMap myModules; ///< modules and entities to be imported EntityNameMap myNames; ///< names of the entities - EntityPtr myLastEntityWithName; ///< not null, if last dumped entity had user defined name + DumpStack myEntitiesStack; ///< stack of dumped entities + + NbFeaturesMap myFeatureCount; ///< number of features of each kind + + /// features which should not be dumped (like coincidence and tangency created by tangent arc) + std::set myFeaturesToSkip; + + std::list myPostponed; ///< list of postponed entities (sketch constraints or folders) + bool myDumpPostponedInProgress; ///< processing postponed is in progress + + bool myGeometricalSelection; ///< dump selection not by naming, but by coordinates of inner point + +protected: + /// list of entities, used by other features but not dumped yet + std::set myNotDumpedEntities; + + friend class SketchAPI_Sketch; + friend class ModelHighAPI_Folder; }; #endif