X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_Dump.cpp;h=cf78b9b8c10a0ee53f1abd0eeaf80e8180b1e274;hb=584f97832c77adf0c9df154b2f3eb1835bd3ce9e;hp=5c5ee466594e0734d48c671311445f6ab8b444a5;hpb=6f39b580fefcdbbb98b78b7e1e4c41ec909f7a61;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_Dump.cpp b/src/ExchangePlugin/ExchangePlugin_Dump.cpp index 5c5ee4665..cf78b9b8c 100644 --- a/src/ExchangePlugin/ExchangePlugin_Dump.cpp +++ b/src/ExchangePlugin/ExchangePlugin_Dump.cpp @@ -1,11 +1,25 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -// File: ExchangePlugin_ExportFeature.cpp -// Created: May 14, 2015 -// Author: Sergey POKHODENKO +// Copyright (C) 2014-2019 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 +// #include +#include #include #include #include @@ -26,8 +40,17 @@ ExchangePlugin_Dump::~ExchangePlugin_Dump() void ExchangePlugin_Dump::initAttributes() { - data()->addAttribute(ExchangePlugin_Dump::FILE_PATH_ID(), ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_Dump::FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(FILE_PATH_ID(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId()); + + data()->addAttribute(TOPOLOGICAL_NAMING_DUMP_ID(), ModelAPI_AttributeBoolean::typeId()); + data()->addAttribute(GEOMETRIC_DUMP_ID(), ModelAPI_AttributeBoolean::typeId()); + data()->addAttribute(WEAK_NAMING_DUMP_ID(), ModelAPI_AttributeBoolean::typeId()); + + // default values + boolean(TOPOLOGICAL_NAMING_DUMP_ID())->setValue(true); + boolean(GEOMETRIC_DUMP_ID())->setValue(true); + boolean(WEAK_NAMING_DUMP_ID())->setValue(false); } void ExchangePlugin_Dump::execute() @@ -46,10 +69,29 @@ void ExchangePlugin_Dump::dump(const std::string& theFileName) // load DumpAssistant from Python side Config_ModuleReader::loadScript("salome.shaper.model.dump"); - ModelHighAPI_Dumper* aDumper = ModelHighAPI_Dumper::getInstance(); - aDumper->clear(); DocumentPtr aDoc = ModelAPI_Session::get()->moduleDocument(); + int aFeaturesNb = aDoc->size(ModelAPI_Feature::group()); + if(aFeaturesNb > 1) { + FeaturePtr aLastFeature = + ModelAPI_Feature::feature(aDoc->object(ModelAPI_Feature::group(), aFeaturesNb - 1)); + if(aDoc->currentFeature(true) != aLastFeature) { + setError("Dump cannot be done. Please move the history line to the end before dumping."); + return; + } + } + + DocumentPtr anActiveDoc = ModelAPI_Session::get()->activeDocument(); + aFeaturesNb = anActiveDoc->size(ModelAPI_Feature::group()); + if(aFeaturesNb > 1) { + FeaturePtr aLastFeature = + ModelAPI_Feature::feature(anActiveDoc->object(ModelAPI_Feature::group(), aFeaturesNb - 1)); + if(anActiveDoc->currentFeature(true) != aLastFeature) { + setError("Dump cannot be done. Please move the history line to the end before dumping."); + return; + } + } + std::list aFeatures = aDoc->allFeatures(); for(std::list::const_iterator aFeatIt = aFeatures.begin(); aFeatIt != aFeatures.end(); @@ -64,6 +106,41 @@ void ExchangePlugin_Dump::dump(const std::string& theFileName) } } - if (!aDumper || !aDumper->process(aDoc, theFileName)) + // process selected types of the dump + ModelHighAPI_Dumper* aDumper = ModelHighAPI_Dumper::getInstance(); + if (!aDumper) + setError("An error occured while dumping to " + theFileName); + + static const int THE_TYPES_SIZE = 3; + bool aTypes[THE_TYPES_SIZE] = { + boolean(TOPOLOGICAL_NAMING_DUMP_ID())->value(), + boolean(GEOMETRIC_DUMP_ID())->value(), + boolean(WEAK_NAMING_DUMP_ID())->value() + }; + int aNbSelectedTypes = 0; + for (int i = 0; i < THE_TYPES_SIZE; ++i) + if (aTypes[i]) + ++aNbSelectedTypes; + + if (boolean(TOPOLOGICAL_NAMING_DUMP_ID())->value()) { + ModelHighAPI_Dumper::DumpStoragePtr aTopoNameStorage(new ModelHighAPI_Dumper::DumpStorage); + aDumper->addCustomStorage(aTopoNameStorage); + } + if (boolean(GEOMETRIC_DUMP_ID())->value()) { + ModelHighAPI_Dumper::DumpStoragePtr aGeomSelectionStorage( + new ModelHighAPI_Dumper::DumpStorageGeom); + if (aNbSelectedTypes > 1) + aGeomSelectionStorage->setFilenameSuffix("_geo"); + aDumper->addCustomStorage(aGeomSelectionStorage); + } + if (boolean(WEAK_NAMING_DUMP_ID())->value()) { + ModelHighAPI_Dumper::DumpStoragePtr aWeakNamingStorage( + new ModelHighAPI_Dumper::DumpStorageWeak); + if (aNbSelectedTypes > 1) + aWeakNamingStorage->setFilenameSuffix("_weak"); + aDumper->addCustomStorage(aWeakNamingStorage); + } + + if (!aDumper->process(aDoc, theFileName)) setError("An error occured while dumping to " + theFileName); }