From: Nicolas RECHATIN Date: Mon, 22 Jul 2024 09:01:25 +0000 (+0200) Subject: Merge branch 'master' into OPERA X-Git-Url: http://git.salome-platform.org/gitweb/?a=commitdiff_plain;h=b164c81c7c4ca91b7d38b154dbdb60e8db34ba39;p=modules%2Fshaper.git Merge branch 'master' into OPERA --- b164c81c7c4ca91b7d38b154dbdb60e8db34ba39 diff --cc src/CTestTestfileInstall.cmake index e3f2a6c18,81b24a8da..5a1cee002 --- a/src/CTestTestfileInstall.cmake +++ b/src/CTestTestfileInstall.cmake @@@ -45,5 -46,5 +46,6 @@@ SUBDIRS(ConnectorAP ModelGeomAlgo Locale test_API + OperaPlugin + TestModels ) diff --cc src/ExchangeAPI/ExchangeAPI_Export.cpp index 0112b6433,cda585a2d..ccee9ca56 --- a/src/ExchangeAPI/ExchangeAPI_Export.cpp +++ b/src/ExchangeAPI/ExchangeAPI_Export.cpp @@@ -272,25 -315,9 +336,25 @@@ ExportPtr exportToXAO(const std::shared 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 exportToROOT(const std::shared_ptr &thePart, + const ModelHighAPI_Selection &theSelectedShape, + const std::string &theFilePath = "./exportedROOT.C", + const std::string &theManagerName = "manager_name", + const std::string &theManagerTitle = "manager_title", + const std::string &theExpFilePath = "exported.root") +{ + apply(); // finish previous operation to make sure all previous operations are done + std::shared_ptr aFeature = + thePart->addFeature(ExchangePlugin_ExportFeature::ID()); + if (theFilePath.substr(theFilePath.size() - 2) != ".C") + aFeature->setError(std::string("Error: the file seems to not have a .C extension file for ROOT. Aborting")); + return ExportPtr(new ExchangeAPI_Export(aFeature, theSelectedShape, theFilePath, theManagerName, theManagerTitle, theExpFilePath)); +} + + ExportPtr exportToSTL(const std::shared_ptr & thePart, const std::string & theFilePath, const ModelHighAPI_Selection& theSelectedShape, diff --cc src/ExchangeAPI/ExchangeAPI_Export.h index 309dd9df5,4500c95db..6bd82b433 --- a/src/ExchangeAPI/ExchangeAPI_Export.h +++ b/src/ExchangeAPI/ExchangeAPI_Export.h @@@ -51,26 -54,18 +54,27 @@@ public explicit ExchangeAPI_Export(const std::shared_ptr& theFeature, const std::string & theFilePath, const std::string & theAuthor = std::string(), - const std::string & theGeometryName = std::string()); + const std::string & theGeometryName = std::string(), + const std::string & theShapeFilePath = std::string()); + /// Constructor with values for ROOT export. + EXCHANGEAPI_EXPORT + explicit ExchangeAPI_Export(const std::shared_ptr &theFeature, + const ModelHighAPI_Selection &theSelectedShape, + const std::string &theFilePath, + const std::string &theManagerName, + const std::string &theManagerTitle, + const std::string &theExpFilePath); + /// Constructor with values for STL of selected result export. EXCHANGEAPI_EXPORT - explicit ExchangeAPI_Export(const std::shared_ptr& theFeature, - const std::string & theFilePath, - const ModelHighAPI_Selection& theSelectedShape, - const ModelHighAPI_Double& theDeflectionRelative , - const ModelHighAPI_Double& theDeflectionAbsolute, - const bool theIsRelative, - const bool theIsASCII); + explicit ExchangeAPI_Export(const std::shared_ptr& theFeature, + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + const ModelHighAPI_Double& theDeflectionRelative , + const ModelHighAPI_Double& theDeflectionAbsolute, + const bool theIsRelative, + const bool theIsASCII); /// Constructor with values for XAO of selected result export. EXCHANGEAPI_EXPORT @@@ -91,7 -94,7 +103,7 @@@ EXCHANGEAPI_EXPORT virtual ~ExchangeAPI_Export(); - INTERFACE_20(ExchangePlugin_ExportFeature::ID(), - INTERFACE_17(ExchangePlugin_ExportFeature::ID(), ++ INTERFACE_22(ExchangePlugin_ExportFeature::ID(), exportType, ExchangePlugin_ExportFeature::EXPORT_TYPE_ID(), ModelAPI_AttributeString, /** ExportType */, filePath, ExchangePlugin_ExportFeature::FILE_PATH_ID(), @@@ -129,12 -122,15 +141,15 @@@ stlfileType, ExchangePlugin_ExportFeature::STL_FILE_TYPE(), ModelAPI_AttributeString, /** Type of the stl file*/, stldeflectionTypeabsolute, - ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), + ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_ABSOLUTE(), ModelAPI_AttributeString, /** Type of the defelection */, stldeflectionTyperelative, - ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), + ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE_RELATIVE(), - ModelAPI_AttributeString, - /** Type of the defelection */) + ModelAPI_AttributeString, /** Type of the defelection */, + memoryBuff, ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID(), + ModelAPI_AttributeString, /** Bytes*/, + xaoShapeFilePath, ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID(), + ModelAPI_AttributeString, /** xao shape file path */) /// Dump wrapped feature EXCHANGEAPI_EXPORT @@@ -179,21 -176,21 +195,31 @@@ ExportPtr exportToSTL(const std::shared */ EXCHANGEAPI_EXPORT ExportPtr exportToXAO(const std::shared_ptr & thePart, - const std::string & theFilePath, - const ModelHighAPI_Selection& theSelectedShape, - const std::string & theAuthor = std::string(), - const std::string & theGeometryName = std::string()); + const std::string & theFilePath, + const ModelHighAPI_Selection& theSelectedShape, + const std::string & theAuthor = std::string(), + const std::string & theGeometryName = std::string(), + const std::string & theShapeFilePath = std::string()); + + /**\ingroup CPPHighAPI + * \brief Exports to XAO format buffer the selected result with groups parts related to it only. + */ + EXCHANGEAPI_EXPORT + PyObject* exportToXAOMem(const std::shared_ptr & thePart, + const ModelHighAPI_Selection& theSelectedShape, + const std::string & theAuthor = std::string(), + const std::string & theGeometryName = std::string()); +/**\ingroup CPPHighAPI + * \brief Exports to XAO file all results of the current document + */ +EXCHANGEAPI_EXPORT +ExportPtr exportToROOT(const std::shared_ptr &thePart, + const ModelHighAPI_Selection &theSelectedShape, + const std::string &theFilePath = "./exportedROOT.C", + const std::string &theManagerName = "manager_name", + const std::string &theManagerTitle = "manager_title", + const std::string &theExpFilePath = "exported.root"); /** \ingroup CPPHighAPI * \brief Export selected features or the whole part to the binary file. diff --cc src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp index 2a52e61b8,b536f54ef..0010a1c25 --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.cpp @@@ -95,90 -86,90 +97,105 @@@ ExchangePlugin_ExportFeature::~Exchange */ 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::XAO_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()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID(), - ModelAPI_AttributeSelectionList::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(), - ModelAPI_AttributeSelection::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_RELATIVE(), - ModelAPI_AttributeDouble::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::XAO_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()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID(), - ModelAPI_AttributeSelectionList::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(), - ModelAPI_AttributeSelection::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_RELATIVE(), - ModelAPI_AttributeDouble::typeId()); -- - double defelection = Config_PropManager::real("Visualization", "body_deflection"); - real(ExchangePlugin_ExportFeature::STL_RELATIVE())->setValue(defelection); - double defelection = Config_PropManager::real("Visualization", "body_deflection"); - real(ExchangePlugin_ExportFeature::STL_RELATIVE())->setValue(defelection); -- - data()->addAttribute(ExchangePlugin_ExportFeature::STL_ABSOLUTE(), - ModelAPI_AttributeDouble::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_ABSOLUTE(), - ModelAPI_AttributeDouble::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE(), - ModelAPI_AttributeString::typeId()); -- - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::STL_FILE_PATH_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_AUTHOR_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID()); - // export to memory buffer (implemented for XAO format only) - data()->addAttribute(ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID(), - ModelAPI_AttributeString::typeId()); -- - data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::MAIN_OBJECT_ID(), - ModelAPI_AttributeSelection::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID(), - ModelAPI_AttributeString::typeId()); - data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_SEPARATE_ID(), - ModelAPI_AttributeBoolean::typeId()); -- - // to support previous version of document, move the selection list - // if the type of export operation is XAO - AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID()); - if (aTypeAttr->isInitialized() && aTypeAttr->value() == "XAO") - { - bool aWasBlocked = data()->blockSendAttributeUpdated(true, false); - AttributeSelectionListPtr aSelList = selectionList(SELECTION_LIST_ID()); - AttributeSelectionListPtr aXAOSelList = selectionList(XAO_SELECTION_LIST_ID()); - if (aSelList->size() > 0 && aXAOSelList->size() == 0) - aSelList->copyTo(aXAOSelList); - aSelList->clear(); - data()->blockSendAttributeUpdated(aWasBlocked, false); - } - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::STL_FILE_PATH_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_AUTHOR_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID()); - ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), - ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_SEPARATE_ID()); - - // to support previous version of document, move the selection list - // if the type of export operation is XAO - AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID()); - if (aTypeAttr->isInitialized() && - (aTypeAttr->value() == "XAO" || aTypeAttr->value() == "XAOMem")) { - bool aWasBlocked = data()->blockSendAttributeUpdated(true, false); - AttributeSelectionListPtr aSelList = selectionList(SELECTION_LIST_ID()); - AttributeSelectionListPtr aXAOSelList = selectionList(XAO_SELECTION_LIST_ID()); - if (aSelList->size() > 0 && aXAOSelList->size() == 0) - aSelList->copyTo(aXAOSelList); - aSelList->clear(); - data()->blockSendAttributeUpdated(aWasBlocked, false); - } ++ data()->addAttribute(ExchangePlugin_ExportFeature::EXPORT_TYPE_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::FILE_PATH_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::XAO_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()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID(), ++ ModelAPI_AttributeSelectionList::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_OBJECT_SELECTED(), ++ ModelAPI_AttributeSelection::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_DEFLECTION_TYPE(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_RELATIVE(), ++ ModelAPI_AttributeDouble::typeId()); ++ ++ double defelection = Config_PropManager::real("Visualization", "body_deflection"); ++ real(ExchangePlugin_ExportFeature::STL_RELATIVE())->setValue(defelection); ++ ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_ABSOLUTE(), ++ ModelAPI_AttributeDouble::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::STL_FILE_TYPE(), ++ ModelAPI_AttributeString::typeId()); ++ ++ data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::MAIN_OBJECT_ID(), ++ ModelAPI_AttributeSelection::typeId()); ++ ++ // export to memory buffer (implemented for XAO format only) ++ data()->addAttribute(ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID(), ++ ModelAPI_AttributeString::typeId()); ++ ++ data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID(), ++ ModelAPI_AttributeString::typeId()); ++ data()->addAttribute(ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_SEPARATE_ID(), ++ ModelAPI_AttributeBoolean::typeId()); ++ ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::STL_FILE_PATH_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_AUTHOR_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_SELECTION_LIST_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_PATH_ID()); ++ ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), ++ ExchangePlugin_ExportFeature::XAO_SHAPE_FILE_SEPARATE_ID()); ++ ++ // to support previous version of document, move the selection list ++ // if the type of export operation is XAO ++ AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID()); ++ if (aTypeAttr->isInitialized() && ++ (aTypeAttr->value() == "XAO" || aTypeAttr->value() == "XAOMem")) { ++ bool aWasBlocked = data()->blockSendAttributeUpdated(true, false); ++ AttributeSelectionListPtr aSelList = selectionList(SELECTION_LIST_ID()); ++ AttributeSelectionListPtr aXAOSelList = selectionList(XAO_SELECTION_LIST_ID()); ++ if (aSelList->size() > 0 && aXAOSelList->size() == 0) ++ aSelList->copyTo(aXAOSelList); ++ aSelList->clear(); ++ data()->blockSendAttributeUpdated(aWasBlocked, false); ++ } } -void ExchangePlugin_ExportFeature::attributeChanged(const std::string& theID) +void ExchangePlugin_ExportFeature::attributeChanged(const std::string &theID) { - if (theID == XAO_FILE_PATH_ID()) - { - string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value()); - } - else if (theID == STL_FILE_PATH_ID()) - { - string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value()); - } - else if (theID == ROOT_FILE_PATH_ID()) - { - string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID())->value()); - } - if (theID == XAO_FILE_PATH_ID()) { - string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue( - string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value()); - } - else if (theID == STL_FILE_PATH_ID()) { - string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue( - string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value()); - } ++ if (theID == XAO_FILE_PATH_ID()) ++ { ++ string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::XAO_FILE_PATH_ID())->value()); ++ } ++ else if (theID == STL_FILE_PATH_ID()) ++ { ++ string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::STL_FILE_PATH_ID())->value()); ++ } ++ else if (theID == ROOT_FILE_PATH_ID()) ++ { ++ string(ExchangePlugin_ExportFeature::FILE_PATH_ID())->setValue(string(ExchangePlugin_ExportFeature::ROOT_FILE_PATH_ID())->value()); ++ } } /* @@@ -186,602 -177,470 +203,605 @@@ */ void ExchangePlugin_ExportFeature::execute() { - AttributeStringPtr aFormatAttr = - this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID()); - std::string aFormat = aFormatAttr->value(); - AttributeStringPtr aFormatAttr = - this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID()); - std::string aFormat = aFormatAttr->value(); - - bool isMemoryExport = false; - AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID()); - if (aTypeAttr->isInitialized() && aTypeAttr->value() == "XAOMem") - isMemoryExport = true; - - AttributeStringPtr aFilePathAttr = - this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()); - std::string aFilePath = aFilePathAttr->value(); - if (aFilePath.empty() && !isMemoryExport) - return; - - exportFile(aFilePath, aFormat, isMemoryExport); ++ AttributeStringPtr aFormatAttr = this->string(ExchangePlugin_ExportFeature::FILE_FORMAT_ID()); ++ std::string aFormat = aFormatAttr->value(); + - AttributeStringPtr aFilePathAttr = - this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()); ++ bool isMemoryExport = false; ++ AttributeStringPtr aTypeAttr = string(EXPORT_TYPE_ID()); ++ if (aTypeAttr->isInitialized() && aTypeAttr->value() == "XAOMem") ++ isMemoryExport = true; + - std::string aFilePath = aFilePathAttr->value(); - if (aFilePath.empty()) - return; ++ AttributeStringPtr aFilePathAttr = this->string(ExchangePlugin_ExportFeature::FILE_PATH_ID()); ++ std::string aFilePath = aFilePathAttr->value(); ++ if (aFilePath.empty() && !isMemoryExport) ++ return; + - exportFile(aFilePath, aFormat); ++ exportFile(aFilePath, aFormat, isMemoryExport); } - void ExchangePlugin_ExportFeature::exportFile(const std::string &theFileName, - const std::string &theFormat) + void ExchangePlugin_ExportFeature::exportFile(const std::string& theFileName, + const std::string& theFormat, + const bool isMemoryExport) { - std::string aFormatName = theFormat; - - if (aFormatName.empty()) { // get default format for the extension - if (isMemoryExport) return; - - // ".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; - } - } - - if (aFormatName == "XAO") { - exportXAO(theFileName, isMemoryExport); - return; - } else if (aFormatName == "STL") { - exportSTL(theFileName); - return; - } - - // make shape for export from selected shapes - AttributeSelectionListPtr aSelectionListAttr = - this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); - std::list aShapes; - std::list aContexts; - for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) { - AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i); - - /// do not export pictures - ResultPtr aBodyContext = - std::dynamic_pointer_cast(anAttrSelection->context()); - if (aBodyContext.get() && aBodyContext->hasTexture()) - continue; - - std::shared_ptr aCurShape = anAttrSelection->value(); - if (aCurShape.get() == NULL) - aCurShape = anAttrSelection->context()->shape(); - if (aCurShape.get() != NULL) - { - aShapes.push_back(aCurShape); - aContexts.push_back(anAttrSelection->context()); - } - } - - // Store compound if we have more than one shape. - std::shared_ptr aShape = - aShapes.size() == 1 ? aShapes.front() : GeomAlgoAPI_CompoundBuilder::compound(aShapes); - - // Perform the export - std::string anError; - bool aResult = false; - if (aFormatName == "BREP") { - aResult = BREPExport(theFileName, aFormatName, aShape, anError); - } else if (aFormatName == "STEP") { - aResult = STEPExport(theFileName, aShapes, aContexts, anError); - } else if (aFormatName.substr(0, 4) == "IGES") { - aResult = IGESExport(theFileName, aFormatName, aShape, anError); - } else { - anError = "Unsupported format: " + aFormatName; - } - - if (!aResult || !anError.empty()) { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } + 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 == "C") - { - aFormatName = "ROOT"; - } - else - { - aFormatName = anExtension; - } - } - - if (aFormatName == "XAO") - { - exportXAO(theFileName); - return; - } - else if (aFormatName == "STL") - { - exportSTL(theFileName); - return; - } - else if (aFormatName == "ROOT") - { - exportROOT(theFileName); - return; - } - - // make shape for export from selected shapes - AttributeSelectionListPtr aSelectionListAttr = - this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); - std::list aShapes; - std::list aContexts; - for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i) - { - AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i); - - /// do not export pictures - ResultPtr aBodyContext = - std::dynamic_pointer_cast(anAttrSelection->context()); - if (aBodyContext.get() && aBodyContext->hasTexture()) - continue; - - std::shared_ptr aCurShape = anAttrSelection->value(); - if (aCurShape.get() == NULL) - aCurShape = anAttrSelection->context()->shape(); - if (aCurShape.get() != NULL) - { - aShapes.push_back(aCurShape); - aContexts.push_back(anAttrSelection->context()); - } - } - - // Store compound if we have more than one shape. - std::shared_ptr aShape = - aShapes.size() == 1 ? aShapes.front() : GeomAlgoAPI_CompoundBuilder::compound(aShapes); - - // Perform the export - std::string anError; - bool aResult = false; - if (aFormatName == "BREP") - { - aResult = BREPExport(theFileName, aFormatName, aShape, anError); - } - else if (aFormatName == "STEP") - { - aResult = STEPExport(theFileName, aShapes, aContexts, anError); - } - else if (aFormatName.substr(0, 4) == "IGES") - { - aResult = IGESExport(theFileName, aFormatName, aShape, anError); - } - else - { - anError = "Unsupported format: " + aFormatName; - } - - if (!aResult || !anError.empty()) - { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } ++ if (aFormatName.empty()) { // get default format for the extension ++ if (isMemoryExport) return; ++ ++ // ".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; ++ } ++ } ++ ++ if (aFormatName == "XAO") { ++ exportXAO(theFileName, isMemoryExport); ++ return; ++ } else if (aFormatName == "STL") { ++ exportSTL(theFileName); ++ return; ++ } ++ ++ // make shape for export from selected shapes ++ AttributeSelectionListPtr aSelectionListAttr = ++ this->selectionList(ExchangePlugin_ExportFeature::SELECTION_LIST_ID()); ++ std::list aShapes; ++ std::list aContexts; ++ for (int i = 0, aSize = aSelectionListAttr->size(); i < aSize; ++i){ ++ AttributeSelectionPtr anAttrSelection = aSelectionListAttr->value(i); ++ ++ /// do not export pictures ++ ResultPtr aBodyContext = ++ std::dynamic_pointer_cast(anAttrSelection->context()); ++ if (aBodyContext.get() && aBodyContext->hasTexture()) ++ continue; ++ ++ std::shared_ptr aCurShape = anAttrSelection->value(); ++ if (aCurShape.get() == NULL) ++ aCurShape = anAttrSelection->context()->shape(); ++ if (aCurShape.get() != NULL) ++ { ++ aShapes.push_back(aCurShape); ++ aContexts.push_back(anAttrSelection->context()); ++ } ++ else if (aFormatName == "STL") ++ { ++ exportSTL(theFileName); ++ return; ++ } ++ else if (aFormatName == "ROOT") ++ { ++ exportROOT(theFileName); ++ return; ++ } ++ } ++ ++ // Store compound if we have more than one shape. ++ std::shared_ptr aShape = ++ aShapes.size() == 1 ? aShapes.front() : GeomAlgoAPI_CompoundBuilder::compound(aShapes); ++ ++ // Perform the export ++ std::string anError; ++ bool aResult = false; ++ if (aFormatName == "BREP"){ ++ aResult = BREPExport(theFileName, aFormatName, aShape, anError); ++ } else if (aFormatName == "STEP"){ ++ aResult = STEPExport(theFileName, aShapes, aContexts, anError); ++ } else if (aFormatName.substr(0, 4) == "IGES"){ ++ aResult = IGESExport(theFileName, aFormatName, aShape, anError); ++ } else { ++ anError = "Unsupported format: " + aFormatName; ++ } ++ ++ if (!aResult || !anError.empty()){ ++ setError("An error occurred while exporting " + theFileName + ": " + anError); ++ return; ++ } } /// Returns XAO string by the value from the table - static std::string valToString(const ModelAPI_AttributeTables::Value &theVal, - const ModelAPI_AttributeTables::ValueType &theType) + static std::string valToString(const ModelAPI_AttributeTables::Value& theVal, + const ModelAPI_AttributeTables::ValueType& theType) { - std::ostringstream aStr; // the resulting string value - switch (theType) - { - case ModelAPI_AttributeTables::BOOLEAN: - aStr << (theVal.myBool ? "true" : "false"); - break; - case ModelAPI_AttributeTables::INTEGER: - aStr << theVal.myInt; - break; - case ModelAPI_AttributeTables::DOUBLE: - aStr << theVal.myDouble; - break; - case ModelAPI_AttributeTables::STRING: - aStr << theVal.myStr; - break; - } - return aStr.str(); + std::ostringstream aStr; // the resulting string value + switch(theType) { + case ModelAPI_AttributeTables::BOOLEAN: + aStr<<(theVal.myBool ? "true" : "false"); + break; + case ModelAPI_AttributeTables::INTEGER: + aStr<value(); - if (!aShape.get()) { - aShape = aSelection->context()->shape(); - } + // Get shape. + AttributeSelectionPtr aSelection = selection(STL_OBJECT_SELECTED()); + GeomShapePtr aShape = aSelection->value(); - if (!aShape.get()) - { ++ if (!aShape.get()){ + aShape = aSelection->context()->shape(); + } - // Get relative value and percent flag. - double aValue; - bool anIsRelative = false; - bool anIsASCII = false; + // Get relative value and percent flag. + double aValue; + bool anIsRelative = false; + bool anIsASCII = false; - if (string(STL_DEFLECTION_TYPE())->value() == STL_DEFLECTION_TYPE_RELATIVE()) - { - if (string(STL_DEFLECTION_TYPE())->value() == STL_DEFLECTION_TYPE_RELATIVE()) { - aValue = real(STL_RELATIVE())->value(); - anIsRelative = true; - } else { - aValue = real(STL_ABSOLUTE())->value(); - } ++ if (string(STL_DEFLECTION_TYPE())->value() == STL_DEFLECTION_TYPE_RELATIVE()) { + aValue = real(STL_RELATIVE())->value(); + anIsRelative = true; - } - else - { ++ } else { + aValue = real(STL_ABSOLUTE())->value(); + } - if (string(STL_FILE_TYPE())->value() == STL_FILE_TYPE_ASCII()) - { - if (string(STL_FILE_TYPE())->value() == STL_FILE_TYPE_ASCII()) { - anIsASCII = true; - } - // Perform the export - std::string anError; - bool aResult = false; - - aResult = STLExport(theFileName, - aShape, - aValue, - anIsRelative, - anIsASCII, - anError); - - if (!aResult || !anError.empty()) { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } ++ if (string(STL_FILE_TYPE())->value() == STL_FILE_TYPE_ASCII()) { + anIsASCII = true; + } + // Perform the export + std::string anError; + bool aResult = false; + + aResult = STLExport(theFileName, + aShape, + aValue, + anIsRelative, + anIsASCII, + anError); + + if (!aResult || !anError.empty()) + { + setError("An error occurred while exporting " + theFileName + ": " + anError); + return; + } } - void ExchangePlugin_ExportFeature::exportXAO(const std::string &theFileName) - { - try - { - std::string anError; - XAO::Xao aXao; - - // author - - std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); - aXao.setAuthor(anAuthor); - - // make shape for export from all results - std::list aShapes; - std::list aResults; - std::list aDocuments; /// documents of Parts selected and used in export - std::map aDocTrsf; /// translation of the part - - bool anExCludedIsImage = false; - AttributeSelectionListPtr aSelection = selectionList(XAO_SELECTION_LIST_ID()); - bool aIsSelection = aSelection->isInitialized() && aSelection->size() > 0; - if (aIsSelection) - { // a mode for export to geom result by result - for (int a = 0; a < aSelection->size(); a++) - { - AttributeSelectionPtr anAttr = aSelection->value(a); - ResultPtr aBodyContext = - std::dynamic_pointer_cast(anAttr->context()); - if (aBodyContext.get() && !aBodyContext->isDisabled() && aBodyContext->shape().get()) - { - /// do not export pictures - if (aBodyContext->hasTexture()) - { - anExCludedIsImage = true; - continue; - } - aResults.push_back(aBodyContext); - GeomShapePtr aShape = anAttr->value(); - if (!aShape.get()) - aShape = aBodyContext->shape(); - aShapes.push_back(aShape); - if (aBodyContext->groupName() == ModelAPI_ResultPart::group()) - { - ResultPartPtr aResPart = std::dynamic_pointer_cast(aBodyContext); - DocumentPtr aPartDoc = aResPart->partDoc(); - if (!aPartDoc.get() || !aPartDoc->isOpened()) - { // document is not accessible - std::string msg = "Can not export XAO for not loaded part"; - Events_InfoMessage("ExportFeature", msg, this).send(); - return; - } - else - { - aDocuments.push_back(aPartDoc); - aDocTrsf[aPartDoc] = aResPart->summaryTrsf(); - } - } - } - } - } - else - { - int aBodyCount = document()->size(ModelAPI_ResultBody::group()); - for (int aBodyIndex = 0; aBodyIndex < aBodyCount; ++aBodyIndex) - { - ResultBodyPtr aResultBody = - std::dynamic_pointer_cast( - document()->object(ModelAPI_ResultBody::group(), aBodyIndex)); - if (!aResultBody.get()) - continue; - aShapes.push_back(aResultBody->shape()); - aResults.push_back(aResultBody); - } - } - if (aShapes.empty()) - { - if (!anExCludedIsImage) - setError("No shapes to export"); - return; - } - - GeomShapePtr aShape = (aShapes.size() == 1) - ? *aShapes.begin() - : GeomAlgoAPI_CompoundBuilder::compound(aShapes); - - SetShapeToXAO(aShape, &aXao, anError); - - if (!anError.empty()) - { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } - - // geometry name - std::string aGeometryName = string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); - if (aGeometryName.empty() && aResults.size() == 1) - { - // get the name from the first result - ResultPtr aResultBody = *aResults.begin(); - aGeometryName = Locale::Convert::toString(aResultBody->data()->name()); - } - - aXao.getGeometry()->setName(aGeometryName); - - std::set allResultsCashed; // cash to speed up searching in all results selected - - // iterate all documents used - if (aDocuments.empty()) - aDocuments.push_back(document()); - std::list::iterator aDoc = aDocuments.begin(); - for (; aDoc != aDocuments.end(); aDoc++) - { - // groups - int aGroupCount = (*aDoc)->size(ModelAPI_ResultGroup::group()); - for (int aGroupIndex = 0; aGroupIndex < aGroupCount; ++aGroupIndex) - { - ResultGroupPtr aResultGroup = std::dynamic_pointer_cast( - (*aDoc)->object(ModelAPI_ResultGroup::group(), aGroupIndex)); - if (!aResultGroup.get() || !aResultGroup->shape().get()) - continue; - - FeaturePtr aGroupFeature = (*aDoc)->feature(aResultGroup); - - AttributeSelectionListPtr aSelectionList = - aGroupFeature->selectionList("group_list"); - if (!ModelAPI_Tools::isInResults(aSelectionList, - aResults, - allResultsCashed)) // skip group not used in result - continue; - - // conversion of dimension - std::string aSelectionType = aSelectionList->selectionType(); - GeomAPI_Shape::ShapeType aSelType = GeomAPI_Shape::shapeTypeByStr(aSelectionType); - std::string aDimensionString = - ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); - XAO::Dimension aGroupDimension = XAO::XaoUtils::stringToDimension(aDimensionString); - - XAO::Group *aXaoGroup = aXao.addGroup(aGroupDimension, - Locale::Convert::toString(aResultGroup->data()->name())); - - try - { - GeomAPI_ShapeExplorer aGroupResExplorer(aResultGroup->shape(), aSelType); - for (; aGroupResExplorer.more(); aGroupResExplorer.next()) - { - GeomShapePtr aGroupShape = aGroupResExplorer.current(); - if (aDocTrsf.find(*aDoc) != aDocTrsf.end()) - aGroupShape->move(aDocTrsf[*aDoc]); - int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aGroupShape); - if (aReferenceID == 0) // selected value does not found in the exported shape - continue; - std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); - int anElementID = - aXao.getGeometry()->getElementIndexByReference(aGroupDimension, aReferenceString); - aXaoGroup->add(anElementID); - } - } - catch (XAO::XAO_Exception &e) - { - // LCOV_EXCL_START - std::string msg = "An error occurred while exporting group " + - Locale::Convert::toString(aResultGroup->data()->name()); - msg += ".\n"; - msg += e.what(); - msg += "\n"; - msg += "=> skipping this group from XAO export."; - Events_InfoMessage("ExportFeature", msg, this).send(); - aXao.removeGroup(aXaoGroup); - // LCOV_EXCL_STOP - } - } - - // fields - int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group()); - for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex) - { - ResultFieldPtr aResultField = std::dynamic_pointer_cast( - (*aDoc)->object(ModelAPI_ResultField::group(), aFieldIndex)); - - FeaturePtr aFieldFeature = (*aDoc)->feature(aResultField); - - AttributeSelectionListPtr aSelectionList = - aFieldFeature->selectionList("selected"); - std::string aSelectionType = aSelectionList->selectionType(); - bool isWholePart = aSelectionType == "part"; - // skip field not used in results - if (!isWholePart && - !ModelAPI_Tools::isInResults(aSelectionList, aResults, allResultsCashed)) - continue; - - // conversion of dimension - std::string aDimensionString = - ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); - XAO::Dimension aFieldDimension = XAO::XaoUtils::stringToDimension(aDimensionString); - // get tables and their type - std::shared_ptr aTables = aFieldFeature->tables("values"); - std::string aTypeString = ExchangePlugin_Tools::valuesType2xaoType(aTables->type()); - XAO::Type aFieldType = XAO::XaoUtils::stringToFieldType(aTypeString); - - XAO::Field *aXaoField = aXao.addField(aFieldType, aFieldDimension, aTables->columns(), - Locale::Convert::toString(aResultField->data()->name())); - - try - { - // set components names - AttributeStringArrayPtr aComponents = aFieldFeature->stringArray("components_names"); - for (int aComp = 0; aComp < aComponents->size(); aComp++) - { - std::string aName = aComponents->value(aComp); - aXaoField->setComponentName(aComp, aName); - } - - AttributeIntArrayPtr aStamps = aFieldFeature->intArray("stamps"); - for (int aStepIndex = 0; aStepIndex < aTables->tables(); aStepIndex++) - { - XAO::Step *aStep = aXaoField->addNewStep(aStepIndex + 1); - aStep->setStep(aStepIndex + 1); - int aStampIndex = aStamps->value(aStepIndex); - aStep->setStamp(aStampIndex); - int aNumElements = isWholePart ? aXaoField->countElements() : aTables->rows(); - int aNumComps = aTables->columns(); - std::set aFilledIDs; // to fill the rest by defaults - // omit default values first row - for (int aRow = isWholePart ? 0 : 1; aRow < aNumElements; aRow++) - { - for (int aCol = 0; aCol < aNumComps; aCol++) - { - int anElementID = 0; - if (!isWholePart) - { - // element index actually is the ID of the selection - AttributeSelectionPtr aSel = aSelectionList->value(aRow - 1); - int aReferenceID = GeomAlgoAPI_CompoundBuilder::id(aShape, aSel->value()); - if (aReferenceID == 0) // selected value does not found in the exported shape - continue; - - std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); - anElementID = aXao.getGeometry()->getElementIndexByReference(aFieldDimension, aReferenceString); - } - - ModelAPI_AttributeTables::Value aVal = aTables->value( - isWholePart ? 0 : aRow, aCol, aStepIndex); - std::string aStrVal = valToString(aVal, aTables->type()); - aStep->setStringValue(isWholePart ? aRow : anElementID, aCol, aStrVal); - aFilledIDs.insert(anElementID); - } - } - if (!isWholePart) - { // fill the rest values by default ones - XAO::GeometricElementList::iterator allElem = - aXao.getGeometry()->begin(aFieldDimension); - for (; allElem != aXao.getGeometry()->end(aFieldDimension); allElem++) - { - if (aFilledIDs.find(allElem->first) != aFilledIDs.end()) - continue; - for (int aCol = 0; aCol < aNumComps; aCol++) - { - // default value - ModelAPI_AttributeTables::Value aVal = aTables->value(0, aCol, aStepIndex); - std::string aStrVal = valToString(aVal, aTables->type()); - aStep->setStringValue(allElem->first, aCol, aStrVal); - } - } - } - } - } - catch (XAO::XAO_Exception &e) - { - // LCOV_EXCL_START - std::string msg = "An error occurred while exporting field " + - Locale::Convert::toString(aResultField->data()->name()); - msg += ".\n"; - msg += e.what(); - msg += "\n"; - msg += "=> skipping this field from XAO export."; - Events_InfoMessage("ExportFeature", msg, this).send(); - aXao.removeField(aXaoField); - // LCOV_EXCL_STOP - } - } - } - - // exporting - XAOExport(theFileName, &aXao, anError); - - if (!anError.empty()) - { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } - - // LCOV_EXCL_START - } - catch (XAO::XAO_Exception &e) - { - std::string anError = e.what(); - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } - // LCOV_EXCL_STOP + void ExchangePlugin_ExportFeature::exportXAO(const std::string& theFileName, + const bool isMemoryExport) + { - try { - - std::string anError; - XAO::Xao aXao; - - // author - - std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); - aXao.setAuthor(anAuthor); - - // make shape for export from all results - std::list aShapes; - std::list aResults; - std::list aDocuments; /// documents of Parts selected and used in export - std::map aDocTrsf; /// translation of the part - - bool anExCludedIsImage = false; - AttributeSelectionListPtr aSelection = selectionList(XAO_SELECTION_LIST_ID()); - bool aIsSelection = aSelection->isInitialized() && aSelection->size() > 0; - if (aIsSelection) { // a mode for export to geom result by result - for (int a = 0; a < aSelection->size(); a++) { - AttributeSelectionPtr anAttr = aSelection->value(a); - ResultPtr aBodyContext = - std::dynamic_pointer_cast(anAttr->context()); - if (aBodyContext.get() && !aBodyContext->isDisabled() && aBodyContext->shape().get()) { - /// do not export pictures - if (aBodyContext->hasTexture()){ - anExCludedIsImage = true; - continue; - } - aResults.push_back(aBodyContext); - GeomShapePtr aShape = anAttr->value(); - if (!aShape.get()) - aShape = aBodyContext->shape(); - aShapes.push_back(aShape); - if (aBodyContext->groupName() == ModelAPI_ResultPart::group()) { - ResultPartPtr aResPart = std::dynamic_pointer_cast(aBodyContext); - DocumentPtr aPartDoc = aResPart->partDoc(); - if (!aPartDoc.get() || !aPartDoc->isOpened()) { // document is not accessible - std::string msg = "Can not export XAO for not loaded part"; - Events_InfoMessage("ExportFeature", msg, this).send(); - return; - } else { - aDocuments.push_back(aPartDoc); - aDocTrsf[aPartDoc] = aResPart->summaryTrsf(); - } - } - } - } - } else { - int aBodyCount = document()->size(ModelAPI_ResultBody::group()); - for (int aBodyIndex = 0; aBodyIndex < aBodyCount; ++aBodyIndex) { - ResultBodyPtr aResultBody = - std::dynamic_pointer_cast( - document()->object(ModelAPI_ResultBody::group(), aBodyIndex)); - if (!aResultBody.get()) - continue; - aShapes.push_back(aResultBody->shape()); - aResults.push_back(aResultBody); - } - } - if (aShapes.empty()) { - if(!anExCludedIsImage) - setError("No shapes to export"); - return; - } ++ try { ++ ++ std::string anError; ++ XAO::Xao aXao; ++ ++ // author ++ std::string anAuthor = string(ExchangePlugin_ExportFeature::XAO_AUTHOR_ID())->value(); ++ aXao.setAuthor(anAuthor); ++ ++ // make shape for export from all results ++ std::list aShapes; ++ std::list aResults; ++ std::list aDocuments; /// documents of Parts selected and used in export ++ std::map aDocTrsf; /// translation of the part ++ ++ bool anExCludedIsImage = false; ++ AttributeSelectionListPtr aSelection = selectionList(XAO_SELECTION_LIST_ID()); ++ bool aIsSelection = aSelection->isInitialized() && aSelection->size() > 0; ++ if (aIsSelection) ++ { // a mode for export to geom result by result ++ for (int a = 0; a < aSelection->size(); a++) ++ { ++ AttributeSelectionPtr anAttr = aSelection->value(a); ++ ResultPtr aBodyContext = ++ std::dynamic_pointer_cast(anAttr->context()); ++ if (aBodyContext.get() && !aBodyContext->isDisabled() && aBodyContext->shape().get()) { ++ /// do not export pictures ++ if (aBodyContext->hasTexture()) { ++ anExCludedIsImage = true; ++ continue; ++ } ++ aResults.push_back(aBodyContext); ++ GeomShapePtr aShape = anAttr->value(); ++ if (!aShape.get()) ++ aShape = aBodyContext->shape(); ++ aShapes.push_back(aShape); ++ if (aBodyContext->groupName() == ModelAPI_ResultPart::group()) { ++ ResultPartPtr aResPart = std::dynamic_pointer_cast(aBodyContext); ++ DocumentPtr aPartDoc = aResPart->partDoc(); ++ if (!aPartDoc.get() || !aPartDoc->isOpened()) { // document is not accessible ++ std::string msg = "Can not export XAO for not loaded part"; ++ Events_InfoMessage("ExportFeature", msg, this).send(); ++ return; ++ } else { ++ aDocuments.push_back(aPartDoc); ++ aDocTrsf[aPartDoc] = aResPart->summaryTrsf(); ++ } ++ } ++ } ++ } ++ } else { ++ int aBodyCount = document()->size(ModelAPI_ResultBody::group()); ++ for (int aBodyIndex = 0; aBodyIndex < aBodyCount; ++aBodyIndex) { ++ ResultBodyPtr aResultBody = ++ std::dynamic_pointer_cast( ++ document()->object(ModelAPI_ResultBody::group(), aBodyIndex)); ++ if (!aResultBody.get()) ++ continue; ++ aShapes.push_back(aResultBody->shape()); ++ aResults.push_back(aResultBody); ++ } ++ } ++ if (aShapes.empty()) { ++ if (!anExCludedIsImage) ++ setError("No shapes to export"); ++ return; ++ } ++ ++ ++ GeomShapePtr aShape = (aShapes.size() == 1) ++ ? *aShapes.begin() ++ : GeomAlgoAPI_CompoundBuilder::compound(aShapes); ++ ++ SetShapeToXAO(aShape, &aXao, anError); ++ ++ if (!anError.empty()) { ++ setError("An error occurred while exporting " + theFileName + ": " + anError); ++ return; ++ } ++ ++ // geometry name ++ std::string aGeometryName = string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); ++ if (aGeometryName.empty() && aResults.size() == 1) { ++ // get the name from the first result ++ ResultPtr aResultBody = *aResults.begin(); ++ aGeometryName = Locale::Convert::toString(aResultBody->data()->name()); ++ if (isMemoryExport) { ++ // for python dump ++ string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->setValue(aGeometryName); ++ // or ++ //data()->setName(Locale::Convert::toWString(aGeometryName)); ++ } ++ } ++ ++ aXao.getGeometry()->setName(aGeometryName); ++ ++ std::set allResultsCashed; // cash to speed up searching in all results selected ++ ++ // [bos #38360] [CEA] improve performances of exportXAO and PublishToStudy ++ GeomAPI_IndexedMapOfShape aSubShapesMap; ++ bool isSubShapesMap = false; // we will init it only if required (for performance reason) ++ ++ // iterate all documents used ++ if (aDocuments.empty()) ++ aDocuments.push_back(document()); ++ std::list::iterator aDoc = aDocuments.begin(); ++ for(; aDoc != aDocuments.end(); aDoc++) { ++ // groups ++ int aGroupCount = (*aDoc)->size(ModelAPI_ResultGroup::group()); ++ for (int aGroupIndex = 0; aGroupIndex < aGroupCount; ++aGroupIndex) { ++ ResultGroupPtr aResultGroup = std::dynamic_pointer_cast( ++ (*aDoc)->object(ModelAPI_ResultGroup::group(), aGroupIndex)); ++ if (!aResultGroup.get() || !aResultGroup->shape().get()) ++ continue; ++ ++ FeaturePtr aGroupFeature = (*aDoc)->feature(aResultGroup); ++ ++ AttributeSelectionListPtr aSelectionList = ++ aGroupFeature->selectionList("group_list"); ++ if (!ModelAPI_Tools::isInResults(aSelectionList, ++ aResults, ++ allResultsCashed))// skip group not used in result ++ continue; ++ ++ // conversion of dimension ++ std::string aSelectionType = aSelectionList->selectionType(); ++ GeomAPI_Shape::ShapeType aSelType = GeomAPI_Shape::shapeTypeByStr(aSelectionType); ++ std::string aDimensionString = ++ ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); ++ XAO::Dimension aGroupDimension = XAO::XaoUtils::stringToDimension(aDimensionString); ++ XAO::Group* aXaoGroup = aXao.addGroup(aGroupDimension, ++ Locale::Convert::toString(aResultGroup->data()->name())); ++ ++ try { ++ GeomAPI_ShapeExplorer aGroupResExplorer(aResultGroup->shape(), aSelType); ++ for(; aGroupResExplorer.more(); aGroupResExplorer.next()) { ++ GeomShapePtr aGroupShape = aGroupResExplorer.current(); ++ if (aDocTrsf.find(*aDoc) != aDocTrsf.end()) ++ aGroupShape->move(aDocTrsf[*aDoc]); ++ ++ if (!isSubShapesMap) { ++ aSubShapesMap.MapShapes(aShape); ++ isSubShapesMap = true; ++ } ++ int aReferenceID = aSubShapesMap.FindIndexEqualLocations(aGroupShape); ++ if (aReferenceID == 0) // selected value does not found in the exported shape ++ continue; ++ std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); ++ int anElementID = ++ aXao.getGeometry()->getElementIndexByReference(aGroupDimension, aReferenceString); ++ aXaoGroup->add(anElementID); ++ } ++ } catch (XAO::XAO_Exception& e) { ++ // LCOV_EXCL_START ++ std::string msg = "An error occurred while exporting group " + ++ Locale::Convert::toString(aResultGroup->data()->name()); ++ msg += ".\n"; ++ msg += e.what(); ++ msg += "\n"; ++ msg += "=> skipping this group from XAO export."; ++ Events_InfoMessage("ExportFeature", msg, this).send(); ++ aXao.removeGroup(aXaoGroup); ++ // LCOV_EXCL_STOP ++ } ++ } ++ ++ // fields ++ int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group()); ++ for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex) ++ { ++ ResultFieldPtr aResultField = std::dynamic_pointer_cast( ++ (*aDoc)->object(ModelAPI_ResultField::group(), aFieldIndex)); ++ ++ FeaturePtr aFieldFeature = (*aDoc)->feature(aResultField); ++ ++ AttributeSelectionListPtr aSelectionList = ++ aFieldFeature->selectionList("selected"); ++ std::string aSelectionType = aSelectionList->selectionType(); ++ bool isWholePart = aSelectionType == "part"; ++ // skip field not used in results ++ if (!isWholePart && ++ !ModelAPI_Tools::isInResults(aSelectionList, aResults, allResultsCashed)) ++ continue; ++ ++ // conversion of dimension ++ std::string aDimensionString = ++ ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); ++ XAO::Dimension aFieldDimension = XAO::XaoUtils::stringToDimension(aDimensionString); ++ // get tables and their type ++ std::shared_ptr aTables = aFieldFeature->tables("values"); ++ std::string aTypeString = ExchangePlugin_Tools::valuesType2xaoType(aTables->type()); ++ XAO::Type aFieldType = XAO::XaoUtils::stringToFieldType(aTypeString); ++ ++ XAO::Field *aXaoField = aXao.addField(aFieldType, aFieldDimension, aTables->columns(), ++ Locale::Convert::toString(aResultField->data()->name())); ++ ++ try ++ { ++ // set components names ++ AttributeStringArrayPtr aComponents = aFieldFeature->stringArray("components_names"); ++ for (int aComp = 0; aComp < aComponents->size(); aComp++) ++ { ++ std::string aName = aComponents->value(aComp); ++ aXaoField->setComponentName(aComp, aName); ++ } ++ ++ AttributeIntArrayPtr aStamps = aFieldFeature->intArray("stamps"); ++ for (int aStepIndex = 0; aStepIndex < aTables->tables(); aStepIndex++) ++ { ++ XAO::Step *aStep = aXaoField->addNewStep(aStepIndex + 1); ++ aStep->setStep(aStepIndex + 1); ++ int aStampIndex = aStamps->value(aStepIndex); ++ aStep->setStamp(aStampIndex); ++ int aNumElements = isWholePart ? aXaoField->countElements() : aTables->rows(); ++ int aNumComps = aTables->columns(); ++ std::set aFilledIDs; // to fill the rest by defaults ++ // omit default values first row ++ for (int aRow = isWholePart ? 0 : 1; aRow < aNumElements; aRow++) ++ { ++ for (int aCol = 0; aCol < aNumComps; aCol++) ++ { ++ int anElementID = 0; ++ if (!isWholePart) ++ { ++ // element index actually is the ID of the selection ++ AttributeSelectionPtr aSel = aSelectionList->value(aRow - 1); ++ if (!isSubShapesMap) ++ { ++ aSubShapesMap.MapShapes(aShape); ++ isSubShapesMap = true; ++ } ++ int aReferenceID = aSubShapesMap.FindIndexEqualLocations(aSel->value()); ++ if (aReferenceID == 0) // selected value does not found in the exported shape ++ continue; ++ ++ std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); ++ anElementID = aXao.getGeometry()->getElementIndexByReference(aFieldDimension, aReferenceString); ++ } ++ ++ ModelAPI_AttributeTables::Value aVal = aTables->value( ++ isWholePart ? 0 : aRow, aCol, aStepIndex); ++ std::string aStrVal = valToString(aVal, aTables->type()); ++ aStep->setStringValue(isWholePart ? aRow : anElementID, aCol, aStrVal); ++ aFilledIDs.insert(anElementID); ++ } ++ } ++ if (!isWholePart) ++ { // fill the rest values by default ones ++ XAO::GeometricElementList::iterator allElem = ++ aXao.getGeometry()->begin(aFieldDimension); ++ for (; allElem != aXao.getGeometry()->end(aFieldDimension); allElem++) ++ { ++ if (aFilledIDs.find(allElem->first) != aFilledIDs.end()) ++ continue; ++ for (int aCol = 0; aCol < aNumComps; aCol++) ++ { ++ // default value ++ ModelAPI_AttributeTables::Value aVal = aTables->value(0, aCol, aStepIndex); ++ std::string aStrVal = valToString(aVal, aTables->type()); ++ aStep->setStringValue(allElem->first, aCol, aStrVal); ++ } ++ } ++ } ++ } ++ } ++ catch (XAO::XAO_Exception &e) ++ { ++ // LCOV_EXCL_START ++ std::string msg = "An error occurred while exporting field " + ++ Locale::Convert::toString(aResultField->data()->name()); ++ msg += ".\n"; ++ msg += e.what(); ++ msg += "\n"; ++ msg += "=> skipping this field from XAO export."; ++ Events_InfoMessage("ExportFeature", msg, this).send(); ++ aXao.removeField(aXaoField); ++ // LCOV_EXCL_STOP ++ } ++ } ++ } ++ ++ // exporting ++ if (isMemoryExport) ++ { ++ string(ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID())->setValue(XAOExportMem(&aXao, anError)); ++ } ++ else ++ { ++ std::string aShapeFile(""); ++ AttributeBooleanPtr aShapeSeparateAttr = boolean(XAO_SHAPE_FILE_SEPARATE_ID()); ++ if (aShapeSeparateAttr->isInitialized() && ++ aShapeSeparateAttr->value() == true) ++ { ++ aShapeFile = theFileName + ".brep"; ++ } ++ else ++ { ++ AttributeStringPtr aShapeFileAttr = string(XAO_SHAPE_FILE_PATH_ID()); ++ if (aShapeFileAttr->isInitialized()) ++ aShapeFile = aShapeFileAttr->value(); ++ } ++ ++ XAOExport(theFileName, &aXao, anError, aShapeFile); ++ } ++ ++ if (!anError.empty()) ++ { ++ setError("An error occurred while exporting " + theFileName + ": " + anError); ++ return; ++ } ++ ++ // LCOV_EXCL_START ++ } ++ catch (XAO::XAO_Exception &e) ++ { ++ std::string anError = e.what(); ++ setError("An error occurred while exporting " + theFileName + ": " + anError); ++ return; ++ } ++ // LCOV_EXCL_STOP +} +void ExchangePlugin_ExportFeature::exportROOT(const std::string &theFileName) +{ + // Get data from feature + std::string aName = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_NAME_ID())->value(); + std::string aTitle = string(ExchangePlugin_ExportFeature::ROOT_MANAGER_TITLE_ID())->value(); - GeomShapePtr aShape = (aShapes.size() == 1) - ? *aShapes.begin() - : GeomAlgoAPI_CompoundBuilder::compound(aShapes); + FeaturePtr aFeature; - SetShapeToXAO(aShape, &aXao, anError); + std::shared_ptr anAlgo(new GeomAlgoAPI_ROOTExport(theFileName)); - if (!anError.empty()) { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } + std::list listNames = ExchangePlugin_Tools::split(theFileName, _separator_); + listNames = ExchangePlugin_Tools::split(listNames.back(), '.'); - // geometry name - std::string aGeometryName = string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->value(); - if (aGeometryName.empty() && aResults.size() == 1) { - // get the name from the first result - ResultPtr aResultBody = *aResults.begin(); - aGeometryName = Locale::Convert::toString(aResultBody->data()->name()); - if (isMemoryExport) { - // for python dump - string(ExchangePlugin_ExportFeature::XAO_GEOMETRY_NAME_ID())->setValue(aGeometryName); - // or - //data()->setName(Locale::Convert::toWString(aGeometryName)); - } - } + // Create the head of file + anAlgo->buildHead(listNames.front(), aName, aTitle); - aXao.getGeometry()->setName(aGeometryName); - - std::set allResultsCashed; // cash to speed up searching in all results selected - - // [bos #38360] [CEA] improve performances of exportXAO and PublishToStudy - GeomAPI_IndexedMapOfShape aSubShapesMap; - bool isSubShapesMap = false; // we will init it only if required (for performance reason) - - // iterate all documents used - if (aDocuments.empty()) - aDocuments.push_back(document()); - std::list::iterator aDoc = aDocuments.begin(); - for(; aDoc != aDocuments.end(); aDoc++) { - // groups - int aGroupCount = (*aDoc)->size(ModelAPI_ResultGroup::group()); - for (int aGroupIndex = 0; aGroupIndex < aGroupCount; ++aGroupIndex) { - ResultGroupPtr aResultGroup = std::dynamic_pointer_cast( - (*aDoc)->object(ModelAPI_ResultGroup::group(), aGroupIndex)); - if (!aResultGroup.get() || !aResultGroup->shape().get()) - continue; - - FeaturePtr aGroupFeature = (*aDoc)->feature(aResultGroup); - - AttributeSelectionListPtr aSelectionList = - aGroupFeature->selectionList("group_list"); - if (!ModelAPI_Tools::isInResults(aSelectionList, - aResults, - allResultsCashed))// skip group not used in result - continue; - - // conversion of dimension - std::string aSelectionType = aSelectionList->selectionType(); - GeomAPI_Shape::ShapeType aSelType = GeomAPI_Shape::shapeTypeByStr(aSelectionType); - std::string aDimensionString = - ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); - XAO::Dimension aGroupDimension = XAO::XaoUtils::stringToDimension(aDimensionString); - - XAO::Group* aXaoGroup = aXao.addGroup(aGroupDimension, - Locale::Convert::toString(aResultGroup->data()->name())); - - try { - GeomAPI_ShapeExplorer aGroupResExplorer(aResultGroup->shape(), aSelType); - for(; aGroupResExplorer.more(); aGroupResExplorer.next()) { - GeomShapePtr aGroupShape = aGroupResExplorer.current(); - if (aDocTrsf.find(*aDoc) != aDocTrsf.end()) - aGroupShape->move(aDocTrsf[*aDoc]); - - if (!isSubShapesMap) { - aSubShapesMap.MapShapes(aShape); - isSubShapesMap = true; - } - int aReferenceID = aSubShapesMap.FindIndexEqualLocations(aGroupShape); - if (aReferenceID == 0) // selected value does not found in the exported shape - continue; - std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); - int anElementID = - aXao.getGeometry()->getElementIndexByReference(aGroupDimension, aReferenceString); - aXaoGroup->add(anElementID); - } - } catch (XAO::XAO_Exception& e) { - // LCOV_EXCL_START - std::string msg = "An error occurred while exporting group " + - Locale::Convert::toString(aResultGroup->data()->name()); - msg += ".\n"; - msg += e.what(); - msg += "\n"; - msg += "=> skipping this group from XAO export."; - Events_InfoMessage("ExportFeature", msg, this).send(); - aXao.removeGroup(aXaoGroup); - // LCOV_EXCL_STOP - } - } + // Handling data + std::list aListOfMedias; - // fields - int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group()); - for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex) { - ResultFieldPtr aResultField = std::dynamic_pointer_cast( - (*aDoc)->object(ModelAPI_ResultField::group(), aFieldIndex)); - - FeaturePtr aFieldFeature = (*aDoc)->feature(aResultField); - - AttributeSelectionListPtr aSelectionList = - aFieldFeature->selectionList("selected"); - std::string aSelectionType = aSelectionList->selectionType(); - bool isWholePart = aSelectionType == "part"; - // skip field not used in results - if (!isWholePart && - !ModelAPI_Tools::isInResults(aSelectionList, aResults, allResultsCashed)) - continue; - - // conversion of dimension - std::string aDimensionString = - ExchangePlugin_Tools::selectionType2xaoDimension(aSelectionType); - XAO::Dimension aFieldDimension = XAO::XaoUtils::stringToDimension(aDimensionString); - // get tables and their type - std::shared_ptr aTables = aFieldFeature->tables("values"); - std::string aTypeString = ExchangePlugin_Tools::valuesType2xaoType(aTables->type()); - XAO::Type aFieldType = XAO::XaoUtils::stringToFieldType(aTypeString); - - XAO::Field* aXaoField = aXao.addField(aFieldType, aFieldDimension, aTables->columns(), - Locale::Convert::toString(aResultField->data()->name())); - - - try { - // set components names - AttributeStringArrayPtr aComponents = aFieldFeature->stringArray("components_names"); - for(int aComp = 0; aComp < aComponents->size(); aComp++) { - std::string aName = aComponents->value(aComp); - aXaoField->setComponentName(aComp, aName); + // Add feature in the file + std::list aVolumeFeatureList; + std::list aFeatures = document()->allFeatures(); + std::list::iterator itFeature = aFeatures.begin(); + int aMediumIndex = 0; + for (; itFeature != aFeatures.end(); ++itFeature) + { + aFeature = *itFeature; + if (aFeature->getKind() == "Box") + { + std::map aFeatureDimensions; + aFeatureDimensions = ExchangePlugin_ExportRoot::computeBox(aFeature); + std::wstring anObjectName = aFeature->firstResult()->data()->name(); + anAlgo->buildBox(anObjectName, aFeatureDimensions); } - - AttributeIntArrayPtr aStamps = aFieldFeature->intArray("stamps"); - for (int aStepIndex = 0; aStepIndex < aTables->tables(); aStepIndex++) { - XAO::Step* aStep = aXaoField->addNewStep(aStepIndex + 1); - aStep->setStep(aStepIndex + 1); - int aStampIndex = aStamps->value(aStepIndex); - aStep->setStamp(aStampIndex); - int aNumElements = isWholePart ? aXaoField->countElements() : aTables->rows(); - int aNumComps = aTables->columns(); - std::set aFilledIDs; // to fill the rest by defaults - // omit default values first row - for(int aRow = isWholePart ? 0 : 1; aRow < aNumElements; aRow++) { - for(int aCol = 0; aCol < aNumComps; aCol++) { - int anElementID = 0; - if (!isWholePart) { - // element index actually is the ID of the selection - AttributeSelectionPtr aSel = aSelectionList->value(aRow - 1); - if (!isSubShapesMap) { - aSubShapesMap.MapShapes(aShape); - isSubShapesMap = true; + else if (aFeature->getKind() == "Cylinder") + { + std::map aFeatureDimensions; + aFeatureDimensions = ExchangePlugin_ExportRoot::computeCylinder(aFeature); + std::wstring anObjectName = aFeature->firstResult()->data()->name(); + anAlgo->buildTube(anObjectName, aFeatureDimensions); + } + else if (aFeature->getKind() == "Volume") + { + aVolumeFeatureList.push_back(aFeature); + std::list> aFeatureDimensionsList; + aFeatureDimensionsList = ExchangePlugin_ExportRoot::computeVolume(aFeature); + + const std::list &aResultList = aFeature->results(); + auto aResIt = aResultList.begin(); + + std::list>::iterator itList = aFeatureDimensionsList.begin(); + for (; itList != aFeatureDimensionsList.end(); ++itList) + { + + std::map aFeatureDimensions = *itList; + std::wstring anObjectName = (*aResIt)->data()->name(); + // Filter on already created medias + std::list::iterator anIter = std::find(aListOfMedias.begin(), aListOfMedias.end(), aFeatureDimensions["medium"]); + if (anIter != aListOfMedias.end()) + anAlgo->buildVolume(anObjectName, aFeatureDimensions, -1); + else + { + aListOfMedias.push_back(aFeatureDimensions["medium"]); + anAlgo->buildVolume(anObjectName, aFeatureDimensions, ++aMediumIndex); } - int aReferenceID = aSubShapesMap.FindIndexEqualLocations(aSel->value()); - if (aReferenceID == 0) // selected value does not found in the exported shape - continue; - - std::string aReferenceString = XAO::XaoUtils::intToString(aReferenceID); - anElementID = aXao.getGeometry()-> - getElementIndexByReference(aFieldDimension, aReferenceString); - } - - ModelAPI_AttributeTables::Value aVal = aTables->value( - isWholePart ? 0 : aRow, aCol, aStepIndex); - std::string aStrVal = valToString(aVal, aTables->type()); - aStep->setStringValue(isWholePart ? aRow : anElementID, aCol, aStrVal); - aFilledIDs.insert(anElementID); + aResIt++; } - } - if (!isWholePart) { // fill the rest values by default ones - XAO::GeometricElementList::iterator allElem = - aXao.getGeometry()->begin(aFieldDimension); - for(; allElem != aXao.getGeometry()->end(aFieldDimension); allElem++) { - if (aFilledIDs.find(allElem->first) != aFilledIDs.end()) - continue; - for(int aCol = 0; aCol < aNumComps; aCol++) { - // default value - ModelAPI_AttributeTables::Value aVal = aTables->value(0, aCol, aStepIndex); - std::string aStrVal = valToString(aVal, aTables->type()); - aStep->setStringValue(allElem->first, aCol, aStrVal); - } - } - } } - } catch (XAO::XAO_Exception& e) { - // LCOV_EXCL_START - std::string msg = "An error occurred while exporting field " + - Locale::Convert::toString(aResultField->data()->name()); - msg += ".\n"; - msg += e.what(); - msg += "\n"; - msg += "=> skipping this field from XAO export."; - Events_InfoMessage("ExportFeature", msg, this).send(); - aXao.removeField(aXaoField); - // LCOV_EXCL_STOP - } + else if (aFeature->getKind() == "AddNode") + { + std::map aFeatureDimensions; + aFeatureDimensions = ExchangePlugin_ExportRoot::computeAddNode(aFeature); + anAlgo->buildAddNode(aFeatureDimensions); + } } - } - // exporting - if (isMemoryExport) { - string(ExchangePlugin_ExportFeature::MEMORY_BUFFER_ID())->setValue(XAOExportMem(&aXao, anError)); - } - else { - std::string aShapeFile (""); - AttributeBooleanPtr aShapeSeparateAttr = boolean(XAO_SHAPE_FILE_SEPARATE_ID()); - if (aShapeSeparateAttr->isInitialized() && - aShapeSeparateAttr->value() == true) { - aShapeFile = theFileName + ".brep"; - } - else { - AttributeStringPtr aShapeFileAttr = string(XAO_SHAPE_FILE_PATH_ID()); - if (aShapeFileAttr->isInitialized()) - aShapeFile = aShapeFileAttr->value(); + // Create the end of files + AttributeSelectionPtr anObjectAttr = selection(ExchangePlugin_ExportFeature::MAIN_OBJECT_ID()); + aFeature = anObjectAttr->contextFeature(); + + std::string aNameShape = ""; + if (aFeature.get()) + aNameShape = Locale::Convert::toString(aFeature->firstResult()->data()->name()); + else + { + ObjectPtr anObject = anObjectAttr->contextObject(); + aNameShape = Locale::Convert::toString(anObject->data()->name()); } - XAOExport(theFileName, &aXao, anError, aShapeFile); - } + // Check if top volume in Volume list + bool err = true; + std::list::iterator jtFeature = aVolumeFeatureList.begin(); + for (; jtFeature != aVolumeFeatureList.end(); ++jtFeature){ + std::string aCurrName = Locale::Convert::toString((*jtFeature)->firstResult()->data()->name()); + if (aCurrName == aNameShape) + err = false; + } + if (err) + setError("An error occured while exporting : The selected ROOT top volume \"" + aNameShape + "\" is not in the volume list and thus seems to not be a proper Volume result"); - if (!anError.empty()) { - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } + // Create the end of file + std::string aExportFileName = string(ExchangePlugin_ExportFeature::EXP_NAME_FILE_ID())->value(); + anAlgo->buildEnd(aNameShape, aExportFileName); -// LCOV_EXCL_START - } catch (XAO::XAO_Exception& e) { - std::string anError = e.what(); - setError("An error occurred while exporting " + theFileName + ": " + anError); - return; - } -// LCOV_EXCL_STOP + // Create the file with the content + anAlgo->write(); } bool ExchangePlugin_ExportFeature::isMacro() const diff --cc src/ExchangePlugin/ExchangePlugin_ExportFeature.h index cf5186906,295aa7618..4faa2551c --- a/src/ExchangePlugin/ExchangePlugin_ExportFeature.h +++ b/src/ExchangePlugin/ExchangePlugin_ExportFeature.h @@@ -150,36 -150,25 +150,55 @@@ public static const std::string MY_XAO_GEOMETRY_NAME_ID("xao_geometry_name"); return MY_XAO_GEOMETRY_NAME_ID; } + /// attribute name of root file path + inline static const std::string& ROOT_FILE_PATH_ID() + { + static const std::string MY_ROOT_FILE_PATH_ID("root_file_path"); + return MY_ROOT_FILE_PATH_ID; + } + /// attribute name of author for ROOT format + inline static const std::string& ROOT_MANAGER_NAME_ID() + { + static const std::string MY_ROOT_MANAGER_NAME_ID("root_manager_name"); + return MY_ROOT_MANAGER_NAME_ID; + } + /// attribute name of geometry name for ROOT format + inline static const std::string& ROOT_MANAGER_TITLE_ID() + { + static const std::string MY_ROOT_MANAGER_TITLE_ID("root_manager_title"); + return MY_ROOT_MANAGER_TITLE_ID; + } + /// attribute name of file export + inline static const std::string& EXP_NAME_FILE_ID() + { + static const std::string MY_EXP_NAME_FILE_ID("root_name_file"); + return MY_EXP_NAME_FILE_ID; + } + /// Attribute name of the main solid. + inline static const std::string& MAIN_OBJECT_ID() + { + static const std::string MY_MAIN_OBJECT_ID("root_main_object"); + return MY_MAIN_OBJECT_ID; + } + /// attribute name of xao shape file path + inline static const std::string& XAO_SHAPE_FILE_PATH_ID() + { + static const std::string MY_XAO_SHAPE_FILE_PATH_ID("xao_shape_file_path"); + return MY_XAO_SHAPE_FILE_PATH_ID; + } + /// attribute flag to export shape in a separate file during xao export, + /// name of shape file will be xao_file_path + .brep + inline static const std::string& XAO_SHAPE_FILE_SEPARATE_ID() + { + static const std::string MY_XAO_SHAPE_FILE_SEPARATE_ID("xao_shape_file_separate"); + return MY_XAO_SHAPE_FILE_SEPARATE_ID; + } + /// attribute string memory buffer + inline static const std::string& MEMORY_BUFFER_ID() + { + static const std::string MY_MEMORY_BUFFER_ID("memory_buffer"); + return MY_MEMORY_BUFFER_ID; + } /// Default constructor EXCHANGEPLUGIN_EXPORT ExchangePlugin_ExportFeature(); diff --cc src/GeomAlgoAPI/CMakeLists.txt index 4cdb4f20a,e01dbf2c7..dd972ee09 --- a/src/GeomAlgoAPI/CMakeLists.txt +++ b/src/GeomAlgoAPI/CMakeLists.txt @@@ -94,10 -95,13 +95,15 @@@ SET(PROJECT_HEADER GeomAlgoAPI_Defeaturing.h GeomAlgoAPI_BoundingBox.h GeomAlgoAPI_NormalToFace.h - GeomAlgoAPI_Tube.h GeomAlgoAPI_ShapeInfo.h + GeomAlgoAPI_Tube.h + GeomAlgoAPI_ROOTExport.h + GeomAlgoAPI_CanonicalRecognition.h + GeomAlgoAPI_CanonicalRecognition.h + GeomAlgoAPI_GlueFaces.h + GeomAlgoAPI_LimitTolerance.h + GeomAlgoAPI_Utils.h + GeomAlgoAPI_NonPlanarFace.h ) SET(PROJECT_SOURCES @@@ -173,9 -178,12 +180,15 @@@ GeomAlgoAPI_NormalToFace.cpp GeomAlgoAPI_Tube.cpp GeomAlgoAPI_ShapeInfo.cpp + GeomAlgoAPI_Tube.cpp + GeomAlgoAPI_ROOTExport.cpp + GeomAlgoAPI_CanonicalRecognition.cpp + GeomAlgoAPI_CanonicalRecognition.cpp + GeomAlgoAPI_GlueFaces.cpp + GeomAlgoAPI_CanonicalRecognition.cpp + GeomAlgoAPI_LimitTolerance.cpp + GeomAlgoAPI_Utils.cpp + GeomAlgoAPI_NonPlanarFace.cpp ) SET(PROJECT_LIBRARIES diff --cc src/ModelHighAPI/ModelHighAPI_Macro.h index 985bce1c1,3d6f716bb..df8325899 --- a/src/ModelHighAPI/ModelHighAPI_Macro.h +++ b/src/ModelHighAPI/ModelHighAPI_Macro.h @@@ -851,17 -669,17 +669,17 @@@ public: //-------------------------------------------------------------------------------------- - #define INTERFACE_24(KIND, \ -#define INTERFACE_25(KIND, \ -- N_0, AN_0, T_0, C_0, \ -- N_1, AN_1, T_1, C_1, \ -- N_2, AN_2, T_2, C_2, \ -- N_3, AN_3, T_3, C_3, \ -- N_4, AN_4, T_4, C_4, \ -- N_5, AN_5, T_5, C_5, \ -- N_6, AN_6, T_6, C_6, \ -- N_7, AN_7, T_7, C_7, \ -- N_8, AN_8, T_8, C_8, \ -- N_9, AN_9, T_9, C_9, \ ++#define INTERFACE_22(KIND, \ ++ N_0, AN_0, T_0, C_0, \ ++ N_1, AN_1, T_1, C_1, \ ++ N_2, AN_2, T_2, C_2, \ ++ N_3, AN_3, T_3, C_3, \ ++ N_4, AN_4, T_4, C_4, \ ++ N_5, AN_5, T_5, C_5, \ ++ N_6, AN_6, T_6, C_6, \ ++ N_7, AN_7, T_7, C_7, \ ++ N_8, AN_8, T_8, C_8, \ ++ N_9, AN_9, T_9, C_9, \ N_10, AN_10, T_10, C_10, \ N_11, AN_11, T_11, C_11, \ N_12, AN_12, T_12, C_12, \ @@@ -873,238 -691,66 +691,141 @@@ N_18, AN_18, T_18, C_18, \ N_19, AN_19, T_19, C_19, \ N_20, AN_20, T_20, C_20, \ - N_21, AN_21, T_21, C_21, \ - N_22, AN_22, T_22, C_22, \ - N_23, AN_23, T_23, C_23) \ - public: \ - INTERFACE_COMMON(KIND) \ - DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ - DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ - DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ - DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ - DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ - DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ - DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ - DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ - DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ - DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ - DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ - DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ - DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ - DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ - DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ - DEFINE_ATTRIBUTE(N_15, T_15, C_15) \ - DEFINE_ATTRIBUTE(N_16, T_16, C_16) \ - DEFINE_ATTRIBUTE(N_17, T_17, C_17) \ - DEFINE_ATTRIBUTE(N_18, T_18, C_18) \ - DEFINE_ATTRIBUTE(N_19, T_19, C_19) \ - DEFINE_ATTRIBUTE(N_20, T_20, C_20) \ - DEFINE_ATTRIBUTE(N_21, T_21, C_21) \ - DEFINE_ATTRIBUTE(N_22, T_22, C_22) \ - DEFINE_ATTRIBUTE(N_23, T_23, C_23) \ - protected: \ - START_INIT() \ - SET_ATTRIBUTE(N_0, T_0, AN_0) \ - SET_ATTRIBUTE(N_1, T_1, AN_1) \ - SET_ATTRIBUTE(N_2, T_2, AN_2) \ - SET_ATTRIBUTE(N_3, T_3, AN_3) \ - SET_ATTRIBUTE(N_4, T_4, AN_4) \ - SET_ATTRIBUTE(N_5, T_5, AN_5) \ - SET_ATTRIBUTE(N_6, T_6, AN_6) \ - SET_ATTRIBUTE(N_7, T_7, AN_7) \ - SET_ATTRIBUTE(N_8, T_8, AN_8) \ - SET_ATTRIBUTE(N_9, T_9, AN_9) \ - SET_ATTRIBUTE(N_10, T_10, AN_10) \ - SET_ATTRIBUTE(N_11, T_11, AN_11) \ - SET_ATTRIBUTE(N_12, T_12, AN_12) \ - SET_ATTRIBUTE(N_13, T_13, AN_13) \ - SET_ATTRIBUTE(N_14, T_14, AN_14) \ - SET_ATTRIBUTE(N_15, T_15, AN_15) \ - SET_ATTRIBUTE(N_16, T_16, AN_16) \ - SET_ATTRIBUTE(N_17, T_17, AN_17) \ - SET_ATTRIBUTE(N_18, T_18, AN_18) \ - SET_ATTRIBUTE(N_19, T_19, AN_19) \ - SET_ATTRIBUTE(N_20, T_20, AN_20) \ - SET_ATTRIBUTE(N_21, T_21, AN_21) \ - SET_ATTRIBUTE(N_22, T_22, AN_22) \ - SET_ATTRIBUTE(N_23, T_23, AN_23) \ - END_INIT() \ - public: - - //-------------------------------------------------------------------------------------- - #define INTERFACE_25(KIND, \ - N_0, AN_0, T_0, C_0, \ - N_1, AN_1, T_1, C_1, \ - N_2, AN_2, T_2, C_2, \ - N_3, AN_3, T_3, C_3, \ - N_4, AN_4, T_4, C_4, \ - N_5, AN_5, T_5, C_5, \ - N_6, AN_6, T_6, C_6, \ - N_7, AN_7, T_7, C_7, \ - N_8, AN_8, T_8, C_8, \ - N_9, AN_9, T_9, C_9, \ - N_10, AN_10, T_10, C_10, \ - N_11, AN_11, T_11, C_11, \ - N_12, AN_12, T_12, C_12, \ - N_13, AN_13, T_13, C_13, \ - N_14, AN_14, T_14, C_14, \ - N_15, AN_15, T_15, C_15, \ - N_16, AN_16, T_16, C_16, \ - N_17, AN_17, T_17, C_17, \ - N_18, AN_18, T_18, C_18, \ - N_19, AN_19, T_19, C_19, \ - N_20, AN_20, T_20, C_20, \ -- N_21, AN_21, T_21, C_21, \ -- N_22, AN_22, T_22, C_22, \ -- N_23, AN_23, T_23, C_23, \ -- N_24, AN_24, T_24, C_24) \ - public: \ - INTERFACE_COMMON(KIND) \ - DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ - DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ - DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ - DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ - DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ - DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ - DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ - DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ - DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ - DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ - DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ - DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ - DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ - DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ - DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ - DEFINE_ATTRIBUTE(N_15, T_15, C_15) \ - DEFINE_ATTRIBUTE(N_16, T_16, C_16) \ - DEFINE_ATTRIBUTE(N_17, T_17, C_17) \ - DEFINE_ATTRIBUTE(N_18, T_18, C_18) \ - DEFINE_ATTRIBUTE(N_19, T_19, C_19) \ - DEFINE_ATTRIBUTE(N_20, T_20, C_20) \ - DEFINE_ATTRIBUTE(N_21, T_21, C_21) \ - DEFINE_ATTRIBUTE(N_22, T_22, C_22) \ - DEFINE_ATTRIBUTE(N_23, T_23, C_23) \ - DEFINE_ATTRIBUTE(N_24, T_24, C_24) \ - protected: \ - START_INIT() \ - SET_ATTRIBUTE(N_0, T_0, AN_0) \ - SET_ATTRIBUTE(N_1, T_1, AN_1) \ - SET_ATTRIBUTE(N_2, T_2, AN_2) \ - SET_ATTRIBUTE(N_3, T_3, AN_3) \ - SET_ATTRIBUTE(N_4, T_4, AN_4) \ - SET_ATTRIBUTE(N_5, T_5, AN_5) \ - SET_ATTRIBUTE(N_6, T_6, AN_6) \ - SET_ATTRIBUTE(N_7, T_7, AN_7) \ - SET_ATTRIBUTE(N_8, T_8, AN_8) \ - SET_ATTRIBUTE(N_9, T_9, AN_9) \ - SET_ATTRIBUTE(N_10, T_10, AN_10) \ - SET_ATTRIBUTE(N_11, T_11, AN_11) \ - SET_ATTRIBUTE(N_12, T_12, AN_12) \ - SET_ATTRIBUTE(N_13, T_13, AN_13) \ - SET_ATTRIBUTE(N_14, T_14, AN_14) \ - SET_ATTRIBUTE(N_15, T_15, AN_15) \ - SET_ATTRIBUTE(N_16, T_16, AN_16) \ - SET_ATTRIBUTE(N_17, T_17, AN_17) \ - SET_ATTRIBUTE(N_18, T_18, AN_18) \ - SET_ATTRIBUTE(N_19, T_19, AN_19) \ - SET_ATTRIBUTE(N_20, T_20, AN_20) \ - SET_ATTRIBUTE(N_21, T_21, AN_21) \ - SET_ATTRIBUTE(N_22, T_22, AN_22) \ - SET_ATTRIBUTE(N_23, T_23, AN_23) \ - SET_ATTRIBUTE(N_24, T_24, AN_24) \ - END_INIT() \ - public: - - - //-------------------------------------------------------------------------------------- - #define INTERFACE_27(KIND, \ - N_0, AN_0, T_0, C_0, \ - N_1, AN_1, T_1, C_1, \ - N_2, AN_2, T_2, C_2, \ - N_3, AN_3, T_3, C_3, \ - N_4, AN_4, T_4, C_4, \ - N_5, AN_5, T_5, C_5, \ - N_6, AN_6, T_6, C_6, \ - N_7, AN_7, T_7, C_7, \ - N_8, AN_8, T_8, C_8, \ - N_9, AN_9, T_9, C_9, \ - N_10, AN_10, T_10, C_10, \ - N_11, AN_11, T_11, C_11, \ - N_12, AN_12, T_12, C_12, \ - N_13, AN_13, T_13, C_13, \ - N_14, AN_14, T_14, C_14, \ - N_15, AN_15, T_15, C_15, \ - N_16, AN_16, T_16, C_16, \ - N_17, AN_17, T_17, C_17, \ - N_18, AN_18, T_18, C_18, \ - N_19, AN_19, T_19, C_19, \ - N_20, AN_20, T_20, C_20, \ - N_21, AN_21, T_21, C_21, \ - N_22, AN_22, T_22, C_22, \ - N_23, AN_23, T_23, C_23, \ - N_24, AN_24, T_24, C_24, \ - N_25, AN_25, T_25, C_25, \ - N_26, AN_26, T_26, C_26) \ -- public: \ -- INTERFACE_COMMON(KIND) \ -- DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ -- DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ -- DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ -- DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ -- DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ -- DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ -- DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ -- DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ -- DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ -- DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ -- DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ -- DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ -- DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ -- DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ -- DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ -- DEFINE_ATTRIBUTE(N_15, T_15, C_15) \ -- DEFINE_ATTRIBUTE(N_16, T_16, C_16) \ -- DEFINE_ATTRIBUTE(N_17, T_17, C_17) \ -- DEFINE_ATTRIBUTE(N_18, T_18, C_18) \ -- DEFINE_ATTRIBUTE(N_19, T_19, C_19) \ -- DEFINE_ATTRIBUTE(N_20, T_20, C_20) \ -- DEFINE_ATTRIBUTE(N_21, T_21, C_21) \ -- DEFINE_ATTRIBUTE(N_22, T_22, C_22) \ -- DEFINE_ATTRIBUTE(N_23, T_23, C_23) \ -- DEFINE_ATTRIBUTE(N_24, T_24, C_24) \ - DEFINE_ATTRIBUTE(N_25, T_25, C_25) \ - DEFINE_ATTRIBUTE(N_26, T_26, C_26) \ -- protected: \ -- START_INIT() \ -- SET_ATTRIBUTE(N_0, T_0, AN_0) \ -- SET_ATTRIBUTE(N_1, T_1, AN_1) \ -- SET_ATTRIBUTE(N_2, T_2, AN_2) \ -- SET_ATTRIBUTE(N_3, T_3, AN_3) \ -- SET_ATTRIBUTE(N_4, T_4, AN_4) \ -- SET_ATTRIBUTE(N_5, T_5, AN_5) \ -- SET_ATTRIBUTE(N_6, T_6, AN_6) \ -- SET_ATTRIBUTE(N_7, T_7, AN_7) \ -- SET_ATTRIBUTE(N_8, T_8, AN_8) \ -- SET_ATTRIBUTE(N_9, T_9, AN_9) \ -- SET_ATTRIBUTE(N_10, T_10, AN_10) \ -- SET_ATTRIBUTE(N_11, T_11, AN_11) \ -- SET_ATTRIBUTE(N_12, T_12, AN_12) \ -- SET_ATTRIBUTE(N_13, T_13, AN_13) \ -- SET_ATTRIBUTE(N_14, T_14, AN_14) \ -- SET_ATTRIBUTE(N_15, T_15, AN_15) \ -- SET_ATTRIBUTE(N_16, T_16, AN_16) \ -- SET_ATTRIBUTE(N_17, T_17, AN_17) \ -- SET_ATTRIBUTE(N_18, T_18, AN_18) \ -- SET_ATTRIBUTE(N_19, T_19, AN_19) \ -- SET_ATTRIBUTE(N_20, T_20, AN_20) \ -- SET_ATTRIBUTE(N_21, T_21, AN_21) \ -- SET_ATTRIBUTE(N_22, T_22, AN_22) \ -- SET_ATTRIBUTE(N_23, T_23, AN_23) \ -- SET_ATTRIBUTE(N_24, T_24, AN_24) \ - SET_ATTRIBUTE(N_25, T_25, AN_25) \ - SET_ATTRIBUTE(N_26, T_26, AN_26) \ -- END_INIT() \ -- public: - - //-------------------------------------------------------------------------------------- ++ N_21, AN_21, T_21, C_21) \ ++public: \ ++ INTERFACE_COMMON(KIND) \ ++ DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ ++ DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ ++ DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ ++ DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ ++ DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ ++ DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ ++ DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ ++ DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ ++ DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ ++ DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ ++ DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ ++ DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ ++ DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ ++ DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ ++ DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ ++ DEFINE_ATTRIBUTE(N_15, T_15, C_15) \ ++ DEFINE_ATTRIBUTE(N_16, T_16, C_16) \ ++ DEFINE_ATTRIBUTE(N_17, T_17, C_17) \ ++ DEFINE_ATTRIBUTE(N_18, T_18, C_18) \ ++ DEFINE_ATTRIBUTE(N_19, T_19, C_19) \ ++ DEFINE_ATTRIBUTE(N_20, T_20, C_20) \ ++ DEFINE_ATTRIBUTE(N_21, T_21, C_21) \ ++protected: \ ++ START_INIT() \ ++ SET_ATTRIBUTE(N_0, T_0, AN_0) \ ++ SET_ATTRIBUTE(N_1, T_1, AN_1) \ ++ SET_ATTRIBUTE(N_2, T_2, AN_2) \ ++ SET_ATTRIBUTE(N_3, T_3, AN_3) \ ++ SET_ATTRIBUTE(N_4, T_4, AN_4) \ ++ SET_ATTRIBUTE(N_5, T_5, AN_5) \ ++ SET_ATTRIBUTE(N_6, T_6, AN_6) \ ++ SET_ATTRIBUTE(N_7, T_7, AN_7) \ ++ SET_ATTRIBUTE(N_8, T_8, AN_8) \ ++ SET_ATTRIBUTE(N_9, T_9, AN_9) \ ++ SET_ATTRIBUTE(N_10, T_10, AN_10) \ ++ SET_ATTRIBUTE(N_11, T_11, AN_11) \ ++ SET_ATTRIBUTE(N_12, T_12, AN_12) \ ++ SET_ATTRIBUTE(N_13, T_13, AN_13) \ ++ SET_ATTRIBUTE(N_14, T_14, AN_14) \ ++ SET_ATTRIBUTE(N_15, T_15, AN_15) \ ++ SET_ATTRIBUTE(N_16, T_16, AN_16) \ ++ SET_ATTRIBUTE(N_17, T_17, AN_17) \ ++ SET_ATTRIBUTE(N_18, T_18, AN_18) \ ++ SET_ATTRIBUTE(N_19, T_19, AN_19) \ ++ SET_ATTRIBUTE(N_20, T_20, AN_20) \ ++ SET_ATTRIBUTE(N_21, T_21, AN_21) \ ++ END_INIT() \ ++public: + + //-------------------------------------------------------------------------------------- ++#define INTERFACE_25(KIND, \ ++ N_0, AN_0, T_0, C_0, \ ++ N_1, AN_1, T_1, C_1, \ ++ N_2, AN_2, T_2, C_2, \ ++ N_3, AN_3, T_3, C_3, \ ++ N_4, AN_4, T_4, C_4, \ ++ N_5, AN_5, T_5, C_5, \ ++ N_6, AN_6, T_6, C_6, \ ++ N_7, AN_7, T_7, C_7, \ ++ N_8, AN_8, T_8, C_8, \ ++ N_9, AN_9, T_9, C_9, \ ++ N_10, AN_10, T_10, C_10, \ ++ N_11, AN_11, T_11, C_11, \ ++ N_12, AN_12, T_12, C_12, \ ++ N_13, AN_13, T_13, C_13, \ ++ N_14, AN_14, T_14, C_14, \ ++ N_15, AN_15, T_15, C_15, \ ++ N_16, AN_16, T_16, C_16, \ ++ N_17, AN_17, T_17, C_17, \ ++ N_18, AN_18, T_18, C_18, \ ++ N_19, AN_19, T_19, C_19, \ ++ N_20, AN_20, T_20, C_20, \ ++ N_21, AN_21, T_21, C_21, \ ++ N_22, AN_22, T_22, C_22, \ ++ N_23, AN_23, T_23, C_23, \ ++ N_24, AN_24, T_24, C_24) \ ++ public: \ ++ INTERFACE_COMMON(KIND) \ ++ DEFINE_ATTRIBUTE(N_0, T_0, C_0) \ ++ DEFINE_ATTRIBUTE(N_1, T_1, C_1) \ ++ DEFINE_ATTRIBUTE(N_2, T_2, C_2) \ ++ DEFINE_ATTRIBUTE(N_3, T_3, C_3) \ ++ DEFINE_ATTRIBUTE(N_4, T_4, C_4) \ ++ DEFINE_ATTRIBUTE(N_5, T_5, C_5) \ ++ DEFINE_ATTRIBUTE(N_6, T_6, C_6) \ ++ DEFINE_ATTRIBUTE(N_7, T_7, C_7) \ ++ DEFINE_ATTRIBUTE(N_8, T_8, C_8) \ ++ DEFINE_ATTRIBUTE(N_9, T_9, C_9) \ ++ DEFINE_ATTRIBUTE(N_10, T_10, C_10) \ ++ DEFINE_ATTRIBUTE(N_11, T_11, C_11) \ ++ DEFINE_ATTRIBUTE(N_12, T_12, C_12) \ ++ DEFINE_ATTRIBUTE(N_13, T_13, C_13) \ ++ DEFINE_ATTRIBUTE(N_14, T_14, C_14) \ ++ DEFINE_ATTRIBUTE(N_15, T_15, C_15) \ ++ DEFINE_ATTRIBUTE(N_16, T_16, C_16) \ ++ DEFINE_ATTRIBUTE(N_17, T_17, C_17) \ ++ DEFINE_ATTRIBUTE(N_18, T_18, C_18) \ ++ DEFINE_ATTRIBUTE(N_19, T_19, C_19) \ ++ DEFINE_ATTRIBUTE(N_20, T_20, C_20) \ ++ DEFINE_ATTRIBUTE(N_21, T_21, C_21) \ ++ DEFINE_ATTRIBUTE(N_22, T_22, C_22) \ ++ DEFINE_ATTRIBUTE(N_23, T_23, C_23) \ ++ DEFINE_ATTRIBUTE(N_24, T_24, C_24) \ ++ protected: \ ++ START_INIT() \ ++ SET_ATTRIBUTE(N_0, T_0, AN_0) \ ++ SET_ATTRIBUTE(N_1, T_1, AN_1) \ ++ SET_ATTRIBUTE(N_2, T_2, AN_2) \ ++ SET_ATTRIBUTE(N_3, T_3, AN_3) \ ++ SET_ATTRIBUTE(N_4, T_4, AN_4) \ ++ SET_ATTRIBUTE(N_5, T_5, AN_5) \ ++ SET_ATTRIBUTE(N_6, T_6, AN_6) \ ++ SET_ATTRIBUTE(N_7, T_7, AN_7) \ ++ SET_ATTRIBUTE(N_8, T_8, AN_8) \ ++ SET_ATTRIBUTE(N_9, T_9, AN_9) \ ++ SET_ATTRIBUTE(N_10, T_10, AN_10) \ ++ SET_ATTRIBUTE(N_11, T_11, AN_11) \ ++ SET_ATTRIBUTE(N_12, T_12, AN_12) \ ++ SET_ATTRIBUTE(N_13, T_13, AN_13) \ ++ SET_ATTRIBUTE(N_14, T_14, AN_14) \ ++ SET_ATTRIBUTE(N_15, T_15, AN_15) \ ++ SET_ATTRIBUTE(N_16, T_16, AN_16) \ ++ SET_ATTRIBUTE(N_17, T_17, AN_17) \ ++ SET_ATTRIBUTE(N_18, T_18, AN_18) \ ++ SET_ATTRIBUTE(N_19, T_19, AN_19) \ ++ SET_ATTRIBUTE(N_20, T_20, AN_20) \ ++ SET_ATTRIBUTE(N_21, T_21, AN_21) \ ++ SET_ATTRIBUTE(N_22, T_22, AN_22) \ ++ SET_ATTRIBUTE(N_23, T_23, AN_23) \ ++ SET_ATTRIBUTE(N_24, T_24, AN_24) \ ++ END_INIT() \ ++ public: ++ ++ //-------------------------------------------------------------------------------------- #endif /* SRC_MODELHIGHAPI_MODELHIGHAPI_MACRO_H_ */ diff --cc src/ModuleBase/ModuleBase_ListView.cpp index b0ca3c8e8,d0a5255d4..91e66fa29 --- a/src/ModuleBase/ModuleBase_ListView.cpp +++ b/src/ModuleBase/ModuleBase_ListView.cpp @@@ -44,9 -46,9 +46,9 @@@ ModuleBase_ListView::ModuleBase_ListVie myCopyAction = ModuleBase_Tools::createAction(QIcon(":pictures/copy.png"), tr("Copy"), theParent, this, SLOT(onCopyItem())); - myCopyAction->setShortcut(QKeySequence::Copy); myCopyAction->setEnabled(false); myListControl->addAction(myCopyAction); - SUIT_ShortcutMgr::get()->registerAction("SHAPER/#TOT_DESK_EDIT_COPY", myCopyAction); ++ // SUIT_ShortcutMgr::get()->registerAction("SHAPER/#TOT_DESK_EDIT_COPY", myCopyAction); //HOTFIX for OPERA merge myDeleteAction = ModuleBase_Tools::createAction(QIcon(":pictures/delete.png"), tr("Delete"), theParent, this, SIGNAL(deleteActionClicked())); diff --cc src/SHAPERGUI/SHAPERGUI.cpp index e8850f627,b920afc42..f9f8bd451 --- a/src/SHAPERGUI/SHAPERGUI.cpp +++ b/src/SHAPERGUI/SHAPERGUI.cpp @@@ -729,7 -808,7 +808,8 @@@ QAction* SHAPERGUI::addFeatureOfNested( const QList& theNestedActions) { SUIT_Desktop* aDesk = application()->desktop(); - SHAPERGUI_NestedButton* anAction = new SHAPERGUI_NestedButton(aDesk, theNestedActions); - SHAPERGUI_NestedButton* anAction = new SHAPERGUI_NestedButton(aDesk, makeActionID(theInfo.id), theNestedActions); ++ SHAPERGUI_NestedButton *anAction = new SHAPERGUI_NestedButton(aDesk, theInfo.id, theNestedActions); //HOTFIX for OPERA merge ++ // SHAPERGUI_NestedButton* anAction = new SHAPERGUI_NestedButton(aDesk, makeActionID(theInfo.id), theNestedActions); //Old version anAction->setData(theInfo.id); anAction->setCheckable(theInfo.checkable); anAction->setChecked(theInfo.checked); diff --cc src/XGUI/XGUI_Displayer.cpp index 8fda4fb34,477544490..b80cbd088 --- a/src/XGUI/XGUI_Displayer.cpp +++ b/src/XGUI/XGUI_Displayer.cpp @@@ -126,6 -139,23 +139,23 @@@ QString qIntListInfo(const QIntList& th return anInfo.join(theSeparator); } + /// Apply the clipping planes to all objects in the "OCC3D" viewer. + void applyClippingPlanes() + { + SUIT_Application *pApp = SUIT_Session::session()->activeApplication(); + QList viewMgrs; + pApp->viewManagers(QString("OCCViewer"), viewMgrs); + if (!viewMgrs.isEmpty()) { + SUIT_ViewManager *pViewMgr = viewMgrs.first(); + if (pViewMgr) { + SUIT_ViewModel *pViewMdl = pViewMgr->getViewModel(); + if (pViewMdl) { - pViewMdl->applyClippingPlanes(true); ++ // pViewMdl->applyClippingPlanes(true); //HOTFIX for OPERA merge + } + } + } + } + //************************************************************** XGUI_Displayer::XGUI_Displayer(XGUI_Workshop* theWorkshop) : myWorkshop(theWorkshop), @@@ -210,6 -245,27 +245,27 @@@ bool XGUI_Displayer::display(ObjectPtr if (!anAISIO.IsNull()) { appendResultObject(theObject, theAIS); + // bos#40617: Apply clipping planes + // Retrieve the clipping plane from the OCCT Presentation Manager directly, - // as they are stored in the ViewModel of the OCCViewer in GUI, where we ++ // as they are stored in the ViewModel of the OCCViewer in GUI, where we + // don't have access to. + Handle(ViewerData_AISShape) aShape = Handle(ViewerData_AISShape)::DownCast (anAISIO); + if (!aShape.IsNull() && aShape->IsClippable()) { + Graphic3d_MapOfStructure aSetOfStructures; + aContext->MainPrsMgr()->StructureManager()->DisplayedStructures( aSetOfStructures ); + Graphic3d_MapIteratorOfMapOfStructure aStructureIt( aSetOfStructures ); + for( ; aStructureIt.More(); aStructureIt.Next() ) { + const Handle(Graphic3d_Structure)& aStructure = aStructureIt.Key(); + if ( aStructure->IsEmpty() || !aStructure->IsVisible() || aStructure->CStructure()->IsForHighlight ) + continue; + const Handle(Graphic3d_SequenceOfHClipPlane) &planes = aStructure->ClipPlanes(); + if (!planes.IsNull() && !planes->IsEmpty()) { + aShape->SetClipPlanes(planes); + break; + } + } + } + //bool isCustomized = customizeObject(theObject); int aDispMode = isShading? Shading : Wireframe;