X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_ExportFeature.cpp;h=f4ff3d3ad9fa976278264117b9b8005ad04e6db5;hb=676ee79de539b14b242a561857c1505cce13d951;hp=5120fde5ef687b66dc61de71c514304db82022e2;hpb=b4be68ffcb00b8b9276a94b05ea613d9c411fde6;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index 5120fde5e..f4ff3d3ad 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@ -1,36 +1,33 @@ // 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 #include +#include #include #include #include #include -#include -#include -#include -#include #include +#include #include #ifdef _DEBUG #include @@ -60,6 +57,7 @@ const std::string& ExchangePlugin_ExportFeature::getKind() void ExchangePlugin_ExportFeature::initAttributes() { 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()); } @@ -68,55 +66,79 @@ void ExchangePlugin_ExportFeature::initAttributes() */ void ExchangePlugin_ExportFeature::execute() { - AttributeStringPtr aFilePathAttr = std::dynamic_pointer_cast( - data()->attribute(ExchangePlugin_ExportFeature::FILE_PATH_ID())); + AttributeStringPtr aFormatAttr = + this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID()); + std::string aFormat = aFormatAttr->value(); + // Format may be empty. In this case look at extension. +// if (aFormat.empty()) +// return; + + AttributeStringPtr aFilePathAttr = + this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()); std::string aFilePath = aFilePathAttr->value(); if (aFilePath.empty()) return; AttributeSelectionListPtr aSelectionListAttr = - std::dynamic_pointer_cast( - data()->attribute(ExchangePlugin_ExportFeature::SELECTION_LIST_ID())); - + this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); std::list > aShapes; - for ( int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i ) { - std::shared_ptr anSelectionAttr = aSelectionListAttr->value(i); - aShapes.push_back(anSelectionAttr->value()); + for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) { + 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); } - std::shared_ptr aShape = - GeomAlgoAPI_CompoundBuilder::compound(aShapes); - exportFile(aFilePath, aShape); + // 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); + } + + exportFile(aFilePath, aFormat, aShape); } bool ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName, + const std::string& theFormat, std::shared_ptr theShape) { // retrieve the file and plugin library names - TCollection_AsciiString aFileName(theFileName.c_str()); - OSD_Path aPath(aFileName); - TCollection_AsciiString aFormatName = aPath.Extension(); - // ".brep" -> "BREP", TCollection_AsciiString are numbered from 1 - aFormatName = aFormatName.SubString(2, aFormatName.Length()); - aFormatName.UpperCase(); + 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; - TDF_Label anUnknownLabel = TDF_Label(); - - TopoDS_Shape aShape(theShape->impl()); - bool aResult = true; + std::string anError; + bool aResult = false; if (aFormatName == "BREP") { - aResult = BREPExport::Export(aFileName, aFormatName, aShape, anError, anUnknownLabel); - } else if (aFormatName == "STEP" || aFormatName == "STP") { - aResult = STEPExport::Export(aFileName, aFormatName, aShape, anError, anUnknownLabel); - } else if (aFormatName == "IGES") { - aResult = IGESExport::Export(aFileName, aFormatName, aShape, anError, anUnknownLabel); + aResult = BREPExport(theFileName, aFormatName, theShape, anError); + } else if (aFormatName == "STEP") { + aResult = STEPExport(theFileName, aFormatName, theShape, anError); + } else if (aFormatName.substr(0, 4) == "IGES") { + aResult = IGESExport(theFileName, aFormatName, theShape, anError); + } else { + anError = "Unsupported format " + aFormatName; } - if ( !aResult ) { - const static std::string aShapeError = - "An error occurred while exporting " + theFileName + ": " + anError.ToCString(); + if (!aResult) { + std::string aShapeError = + "An error occurred while exporting " + theFileName + ": " + anError; setError(aShapeError); return false; }