X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FExchangePlugin%2FExchangePlugin_ImportFeature.cpp;h=037c300e7113ec599c08f342f2cb92a7a1fd61f2;hb=081612e9534dedf1c51b7c22f2fe2b467e5a112f;hp=45ebda1f4a9fe7e2c23d09e0d8f09018fe70cc1d;hpb=a4d40ca64bf181a101c346fd025f4fea91c59cd4;p=modules%2Fshaper.git diff --git a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp index 45ebda1f4..037c300e7 100644 --- a/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp +++ b/src/ExchangePlugin/ExchangePlugin_ImportFeature.cpp @@ -1,37 +1,40 @@ // Copyright (C) 2014-20xx CEA/DEN, EDF R&D -/* - * ExchangePlugin_ImportFeature.cpp - * - * Created on: Aug 28, 2014 - * Author: sbh - */ +// File: ExchangePlugin_ImportFeature.cpp +// Created: Aug 28, 2014 +// Author: Sergey BELASH #include + +#include +#include +#ifdef _DEBUG +#include +#include +#endif + +#include +#include + #include -#include #include +#include +#include +#include #include -#include -#include #include +#include +#include #include #include #include #include -#include -#include -#include -#include +#include -#include -#include -#ifdef _DEBUG -#include -#include -#endif +#include +#include ExchangePlugin_ImportFeature::ExchangePlugin_ImportFeature() { @@ -75,44 +78,73 @@ void ExchangePlugin_ImportFeature::execute() bool ExchangePlugin_ImportFeature::importFile(const std::string& theFileName) { // retrieve the file and plugin library names - TCollection_AsciiString aFileName(theFileName.c_str()); - OSD_Path aPath(aFileName); - TCollection_AsciiString anExtension = aPath.Extension(); - // ".brep" -> "BREP", TCollection_AsciiString are numbered from 1 - anExtension = anExtension.SubString(2, anExtension.Length()); - anExtension.UpperCase(); + // ".brep" -> "BREP" + std::string anExtension = GeomAlgoAPI_Tools::File_Tools::extension(theFileName); // Perform the import - TCollection_AsciiString anError; + std::string anError; - TopoDS_Shape aShape; - if (anExtension == "BREP") { - aShape = BREPImport::Import(aFileName, anExtension, anError); + std::shared_ptr aGeomShape; + std::shared_ptr aXao; + if (anExtension == "BREP" || anExtension == "BRP") { + aGeomShape = BREPImport(theFileName, anExtension, anError); } else if (anExtension == "STEP" || anExtension == "STP") { - aShape = STEPImport::Import(aFileName, anExtension, anError); + aGeomShape = STEPImport(theFileName, anExtension, anError); } else if (anExtension == "IGES" || anExtension == "IGS") { - aShape = IGESImport::Import(aFileName, anExtension, anError); + aGeomShape = IGESImport(theFileName, anExtension, anError); + } else if (anExtension == "XAO") { + std::shared_ptr aTmpXao(new XAO::Xao); + aGeomShape = XAOImport(theFileName, anExtension, anError, aTmpXao.get()); + if (!aGeomShape->isNull()) + aXao = aTmpXao; + } + + // Check if shape is valid + if (aGeomShape->isNull()) { + const static std::string aShapeError = + "An error occurred while importing " + theFileName + ": " + anError; + setError(aShapeError); + return false; } - // Check if shape is valid - if ( aShape.IsNull() ) { - const static std::string aShapeError = - "An error occurred while importing " + theFileName + ": " + anError.ToCString(); - setError(aShapeError); - return false; - } // Pass the results into the model - std::string anObjectName = aPath.Name().ToCString(); + std::string anObjectName = GeomAlgoAPI_Tools::File_Tools::name(theFileName); data()->setName(anObjectName); std::shared_ptr aResultBody = document()->createBody(data()); - std::shared_ptr aGeomShape(new GeomAPI_Shape); - aGeomShape->setImpl(new TopoDS_Shape(aShape)); //LoadNamingDS of the imported shape loadNamingDS(aGeomShape, aResultBody); 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 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; }