X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FExchangePlugin%2FExchangePlugin_ExportFeature.cpp;h=a341a001558d9372717de629895419307edff34c;hb=13d59fc8ddcea476ed664e05839a6025ebb6be7b;hp=5120fde5ef687b66dc61de71c514304db82022e2;hpb=b4be68ffcb00b8b9276a94b05ea613d9c411fde6;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index 5120fde5e..a341a0015 100644 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@ -1,41 +1,43 @@ // 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 +#ifdef _DEBUG +#include +#include +#endif #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 -#include -#endif +#include + +#include ExchangePlugin_ExportFeature::ExchangePlugin_ExportFeature() { @@ -46,21 +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::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()); } /* @@ -68,58 +67,101 @@ 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); + } + + // 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, aShape); + 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()); - 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 (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; + } + } - // Perform the export - TCollection_AsciiString anError; - TDF_Label anUnknownLabel = TDF_Label(); + if (aFormatName == "XAO") { + exportXAO(theFileName, theShape); + return; + } - TopoDS_Shape aShape(theShape->impl()); - bool aResult = true; + // Perform the export + 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(); - 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(); - return true; + XAO::Xao aXao(anAuthor, "1.0"); + + std::string anError; + XAOExport(theFileName, theShape, &aXao, anError); + + if (!anError.empty()) { + setError("An error occurred while exporting " + theFileName + ": " + anError); + return; + } } +