X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangeAPI%2FExchangeAPI_Export.cpp;h=cda585a2d7ead5f4db7aadf1572f719d37ca10e7;hb=656154b12cdcca1f1303b26f2978d59681c290d8;hp=ba11e392054ea5fe888d107ed58c6e8463061d62;hpb=5184a28e66996fafd2e2503f3c20c5b3081f98fb;p=modules%2Fshaper.git diff --git a/src/ExchangeAPI/ExchangeAPI_Export.cpp b/src/ExchangeAPI/ExchangeAPI_Export.cpp index ba11e3920..cda585a2d 100644 --- a/src/ExchangeAPI/ExchangeAPI_Export.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Export.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2020 CEA/DEN, EDF R&D +// Copyright (C) 2014-2024 CEA, EDF // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -21,6 +21,8 @@ //-------------------------------------------------------------------------------------- #include //-------------------------------------------------------------------------------------- +#include +//-------------------------------------------------------------------------------------- #include #include #include @@ -28,6 +30,8 @@ #include #include //-------------------------------------------------------------------------------------- +#include +//-------------------------------------------------------------------------------------- ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature) : ModelHighAPI_Interface(theFeature) @@ -37,14 +41,17 @@ ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& /// Constructor with values for XAO export. ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, - const std::string & theFilePath, - const std::string & theAuthor, - const std::string & theGeometryName) + const std::string & theFilePath, + const std::string & theAuthor, + const std::string & theGeometryName, + const std::string & theShapeFilePath) : ModelHighAPI_Interface(theFeature) { initialize(); fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())); + fillAttribute(theShapeFilePath, + theFeature->string(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID())); fillAttribute(theAuthor, theFeature->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())); fillAttribute(theGeometryName, theFeature->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())); @@ -57,68 +64,92 @@ ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, - double aDeflectionRelative, - double aDeflectionAbsolute, - const bool anIsRelative, - const bool anIsASCII) + const ModelHighAPI_Double& theDeflectionRelative, + const ModelHighAPI_Double& theDeflectionAbsolute, + const bool theIsRelative, + const bool theIsASCII) : ModelHighAPI_Interface(theFeature) { initialize(); fillAttribute("STL", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())); - - if (anIsRelative) { - fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), + + if (theIsRelative) { + fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), theFeature->string(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE()) ); - fillAttribute(aDeflectionRelative, - theFeature->real(ExchangePlugin_ExportFeature::STL_RELATIVE()) ); + fillAttribute(theDeflectionRelative, + theFeature->real(ExchangePlugin_ExportFeature::STL_RELATIVE()) ); } else { - fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), + fillAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), theFeature->string(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE()) ); - fillAttribute(aDeflectionAbsolute, + fillAttribute(theDeflectionAbsolute, theFeature->real(ExchangePlugin_ExportFeature::STL_ABSOLUTE()) ); } - if(anIsASCII){ - fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_ASCII(), + if(theIsASCII){ + fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_ASCII(), theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_TYPE())); } else { - fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_BINARY(), + fillAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE_BINARY(), theFeature->string(ExchangePlugin_ExportFeature::STL_FILE_TYPE())); } - - fillAttribute(theSelectedShape,theFeature->selection(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED())); + + fillAttribute(theSelectedShape, + theFeature->selection(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED())); fillAttribute("STL", theFeature->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())); execute(); apply(); // finish operation to make sure the export is done on the current state of the history } - - +/// Constructor with values for XAO of selected result export. ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, - const std::string & theFilePath, const ModelHighAPI_Selection& theResult, - const std::string & theAuthor, const std::string & theGeometryName) + const std::string & theFilePath, + const ModelHighAPI_Selection& theResult, + const std::string & theAuthor, + const std::string & theGeometryName, + const std::string & theShapeFilePath) : ModelHighAPI_Interface(theFeature) { initialize(); fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); fillAttribute(theFilePath, theFeature->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())); + fillAttribute(theShapeFilePath, + theFeature->string(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID())); fillAttribute(theAuthor, theFeature->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())); fillAttribute(theGeometryName, - theFeature->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())); + theFeature->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())); fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())); std::list aListOfOneSel; aListOfOneSel.push_back(theResult); fillAttribute(aListOfOneSel, - theFeature->selectionList(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID())); + theFeature->selectionList(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID())); execute(); apply(); // finish operation to make sure the export is done on the current state of the history } - +/// Constructor with values for XAO of selected result export to memory buffer. +ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, + const ModelHighAPI_Selection& theResult, + const std::string & theAuthor, + const std::string & theGeometryName) + : ModelHighAPI_Interface(theFeature) +{ + initialize(); + fillAttribute("XAOMem", theFeature->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())); + fillAttribute(theAuthor, theFeature->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())); + fillAttribute(theGeometryName, + theFeature->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())); + fillAttribute("XAO", theFeature->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID())); + std::list aListOfOneSel; + aListOfOneSel.push_back(theResult); + fillAttribute(aListOfOneSel, + theFeature->selectionList(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID())); + execute(); + apply(); // finish operation to make sure the export is done on the current state of the history +} /// Constructor with values for export in other formats than XAO. ExchangeAPI_Export::ExchangeAPI_Export(const std::shared_ptr& theFeature, @@ -166,13 +197,46 @@ void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const FeaturePtr aBase = feature(); const std::string& aDocName = theDumper.name(aBase->document()); - theDumper << aBase << " = model."; - std::string exportType = aBase->string(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID())->value(); + if (exportType == "XAOMem") { + std::string aGeometryName = + aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); + + theDumper << "aXAOBuff"; + std::string aGeometryNamePy; + if (! aGeometryName.empty()) { + aGeometryNamePy = aGeometryName; + } + else { + aGeometryNamePy = Locale::Convert::toString(aBase->data()->name()); + } + if (! aGeometryNamePy.empty()) { + // add shape name + std::replace(aGeometryNamePy.begin(), aGeometryNamePy.end(), ' ', '_'); + theDumper << "_" << aGeometryNamePy; + } + theDumper << " = model.exportToXAOMem(" << aDocName; + AttributeSelectionListPtr aShapeSelected = + aBase->selectionList(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID()); + if (aShapeSelected->isInitialized() && aShapeSelected->size() == 1) { + theDumper << ", " << aShapeSelected->value(0); + } + + std::string theAuthor = aBase->string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); + if (! theAuthor.empty()) + theDumper << ", '" << theAuthor << "'"; + if (! aGeometryName.empty()) + theDumper << ", '" << aGeometryName << "'"; + theDumper << ")" << std::endl; + return; + } + + theDumper << aBase << " = model."; + if (exportType == "XAO") { std::string aTmpXAOFile = - aBase->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value(); + aBase->string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value(); correctSeparators(aTmpXAOFile); theDumper << "exportToXAO(" << aDocName << ", '" << aTmpXAOFile << "'" ; AttributeSelectionListPtr aShapeSelected = @@ -185,7 +249,7 @@ void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const if (! theAuthor.empty()) theDumper << ", '" << theAuthor << "'"; std::string theGeometryName = - aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); + aBase->string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); if (! theGeometryName.empty()) theDumper << ", '" << theGeometryName << "'"; theDumper << ")" << std::endl; @@ -202,7 +266,8 @@ void ExchangeAPI_Export::dump(ModelHighAPI_Dumper& theDumper) const theDumper <<","<< stlabsolute() <<","<< stlrelative(); - if (stldeflectionType()->value() == ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE()) { + if (stldeflectionType()->value() + == ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE()){ theDumper <<","<< "True"; } else { @@ -242,21 +307,22 @@ ExportPtr exportToFile(const std::shared_ptr & thePart, } ExportPtr exportToXAO(const std::shared_ptr & thePart, - const std::string & theFilePath, - const std::string & theAuthor, - const std::string & theGeometryName) + const std::string & theFilePath, + const std::string & theAuthor, + const std::string & theGeometryName, + const std::string & theShapeFilePath) { apply(); // finish previous operation to make sure all previous operations are done std::shared_ptr aFeature = thePart->addFeature(ExchangePlugin_ExportFeature::ID()); - return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theAuthor, theGeometryName)); + return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theAuthor, theGeometryName, theShapeFilePath)); } ExportPtr exportToSTL(const std::shared_ptr & thePart, const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, - double theDeflectionRelative, - double theDeflectionAbsolute, + const ModelHighAPI_Double& theDeflectionRelative, + const ModelHighAPI_Double& theDeflectionAbsolute, const bool theIsRelative, const bool theIsASCII) { @@ -270,18 +336,35 @@ ExportPtr exportToSTL(const std::shared_ptr & thePart, theDeflectionRelative, theDeflectionAbsolute, theIsRelative, - theIsASCII)); + theIsASCII)); } ExportPtr exportToXAO(const std::shared_ptr & thePart, - const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, - const std::string & /*theAuthor*/, const std::string & /*theGeometryName*/) + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + const std::string & /*theAuthor*/, + const std::string & /*theGeometryName*/, + const std::string & theShapeFilePath) { apply(); // finish previous operation to make sure all previous operations are done std::shared_ptr aFeature = thePart->addFeature(ExchangePlugin_ExportFeature::ID()); // special internal case when for XAO a selection list is filled - return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theSelectedShape, "XAO")); + return ExportPtr(new ExchangeAPI_Export(aFeature, theFilePath, theSelectedShape, "XAO", "", theShapeFilePath)); +} + +PyObject* exportToXAOMem(const std::shared_ptr & thePart, + const ModelHighAPI_Selection& theSelectedShape, + const std::string & theAuthor, + const std::string & theGeometryName) +{ + apply(); // finish previous operation to make sure all previous operations are done + std::shared_ptr aFeature = + thePart->addFeature(ExchangePlugin_ExportFeature::ID()); + ExportPtr aXAOExportAPI (new ExchangeAPI_Export + (aFeature, theSelectedShape, theAuthor, theGeometryName)); + std::string aBuff = aFeature->string(ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID())->value(); + return PyBytes_FromStringAndSize(aBuff.c_str(), aBuff.length()); } void exportPart(const std::shared_ptr & thePart,