X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_ExportFeature.cpp;h=a341a001558d9372717de629895419307edff34c;hb=13d59fc8ddcea476ed664e05839a6025ebb6be7b;hp=a67b57bccb115ce7d649bfd812bbf93b194ef1a3;hpb=d7d6265cce5e49374130cb4c6a4cfb3a90eba875;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index a67b57bcc..a341a0015 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@ -1,24 +1,28 @@ // 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 +#ifdef _DEBUG +#include +#include +#endif #include #include +#include #include +#include +#include +#include +#include #include @@ -28,19 +32,12 @@ #include #include #include +#include +#include -#include -#include -#include -#include +#include -#include -#include -#include -#ifdef _DEBUG -#include -#include -#endif +#include ExchangePlugin_ExportFeature::ExchangePlugin_ExportFeature() { @@ -51,22 +48,18 @@ ExchangePlugin_ExportFeature::~ExchangePlugin_ExportFeature() // TODO Auto-generated destructor stub } -/* - * Returns the unique kind of a feature - */ -const std::string& ExchangePlugin_ExportFeature::getKind() -{ - return ExchangePlugin_ExportFeature::ID(); -} - /* * Request for initialization of data model of the feature: adding all attributes */ void ExchangePlugin_ExportFeature::initAttributes() { - data()->addAttribute(ExchangePlugin_ExportFeature::FILE_FORMAT_ID(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(ExchangePlugin_ExportFeature::EXPORT_TYPE_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()); + data()->addAttribute(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID(), ModelAPI_AttributeString::typeId()); + + ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ExchangePlugin_ExportFeature::XAO_AUTHOR_ID()); } /* @@ -77,8 +70,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,42 +84,84 @@ 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); } -bool ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName, +void 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()); - TCollection_AsciiString aFormatName(theFormat.c_str()); + std::string aFormatName = theFormat; + + if (aFormatName.empty()) { // get default format for the 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 if (anExtension == "XAO") { + aFormatName = "XAO"; + } else { + aFormatName = anExtension; + } + } + + if (aFormatName == "XAO") { + exportXAO(theFileName, theShape); + return; + } // 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(); - setError(aShapeError); - return false; + if (!anError.empty()) { + setError("An error occurred while exporting " + theFileName + ": " + anError); + return; } +} + +void ExchangePlugin_ExportFeature::exportXAO(const std::string& theFileName, + std::shared_ptr theShape) +{ + std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); + + XAO::Xao aXao(anAuthor, "1.0"); + + std::string anError; + XAOExport(theFileName, theShape, &aXao, anError); - return true; + if (!anError.empty()) { + setError("An error occurred while exporting " + theFileName + ": " + anError); + return; + } } +