*/
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());
++ }
}
/*
*/
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<GeomShapePtr> aShapes;
- std::list<ResultPtr> 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<ModelAPI_Result>(anAttrSelection->context());
- if (aBodyContext.get() && aBodyContext->hasTexture())
- continue;
-
- std::shared_ptr<GeomAPI_Shape> 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<GeomAPI_Shape> 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<GeomShapePtr> aShapes;
- std::list<ResultPtr> 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<ModelAPI_Result>(anAttrSelection->context());
- if (aBodyContext.get() && aBodyContext->hasTexture())
- continue;
-
- std::shared_ptr<GeomAPI_Shape> 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<GeomAPI_Shape> 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<GeomShapePtr> aShapes;
++ std::list<ResultPtr> 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<ModelAPI_Result>(anAttrSelection->context());
++ if (aBodyContext.get() && aBodyContext->hasTexture())
++ continue;
++
++ std::shared_ptr<GeomAPI_Shape> 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<GeomAPI_Shape> 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<<theVal.myInt;
+ break;
+ case ModelAPI_AttributeTables::DOUBLE:
+ aStr<<theVal.myDouble;
+ break;
+ case ModelAPI_AttributeTables::STRING:
+ aStr<<theVal.myStr;
+ break;
+ }
+ return aStr.str();
}
-void ExchangePlugin_ExportFeature::exportSTL(const std::string& theFileName)
+void ExchangePlugin_ExportFeature::exportSTL(const std::string &theFileName)
{
- // Get shape.
- AttributeSelectionPtr aSelection = selection(STL_OBJECT_SELECTED());
- GeomShapePtr aShape = aSelection->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<GeomShapePtr> aShapes;
- std::list<ResultPtr> aResults;
- std::list<DocumentPtr> aDocuments; /// documents of Parts selected and used in export
- std::map<DocumentPtr, GeomTrsfPtr> 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<ModelAPI_Result>(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<ModelAPI_ResultPart>(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<ModelAPI_ResultBody>(
- 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<ResultPtr> allResultsCashed; // cash to speed up searching in all results selected
-
- // iterate all documents used
- if (aDocuments.empty())
- aDocuments.push_back(document());
- std::list<DocumentPtr>::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<ModelAPI_ResultGroup>(
- (*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<ModelAPI_ResultField>(
- (*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<ModelAPI_AttributeTables> 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<int> 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<GeomShapePtr> aShapes;
- std::list<ResultPtr> aResults;
- std::list<DocumentPtr> aDocuments; /// documents of Parts selected and used in export
- std::map<DocumentPtr, GeomTrsfPtr> 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<ModelAPI_Result>(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<ModelAPI_ResultPart>(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<ModelAPI_ResultBody>(
- 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<GeomShapePtr> aShapes;
++ std::list<ResultPtr> aResults;
++ std::list<DocumentPtr> aDocuments; /// documents of Parts selected and used in export
++ std::map<DocumentPtr, GeomTrsfPtr> 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<ModelAPI_Result>(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<ModelAPI_ResultPart>(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<ModelAPI_ResultBody>(
++ 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<ResultPtr> 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<DocumentPtr>::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<ModelAPI_ResultGroup>(
++ (*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<ModelAPI_ResultField>(
++ (*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<ModelAPI_AttributeTables> 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<int> 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<GeomAlgoAPI_ROOTExport> anAlgo(new GeomAlgoAPI_ROOTExport(theFileName));
- if (!anError.empty()) {
- setError("An error occurred while exporting " + theFileName + ": " + anError);
- return;
- }
+ std::list<std::string> 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<ResultPtr> 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<DocumentPtr>::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<ModelAPI_ResultGroup>(
- (*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<std::string> aListOfMedias;
- // fields
- int aFieldCount = (*aDoc)->size(ModelAPI_ResultField::group());
- for (int aFieldIndex = 0; aFieldIndex < aFieldCount; ++aFieldIndex) {
- ResultFieldPtr aResultField = std::dynamic_pointer_cast<ModelAPI_ResultField>(
- (*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<ModelAPI_AttributeTables> 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<FeaturePtr> aVolumeFeatureList;
+ std::list<FeaturePtr> aFeatures = document()->allFeatures();
+ std::list<FeaturePtr>::iterator itFeature = aFeatures.begin();
+ int aMediumIndex = 0;
+ for (; itFeature != aFeatures.end(); ++itFeature)
+ {
+ aFeature = *itFeature;
+ if (aFeature->getKind() == "Box")
+ {
+ std::map<std::string, double> 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<int> 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<std::string, double> 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<std::map<std::string, std::string>> aFeatureDimensionsList;
+ aFeatureDimensionsList = ExchangePlugin_ExportRoot::computeVolume(aFeature);
+
+ const std::list<ResultPtr> &aResultList = aFeature->results();
+ auto aResIt = aResultList.begin();
+
+ std::list<std::map<std::string, std::string>>::iterator itList = aFeatureDimensionsList.begin();
+ for (; itList != aFeatureDimensionsList.end(); ++itList)
+ {
+
+ std::map<std::string, std::string> aFeatureDimensions = *itList;
+ std::wstring anObjectName = (*aResIt)->data()->name();
+ // Filter on already created medias
+ std::list<std::string>::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<std::string, std::string> 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<FeaturePtr>::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
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, \
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_ */