]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
add read only property to geometry
authorfps <fps@opencascade.com>
Fri, 13 Sep 2013 09:41:06 +0000 (09:41 +0000)
committerfps <fps@opencascade.com>
Fri, 13 Sep 2013 09:41:06 +0000 (09:41 +0000)
20 files changed:
src/XAO/XAO_BooleanField.hxx
src/XAO/XAO_BooleanStep.hxx
src/XAO/XAO_BrepGeometry.hxx
src/XAO/XAO_DoubleField.hxx
src/XAO/XAO_DoubleStep.hxx
src/XAO/XAO_Exception.hxx
src/XAO/XAO_Field.hxx
src/XAO/XAO_Geometry.cxx
src/XAO/XAO_Geometry.hxx
src/XAO/XAO_Group.hxx
src/XAO/XAO_IntegerField.hxx
src/XAO/XAO_IntegerStep.hxx
src/XAO/XAO_Step.hxx
src/XAO/XAO_StringField.hxx
src/XAO/XAO_StringStep.hxx
src/XAO/XAO_Xao.hxx
src/XAO/XAO_XaoExporter.cxx
src/XAO/XAO_XaoExporter.hxx
src/XAO/XAO_XaoUtils.hxx
src/XAO/tests/ImportExportTest.cxx

index 328c6b332b76acfcdd7c671081459bd1ecb66928..9a971e0aab4372122b43c4f2025f3035ec2d79e7 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <string>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Field.hxx"
 #include "XAO_BooleanStep.hxx"
 
index 819161f03474041cb5d510260f1646ec704ae50a..c6ceb3e601b5e600c3f81921b523819edf2dd543 100644 (file)
 //
 // Author : Frederic Pons (OpenCascade)
 
-
 #ifndef __XAO_BOOLEANSTEP_HXX__
 #define __XAO_BOOLEANSTEP_HXX__
 
 #include <vector>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Step.hxx"
 
 namespace XAO
index 017d9c2c4d6b6c830cc61ba02a74c3b5838156b0..217faf8c763d8d8ef116166b37e8f5e647dd7ae8 100644 (file)
@@ -26,7 +26,7 @@
 
 #include <TopoDS_Shape.hxx>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Geometry.hxx"
 
 namespace XAO
index a733aeae3efbd44fc08098e0a4ce89f59d11e4ab..2ea44cf2769f89b104edcc937f4d4f607929c175 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <string>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Field.hxx"
 #include "XAO_DoubleStep.hxx"
 
index e652f84fb62ab27ab9bd80f04a87d8f8430b1e55..72a92c5a5c3965026bca4a6c81f05d43c6129f8f 100644 (file)
 //
 // Author : Frederic Pons (OpenCascade)
 
-
 #ifndef __XAO_DOUBLESTEP_HXX__
 #define __XAO_DOUBLESTEP_HXX__
 
 #include <vector>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Step.hxx"
 
 namespace XAO
index 8c9aea26ad12bde0010cebffea702ad895a9cc7e..17f2699ab14d10135e7353a8c00002ba344a4553 100644 (file)
@@ -1,16 +1,28 @@
-/*
- * XAO_Exception.hxx
- *
- *  Created on: 12 sept. 2013
- *      Author: salome
- */
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
 
 #ifndef __XAO_EXCEPTION_HXX__
 #define __XAO_EXCEPTION_HXX__
 
 namespace XAO
 {
-
     /**
      * \class XAO_Exception
      * Exception for XAO operations.
index 3d33e46f6db5b121d99d52c9ce674b623acdc3f4..d36987569799b75ed35f65f8d19c04940164d1a1 100644 (file)
@@ -24,7 +24,7 @@
 #include <string>
 #include <vector>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Step.hxx"
 
 namespace XAO
index 7ef743765b540fa7bea5f548be0be313f7242941..b774b31af9ceada68cf28e95adff8735f48d0518 100644 (file)
@@ -27,6 +27,7 @@ using namespace XAO;
 Geometry::Geometry(const std::string& name)
     : m_name(name)
 {
+    m_readOnly = false;
 }
 
 Geometry* Geometry::createGeometry(const XAO::Format& format)
@@ -48,6 +49,13 @@ Geometry::~Geometry()
 {
 }
 
+void Geometry::checkReadOnly()
+throw (XAO_Exception)
+{
+    if (m_readOnly)
+        throw XAO_Exception("Geometry is read only.");
+}
+
 const int Geometry::countElements(const XAO::Dimension& dim) const
 throw (XAO_Exception)
 {
@@ -122,3 +130,66 @@ throw (XAO_Exception)
 
     throw XAO_Exception(MsgBuilder() << "Unknown dimension:" << dim);
 }
+
+void Geometry::setCountVertices(const int& nb) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_vertices.setSize(nb);
+}
+void Geometry::setCountEdges(const int& nb) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_edges.setSize(nb);
+}
+void Geometry::setCountFaces(const int& nb) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_faces.setSize(nb);
+}
+void Geometry::setCountSolids(const int& nb) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_solids.setSize(nb);
+}
+
+void Geometry::setVertexReference(const int& index, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_vertices.setReference(index, reference);
+}
+void Geometry::setEdgeReference(const int& index, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_edges.setReference(index, reference);
+}
+void Geometry::setFaceReference(const int& index, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_faces.setReference(index, reference);
+}
+void Geometry::setSolidReference(const int& index, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_solids.setReference(index, reference);
+}
+
+void Geometry::setVertex(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_vertices.setElement(index, name, reference);
+}
+void Geometry::setEdge(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_edges.setElement(index, name, reference);
+}
+void Geometry::setFace(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_faces.setElement(index, name, reference);
+}
+void Geometry::setSolid(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception)
+{
+    checkReadOnly();
+    m_solids.setElement(index, name, reference);
+}
index acc5adae25c3f2319dcf89c0bca8cea2423c21d7..4cfc080efb3f1edcc42678232285e91f094b7e3a 100644 (file)
@@ -23,7 +23,8 @@
 
 #include <string>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
+#include "XAO_Exception.hxx"
 #include "XAO_GeometricElement.hxx"
 
 namespace XAO
@@ -93,10 +94,10 @@ namespace XAO
         const int countFaces() const { return m_faces.getSize(); }
         const int countSolids() const { return m_solids.getSize(); }
 
-        void setCountVertices(const int& nb) { m_vertices.setSize(nb); }
-        void setCountEdges(const int& nb) { m_edges.setSize(nb); }
-        void setCountFaces(const int& nb) { m_faces.setSize(nb); }
-        void setCountSolids(const int& nb) { m_solids.setSize(nb); }
+        void setCountVertices(const int& nb) throw (XAO_Exception);
+        void setCountEdges(const int& nb) throw (XAO_Exception);
+        void setCountFaces(const int& nb) throw (XAO_Exception);
+        void setCountSolids(const int& nb) throw (XAO_Exception);
 
         const std::string getVertexName(const int& index) throw (XAO_Exception) { return m_vertices.getName(index); }
         const std::string getEdgeName(const int& index) throw (XAO_Exception) { return m_edges.getName(index); }
@@ -113,21 +114,21 @@ namespace XAO
         const bool hasFaceName(const int& index) throw (XAO_Exception) { return m_faces.hasName(index); }
         const bool hasSolidName(const int& index) throw (XAO_Exception) { return m_solids.hasName(index); }
 
-        const std::string getVertexReference(const int& index) { return m_vertices.getReference(index); }
-        const std::string getEdgeReference(const int& index) { return m_edges.getReference(index); }
-        const std::string getFaceReference(const int& index) { return m_faces.getReference(index); }
-        const std::string getSolidReference(const int& index) { return m_solids.getReference(index); }
+        const std::string getVertexReference(const int& index) throw (XAO_Exception) { return m_vertices.getReference(index); }
+        const std::string getEdgeReference(const int& index) throw (XAO_Exception) { return m_edges.getReference(index); }
+        const std::string getFaceReference(const int& index) throw (XAO_Exception) { return m_faces.getReference(index); }
+        const std::string getSolidReference(const int& index) throw (XAO_Exception) { return m_solids.getReference(index); }
         const std::string getElementReference(const XAO::Dimension& dim, const int& index) throw (XAO_Exception);
 
-        void setVertexReference(const int& index, const std::string& reference) { m_vertices.setReference(index, reference); }
-        void setEdgeReference(const int& index, const std::string& reference) { m_edges.setReference(index, reference); }
-        void setFaceReference(const int& index, const std::string& reference) { m_faces.setReference(index, reference); }
-        void setSolidReference(const int& index, const std::string& reference) { m_solids.setReference(index, reference); }
+        void setVertexReference(const int& index, const std::string& reference) throw (XAO_Exception);
+        void setEdgeReference(const int& index, const std::string& reference) throw (XAO_Exception);
+        void setFaceReference(const int& index, const std::string& reference) throw (XAO_Exception);
+        void setSolidReference(const int& index, const std::string& reference) throw (XAO_Exception);
 
-        void setVertex(const int& index, const std::string& name, const std::string& reference) { m_vertices.setElement(index, name, reference); }
-        void setEdge(const int& index, const std::string& name, const std::string& reference) { m_edges.setElement(index, name, reference); }
-        void setFace(const int& index, const std::string& name, const std::string& reference) { m_faces.setElement(index, name, reference); }
-        void setSolid(const int& index, const std::string& name, const std::string& reference) { m_solids.setElement(index, name, reference); }
+        void setVertex(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception);
+        void setEdge(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception);
+        void setFace(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception);
+        void setSolid(const int& index, const std::string& name, const std::string& reference) throw (XAO_Exception);
 
         const int getVertexIndexByReference(const std::string& reference) { return m_vertices.getIndexByReference(reference); }
         const int getEdgeIndexByReference(const std::string& reference) { return m_edges.getIndexByReference(reference); }
@@ -138,12 +139,27 @@ namespace XAO
         GeometricElementList::iterator begin(const XAO::Dimension& dim) throw (XAO_Exception);
         GeometricElementList::iterator end(const XAO::Dimension& dim) throw (XAO_Exception);
 
+        /**
+         * Verifies if the geometry is read only.
+         * @return true if the geometry is read only.
+         */
+        bool isReadOnly() { return m_readOnly; }
+
+        /**
+         * Sets the geometry read only.
+         */
+        void setReadOnly() { m_readOnly = true; }
+
+    protected:
+        void checkReadOnly() throw (XAO_Exception);
+
     protected:
         std::string m_name;
         GeometricElementList m_vertices;
         GeometricElementList m_edges;
         GeometricElementList m_faces;
         GeometricElementList m_solids;
+        bool m_readOnly;
 
     };
 }
index a5394252a335c7a1106c856516ebdd1c246a2908..0625600d5b0da9f11f4a0f90cae58f0c94b0fa74 100644 (file)
@@ -24,7 +24,7 @@
 #include <string>
 #include <set>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 
 namespace XAO
 {
index 1f8db8f54c743a13d6e048120d053b46b84051ea..e801c25bd83a0fd17c4765756c37af1f282679c2 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <string>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Field.hxx"
 #include "XAO_IntegerStep.hxx"
 
index b2c537261a0d660f350eeef07917fc23ab0f0709..10d50a5bf3ebd58d3ee99531fb264a4894b5c2ce 100644 (file)
 //
 // Author : Frederic Pons (OpenCascade)
 
-
 #ifndef __XAO_INTEGERSTEP_HXX__
 #define __XAO_INTEGERSTEP_HXX__
 
 #include <vector>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Step.hxx"
 
 namespace XAO
index 42ca7def6a303f57a2ee7bb67111f890302faf8c..6c61020c90ebb62e10371d7298e82fb1b5a54413 100644 (file)
 //
 // Author : Frederic Pons (OpenCascade)
 
-
 #ifndef __XAO_STEP_HXX__
 #define __XAO_STEP_HXX__
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 
 namespace XAO
 {
index c939a637d3df7811dfa0ea979b40b8f0af0aba3e..489f234590c7f1e3335402de72ead23a36826a66 100644 (file)
@@ -23,7 +23,7 @@
 
 #include <string>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Field.hxx"
 #include "XAO_StringStep.hxx"
 
index f1ad0d953272e303ed118276f05ad5a38ba4c3c8..a623bb5804d706c3dcc20da6a0df8dc649d4e43f 100644 (file)
 //
 // Author : Frederic Pons (OpenCascade)
 
-
 #ifndef __XAO_STRINGSTEP_HXX__
 #define __XAO_STRINGSTEP_HXX__
 
 #include <string>
 #include <vector>
 
-#include "XAO_Xao.hxx"
+#include "XAO_XaoUtils.hxx"
 #include "XAO_Step.hxx"
 
 namespace XAO
index 8bcd11dbd2a1ebe20db2810395f9aa0eaaa99295..a6685bc30dd3da92a6fbeed671bb464181cb0c37 100644 (file)
 #include <string>
 #include <list>
 #include "XAO_Exception.hxx"
+#include "XAO_XaoUtils.hxx"
+#include "XAO_Geometry.hxx"
 
 namespace XAO
 {
-    /**
-     * @enum Format
-     */
-    enum Format
-    {
-        BREP,
-        STEP
-    };
-
-    /**
-     * @enum Dimension
-     */
-    enum Dimension
-    {
-        VERTEX = 0,//!< VERTEX
-        EDGE = 1,  //!< EDGE
-        FACE = 2,  //!< FACE
-        SOLID = 3, //!< SOLID
-        WHOLE = -1 //!< WHOLE
-    };
-
-    /**
-     * @enum Type
-     */
-    enum Type
-    {
-        BOOLEAN = 0,//!< BOOLEAN
-        INTEGER = 1,//!< INTEGER
-        DOUBLE = 2, //!< DOUBLE
-        STRING = 3  //!< STRING
-    };
-
-    class Geometry;
     class Group;
     class Field;
 
@@ -135,9 +104,12 @@ namespace XAO
          * Sets the geometry.
          * \param geometry the geometry to set.
          */
-        void setGeometry(Geometry* geometry)
+        void setGeometry(Geometry* geometry) throw (XAO_Exception)
         {
+            if (m_geometry != NULL)
+                throw XAO_Exception("Geometry already set.");
             m_geometry = geometry;
+            m_geometry->setReadOnly();
         }
 
         //
index 5ebfef7dc9a77b4cb8cddf57f5702f6b83caedd2..cd68ec5c988d9379f82399778de8e8a301af2b4a 100644 (file)
@@ -1,3 +1,22 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
 
 #include <libxml/parser.h>
 
index 3dad13d6de9940e22efa4fb93694a1e858ad080b..6929b22b88c1aba4e07c782a8297cbf3c6f87f79 100644 (file)
@@ -1,3 +1,22 @@
+// Copyright (C) 2013  CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+// Author : Frederic Pons (OpenCascade)
 
 #ifndef __XAO_XAOEXPORTER_HXX__
 #define __XAO_XAOEXPORTER_HXX__
index 41fefb5ec8d8205577588049541f4a03042328ce..5718db52b558b0eb443c5a6f0f175973fdf1c042 100644 (file)
 #include <string>
 #include <exception>
 
-#include "XAO_Xao.hxx"
 #include "XAO_Exception.hxx"
 
 
 namespace XAO
 {
+    /**
+     * @enum Format
+     */
+    enum Format
+    {
+        BREP,
+        STEP
+    };
+
+    /**
+     * @enum Dimension
+     */
+    enum Dimension
+    {
+        VERTEX = 0,//!< VERTEX
+        EDGE = 1,  //!< EDGE
+        FACE = 2,  //!< FACE
+        SOLID = 3, //!< SOLID
+        WHOLE = -1 //!< WHOLE
+    };
+
+    /**
+     * @enum Type
+     */
+    enum Type
+    {
+        BOOLEAN = 0,//!< BOOLEAN
+        INTEGER = 1,//!< INTEGER
+        DOUBLE = 2, //!< DOUBLE
+        STRING = 3  //!< STRING
+    };
+
     /**
      * \class XaoUtils
      * Utilities class to convert types.
index 5d02cb0d9f3af65f1bc5da21f692068a96631494..b84f04eacbb5a316ce924a620f891dda1cdd8e79 100644 (file)
@@ -55,7 +55,7 @@ void ImportExportTest::testExportGeometry()
     Xao xao("me", "1.0");
     Geometry* geom = Geometry::createGeometry(XAO::BREP);
     geom->setName("mygeom");
-    xao.setGeometry(geom);
+    CPPUNIT_ASSERT_EQUAL(false, geom->isReadOnly());
 
     // add elements
     geom->setCountVertices(4);
@@ -76,6 +76,9 @@ void ImportExportTest::testExportGeometry()
     geom->setCountSolids(1);
     geom->setSolid(0, "s1", "10");
 
+    xao.setGeometry(geom);
+    CPPUNIT_ASSERT_EQUAL(true, geom->isReadOnly());
+
     // groups
     Group* group = xao.addGroup(XAO::SOLID);
     group->setName("boite1");
@@ -109,13 +112,11 @@ void ImportExportTest::testExportGeometry()
 
 void ImportExportTest::testGeometryError()
 {
-    Xao xao("me", "1.0");
     Geometry* geom = Geometry::createGeometry(XAO::BREP);
     geom->setName("mygeom");
-    xao.setGeometry(geom);
-
     geom->setCountVertices(2);
     CPPUNIT_ASSERT_THROW(geom->setVertex(3, "v4", "4"), XAO_Exception);
+    delete geom;
 }
 
 void ImportExportTest::testImportXao()
@@ -125,6 +126,15 @@ void ImportExportTest::testImportXao()
     checkImport(xao);
 }
 
+void ImportExportTest::testImportXaoFromText()
+{
+    char* txt = TestUtils::readTextFile(TestUtils::getTestFilePath("test.xao"));
+
+    Xao xao;
+    xao.setXML(txt);
+    checkImport(xao);
+}
+
 void ImportExportTest::checkImport(Xao& xao)
 {
     CPPUNIT_ASSERT_EQUAL(std::string("me"), xao.getAuthor());
@@ -175,12 +185,3 @@ void ImportExportTest::checkImport(Xao& xao)
     CPPUNIT_ASSERT_EQUAL(0, group->get(0));
     CPPUNIT_ASSERT_EQUAL(1, group->get(1));
 }
-
-void ImportExportTest::testImportXaoFromText()
-{
-    char* txt = TestUtils::readTextFile(TestUtils::getTestFilePath("test.xao"));
-
-    Xao xao;
-    xao.setXML(txt);
-    checkImport(xao);
-}