#include <ExchangePlugin_ImportFeature.h>
+#include <algorithm>
+#include <string>
+#ifdef _DEBUG
+#include <iostream>
+#include <ostream>
+#endif
+
+#include <Config_Common.h>
+#include <Config_PropManager.h>
+
#include <GeomAlgoAPI_BREPImport.h>
#include <GeomAlgoAPI_IGESImport.h>
#include <GeomAlgoAPI_STEPImport.h>
+#include <GeomAlgoAPI_XAOImport.h>
#include <GeomAlgoAPI_Tools.h>
#include <GeomAPI_Shape.h>
-#include <Config_Common.h>
-#include <Config_PropManager.h>
-
#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeSelectionList.h>
#include <ModelAPI_BodyBuilder.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_Document.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_ResultBody.h>
+#include <ModelAPI_ResultGroup.h>
-#include <algorithm>
-#include <string>
-#ifdef _DEBUG
-#include <iostream>
-#include <ostream>
-#endif
+#include <XAO_Xao.hxx>
+#include <XAO_Group.hxx>
ExchangePlugin_ImportFeature::ExchangePlugin_ImportFeature()
{
std::string anError;
std::shared_ptr<GeomAPI_Shape> aGeomShape;
+ std::shared_ptr<XAO::Xao> aXao;
if (anExtension == "BREP" || anExtension == "BRP") {
aGeomShape = BREPImport(theFileName, anExtension, anError);
} else if (anExtension == "STEP" || anExtension == "STP") {
aGeomShape = STEPImport(theFileName, anExtension, anError);
} else if (anExtension == "IGES" || anExtension == "IGS") {
aGeomShape = IGESImport(theFileName, anExtension, anError);
+ } else if (anExtension == "XAO") {
+ std::shared_ptr<XAO::Xao> aTmpXao(new XAO::Xao);
+ aGeomShape = XAOImport(theFileName, anExtension, anError, aTmpXao.get());
+ if (!aGeomShape->isNull())
+ aXao = aTmpXao;
}
- // Check if shape is valid
- if ( aGeomShape->isNull() ) {
+
+ // Check if shape is valid
+ if (aGeomShape->isNull()) {
const static std::string aShapeError =
"An error occurred while importing " + theFileName + ": " + anError;
setError(aShapeError);
setResult(aResultBody);
+ if (aXao.get()) {
+ XAO::Geometry* aXaoGeometry = aXao->getGeometry();
+
+ // Creates group results
+ for (int aGroupIndex = 0; aGroupIndex < aXao->countGroups(); ++aGroupIndex) {
+ XAO::Group* aXaoGroup = aXao->getGroup(aGroupIndex);
+
+ std::shared_ptr<ModelAPI_Feature> aGroupFeature = document()->addFeature("Group", false);
+ if (aGroupFeature) {
+ if (!aXaoGroup->getName().empty())
+ aGroupFeature->data()->setName(aXaoGroup->getName());
+ AttributeSelectionListPtr aSelectionList = aGroupFeature->selectionList("group_list");
+ aSelectionList->setSelectionType(XAO::XaoUtils::dimensionToString(aXaoGroup->getDimension()));
+
+ for (int anElementIndex = 0; anElementIndex < aXaoGroup->count(); ++anElementIndex) {
+ aSelectionList->append(aResultBody, GeomShapePtr());
+ int anElementID = aXaoGroup->get(anElementIndex);
+ std::string aReferenceString =
+ aXaoGeometry->getElementReference(aXaoGroup->getDimension(), anElementID);
+ int aReferenceID = XAO::XaoUtils::stringToInt(aReferenceString);
+ aSelectionList->value(anElementIndex)->setId(aReferenceID);
+ }
+
+ document()->setCurrentFeature(aGroupFeature, true);
+ }
+ }
+ }
+
return true;
}
--- /dev/null
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
+// File: GEOMALGOAPI_XAOImport.cpp
+// Created: Nov 25, 2015
+// Author: Sergey POKHODENKO
+
+#include <GeomAlgoAPI_XAOImport.h>
+
+#include <cassert>
+
+#include <TopoDS_Shape.hxx>
+
+#include <XAO_XaoExporter.hxx>
+#include <XAO_BrepGeometry.hxx>
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+std::shared_ptr<GeomAPI_Shape> XAOImport(const std::string& theFileName,
+ const std::string&,
+ std::string& theError,
+ XAO::Xao* theXao)
+{
+ assert(theXao);
+
+ #ifdef _DEBUG
+ std::cout << "Import XAO from file " << theFileName << std::endl;
+ #endif
+ TopoDS_Shape aShape;
+ try {
+// XAO::Xao aXao;
+ if (XAO::XaoExporter::readFromFile(theFileName, theXao/*&aXao*/)) {
+ XAO::Geometry* aGeometry = /*aXao*/theXao->getGeometry();
+ XAO::Format aFormat = aGeometry->getFormat();
+ if (aFormat == XAO::BREP) {
+ if (XAO::BrepGeometry* aBrepGeometry = dynamic_cast<XAO::BrepGeometry*>(aGeometry))
+ aShape = aBrepGeometry->getTopoDS_Shape();
+ } else {
+ theError = "Unsupported XAO geometry format:" + XAO::XaoUtils::shapeFormatToString(aFormat);
+ aShape.Nullify();
+ }
+ } else {
+ theError = "XAO object was not read successful";
+ aShape.Nullify();
+ }
+ } catch (XAO::XAO_Exception& e) {
+ theError = e.what();
+ aShape.Nullify();
+ }
+
+ std::shared_ptr<GeomAPI_Shape> aGeomShape(new GeomAPI_Shape);
+ aGeomShape->setImpl(new TopoDS_Shape(aShape));
+ return aGeomShape;
+}
--- /dev/null
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
+// File: GEOMALGOAPI_XAOImport.h
+// Created: Nov 25, 2015
+// Author: Sergey POKHODENKO
+
+#ifndef GEOMALGOAPI_XAOIMPORT_H_
+#define GEOMALGOAPI_XAOIMPORT_H_
+
+#include <GeomAlgoAPI.h>
+
+#include <string>
+
+#include <GeomAPI_Shape.h>
+
+namespace XAO {
+class Xao;
+} // namespace XAO
+
+/// Implementation of the import XAO files algorithms
+GEOMALGOAPI_EXPORT
+std::shared_ptr<GeomAPI_Shape> XAOImport(const std::string& theFileName,
+ const std::string& theFormatName,
+ std::string& theError,
+ XAO::Xao* theXao);
+
+#endif /* GEOMALGOAPI_XAOIMPORT_H_ */