X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_ExportFeature.cpp;h=f4ff3d3ad9fa976278264117b9b8005ad04e6db5;hb=676ee79de539b14b242a561857c1505cce13d951;hp=a67b57bccb115ce7d649bfd812bbf93b194ef1a3;hpb=144fb75724b240b9a627ce7179f43e04ee90b465;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index a67b57bcc..f4ff3d3ad 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@ -1,25 +1,22 @@ // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -/* - * ExchangePlugin_ExportFeature.cpp - * - * Created on: May 14, 2015 - * Author: spo - */ +// File: ExchangePlugin_ExportFeature.cpp +// Created: May 14, 2015 +// Author: Sergey POKHODENKO #include #include #include -#include +#include #include +#include +#include #include #include -#include - #include #include @@ -29,11 +26,6 @@ #include #include -#include -#include -#include -#include - #include #include #include @@ -64,8 +56,8 @@ const std::string& ExchangePlugin_ExportFeature::getKind() */ void ExchangePlugin_ExportFeature::initAttributes() { - data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId()); data()->addAttribute(ExchangePlugin_ExportFeature::FILE_PATH_ID(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId()); data()->addAttribute(ExchangePlugin_ExportFeature::SELECTION_LIST_ID(), ModelAPI_AttributeSelectionList::typeId()); } @@ -77,8 +69,9 @@ void ExchangePlugin_ExportFeature::execute() AttributeStringPtr aFormatAttr = this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID()); std::string aFormat = aFormatAttr->value(); - if (aFormat.empty()) - return; + // Format may be empty. In this case look at extension. +// if (aFormat.empty()) +// return; AttributeStringPtr aFilePathAttr = this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()); @@ -90,10 +83,21 @@ void ExchangePlugin_ExportFeature::execute() this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); std::list > aShapes; for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) { - aShapes.push_back(aSelectionListAttr->value(i)->value()); + AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i); + std::shared_ptr aCurShape = anAttrSelection->value(); + if (aCurShape.get() == NULL) + aCurShape = anAttrSelection->context()->shape(); + if (aCurShape.get() != NULL) + aShapes.push_back(aCurShape); + } + + // Store compound if we have more than one shape. + std::shared_ptr aShape; + if(aShapes.size() == 1) { + aShape = aShapes.front(); + } else { + aShape = GeomAlgoAPI_CompoundBuilder::compound(aShapes); } - std::shared_ptr aShape = - GeomAlgoAPI_CompoundBuilder::compound(aShapes); exportFile(aFilePath, aFormat, aShape); } @@ -103,26 +107,38 @@ bool ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName, std::shared_ptr theShape) { // retrieve the file and plugin library names - TCollection_AsciiString aFileName(theFileName.c_str()); - TCollection_AsciiString aFormatName(theFormat.c_str()); + std::string aFormatName = theFormat; + + if (theFormat.empty()) { // look at extension + // ".brep" -> "BREP" + std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(theFileName); + if (anExtension == "BREP" || anExtension == "BRP") { + aFormatName = "BREP"; + } else if (anExtension == "STEP" || anExtension == "STP") { + aFormatName = "STEP"; + } else if (anExtension == "IGES" || anExtension == "IGS") { + aFormatName = "IGES-5.1"; + } else { + aFormatName = anExtension; + } + } // Perform the export - TCollection_AsciiString anError; - TopoDS_Shape aShape(theShape->impl()); + std::string anError; bool aResult = false; if (aFormatName == "BREP") { - aResult = BREPExport::Export(aFileName, aFormatName, aShape, anError); + aResult = BREPExport(theFileName, aFormatName, theShape, anError); } else if (aFormatName == "STEP") { - aResult = STEPExport::Export(aFileName, aFormatName, aShape, anError); - } else if (aFormatName.SubString(1, 4) == "IGES") { - aResult = IGESExport::Export(aFileName, aFormatName, aShape, anError); + aResult = STEPExport(theFileName, aFormatName, theShape, anError); + } else if (aFormatName.substr(0, 4) == "IGES") { + aResult = IGESExport(theFileName, aFormatName, theShape, anError); } else { - anError = TCollection_AsciiString("Unsupported format ") + aFormatName; + anError = "Unsupported format " + aFormatName; } if (!aResult) { std::string aShapeError = - "An error occurred while exporting " + theFileName + ": " + anError.ToCString(); + "An error occurred while exporting " + theFileName + ": " + anError; setError(aShapeError); return false; }