From c79ce121523b90cfc511a9cf947977d05a8ff596 Mon Sep 17 00:00:00 2001 From: fps Date: Wed, 10 Apr 2013 12:53:46 +0000 Subject: [PATCH] debug export XAO --- idl/GEOM_Gen.idl | 12 +- idl/GEOM_Superv.idl | 2 +- .../GEOMImpl_IImportExportOperations.cxx | 186 ++++++------------ src/ImportExportGUI/ImportExportGUI.cxx | 3 +- .../ImportExportGUI_ExportXAODlg.cxx | 15 +- .../ImportExportGUI_ExportXAODlg.h | 3 - src/Makefile.am | 4 + src/XAO/GeometricElement.cxx | 18 +- src/XAO/GeometricElement.hxx | 1 + src/XAO/Geometry.cxx | 76 ++----- src/XAO/Geometry.hxx | 16 +- src/XAO/Group.hxx | 9 +- src/XAO/Makefile.am | 4 - src/XAO/Xao.cxx | 6 +- src/XAO/tests/ImportExportTest.cxx | 18 +- 15 files changed, 139 insertions(+), 234 deletions(-) diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 5a21f005d..1e7b04485 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -4013,14 +4013,14 @@ module GEOM { /*! * Export a shape to XAO Format - * \param theExportingShape Shape to export - * \param theFileName The name of the exported file - * \param thelGroups List of groups to export - * \param thelFields List of fields to export - * \return New GEOM_Object, containing the created shape. + * \param exportingShape Shape to export + * \param fileName The name of the exported file + * \param groups List of groups to export + * \param fields List of fields to export + * \return boolean indicating if export was succeful. */ - boolean ExportXAO (in GEOM_Object theExportingShape, in string theFileName, in ListOfGO thelGroups, in ListOfGO thelFields); + boolean ExportXAO(in GEOM_Object shape, in string fileName, in ListOfGO groups, in ListOfGO fields); /*@@ insert new functions before this line @@ do not remove this line @@*/ }; diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index 1e29b3e6a..0ba232316 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -626,7 +626,7 @@ module GEOM //-----------------------------------------------------------// // ImportExportOperations // //-----------------------------------------------------------// - boolean ExportXAO (in GEOM_Object theExportingShape, in string theFileName, in GEOM_List thelGroups, in GEOM_List thelFields); + boolean ExportXAO(in GEOM_Object exportingShape, in string fileName, in GEOM_List groups, in GEOM_List fields); /*@@ insert new functions before this line @@ do not remove this line @@*/ }; diff --git a/src/GEOMImpl/GEOMImpl_IImportExportOperations.cxx b/src/GEOMImpl/GEOMImpl_IImportExportOperations.cxx index 36bf1f3b7..b2bb65309 100644 --- a/src/GEOMImpl/GEOMImpl_IImportExportOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IImportExportOperations.cxx @@ -92,14 +92,6 @@ GEOMImpl_IImportExportOperations::GEOMImpl_IImportExportOperations(GEOM_Engine* GEOM_IOperations(engine, docID) { MESSAGE("GEOMImpl_IImportExportOperations::GEOMImpl_IImportExportOperations"); - /*myBasicOperations = new GEOMImpl_IBasicOperations(GetEngine(), GetDocID()); - myBooleanOperations = new GEOMImpl_IBooleanOperations(GetEngine(), GetDocID()); - myShapesOperations = new GEOMImpl_IShapesOperations(GetEngine(), GetDocID()); - myTransformOperations = new GEOMImpl_ITransformOperations(GetEngine(), GetDocID()); - myBlocksOperations = new GEOMImpl_IBlocksOperations(GetEngine(), GetDocID()); - my3DPrimOperations = new GEOMImpl_I3DPrimOperations(GetEngine(), GetDocID()); - myLocalOperations = new GEOMImpl_ILocalOperations(GetEngine(), GetDocID()); - myHealingOperations = new GEOMImpl_IHealingOperations(GetEngine(), GetDocID());*/ m_shapesOperations = new GEOMImpl_IShapesOperations(GetEngine(), GetDocID()); m_groupOperations = new GEOMImpl_IGroupOperations(GetEngine(), GetDocID()); } @@ -112,14 +104,6 @@ GEOMImpl_IImportExportOperations::GEOMImpl_IImportExportOperations(GEOM_Engine* GEOMImpl_IImportExportOperations::~GEOMImpl_IImportExportOperations() { MESSAGE("GEOMImpl_IImportExportOperations::~GEOMImpl_IImportExportOperations"); - /*delete myBasicOperations; - delete myBooleanOperations; - delete myShapesOperations; - delete myTransformOperations; - delete myBlocksOperations; - delete my3DPrimOperations; - delete myLocalOperations; - delete myHealingOperations;*/ delete m_shapesOperations; delete m_groupOperations; } @@ -139,11 +123,7 @@ bool GEOMImpl_IImportExportOperations::ExportXAO(Handle(GEOM_Object) shape, std::list groupList, std::list fieldList) { - std::cout << ">> ExportXAO" << std::endl; SetErrorCode(KO); - bool isGood = false; - - // // add a new shape function with parameters Handle(GEOM_Function) lastFunction = shape->GetLastFunction(); @@ -163,72 +143,17 @@ bool GEOMImpl_IImportExportOperations::ExportXAO(Handle(GEOM_Object) shape, if (exportFunction->GetDriverGUID() != GEOMImpl_ExportXAODriver::GetID()) return false; - /*GEOMImpl_IExportXAO aData (aRefFunction); - - TCollection_AsciiString FileName = theFileName.c_str(); - aData.SetExportingShape(aRefFunction); - aData.SetFileName(FileName); - aData.SetlGroups(thelGroups); - aData.SetlFields(thelFields); - - //Compute the resulting value - try { - #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 - OCC_CATCH_SIGNALS; - #endif - if (!GetSolver()->ComputeFunction(aFunction)) { - SetErrorCode("ExportXAO driver failed : Not enough space on disk, or you haven't permissions to write this directory"); - return false; - } - } - catch (Standard_Failure) { - Handle(Standard_Failure) aFail = Standard_Failure::Caught(); - SetErrorCode(aFail->GetMessageString()); - return false; - }*/ XAO::Xao* xaoObject = new XAO::Xao(); XAO::Geometry* geometry = new XAO::Geometry(); TopoDS_Shape topoShape = shape->GetValue(); - std::ostringstream dumpStream; - BRepTools::Dump(topoShape, dumpStream); - geometry->setShape(dumpStream.str().c_str()); + geometry->setShape(topoShape); geometry->setName(shape->GetName()); Handle(TColStd_HSequenceOfTransient) subObjects = m_shapesOperations->GetExistingSubObjects(shape, false); int nbSubObjects = subObjects->Length(); - std::cout << "nb sub obj = " << nbSubObjects << std::endl; - int nbVertices = 0, nbEdges = 0, nbFaces = 0, nbSolids = 0, nbGroups = 0; - for (int i = 1; i <= nbSubObjects; i++) - { - Handle(Standard_Transient) transientSubObject = subObjects->Value(i); - if (transientSubObject.IsNull()) - continue; - - Handle(GEOM_Object) subObject = Handle(GEOM_Object)::DownCast(transientSubObject); - if (subObject->GetType() == GEOM_GROUP) - { - nbGroups++; - } - else - { - switch (subObject->GetValue().ShapeType()) - { - case TopAbs_VERTEX: nbVertices++; break; - case TopAbs_EDGE: nbEdges++; break; - case TopAbs_FACE: nbFaces++; break; - case TopAbs_SOLID: nbSolids++; break; - } - } - } - std::cout << "Nb = " << nbVertices << ", " << nbEdges << ", " << nbFaces << ", " << nbSolids << ", " << nbGroups << std::endl; - if (nbVertices > 0) geometry->setCountVertices(nbVertices); - if (nbEdges > 0) geometry->setCountEdges(nbEdges); - if (nbFaces > 0) geometry->setCountFaces(nbFaces); - if (nbSolids > 0) geometry->setCountSolids(nbSolids); - - int vInd = 0, eInd = 0, fInd = 0, sInd = 0; + int tmpIndex; for (int i = 1; i <= nbSubObjects; i++) { Handle(Standard_Transient) transientSubObject = subObjects->Value(i); @@ -236,79 +161,94 @@ bool GEOMImpl_IImportExportOperations::ExportXAO(Handle(GEOM_Object) shape, continue; Handle(GEOM_Object) subObject = Handle(GEOM_Object)::DownCast(transientSubObject); - std::cout << " sub[" << i << "] N=" << subObject->GetName() - //<< " E=" << subObject->GetEntry() - //<< " D=" << subObject->GetDocID() - << " T=" << subObject->GetType() << std::endl; if (subObject->GetType() != GEOM_GROUP) { - int index = m_shapesOperations->GetSubShapeIndex(shape, subObject); - const char* strIndex = XAO::XaoUtils::intToString(index); - std::cout << " index= " << index << std::endl; + int subIndex = m_shapesOperations->GetSubShapeIndex(shape, subObject); + // convert index to a string + std::stringstream str; + str << subIndex; + std::string strIndex = str.str(); + switch (subObject->GetValue().ShapeType()) { case TopAbs_VERTEX: - geometry->setVertex(vInd++, subObject->GetName(), strIndex); + tmpIndex = geometry->getVertexIndexByReference(strIndex.c_str()); + geometry->setVertexName(tmpIndex, subObject->GetName()); break; case TopAbs_EDGE: - geometry->setEdge(eInd++, subObject->GetName(), strIndex); + tmpIndex = geometry->getEdgeIndexByReference(strIndex.c_str()); + geometry->setEdgeName(tmpIndex, subObject->GetName()); break; case TopAbs_FACE: - geometry->setFace(fInd++, subObject->GetName(), strIndex); + tmpIndex = geometry->getFaceIndexByReference(strIndex.c_str()); + geometry->setFaceName(tmpIndex, subObject->GetName()); break; case TopAbs_SOLID: - geometry->setSolid(sInd++, subObject->GetName(), strIndex); + tmpIndex = geometry->getSolidIndexByReference(strIndex.c_str()); + geometry->setSolidName(tmpIndex, subObject->GetName()); break; } } } xaoObject->setGeometry(geometry); - xaoObject->exportToFile(fileName.c_str()); - - /* // adding groups std::list::iterator itG1 = groupList.begin(); - int gInd = 0; while (itG1 != groupList.end()) { - std::cout << "Group = " << gInd++ << std::endl; Handle(GEOM_Object) itGroup = (*itG1++); - XAO::Group* group = new XAO::Group(); - group->setName(itGroup->GetName()); Handle(TColStd_HArray1OfInteger) groupIds = m_groupOperations->GetObjects(itGroup); TopAbs_ShapeEnum shapeGroup = m_groupOperations->GetType(itGroup); - std::cout << "GroupShape = " << shapeGroup << std::endl; - if (shapeGroup == TopAbs_VERTEX) + + XAO::Group* group = new XAO::Group(); + group->setName(itGroup->GetName()); + switch (shapeGroup) { - group->setDimension(0); - for (int i = 1; i <= groupIds->Length(); i++) - { - const char* index = geometry->getVertexReference(groupIds->Value(i)); - group->addElement(index); - } + case TopAbs_VERTEX: + group->setDimension(0); + for (int i = 1; i <= groupIds->Length(); i++) + { + const char* ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + const int index = geometry->getVertexIndexByReference(ref); + group->addElement(index); + } + break; + case TopAbs_EDGE: + group->setDimension(1); + for (int i = 1; i <= groupIds->Length(); i++) + { + const char* ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + const int index = geometry->getEdgeIndexByReference(ref); + group->addElement(index); + } + break; + case TopAbs_FACE: + group->setDimension(2); + for (int i = 1; i <= groupIds->Length(); i++) + { + const char* ref = XAO::XaoUtils::intToString((int)(groupIds->Value(i))); + const int index = geometry->getFaceIndexByReference(ref); + group->addElement(index); + } + break; + case TopAbs_SOLID: + group->setDimension(3); + for (int i = 1; i <= groupIds->Length(); i++) + { + const char* ref = XAO::XaoUtils::intToString(groupIds->Value(i)); + const int index = geometry->getSolidIndexByReference(ref); + group->addElement(index); + } + break; } + xaoObject->addGroup(group); - /*{ - case TopAbs_SOLID: - Group->setType(3); - break; - case TopAbs_FACE: - Group->setType(2); - break; - case TopAbs_EDGE: - Group->setType(1); - break; - case TopAbs_VERTEX: - Group->setType(0); - break; - } * - - }*/ - - /* + } + + xaoObject->exportToFile(fileName.c_str()); + // make a Python command - TCollection_AsciiString fileNameStr = fileName.c_str(); + /*TCollection_AsciiString fileNameStr = fileName.c_str(); GEOM::TPythonDump pd(exportFunction); std::list::iterator itG = groupList.begin(); std::list::iterator itF = fieldList.begin(); @@ -329,6 +269,6 @@ bool GEOMImpl_IImportExportOperations::ExportXAO(Handle(GEOM_Object) shape, SetErrorCode(OK); - return isGood; + return true; } /*@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@*/ diff --git a/src/ImportExportGUI/ImportExportGUI.cxx b/src/ImportExportGUI/ImportExportGUI.cxx index 05eba148b..a79265304 100644 --- a/src/ImportExportGUI/ImportExportGUI.cxx +++ b/src/ImportExportGUI/ImportExportGUI.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -65,7 +65,6 @@ bool ImportExportGUI::OnGUIEvent(int commandId, SUIT_Desktop* parent) getGeometryGUI()->EmitSignalDeactivateDialog(); - QDialog* dialog = NULL; switch (commandId) { diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx index 9fc2dc545..4e069442d 100644 --- a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx +++ b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.cxx @@ -167,12 +167,13 @@ void ImportExportGUI_ExportXAODlg::processObject() else { ledShape->setText(GEOMBase::GetName(m_mainObj)); - GEOM::GEOM_IShapesOperations_var aShOp = getGeomEngine()->GetIShapesOperations(getStudyId()); - GEOM::ListOfGO_var Groups = aShOp->GetExistingSubObjects(m_mainObj, true); - // Affichage des noms des groupes - for (int i = 0, n = Groups->length(); i < n; i++) + GEOM::GEOM_IShapesOperations_var shapeOp = getGeomEngine()->GetIShapesOperations(getStudyId()); + GEOM::ListOfGO_var groups = shapeOp->GetExistingSubObjects(m_mainObj, true); + // add groups names + for (int i = 0, n = groups->length(); i < n; i++) { - lstGroups->addItem(GEOMBase::GetName(Groups[i])); + lstGroups->addItem(GEOMBase::GetName(groups[i])); + m_groups.append(GEOM::GeomObjPtr(groups[i].in())); } } } @@ -296,20 +297,16 @@ bool ImportExportGUI_ExportXAODlg::execute(ObjectList& objects) GEOM::ListOfGO_var groups = shapesOp->GetExistingSubObjects(m_mainObj, true); GEOM::ListOfGO_var fields = new GEOM::ListOfGO(); - std::cout << " == Groups" << std::endl; groups->length(m_groups.count()); for (int i = 0; i < m_groups.count(); i++) groups[i] = m_groups[i].copy(); - std::cout << " == Fields" << std::endl; fields->length(m_fields.count()); for (int i = 0; i < m_fields.count(); i++) fields[i] = m_fields[i].copy(); // call engine function - std::cout << " >> ExportXAO" << std::endl; res = ieOp->ExportXAO(m_mainObj, ledFileName->text().toStdString().c_str(), groups, fields); - std::cout << " << ExportXAO" << std::endl; return res; } diff --git a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h index 825071e31..c0c212673 100644 --- a/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h +++ b/src/ImportExportGUI/ImportExportGUI_ExportXAODlg.h @@ -55,7 +55,6 @@ private: GEOM::GEOM_Object_var m_mainObj; QList m_groups; QList m_fields; - //ImportExportGUI_1Sel1LineEdit2ListWidget* myGrp; QLineEdit* ledShape; QLineEdit* ledFileName; QListWidget* lstGroups; @@ -69,8 +68,6 @@ private slots: void LineEditReturnPressed(); void SelectionIntoArgument(); void SetEditCurrentArgument(); - //void ValueChangedInSpinBox(); - //void SetDoubleSpinBoxStep( double ); }; #endif // IMPORTEXPORTGUI_EXPORTXAODLG_H diff --git a/src/Makefile.am b/src/Makefile.am index 6e93da550..873ea299c 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -37,6 +37,10 @@ if GEOM_ENABLE_GUI GroupGUI BlocksGUI AdvancedGUI ImportExportGUI GEOM_SWIG_WITHIHM endif +if CPPUNIT_IS_OK + SUBDIRS += XAO/tests +endif + DIST_SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo \ SKETCHER OCC2VTK GEOM BREPExport \ BREPImport IGESExport IGESImport STEPExport STEPImport STLExport \ diff --git a/src/XAO/GeometricElement.cxx b/src/XAO/GeometricElement.cxx index 4979b184b..264ddd386 100644 --- a/src/XAO/GeometricElement.cxx +++ b/src/XAO/GeometricElement.cxx @@ -18,6 +18,7 @@ // // Author : Frederic Pons (OpenCascade) +#include #include #include "GeometricElement.hxx" @@ -71,7 +72,6 @@ void GeometricElementList::setElement(const int index, const char* name, const c m_elements[index].setReference(reference); } - const char* GeometricElementList::getName(const int index) { if (m_count == 0 || index > m_count) @@ -103,3 +103,19 @@ void GeometricElementList::setReference(const int index, const char* name) m_elements[index].setReference(name); } + +const int GeometricElementList::getIndexByReference(const char* ref) +{ + for (int index = 0; index < m_count; ++index) + { + if (strcmp(ref, m_elements[index].getReference()) == 0) + { + return index; + } + } + + return 0; +// std::string msg = "Cannot find element with reference "; +// msg += name; +// throw SALOME_Exception(msg.c_str()); +} diff --git a/src/XAO/GeometricElement.hxx b/src/XAO/GeometricElement.hxx index 3863b5849..93e15b3bd 100644 --- a/src/XAO/GeometricElement.hxx +++ b/src/XAO/GeometricElement.hxx @@ -75,6 +75,7 @@ namespace XAO void setName(const int index, const char* name); const char* getReference(const int index); void setReference(const int index, const char* reference); + const int getIndexByReference(const char* reference); private: int m_count; diff --git a/src/XAO/Geometry.cxx b/src/XAO/Geometry.cxx index efade0422..5dc25f751 100644 --- a/src/XAO/Geometry.cxx +++ b/src/XAO/Geometry.cxx @@ -85,53 +85,6 @@ const char* Geometry::getBREP() return streamShape.str().c_str(); } -/* -void Geometry::changeVertexName(int id, const char* name) -{ - if (m_nbVertices == 0) - Standard_TypeMismatch::Raise("Problem with number of vertices"); - - if (m_verticesNames == NULL) - m_verticesNames = new std::string[m_nbVertices]; - - int index = findVertex(id); - - if (index == -1) - Standard_TypeMismatch::Raise("Problem with the id of the vertex"); - - m_verticesNames[index] = name; -} - -const char* Geometry::findVertexName(int id) -{ - if (m_nbVertices == 0) - { - Standard_TypeMismatch::Raise("Problem with number of vertices"); - return ""; - } - - int index = findVertex(id); - - if (index == -1) - { - Standard_TypeMismatch::Raise("Problem with the id of the vertex"); - return ""; - } - - return m_verticesNames[index].c_str(); -}*/ -/* -int Geometry::findVertex(int id) -{ - int index = -1; - for (int i = 0, n = m_nbVertices; i < n; i++) - { - if (m_verticesIds[i] == id) - return i; - } - return index; -}*/ - void Geometry::initListIds(const Standard_Integer shapeType) { TopTools_MapOfShape mapShape; @@ -145,50 +98,49 @@ void Geometry::initListIds(const Standard_Integer shapeType) } if (listShape.IsEmpty()) - { return; - } - TopTools_IndexedMapOfShape anIndices; - TopExp::MapShapes(m_shape, anIndices); + TopTools_IndexedMapOfShape indices; + TopExp::MapShapes(m_shape, indices); //Handle (TColStd_HArray1OfInteger) anArray; - std::list aList; + std::list indexList; TopTools_ListIteratorOfListOfShape itSub(listShape); for (int index = 1; itSub.More(); itSub.Next(), ++index) { TopoDS_Shape value = itSub.Value(); - aList.push_back(anIndices.FindIndex(value)); + //std::cout << "index = " << indices.FindIndex(value) << std::endl; + indexList.push_back(indices.FindIndex(value)); } - std::list::iterator it = aList.begin(); + std::list::iterator it = indexList.begin(); switch (shapeType) { case TopAbs_VERTEX: /* Fill vertices ids */ { - m_vertices.setSize(aList.size()); - for (int i = 0; it != aList.end(); it++, i++) + m_vertices.setSize(indexList.size()); + for (int i = 0; it != indexList.end(); it++, i++) m_vertices.setReference(i, XaoUtils::intToString((*it))); break; } case TopAbs_EDGE: /* Fill edges ids */ { - m_edges.setSize(aList.size()); - for (int i = 0; it != aList.end(); it++, i++) + m_edges.setSize(indexList.size()); + for (int i = 0; it != indexList.end(); it++, i++) m_edges.setReference(i, XaoUtils::intToString((*it))); break; } case TopAbs_FACE: /* Fill faces ids */ { - m_faces.setSize(aList.size()); - for (int i = 0; it != aList.end(); it++, i++) + m_faces.setSize(indexList.size()); + for (int i = 0; it != indexList.end(); it++, i++) m_faces.setReference(i, XaoUtils::intToString((*it))); break; } case TopAbs_SOLID: /* Fill solids ids */ { - m_solids.setSize(aList.size()); - for (int i = 0; it != aList.end(); it++, i++) + m_solids.setSize(indexList.size()); + for (int i = 0; it != indexList.end(); it++, i++) m_solids.setReference(i, XaoUtils::intToString((*it))); break; } diff --git a/src/XAO/Geometry.hxx b/src/XAO/Geometry.hxx index a4580a752..aaf4b6bd6 100644 --- a/src/XAO/Geometry.hxx +++ b/src/XAO/Geometry.hxx @@ -73,10 +73,10 @@ namespace XAO void setCountFaces(const int nb) { m_faces.setSize(nb); } void setCountSolids(const int nb) { m_solids.setSize(nb); } - void setVertex(const int index, const char* name, const char* reference) { m_vertices.setElement(index, name,reference); } - void setEdge(const int index, const char* name, const char* reference) { m_edges.setElement(index, name,reference); } - void setFace(const int index, const char* name, const char* reference) { m_faces.setElement(index, name,reference); } - void setSolid(const int index, const char* name, const char* reference) { m_solids.setElement(index, name,reference); } + void setVertex(const int index, const char* name, const char* reference) { m_vertices.setElement(index, name, reference); } + void setEdge(const int index, const char* name, const char* reference) { m_edges.setElement(index, name, reference); } + void setFace(const int index, const char* name, const char* reference) { m_faces.setElement(index, name, reference); } + void setSolid(const int index, const char* name, const char* reference) { m_solids.setElement(index, name, reference); } const char* getVertexName(const int index) { return m_vertices.getName(index); } const char* getEdgeName(const int index) { return m_edges.getName(index); } @@ -98,10 +98,10 @@ namespace XAO void setFaceReference(const int index, const char* reference) { m_faces.setReference(index, reference); } void setSolidReference(const int index, const char* reference) { m_solids.setReference(index, reference); } -// int findVertex(int id); -// void changeVertexName(const int id, const char* name); -// const char* findVertexName(int id); - + const int getVertexIndexByReference(const char* reference) { return m_vertices.getIndexByReference(reference); } + const int getEdgeIndexByReference(const char* reference) { return m_edges.getIndexByReference(reference); } + const int getFaceIndexByReference(const char* reference) { return m_faces.getIndexByReference(reference); } + const int getSolidIndexByReference(const char* reference) { return m_solids.getIndexByReference(reference); } private: void initListIds(const Standard_Integer shapeType); diff --git a/src/XAO/Group.hxx b/src/XAO/Group.hxx index 9f9a8c782..657cdf695 100644 --- a/src/XAO/Group.hxx +++ b/src/XAO/Group.hxx @@ -21,6 +21,7 @@ #ifndef __XAO_GROUP_HXX__ #define __XAO_GROUP_HXX__ +# include #include #include @@ -55,21 +56,21 @@ namespace XAO return m_elements.size(); } - void addElement(const char* value) + void addElement(const int value) { m_elements.push_back(value); } - const char* getElement(const int index) + const int getElement(const int index) { - return m_elements[index].c_str(); + return m_elements[index]; } private: std::string m_name; int m_dimension; int m_count; - std::vector m_elements; + std::vector m_elements; }; } diff --git a/src/XAO/Makefile.am b/src/XAO/Makefile.am index 2f7d7dd2d..a3e47f85d 100644 --- a/src/XAO/Makefile.am +++ b/src/XAO/Makefile.am @@ -21,10 +21,6 @@ # include $(top_srcdir)/adm_local/unix/make_common_starter.am -if CPPUNIT_IS_OK - SUBDIRS = . tests -endif - # =============================================================== # Files to be installed # =============================================================== diff --git a/src/XAO/Xao.cxx b/src/XAO/Xao.cxx index 2c2361a5a..863b928f1 100644 --- a/src/XAO/Xao.cxx +++ b/src/XAO/Xao.cxx @@ -109,6 +109,8 @@ Group* Xao::getGroup(const int index) if (i == index) return (*it); } + + return NULL; } @@ -229,7 +231,7 @@ void Xao::exportGroups(xmlNodePtr xao) for (int i = 0; i < grp->getCount(); ++i) { xmlNodePtr elt = xmlNewChild(group, 0, C_TAG_ELEMENT, 0); - xmlNewProp(elt, C_ATTR_ELEMENT_INDEX, BAD_CAST grp->getElement(i)); + xmlNewProp(elt, C_ATTR_ELEMENT_INDEX, BAD_CAST XaoUtils::intToString(grp->getElement(i))); } } } @@ -507,7 +509,7 @@ void Xao::parseGroupNode(xmlNodePtr groupNode) xmlChar* index = xmlGetProp(node, C_ATTR_ELEMENT_INDEX); if (index == NULL) throw SALOME_Exception("Bad index for group element"); - group->addElement((char*)index); + group->addElement(atoi((char*)index)); xmlFree(index); } } diff --git a/src/XAO/tests/ImportExportTest.cxx b/src/XAO/tests/ImportExportTest.cxx index 31ccd85cd..30ef338d5 100644 --- a/src/XAO/tests/ImportExportTest.cxx +++ b/src/XAO/tests/ImportExportTest.cxx @@ -83,15 +83,15 @@ void ImportExportTest::testExportGeometry() xao.addGroup(group); group->setName("boite1"); group->setDimension(3); - group->addElement("1"); + group->addElement(1); group = new Group(); xao.addGroup(group); group->setName("faces"); group->setDimension(2); - group->addElement("5"); - group->addElement("8"); - group->addElement("9"); + group->addElement(5); + group->addElement(8); + group->addElement(9); bool res = xao.exportToFile("mygeom.xao"); CPPUNIT_ASSERT(res); @@ -113,7 +113,7 @@ void ImportExportTest::testGeometryError() void ImportExportTest::testImportXao() { - std::cout << std::endl; + //std::cout << std::endl; Xao xao; xao.importFromFile(getTestFile("test.xao").c_str()); CPPUNIT_ASSERT(strcmp(xao.getAuthor(), "me") == 0); @@ -156,12 +156,12 @@ void ImportExportTest::testImportXao() CPPUNIT_ASSERT(group->getCount() == 1); CPPUNIT_ASSERT(strcmp(group->getName(), "boite_1") == 0); CPPUNIT_ASSERT(group->getDimension() == 3); - CPPUNIT_ASSERT(strcmp(group->getElement(0), "1") == 0); + CPPUNIT_ASSERT(group->getElement(0) == 1); group = xao.getGroup(1); CPPUNIT_ASSERT(group->getCount() == 3); CPPUNIT_ASSERT(strcmp(group->getName(), "") == 0); CPPUNIT_ASSERT(group->getDimension() == 2); - CPPUNIT_ASSERT(strcmp(group->getElement(0), "5") == 0); - CPPUNIT_ASSERT(strcmp(group->getElement(1), "8") == 0); - CPPUNIT_ASSERT(strcmp(group->getElement(2), "9") == 0); + CPPUNIT_ASSERT(group->getElement(0) == 5); + CPPUNIT_ASSERT(group->getElement(1) == 8); + CPPUNIT_ASSERT(group->getElement(2) == 9); } -- 2.39.2