]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
Merge from V5_1_main branch 24/11/2010
authorvsr <vsr@opencascade.com>
Thu, 25 Nov 2010 12:31:41 +0000 (12:31 +0000)
committervsr <vsr@opencascade.com>
Thu, 25 Nov 2010 12:31:41 +0000 (12:31 +0000)
269 files changed:
adm_local/cmake_files/FindGEOM.cmake
bin/Makefile.am
bin/addvars2notebook_GEOM.py [new file with mode: 0644]
configure.ac
doc/Makefile.am
doc/docutils/Makefile.am [new file with mode: 0644]
doc/docutils/conf.py [new file with mode: 0644]
doc/docutils/docapi.rst [new file with mode: 0644]
doc/docutils/images/salome-geom-structuralelements.png [new file with mode: 0644]
doc/docutils/index.rst [new file with mode: 0644]
doc/docutils/overview.rst [new file with mode: 0644]
doc/salome/gui/GEOM/Makefile.am
doc/salome/gui/GEOM/doxyfile.in
doc/salome/gui/GEOM/doxyfile_py.in
doc/salome/gui/GEOM/doxyfile_tui.in
doc/salome/gui/GEOM/images/edge1.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/edge2.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/geomscreen.png
doc/salome/gui/GEOM/images/get_in_place_lost_part.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/limit_tolerance_dlg.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/mtrans1.png
doc/salome/gui/GEOM/images/mtrans2.png
doc/salome/gui/GEOM/images/neo-mrot1.png
doc/salome/gui/GEOM/images/neo-mrot2.png
doc/salome/gui/GEOM/images/neo-obj2.png [deleted file]
doc/salome/gui/GEOM/images/neo-obj3.png
doc/salome/gui/GEOM/images/partition1.png
doc/salome/gui/GEOM/images/partition2.png
doc/salome/gui/GEOM/images/salome-geom-structuralelements.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/transformation13.png
doc/salome/gui/GEOM/images/transformation5.png
doc/salome/gui/GEOM/images/transformation6.png
doc/salome/gui/GEOM/input/chamfer_operation.doc
doc/salome/gui/GEOM/input/creating_edge.doc
doc/salome/gui/GEOM/input/creating_extrusion.doc
doc/salome/gui/GEOM/input/creating_filling.doc
doc/salome/gui/GEOM/input/creating_wire.doc
doc/salome/gui/GEOM/input/fillet1d_operation.doc
doc/salome/gui/GEOM/input/fillet2d_operation.doc
doc/salome/gui/GEOM/input/fillet_operation.doc
doc/salome/gui/GEOM/input/geompypkg.doc [new file with mode: 0644]
doc/salome/gui/GEOM/input/index.doc
doc/salome/gui/GEOM/input/limit_tolerance_operation.doc [new file with mode: 0644]
doc/salome/gui/GEOM/input/multi_translation_operation.doc
doc/salome/gui/GEOM/input/partition.doc
doc/salome/gui/GEOM/input/repairing_operations.doc
doc/salome/gui/GEOM/input/shape_processing_operation.doc
doc/salome/gui/GEOM/input/translation_operation.doc
doc/salome/gui/GEOM/input/tui_advanced_geom_objs.doc
doc/salome/gui/GEOM/input/tui_repairing_operations.doc
doc/salome/gui/GEOM/input/tui_test_others.doc
doc/salome/tui/doxyfile.in
idl/GEOM_Gen.idl
resources/ImportExport
resources/Makefile.am
resources/SalomeApp.xml
resources/build_edge_wire.png [new file with mode: 0644]
resources/limit_tolerance.png [new file with mode: 0644]
resources/origin_and_vectors.png [new file with mode: 0755]
src/AdvancedGUI/AdvancedGUI_PipeTShapeDlg.cxx
src/BasicGUI/BasicGUI_ArcDlg.cxx
src/BasicGUI/BasicGUI_CircleDlg.cxx
src/BasicGUI/BasicGUI_EllipseDlg.cxx
src/BasicGUI/BasicGUI_LineDlg.cxx
src/BasicGUI/BasicGUI_MarkerDlg.cxx
src/BasicGUI/BasicGUI_PlaneDlg.cxx
src/BasicGUI/BasicGUI_PointDlg.cxx
src/BasicGUI/BasicGUI_PointDlg.h
src/BasicGUI/BasicGUI_VectorDlg.cxx
src/BlocksGUI/BlocksGUI_BlockDlg.cxx
src/BlocksGUI/BlocksGUI_QuadFaceDlg.cxx
src/BuildGUI/BuildGUI_CompoundDlg.cxx
src/BuildGUI/BuildGUI_EdgeDlg.cxx
src/BuildGUI/BuildGUI_EdgeDlg.h
src/BuildGUI/BuildGUI_SolidDlg.cxx
src/BuildGUI/BuildGUI_WireDlg.cxx
src/BuildGUI/BuildGUI_WireDlg.h
src/DisplayGUI/DisplayGUI.cxx
src/DlgRef/DlgRef.cxx
src/DlgRef/DlgRef.h
src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui [new file with mode: 0644]
src/DlgRef/Makefile.am
src/EntityGUI/EntityGUI_3DSketcherDlg.cxx
src/EntityGUI/EntityGUI_SketcherDlg.cxx
src/GEOM/GEOM_Engine.cxx
src/GEOM/GEOM_Function.cxx
src/GEOM/GEOM_Function.hxx
src/GEOM/GEOM_ISubShape.hxx
src/GEOM/Makefile.am
src/GEOMAlgo/BlockFix_UnionEdges.cxx
src/GEOMAlgo/GEOMAlgo.cdl
src/GEOMAlgo/GEOMAlgo_Builder.cxx
src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_0.cxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_0.cxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape.hxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape_0.cxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_Tools.cdl
src/GEOMAlgo/GEOMAlgo_Tools.hxx
src/GEOMAlgo/GEOMAlgo_Tools3D.cxx
src/GEOMAlgo/GEOMAlgo_Tools_1.cxx
src/GEOMAlgo/GEOMAlgo_WESCorrector.cxx
src/GEOMAlgo/GEOMAlgo_WESScaler.cdl [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_WESScaler.cxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_WESScaler.hxx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_WESScaler.ixx [new file with mode: 0644]
src/GEOMAlgo/GEOMAlgo_WESScaler.jxx [new file with mode: 0644]
src/GEOMAlgo/Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx [new file with mode: 0644]
src/GEOMAlgo/Makefile.am
src/GEOMBase/GEOMBase.cxx
src/GEOMBase/GEOMBase.h
src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMBase/GEOMBase_Helper.h
src/GEOMClient/GEOM_Client.cxx
src/GEOMClient/GEOM_Client.hxx
src/GEOMGUI/GEOMGUI_OCCSelector.cxx
src/GEOMGUI/GEOMGUI_Selection.cxx
src/GEOMGUI/GEOMGUI_Selection.h
src/GEOMGUI/GEOM_Displayer.cxx
src/GEOMGUI/GEOM_images.ts
src/GEOMGUI/GEOM_msg_en.ts
src/GEOMGUI/GEOM_msg_fr.ts
src/GEOMGUI/GeometryGUI.cxx
src/GEOMGUI/GeometryGUI.h
src/GEOMGUI/GeometryGUI_Operations.h
src/GEOMImpl/GEOMImpl_3DSketcherDriver.cxx
src/GEOMImpl/GEOMImpl_Fillet1d.cxx
src/GEOMImpl/GEOMImpl_Fillet1d.hxx
src/GEOMImpl/GEOMImpl_Fillet1dDriver.cxx
src/GEOMImpl/GEOMImpl_FillingDriver.cxx
src/GEOMImpl/GEOMImpl_HealingDriver.cxx
src/GEOMImpl/GEOMImpl_HealingDriver.hxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.cxx
src/GEOMImpl/GEOMImpl_IAdvancedOperations.hxx
src/GEOMImpl/GEOMImpl_IBlocksOperations.cxx
src/GEOMImpl/GEOMImpl_IBlocksOperations.hxx
src/GEOMImpl/GEOMImpl_IGroupOperations.cxx
src/GEOMImpl/GEOMImpl_IHealing.hxx
src/GEOMImpl/GEOMImpl_IHealingOperations.cxx
src/GEOMImpl/GEOMImpl_IHealingOperations.hxx
src/GEOMImpl/GEOMImpl_IMeasureOperations.cxx
src/GEOMImpl/GEOMImpl_IShapes.hxx
src/GEOMImpl/GEOMImpl_IShapesOperations.cxx
src/GEOMImpl/GEOMImpl_IShapesOperations.hxx
src/GEOMImpl/GEOMImpl_ITransformOperations.cxx
src/GEOMImpl/GEOMImpl_ImportDriver.cxx
src/GEOMImpl/GEOMImpl_MeasureDriver.cxx
src/GEOMImpl/GEOMImpl_PartitionDriver.cxx
src/GEOMImpl/GEOMImpl_ShapeDriver.cxx
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOMToolsGUI/GEOMToolsGUI.cxx
src/GEOMToolsGUI/GEOMToolsGUI.h
src/GEOMToolsGUI/GEOMToolsGUI_1.cxx
src/GEOMToolsGUI/GEOMToolsGUI_TransparencyDlg.cxx
src/GEOM_I/GEOM_Gen_i.cc
src/GEOM_I/GEOM_Gen_i.hh
src/GEOM_I/GEOM_IBlocksOperations_i.cc
src/GEOM_I/GEOM_IBlocksOperations_i.hh
src/GEOM_I/GEOM_IHealingOperations_i.cc
src/GEOM_I/GEOM_IHealingOperations_i.hh
src/GEOM_I/GEOM_IShapesOperations_i.cc
src/GEOM_I/GEOM_IShapesOperations_i.hh
src/GEOM_I/GEOM_Object_i.cc
src/GEOM_I/GEOM_Object_i.hh
src/GEOM_PY/Makefile.am [new file with mode: 0644]
src/GEOM_PY/__init__.py [new file with mode: 0644]
src/GEOM_PY/geomtools.py [new file with mode: 0644]
src/GEOM_PY/structelem/Makefile.am [new file with mode: 0644]
src/GEOM_PY/structelem/__init__.py [new file with mode: 0644]
src/GEOM_PY/structelem/orientation.py [new file with mode: 0644]
src/GEOM_PY/structelem/parts.py [new file with mode: 0644]
src/GEOM_SWIG/GEOM_TestAll.py
src/GEOM_SWIG/GEOM_TestOthers.py
src/GEOM_SWIG/geompyDC.py
src/GenerationGUI/GenerationGUI_PipeDlg.cxx
src/GenerationGUI/GenerationGUI_PrismDlg.cxx
src/GenerationGUI/GenerationGUI_RevolDlg.cxx
src/GroupGUI/GroupGUI_GroupDlg.cxx
src/IGESImport/IGESImport.cxx
src/IGESImport/Makefile.am
src/Makefile.am
src/MeasureGUI/Makefile.am
src/MeasureGUI/MeasureGUI_AngleDlg.cxx
src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx
src/MeasureGUI/MeasureGUI_CenterMassDlg.cxx
src/MeasureGUI/MeasureGUI_DistanceDlg.cxx
src/MeasureGUI/MeasureGUI_InertiaDlg.cxx
src/MeasureGUI/MeasureGUI_MaxToleranceDlg.cxx
src/MeasureGUI/MeasureGUI_PointDlg.cxx
src/MeasureGUI/MeasureGUI_PropertiesDlg.cxx
src/MeasureGUI/MeasureGUI_WhatisDlg.cxx
src/NMTDS/NMTDS_Iterator.cxx
src/NMTTools/NMTTools_DEProcessor.cxx
src/NMTTools/NMTTools_MapIteratorOfMapOfPaveBlock_0.cxx
src/NMTTools/NMTTools_MapOfPaveBlock.hxx
src/NMTTools/NMTTools_MapOfPaveBlock_0.cxx
src/NMTTools/NMTTools_PaveFiller.cdl
src/NMTTools/NMTTools_PaveFiller.hxx
src/NMTTools/NMTTools_PaveFiller_4.cxx
src/NMTTools/NMTTools_StdMapNodeOfMapOfPaveBlock.hxx
src/NMTTools/NMTTools_StdMapNodeOfMapOfPaveBlock_0.cxx
src/OBJECT/GEOM_Actor.cxx
src/OBJECT/GEOM_Actor.h
src/OBJECT/GEOM_AssemblyBuilder.cxx
src/OBJECT/GEOM_AssemblyBuilder.h
src/OBJECT/GEOM_EdgeSource.cxx [deleted file]
src/OBJECT/GEOM_EdgeSource.h [deleted file]
src/OBJECT/GEOM_FaceSource.cxx [deleted file]
src/OBJECT/GEOM_FaceSource.h [deleted file]
src/OBJECT/GEOM_ShadingFace.cxx [deleted file]
src/OBJECT/GEOM_ShadingFace.h [deleted file]
src/OBJECT/GEOM_VertexSource.cxx [deleted file]
src/OBJECT/GEOM_VertexSource.h [deleted file]
src/OBJECT/GEOM_WireframeFace.cxx [deleted file]
src/OBJECT/GEOM_WireframeFace.h [deleted file]
src/OBJECT/Makefile.am
src/OCC2VTK/GEOM_EdgeSource.cxx [new file with mode: 0755]
src/OCC2VTK/GEOM_EdgeSource.h [new file with mode: 0755]
src/OCC2VTK/GEOM_FaceSource.cxx [new file with mode: 0755]
src/OCC2VTK/GEOM_FaceSource.h [new file with mode: 0755]
src/OCC2VTK/GEOM_ShadingFace.cxx [new file with mode: 0755]
src/OCC2VTK/GEOM_ShadingFace.h [new file with mode: 0755]
src/OCC2VTK/GEOM_VertexSource.cxx [new file with mode: 0755]
src/OCC2VTK/GEOM_VertexSource.h [new file with mode: 0755]
src/OCC2VTK/GEOM_WireframeFace.cxx [new file with mode: 0755]
src/OCC2VTK/GEOM_WireframeFace.h [new file with mode: 0755]
src/OCC2VTK/Makefile.am [new file with mode: 0644]
src/OCC2VTK/OCC2VTK.h [new file with mode: 0755]
src/OCC2VTK/OCC2VTK_Tools.cxx [new file with mode: 0755]
src/OCC2VTK/OCC2VTK_Tools.h [new file with mode: 0755]
src/OperationGUI/OperationGUI_ChamferDlg.cxx
src/OperationGUI/OperationGUI_Fillet1d2dDlg.cxx
src/OperationGUI/OperationGUI_FilletDlg.cxx
src/OperationGUI/OperationGUI_PartitionDlg.cxx
src/OperationGUI/OperationGUI_PartitionDlg.h
src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_DiskDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_FaceDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx
src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx
src/RepairGUI/Makefile.am
src/RepairGUI/RepairGUI.cxx
src/RepairGUI/RepairGUI_ChangeOrientationDlg.cxx
src/RepairGUI/RepairGUI_DivideEdgeDlg.cxx
src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx [new file with mode: 0644]
src/RepairGUI/RepairGUI_LimitToleranceDlg.h [new file with mode: 0644]
src/RepairGUI/RepairGUI_RemoveExtraEdgesDlg.cxx
src/RepairGUI/RepairGUI_SewingDlg.cxx
src/RepairGUI/RepairGUI_ShapeProcessDlg.cxx
src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx
src/STEPImport/Makefile.am
src/STEPImport/STEPImport.cxx
src/TransformationGUI/Makefile.am
src/TransformationGUI/TransformationGUI_MirrorDlg.cxx
src/TransformationGUI/TransformationGUI_MultiRotationDlg.cxx
src/TransformationGUI/TransformationGUI_MultiRotationDlg.h
src/TransformationGUI/TransformationGUI_MultiTranslationDlg.cxx
src/TransformationGUI/TransformationGUI_MultiTranslationDlg.h
src/TransformationGUI/TransformationGUI_PositionDlg.cxx
src/TransformationGUI/TransformationGUI_RotationDlg.cxx
src/TransformationGUI/TransformationGUI_ScaleDlg.cxx
src/TransformationGUI/TransformationGUI_TranslationDlg.cxx
src/TransformationGUI/TransformationGUI_TranslationDlg.h
src/VTKExport/Makefile.am [new file with mode: 0644]
src/VTKExport/VTKExport.cxx [new file with mode: 0644]
src/VTKExport/VTKExport.pro [new file with mode: 0644]

index 5f138fd7ee140df568d6e9b0822fba2418808182..fc6f3eb9464c08dba662c3e8fee1c34bf80cfbdd 100644 (file)
@@ -19,6 +19,7 @@
 
 SET(GEOM_CXXFLAGS -I${GEOM_ROOT_DIR}/include/salome)
 
+FIND_LIBRARY(AdvancedGUI AdvancedGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(BasicGUI BasicGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(BlocksGUI BlocksGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(BooleanGUI BooleanGUI ${GEOM_ROOT_DIR}/lib/salome)
@@ -48,6 +49,7 @@ FIND_LIBRARY(IGESImport IGESImport ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(MeasureGUI MeasureGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(NMTDS NMTDS ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(NMTTools NMTTools ${GEOM_ROOT_DIR}/lib/salome)
+FIND_LIBRARY(OCC2VTK OCC2VTK ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(OperationGUI OperationGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(PrimitiveGUI PrimitiveGUI ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(RepairGUI RepairGUI ${GEOM_ROOT_DIR}/lib/salome)
@@ -57,3 +59,4 @@ FIND_LIBRARY(STEPExport STEPExport ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(STEPImport STEPImport ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(STLExport STLExport ${GEOM_ROOT_DIR}/lib/salome)
 FIND_LIBRARY(TransformationGUI TransformationGUI ${GEOM_ROOT_DIR}/lib/salome)
+FIND_LIBRARY(VTKExport VTKExport ${GEOM_ROOT_DIR}/lib/salome)
index da76a6844e4dd405d4a32ec5fffb501fcac371f4..f0f18a9f0eb4e03bf2ee9506c8d97e9967d702ee 100644 (file)
@@ -28,6 +28,7 @@ nodist_salomescript_DATA = VERSION
 
 # python files
 dist_salomescript_PYTHON = \
+       addvars2notebook_GEOM.py \
        geom_setenv.py
 
 # distributed files
diff --git a/bin/addvars2notebook_GEOM.py b/bin/addvars2notebook_GEOM.py
new file mode 100644 (file)
index 0000000..01c37c5
--- /dev/null
@@ -0,0 +1,50 @@
+
+def addvars2notebook(filename, vars_and_values):
+    stream = open(filename)
+    lines = stream.readlines()
+    stream.close()
+    newlines = []
+    for line in lines:
+        if line.find("= geompy.") >= 0:
+            name = line.split('=')[0]
+            name = name.strip()
+            vals = line
+            fields = vals.split("(")
+            if len(fields) == 2:
+                begin = fields[0] + "("
+                vals = fields[1]
+                fields = vals.split(")")
+                if len(fields) == 2:
+                    vals = fields[0]
+                    end = ")" + fields[1]
+                    vals = vals.split(',')
+                    newline  = begin
+                    newvals = []
+                    for i in range(len(vals)):
+                        valname = name + "_val_%s"%(i+1)
+                        val = vals[i]
+                        vvv = val.strip()
+                        try:
+                            iii = int(vvv)
+                            vars_and_values.append([valname, val])
+                            val = val.replace(vvv, valname.__repr__())
+                        except ValueError:
+                            try:
+                                fff = float(vvv)
+                                vars_and_values.append([valname, val])
+                                val = val.replace(vvv, valname.__repr__())
+                            except ValueError:
+                                pass
+                            pass
+                        newvals.append(val)
+                        pass
+                    newline += ','.join(newvals)
+                    newline += end
+                    line = newline
+                    pass
+                pass
+            pass
+        newlines.append(line)
+        pass
+    content = "".join(newlines)
+    return content
index 30c3af66d646053e9a95f36ee89c7b2c4936ab08..61386b2a10929e86c664ad3c73de032be22ce303 100644 (file)
@@ -24,7 +24,7 @@
 # Modified by : Alexander BORODIN (OCN) - autotools usage
 # Created from configure.in.base
 #
-AC_INIT([Salome2 Project GEOM module], [6.1.0], [webmaster.salome@opencascade.com], [SalomeGEOM])
+AC_INIT([Salome2 Project GEOM module], [6.2.0], [webmaster.salome@opencascade.com], [SalomeGEOM])
 AC_CONFIG_AUX_DIR(adm_local/unix/config_files)
 AC_CANONICAL_HOST
 AC_CANONICAL_TARGET
@@ -282,15 +282,15 @@ if test "${gui_ok}" = "yes"; then
     echo
 
     CHECK_QT
+fi
 
-    echo
-    echo ---------------------------------------------
-    echo testing VTK
-    echo ---------------------------------------------
-    echo
+echo
+echo ---------------------------------------------
+echo testing VTK
+echo ---------------------------------------------
+echo
 
-    CHECK_VTK
-fi
+CHECK_VTK
 
 echo
 echo ---------------------------------------------
@@ -324,6 +324,13 @@ echo
 
 CHECK_HTML_GENERATORS
 
+echo
+echo ---------------------------------------------
+echo testing sphinx
+echo ---------------------------------------------
+echo
+CHECK_SPHINX
+
 echo
 echo ---------------------------------------------
 echo Testing Kernel
@@ -341,11 +348,11 @@ echo
 echo Configure
 
 if test "${gui_ok}" = "yes"; then
-  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok Kernel_ok gui_ok"
+  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok OpenGL_ok qt_ok vtk_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok sphinx_ok Kernel_ok gui_ok"
 elif test "${SalomeGUI_need}" != "no"; then
-  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok Kernel_ok gui_ok"
+  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok vtk_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok Kernel_ok gui_ok"
 else
-  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok Kernel_ok"
+  variables="cc_ok lex_yacc_ok python_ok swig_ok threads_ok vtk_ok hdf5_ok omniORB_ok boost_ok occ_ok doxygen_ok graphviz_ok Kernel_ok"
 fi
 
 for var in $variables
@@ -376,6 +383,19 @@ echo
 #  chmod +x ./bin/*; \
 #])
 
+AC_CONFIG_COMMANDS([hack_libtool],[
+sed -i "s%^CC=\"\(.*\)\"%hack_libtool (){ \n\
+  if test \"\$(echo \$[@] | grep -E '\\\-L/usr/lib(/../lib)?(64)? ')\" == \"\" \n\
+  then\n\
+    cmd=\"\1 \$[@]\"\n\
+  else\n\
+    cmd=\"\1 \"\`echo \$[@] | sed -r -e 's|(.*)-L/usr/lib(/../lib)?(64)? (.*)|\\\1\\\4 -L/usr/lib\\\3|g'\`\n\
+  fi\n\
+  \$cmd\n\
+}\n\
+CC=\"hack_libtool\"%g" libtool
+],[])
+
 # This list is initiated using autoscan and must be updated manually
 # when adding a new file <filename>.in to manage. When you execute
 # autoscan, the Makefile list is generated in the output file configure.scan.
@@ -389,6 +409,7 @@ AC_OUTPUT([ \
   bin/Makefile \
   GEOM_version.h \
   doc/Makefile \
+  doc/docutils/Makefile \
   doc/salome/Makefile \
   doc/salome/gui/Makefile \
   doc/salome/gui/GEOM/Makefile \
@@ -423,6 +444,8 @@ AC_OUTPUT([ \
   src/GEOM_I_Superv/Makefile \
   src/GEOM_SWIG/Makefile \
   src/GEOM_SWIG_WITHIHM/Makefile \
+  src/GEOM_PY/Makefile \
+  src/GEOM_PY/structelem/Makefile \
   src/GenerationGUI/Makefile \
   src/GroupGUI/Makefile \
   src/IGESExport/Makefile \
@@ -431,6 +454,7 @@ AC_OUTPUT([ \
   src/NMTDS/Makefile \
   src/NMTTools/Makefile \
   src/OBJECT/Makefile \
+  src/OCC2VTK/Makefile \
   src/OperationGUI/Makefile \
   src/PrimitiveGUI/Makefile \
   src/RepairGUI/Makefile \
@@ -440,6 +464,7 @@ AC_OUTPUT([ \
   src/STLExport/Makefile \
   src/ShHealOper/Makefile \
   src/TransformationGUI/Makefile \
+  src/VTKExport/Makefile \
   resources/Makefile \
   resources/GEOMCatalog.xml \
   idl/Makefile \
index f40fb81a5d12cb8d1b1c351e41b03059a6d13c7e..6cf4c8ea217b6e586992d4136c7160cd1524791d 100644 (file)
@@ -24,7 +24,7 @@
 # $Header$
 # source path
 #
-SUBDIRS = salome
+SUBDIRS = salome docutils
 
 usr_docs:
        (cd salome && $(MAKE) $(AM_MAKEFLAGS) usr_docs)
diff --git a/doc/docutils/Makefile.am b/doc/docutils/Makefile.am
new file mode 100644 (file)
index 0000000..16ec48f
--- /dev/null
@@ -0,0 +1,93 @@
+#  -*- coding: iso-8859-1 -*-
+#  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+#
+#  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+#  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+#
+#  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
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+pydocdir = $(docdir)/tui/GEOM/docutils
+
+.PHONY : latex
+
+if SPHINX_IS_OK
+
+html/index.html:$(RSTFILES)
+       make htm
+
+endif
+
+EXTRA_DIST+= images
+
+SPHINXOPTS      =
+SOURCEDIR       = $(srcdir)
+SPHINXBUILD     = sphinx-build
+PAPEROPT_a4     = -D latex_paper_size=a4
+ALLSPHINXOPTS   = -d doctrees $(PAPEROPT_a4) $(SPHINXOPTS) $(SOURCEDIR)
+
+SPHINX_PYTHONPATH = $(prefix)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(prefix)/lib64/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/bin/salome:$(KERNEL_ROOT_DIR)/lib/python$(PYTHON_VERSION)/site-packages/salome:$(KERNEL_ROOT_DIR)/lib64/python$(PYTHON_VERSION)/site-packages/salome:$(OMNIORB_ROOT)/lib/python$(PYTHON_VERSION)/site-packages:$(OMNIORB_ROOT)/lib64/python$(PYTHON_VERSION)/site-packages
+
+SPHINX_LD_LIBRARY_PATH = $(KERNEL_ROOT_DIR)/lib/salome:$(OMNIORB_ROOT)/lib
+
+htm:
+       mkdir -p html doctrees
+       PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH}; \
+       LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH}; \
+       $(SPHINXBUILD) -W -b html $(ALLSPHINXOPTS) html
+       @echo
+       @echo "Build finished. The HTML pages are in html."
+
+latex:
+       mkdir -p latex doctrees
+       PYTHONPATH=$(SPHINX_PYTHONPATH):${PYTHONPATH}; \
+       LD_LIBRARY_PATH=$(SPHINX_LD_LIBRARY_PATH):${LD_LIBRARY_PATH}; \
+       $(SPHINXBUILD) -W -b latex $(ALLSPHINXOPTS) latex
+       @echo
+       @echo "Build finished; the LaTeX files are in latex."
+       @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+             "run these through (pdf)latex."
+
+html:
+       mkdir -p $@
+
+RSTFILES= \
+       index.rst \
+       overview.rst \
+       docapi.rst
+
+EXTRA_DIST+= $(RSTFILES)
+
+EXTRA_DIST+= \
+       conf.py 
+
+install-data-local: html/index.html
+       test -z $(pydocdir) || mkdir -p $(DESTDIR)$(pydocdir)
+       if test -d "html"; then b=; else b="$(srcdir)/"; fi; \
+       cp -rf $$b"html"/* $(pydocdir) ; \
+       if test -f $$b"latex"/geompy.pdf; then cp -f $$b"latex"/geompy.pdf $(pydocdir) ; fi;
+
+uninstall-local:
+       -test -d $(pydocdir) && chmod -R +w $(pydocdir) && rm -rf $(pydocdir)/*
+
+clean-local:
+       -rm -rf html latex doctrees
+       if test -d "html"; then rm -rf html ; fi
+
+disthook :
+       -test -d html && cp -Rp html $(distdir)
diff --git a/doc/docutils/conf.py b/doc/docutils/conf.py
new file mode 100644 (file)
index 0000000..5afa71b
--- /dev/null
@@ -0,0 +1,200 @@
+# -*- coding: iso-8859-1 -*-
+#
+# yacs documentation build configuration file, created by
+# sphinx-quickstart on Fri Aug 29 09:57:25 2008.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# The contents of this file are pickled, so don't put values in the namespace
+# that aren't pickleable (module imports are okay, they're removed automatically).
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If your extensions are in another directory, add it here. If the directory
+# is relative to the documentation root, use os.path.abspath to make it
+# absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# General configuration
+# ---------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc']
+
+# Uncomment the following line to build the links with Python documentation
+# (you might need to set http_proxy environment variable for this to work)
+#extensions += ['sphinx.ext.intersphinx']
+
+# Intersphinx mapping to add links to modules and objects in the Python
+# standard library documentation
+intersphinx_mapping = {'http://docs.python.org': None}
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = 'GEOM python packages'
+copyright = '2010 EDF R&D'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '5.1.4'
+# The full version, including alpha/beta/rc tags.
+release = '5.1.4'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+language = 'en'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = ['.build','ref','images','CVS','.svn']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+
+# Options for HTML output
+# -----------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = 'default'
+#html_theme = 'nature'
+#html_theme = 'agogo'
+#html_theme = 'sphinxdoc'
+#html_theme = 'omadoc'
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = ['themes']
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+#html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_use_modindex = False
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, the reST sources are included in the HTML build as _sources/<name>.
+html_copy_source = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'geompydoc'
+
+
+# Options for LaTeX output
+# ------------------------
+
+# The paper size ('letter' or 'a4').
+latex_paper_size = 'a4'
+
+# The font size ('10pt', '11pt' or '12pt').
+latex_font_size = '10pt'
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, document class [howto/manual]).
+latex_documents = [
+  ('index', 'geompy.tex', 'Documentation of the GEOM python packages', 'EDF R\&D', 'manual')
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+latex_logo = '../salome/tui/images/head.png'
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = True
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+latex_use_modindex = False
diff --git a/doc/docutils/docapi.rst b/doc/docutils/docapi.rst
new file mode 100644 (file)
index 0000000..20a52ca
--- /dev/null
@@ -0,0 +1,43 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Documentation of the programming interface (API)
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+This section describes the python packages and modules of the
+``salome.geom`` python package. The main part is generated from the
+code documentation included in source python files.
+
+:mod:`salome.geom` -- Package containing the GEOM python utilities
+==================================================================
+
+:mod:`geomtools` -- Tools to access GEOM engine and objects
+-----------------------------------------------------------
+
+.. automodule:: salome.geom.geomtools
+   :members:
+
+:mod:`structelem` -- Structural elements package
+------------------------------------------------
+
+.. automodule:: salome.geom.structelem
+
+.. autoclass:: StructuralElementManager
+   :members:
+
+.. autoclass:: StructuralElement
+   :members:
+
+:mod:`structelem.parts` -- Structural element parts
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. automodule:: salome.geom.structelem.parts
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+:mod:`structelem.orientation` -- Structural element orientation
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+.. automodule:: salome.geom.structelem.orientation
+   :members:
+   :undoc-members:
diff --git a/doc/docutils/images/salome-geom-structuralelements.png b/doc/docutils/images/salome-geom-structuralelements.png
new file mode 100644 (file)
index 0000000..6ed41b1
Binary files /dev/null and b/doc/docutils/images/salome-geom-structuralelements.png differ
diff --git a/doc/docutils/index.rst b/doc/docutils/index.rst
new file mode 100644 (file)
index 0000000..81e4f24
--- /dev/null
@@ -0,0 +1,14 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Documentation of the GEOM python packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Main documentation
+==================
+
+.. toctree::
+   :maxdepth: 3
+
+   overview.rst
+   docapi.rst
+
diff --git a/doc/docutils/overview.rst b/doc/docutils/overview.rst
new file mode 100644 (file)
index 0000000..3ca3a4b
--- /dev/null
@@ -0,0 +1,38 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+General presentation of the GEOM python package
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The GEOM python package essentially contains:
+
+* The visualization of structural elements: a function to create
+  geometrical 3D representations of mechanical models called
+  "structural elements".
+
+Note that these functions either encapsulate the python programming
+interface of GEOM core (the CORBA or SWIG interfaces for example) or
+extend existing utilities as the ``geompy.py`` module.
+
+The functions are distributed in the python package
+``salome.geom``. For example, the usage of the visualization of
+structural elements can be appreciated with this set of instructions:
+
+.. code-block:: python
+
+   from salome.geom.structelem import TEST_StructuralElement
+   TEST_StructuralElement()
+
+This creates the geometrical objects displayed in the study below:
+
+.. image:: /images/salome-geom-structuralelements.png
+   :align: center
+
+The specification of the programming interface of this package is
+detailled in the part :doc:`Documentation of the programming interface
+(API)</docapi>` of this documentation.
+
+.. note::
+   The main package ``salome`` contains other sub-packages that are
+   distributed with the other SALOME modules. For example, the KERNEL
+   module provides the python package ``salome.kernel`` and SMESH the
+   package ``salome.smesh``.
index 245046a1f808dfbf89aa8698b6b7bdea788b506a..9740ec3ec02ea9b45604bfb19d3d80901670f6c2 100755 (executable)
@@ -56,7 +56,7 @@ clean-local:
        @for filen in `find . -maxdepth 1` ; do                                 \
          case $${filen} in                                                     \
            ./Makefile | ./doxyfile | ./doxyfile_py | ./doxyfile_tui ) ;;       \
-           . | .. ) ;;                                                         \
+           . | .. | ./static ) ;;                                                              \
            *) echo "Removing $${filen}" ; rm -rf $${filen} ;;                  \
          esac ;                                                                \
        done ;
@@ -67,7 +67,7 @@ install-data-local: usr_docs
          case $${filen} in                                                                     \
            ./Makefile | ./doxyfile | ./doxyfile_py | ./doxyfile_tui ) ;;                       \
            ./doxyfile.bak | ./doxyfile_py.bak | ./doxyfile_tui.bak ) ;;                        \
-           . | .. ) ;;                                                                         \
+           . | .. | ./static ) ;;                                                                              \
            *) echo "Installing $${filen}" ; cp -rp $${filen} $(DESTDIR)$(docdir)/gui/GEOM ;;   \
          esac ;                                                                                \
        done ;
index cc6155462d39d254e9688bb028e62a37161515f8..cfd0ff0f7657ff9e34e26d66dbe08cbd7ff6dd8a 100755 (executable)
@@ -72,3 +72,4 @@ GENERATE_RTF      = NO
 #---------------------------------------------------------------------------
 TAGFILES          = geompy_doc.tag=geompy_doc
 ALLEXTERNALS      = NO
+SEARCHENGINE      = YES
index b296fa5b7d0f77ecb650b9c38bdaefd69e392dbb..a44abf01256deb07c41ae8068799e2006efa0b6f 100755 (executable)
@@ -159,3 +159,4 @@ DOT_CLEANUP            = YES
 #---------------------------------------------------------------------------
 GENERATE_TAGFILE  = geompy_doc.tag
 TAGFILES          = tui_examples.tag=..
+SEARCHENGINE      = YES
index 64eca7dcb28925f28e951387f9652ba7cbba5415..f0d198e98725abd7a0b837da22330af94a79e062 100755 (executable)
@@ -53,7 +53,7 @@ HTML_FOOTER       = @srcdir@/static/footer.html
 HTML_STYLESHEET   = @srcdir@/static/doxygen.css
 TOC_EXPAND        = YES
 DISABLE_INDEX     = NO
-GENERATE_TREEVIEW = YES
+GENERATE_TREEVIEW = NO
 TREEVIEW_WIDTH    = 300
 
 #---------------------------------------------------------------------------
@@ -70,3 +70,4 @@ GENERATE_RTF      = NO
 #External reference options
 #---------------------------------------------------------------------------
 GENERATE_TAGFILE  = tui_examples.tag
+SEARCHENGINE      = YES
diff --git a/doc/salome/gui/GEOM/images/edge1.png b/doc/salome/gui/GEOM/images/edge1.png
new file mode 100644 (file)
index 0000000..03840b2
Binary files /dev/null and b/doc/salome/gui/GEOM/images/edge1.png differ
diff --git a/doc/salome/gui/GEOM/images/edge2.png b/doc/salome/gui/GEOM/images/edge2.png
new file mode 100644 (file)
index 0000000..b17336e
Binary files /dev/null and b/doc/salome/gui/GEOM/images/edge2.png differ
index 58908a742a66dc93511078efc5f3c5b86cef0243..ebcd56f2e903600a44825999b16ac8dc2f472fcf 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/geomscreen.png and b/doc/salome/gui/GEOM/images/geomscreen.png differ
diff --git a/doc/salome/gui/GEOM/images/get_in_place_lost_part.png b/doc/salome/gui/GEOM/images/get_in_place_lost_part.png
new file mode 100644 (file)
index 0000000..2abc843
Binary files /dev/null and b/doc/salome/gui/GEOM/images/get_in_place_lost_part.png differ
diff --git a/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png b/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png
new file mode 100644 (file)
index 0000000..98adfc4
Binary files /dev/null and b/doc/salome/gui/GEOM/images/limit_tolerance_dlg.png differ
index 41b44d79b0db8fc220d096bbbad61ebbde8aa1d3..5abf96abb44ed94b7f26b8d808e13b4de68125aa 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/mtrans1.png and b/doc/salome/gui/GEOM/images/mtrans1.png differ
index 9c9781b82441d99a172e521028553c86bbbd4f9f..ee32abe1e7c81ebc69b8d4cd53cf5c157428f383 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/mtrans2.png and b/doc/salome/gui/GEOM/images/mtrans2.png differ
index d1e7c78e923435933b568d8c2cb303cb60dbc4be..f00e5c0b19aba12ea15c057330625af4358f0420 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/neo-mrot1.png and b/doc/salome/gui/GEOM/images/neo-mrot1.png differ
index 42ddcee14cdb20ac0ffc06ff4ce832e658283dcd..fb4a819ac7646c114c2798f4e07f6865abea49cf 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/neo-mrot2.png and b/doc/salome/gui/GEOM/images/neo-mrot2.png differ
diff --git a/doc/salome/gui/GEOM/images/neo-obj2.png b/doc/salome/gui/GEOM/images/neo-obj2.png
deleted file mode 100755 (executable)
index 3ce42b4..0000000
Binary files a/doc/salome/gui/GEOM/images/neo-obj2.png and /dev/null differ
index cb9bd40b18114f8b3ecc5b25bf0fe90d8c61e372..c378521b8d07ba205253b08f94ed3dc7aeb4e0f3 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/neo-obj3.png and b/doc/salome/gui/GEOM/images/neo-obj3.png differ
index cc5b1554480ac7a4f7772e5bc4bdba3d2b8a53c8..65d318ea3719d49f1647c03cbd176d4e1b611663 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/partition1.png and b/doc/salome/gui/GEOM/images/partition1.png differ
index 18f01e212184f414b6c8e118ca86ae5b35ca197c..8125cdbb9d7252a66dc5cdfe05ce44a948cb01ab 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/partition2.png and b/doc/salome/gui/GEOM/images/partition2.png differ
diff --git a/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png b/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png
new file mode 100644 (file)
index 0000000..6ed41b1
Binary files /dev/null and b/doc/salome/gui/GEOM/images/salome-geom-structuralelements.png differ
index c9ffa8325e2bda468c6f21d1d9eca51dc5c90b1f..6436379f49c22ec390853ec68bd89f15386ef91c 100644 (file)
Binary files a/doc/salome/gui/GEOM/images/transformation13.png and b/doc/salome/gui/GEOM/images/transformation13.png differ
index c9b54e81964603214f30cb2e32461e3ccae415bd..e2d8771249b39b34ad401ff7d2c3d3cd32e70f30 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/transformation5.png and b/doc/salome/gui/GEOM/images/transformation5.png differ
index 2fa724cf9dc2e876d3b09d39ad5b85e5e5f2bfaa..a9e4cf286cad9d886f30bb3f3b078bd64a2f15b5 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/transformation6.png and b/doc/salome/gui/GEOM/images/transformation6.png differ
index 38fdba84320cb964fb1eadd55ecabbe8a5f4f55d..9e464518df1ab5ab7581accab3faee1682d8f361 100644 (file)
@@ -3,7 +3,7 @@
 \page chamfer_operation_page Chamfer
 
 \n To produce a \b Chamfer in the <b>Main Menu</b> select 
-<b>Operations - > Transformation - > Chamfer</b>
+<b>Operations - > Chamfer</b>
 
 \n This operation allows you to make chamfer of the edges of a Shape.
 \n The \b Result will be a \b GEOM_Object.
index 6d45a541858e5e5970de5e3efc2287d0ef16ef7b..ffbfa69de700a1d4910e20e81402fcd9a4e9d066 100644 (file)
@@ -2,25 +2,50 @@
 
 \page create_edge_page Edge
 
-\n To create an \b Edge in the <b>Main Menu</b> select <b>New Entity- > Build - > Edge</b> 
+To create an \b Edge, in the <b>Main Menu</b> select <b>New Entity >
+Build > Edge</b>  
 
-\n You can create an \b Edge from two points (\b Point1 and \b Point2), being the first and the last vertices of the edge.
+There are two ways to create an edge. In both cases the \b Result
+will be a \b GEOM_Object (EDGE). 
 
-The \b Result  will be a \b GEOM_Object (EDGE).
+Firstly, you can create an \b Edge by specifying two points (\b Point1 and
+\b Point2), which are the first and the last vertices of the edge.
 
-<b>TUI Command:</b> <em>geompy.MakeEdge(Vertex1, Vertex2),</em> where
-Vertex1 and Vertex2 are correspondingly the first and the last vertex
-of the edge.
+<b>TUI Command:</b> <em>geompy.MakeEdge(Vertex1, Vertex2)</em><br>
+<b>Arguments:</b> Name + 2 vertices (Vertex1 and Vertex2 are
+correspondingly the first and the last vertex of the edge).
 
-<b>Arguments:</b> Name + 2 vertices.
+\image html edge1.png "Create edge by two points"
 
-\image html neo-obj2.png
+Secondly, you can create an \b Edge by specifying a single wire.
 
-\n <b>Example:</b>
+In this mode the following use cases are possible:
+- All edges that form the wire lie on the same geometrical curve
+(i.e. curve(edge1) == curve(edge2)).
+- The edges that form the wire lie on analytical curves of the same
+type, for example, segments of line, arcs, etc. In this case, the
+algorithm checks geometrical coincidence of these curves using
+a certain tolerance. If the curves are coinciding in terms of the given
+tolerance, the resulting edge is built as if on a single curve.
+- The edges that form the wire have the same tangency in the connection
+points. In this case the curves are interpolated by the single
+b-spline curve with sufficient precision. The resulting edge will
+be built on this curve. 
+
+The case when the edges that form the wire have different tangency in
+the connection points (sharp bend) is not processed.
+
+<b>TUI Command:</b> <em>geompy.MakeEdgeWire(Wire, LinearTolerance, AngularTolerance)</em><br>
+<b>Arguments:</b> Name + 1 wire + Linear Tolerance + Angular Tolerance
+(tolerance values are used to check coincidence of the underlying curves).
+
+\image html edge2.png "Create edge from wire"
+
+<b>Example:</b>
 
 \image html edgesn.png "Edge"
 
 Our <b>TUI Scripts</b> provide you with useful examples of creation of 
 \ref tui_creation_edge "Advanced Geometric Objects".
 
-*/
\ No newline at end of file
+*/
index c86ed5ac537449aa4e2d78ca21a308bdae581cad..afd78e1f636221bc6d37789c58b8282f87c4df1f 100644 (file)
@@ -18,8 +18,8 @@ shell, solid or compsolid).
 \n <b> Both Directions </b> checkbox allows extruiding the source
 object both forward and backward. 
 \n <b>TUI Command:</b> <em>geompy.MakePrismVecH(Base, Vector, Height)</em>
-\n <b>Arguments:</b> Name + 1 shape (vertex, edge, planar wire, face or
-shell) serving as base object + 1 vector (for direction of the
+\n <b>Arguments:</b> Name + one or several shapes (vertex, edge, planar wire, face or
+shell) serving as base objects + 1 vector (for direction of the
 extrusion) + 1 value (dimension).
 
 \image html extrusion1.png
@@ -30,8 +30,8 @@ you don't need to create it in advance).
 \n <b> Both Directions </b> checkbox allows extruiding the source
 object both forward and backward. 
 \n <b>TUI Command:</b> <em>geompy.MakePrism(Base, Point1, Point2)</em>
-\n <b>Arguments:</b> Name + 1 shape (vertex, edge, planar wire, face or
-shell) serving as base object + 2 vertices.
+\n <b>Arguments:</b> Name + one or several shapes (vertex, edge, planar wire, face or
+shell) serving as base objects + 2 vertices.
 
 \image html extrusion2.png
 
@@ -40,8 +40,8 @@ and the <b>DX, DY, DZ</b> Vector\n
 <b>Both Directions</b> checkbox allows extruding the
 source objects both forward and backward.
 \n <b>TUI Command:</b> <em>geompy.MakePrismDXDYDZ(Base, dx, dy, dz)</em>
-\n <b>Arguments:</b> Name + 1 shape (vertex, edge, planar wire, face or
-shell) serving as base object + 3 axis directions.
+\n <b>Arguments:</b> Name + one or several shapes (vertex, edge, planar wire, face or
+shell) serving as base objects + 3 axis directions.
 
 \image html extrusion3.png
 
index a66bb45f07f9f7ecd1ee1bf37409f70e3f5b3453..5074f4eed014a530aede788fe9e647baf3225824 100644 (file)
@@ -4,39 +4,38 @@
 
 To generate a \b Filling in the <b>Main Menu</b> select <b>New Entity - > Generation  - > Filling</b>
 
-To create a curving face using several edges you need to define the
+To create a curvilinear face from several edges you need to define the
 following parameters:
 \n <b>Input Compound</b> - the list of edges/wires used for creation
-of the surface. Before perform filling algorithm each wire from
-compound is converted to one edge created on BSpline curve built using
-curves from all edges from wire.
+of the surface. To prepare for the filling each wire of the compound
+is converted to an edge created on a BSpline curve built using curves
+from all edges of the wire.
 \n \b Minimum and <b>Maximum Degree</b> of equation of the resulting
 BSpline or Besier curves describing the surface; 
 \n \b Tolerance for \b 2D and for \b 3D - minimum distance between the
 created surface and the reference edge; 
-\n <b>Number of
-Iterations</b> - defines the maximum number of iterations. The
+\n <b>Number of Iterations</b> - defines the maximum number of iterations. The
 iterations are repeated until the required tolerance is reached. So, a
 greater number of iterations allows producing a better surface. 
 \n <b>Method</b> - Kind of method to perform filling operation
-1. Default - standard behaviour
-2. Use edges orientation - orientation of edges are used: if edge is
-reversed curve from this edge is reversed before using in filling
+1. Default - the standard behaviour.
+2. Use edges orientation - the edges orientation is used: if an edge is
+reversed, the curve from this edge is reversed before being used by the filling
 algorithm.
-3. Auto-correct edges orientation - change orientation of curves using
-minimization of sum of distances between ends points of edges.
+3. Auto-correct edges orientation - curves orientation is changed to 
+minimize the sum of distances between ends points of edges.
 \n <b>Approximation</b> - if checked, BSpline curves are generated in
 the process of surface construction (using
 GeomAPI_PointsToBSplineSurface functionality). By default the surface
 is created using Besier curves. The usage of <b>Approximation</b>
-makes the algorithm work slower, but allows building the surface for
-rather complex cases. 
+slows the algorithm, but allows building the surface for complex cases. 
 
 \n The \b Result of the operation will be a GEOM_Object (face).
 
 \n <b>TUI Command:</b> <em>geompy.MakeFilling(Edges, MinDegree, MaxDegree, Tol2D, Tol3D, NbIter)</em>
 \n <b>Arguments:</b> Name + 1 List of edges + 7 Parameters
-(Min. degree, Max. degree, 2D tolerance, 3D tolerance, Number of iterations, Method, Approximation).
+(Min. degree, Max. degree, Number of iterations, 2D tolerance, 3D
+tolerance, Number of iterations, Method, Approximation).
 
 \image html filling.png
 
index 52357774e719ce38395e1b7ed8202d5f8200a336..3dd6e39922ad813165233c2c9775555ddbec7cca 100644 (file)
@@ -4,10 +4,14 @@
 
 \n To create a \b Wire in the <b>Main Menu</b> select <b>New Entity - > Build - > Wire</b>
 
-\n You can create a \b Wire from several connected edges and wires by
+\n You can create a \b Wire from several connected edges or wires by
 selecting them in the object browser or in the viewer holding Shift
-button. 
-\n Select \b Tolerance which will be used to check the
+button.
+
+It is possible to select wires or edges from objects. To specify subshape type, use
+the <b>Object Type</b> radio buttons.
+
+Select \b Tolerance which will be used to check the
 connections. If the \b Tolerance value is more than 1e-07, and a gap
 within this tolerance is detected, the corresponding edges will be modified to
 connect in the middle of the gap.
index 46d291b48142b28255df9107d11724ef86d1d6c4..7e1174bd5363ad766bf6c22aa528efdd9100d511 100644 (file)
@@ -10,7 +10,7 @@ constructed, have to lie in the same plane.
 \image html fillet1d_2.png
 
 To produce a \b Fillet 1D in the <b>Main Menu</b> select 
-<b>Operations - > Transformation - > Fillet 1D</b>
+<b>Operations - > Fillet 1D</b>
 
 Define the <b>Wire with planar Edges</b> to create a fillet on, select the necessary 
 vertexes on this wire in the OCC Viewer and define the \b Radius of the Fillet.
index 74b044b05751784d1f3db9bd01df94468dd57b69..a4c06f5e0e8c89a2dae5f1fe367cae1b5c667db3 100755 (executable)
@@ -7,7 +7,7 @@ This operation creates fillets on the corners of a <b>2D Planar Face</b>.
 \image html fillet2d_2.png
 
 To produce a \b Fillet 2D in the <b>Main Menu</b> select 
-<b>Operations - > Transformation - > Fillet 2D</b>
+<b>Operations - > Fillet 2D</b>
 
 Define the <b>Planar Face</b> to create a fillet on, select the necessary 
 vertexes on this face in the OCC Viewer and define the \b Radius of the Fillet.
index 8bf2ee1f634828a2f5faf9e784e127f0896860ed..e913892e20f813599a6e3dd639fb856186949b78 100644 (file)
@@ -3,7 +3,7 @@
 \page fillet_operation_page Fillet
 
 \n To produce a \b Fillet in the <b>Main Menu</b> select 
-<b>Operations - > Transformation - > Fillet</b>
+<b>Operations - > Fillet</b>
 
 \n This operation creates fillets on the edges of a shape.
 \n The \b Result will be a \b GEOM_Object.
diff --git a/doc/salome/gui/GEOM/input/geompypkg.doc b/doc/salome/gui/GEOM/input/geompypkg.doc
new file mode 100644 (file)
index 0000000..bd50795
--- /dev/null
@@ -0,0 +1,44 @@
+/*!
+
+\page geompypkg_page Programming Interface of GEOM python package
+
+Sorry, but the documentation is not available yet in doxygen format.
+
+Fortunately, a documentation exists in restructured format and then
+can be generated here using sphinx, in the expectative of the doxygen
+version. This documentation is available <a href="../../tui/GEOM/docutils/index.html">
+here</a>.
+
+Here is a sample generated from the doxygen format:
+
+The GEOM python package essentially contains:
+
+<ul>
+  <li>The visualization of structural elements: a function to create
+  geometrical 3D representations of mechanical models called
+  "structural elements".
+</ul>
+
+For details, you should refer to the complete
+<a href="../../tui/GEOM/docutils/index.html"> documentation of the GEOM
+python packages</a> generated with sphinx from rst text files.
+
+Note that these functions either encapsulate the python programming
+interface of GEOM core (the CORBA or SWIG interfaces for example) or
+extend existing utilities as the ``geompy.py`` module.
+
+The functions are distributed in the python package
+``salome.geom``. For example, the usage of the visualization of
+structural elements can be appreciated with this set of instructions:
+
+\code
+
+   from salome.geom.structelem import TEST_StructuralElement
+   TEST_StructuralElement()
+\endcode
+
+This creates the geometrical objects displayed in the study below:
+
+\image html salome-geom-structuralelements.png "Example of Geometry created from structural elements"
+
+*/
index d28e8c343b3fe16997bcc8b1ca5acbb5713137b9..856e03a54dc607580b73ae862598fad27f7c6952 100644 (file)
@@ -23,6 +23,8 @@ various algorithms;</li>
 Almost all geometry module functionalities are accessible via
 \subpage geompy_page "Geometry module Python Interface"
 
+Also it can be useful to have a look at the \subpage geompypkg_page "documentation on GEOM python packages".
+
 \image html image3.png "Example of Geometry module usage for engineering tasks"
 
 
diff --git a/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc b/doc/salome/gui/GEOM/input/limit_tolerance_operation.doc
new file mode 100644 (file)
index 0000000..f7c0b2e
--- /dev/null
@@ -0,0 +1,37 @@
+/*!
+
+\page limit_tolerance_operation_page Limit Tolerance
+
+\n To produce a <b>Limit Tolerance</b> operation in the <b>Main
+   Menu</b> select <b>Repair - > Limit Tolerance</b>.
+
+\image html limit_tolerance_dlg.png
+
+\n <b>Arguments:</b> Name + 1 shape + 1 value (new tolerance).
+
+\n It is possible on all kind of shapes.
+
+\n The \b Result will be a \b GEOM_Object.
+
+\n This functionality tries to set a new value of tolerance for the
+   given shape. However, the final tolerance value also depends on the
+   initial shape topology (takes into consideration the existing gaps) to obtain
+   a valid resulting shape.
+
+\n Example of usage:
+<ol>
+<li>Partition objects obj1 and obj2.</li>
+<li>Partition fails.</li>
+<li>Perform Limit Tolerance on objects obj1 and obj2.</li>
+<li>Try to partition them again.</li>
+</ol>
+See also \ref tui_limit_tolerance "TUI example".
+
+\n <b>TUI Command:</b> <em>geompy.LimitTolerance(Shape, Tolerance),</em>
+ where \em Shape is a shape with presumably incorrect tolerance, \em
+ Tolerance is the required tolerance value.
+
+Our <b>TUI Scripts</b> provide you with useful examples of
+\ref tui_limit_tolerance "Repairing Operations".
+
+*/
index 2bd2ef3fce77050db6378aa2ab5d10b3d44a9644..7e6d64f461aa1d28a653fa6030f7fac8b2a6df72 100644 (file)
@@ -12,7 +12,9 @@ two directions.
 \n To produce a <b>Simple Multi Translation</b> (in one direction) you
 need to indicate an \b Object to be translated, a \b Vector of
 translation, a \b Step of translation and a <b>Number of Times</b> the
-Object should be duplicated.
+Object should be duplicated. If a curve has been selected instead of
+the Vector, only its first and last vertices will be used to get the vector direction
+and the dialog preview will display the vector along which the object will be translated.
 \n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation1D(Shape, Dir,
 Step, NbTimes)</em>
 \n <b>Arguments:</b> Name + 1 shape + 1 vector (for direction) + 1
@@ -27,6 +29,8 @@ step value + 1 value (repetition).
 \n To produce a <b>Double Multi Translation</b> (in two directions) you need to
 indicate an \b Object to be translated, and, for both axes, a \b
 Vector of translation, a \b Step of translation and a <b>Number of Times</b> the shape must be duplicated.
+If a curve has been selected instead of the Vector, only its first and last vertices will be used to get the vector direction
+and the dialog preview will display the vector along which the object will be translated.
 
 \n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation2D(Shape, Dir1,
 Step1, NbTimes1, Dir2, Step2, NbTimes2),</em> where \em Shape is a shape
index 6661d12f234f6f29348fcdedd2c7487570939854..c802d76118b98466db24643ad916561a55603f23 100644 (file)
 
 \page partition_page Partition
 
-\n To produce a \b Partition in the <b>Main Menu</b> select <b>Operations - > Partition</b>
+To produce a \b Partition in the <b>Main Menu</b> select <b>Operations - > Partition</b>
 
-\n This operation builds a compound by intersection of several shapes
+This operation builds a compound by intersection of several shapes
 with a set of tool objects or with a plane.
-\n The \b Result will be any \b GEOM_Object.
+The \b Result will be a \b GEOM_Object.
 
 <br><h2>Intersection of two shapes.</h2>
 
 \image html partition1.png
 
-\n <b>Arguments:</b> Name + 2 lists of shapes (the shapes from the
+<b>Arguments:</b> Name + 2 lists of shapes (the shapes from the
 first list will be intersected with the shapes from the second list) +
 Resulting Type of shape.
 
-\n As far as the intersection of two objects can produce any type of
+As far as the intersection of two objects can produce any type of
 geometrical objects, <b>Resulting type</b> box allows choosing the
 preferrable result, i.e. a solid, a shell, a list of faces, etc.
-\n<b>Resulting type</b> has to be equal or lower than the type of the
+
+The <b>Resulting type</b> has to be equal or lower than the type of the
 \em Objects. In other words, if the \em Objects don't contain any
 shape of this type, Partition fails.
 
 <b>Keep shapes of lower type</b> checkbox manages standalone shapes of
 type other than the \em Limit. If it is checked, lower dimension
 objects will be preserved, else they will be lost.
-\n For example, you do a partition of a box (Solid) and a face (Face)
-without any tool. If you choose Resulting Type "Solid", you will
-obtain a compound of two solids (let's the box will be splitted by the
-face on two parts), but if you will also check <b>Keep shapes of lower
-type</b> checkbox, you will obtain a compound of two solids and one
-face (the face will have a hole where the original face lays inside
-the box, see corresponding \ref partition_picture_3 "picture" below).
 
-\n <b>Advanced option:</b>
+For example, you partition a box (Solid) and a face (Face)
+without any tool (the box is split in two parts by the shape). If you
+choose the Resulting Type "Solid", you will
+obtain a compound of two solids, but if you also check <b>Keep shapes of lower
+type</b> checkbox, you will obtain a compound of two solids and one
+face (there will be a hole in the resulting face, where the original
+face intersects with the box, see the corresponding \ref partition_picture_3 "picture" below).
+
+<b>No sub-shapes intersection (Compounds only)</b> check box affects
+only input shapes of the Compound type. If this option is switched off (default
+behavior) each input compound will be automatically exploded into
+sub-shapes and the intersection between these shapes will be also
+computed. If this option is switched on, the intersection between
+sub-shapes will not be performed. In this case the Partition algorithm
+will work faster, but the result might differ from the default behavior.
+
+ <b>Advanced option:</b>
    \ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
 
-\n <b>TUI Command:</b> <em>geompy.MakePartition(ListOfShapes,
-ListOfTools, ListOfKeepInside, ListOfRemoveInside, Limit, RemoveWebs,
-ListOfMaterials, KeepNonlimitShapes),</em> where where \em
-ListOfShapes is a list of shapes to be intersected, \em ListOfTools is
-a list of shapes to intersect the shapes from ListOfShapes, \em Limit
-is a Type of resulting shapes and \em KeepNonlimitShapes is a flag
-that allows to preserve standalone shapes of low dimension (than
-Limit) in the result.
+\note Partition is a complex operation, so its result of it depends
+      on the quality of the initial shapes. Sometimes, if partition fails,
+      such healing operations as <b>Shape Processing</b>
+      and <b>Limit Tolerance</b> can help to attune source shapes to obtain correct result of the Partition.
+      See also \ref tui_limit_tolerance "TUI example" of shape healing.
+
+<b>TUI Command (with sub-shapes intersection):</b>
 
-\n Since the implementation of a new version of PartitionAlgo other
-parameters are ignored by the current functionality and remain there
-only to support the old scripts.
+<em>geompy.MakePartition(ListOfShapes, ListOfTools, ListOfKeepInside,
+ListOfRemoveInside, Limit, RemoveWebs, ListOfMaterials,
+KeepNonlimitShapes)</em>
 
+<b>TUI Command (without sub-shapes intersection):</b>
+
+<em>geompy.MakePartitionNonSelfIntersectedShape(ListOfShapes,
+ListOfTools, ListOfKeepInside, ListOfRemoveInside, Limit, RemoveWebs,
+ListOfMaterials, KeepNonlimitShapes)</em>
+
+Here,
+- \em ListOfShapes is a list of shapes to be intersected
+- \em ListOfTools is a list of shapes to intersect the shapes from
+\em ListOfShapes
+- \em Limit is a Type of resulting shapes
+- \em KeepNonlimitShapes is a flag that allows to preserve standalone
+shapes of low dimension (than \em Limit) in the result.
+- Other parameters are obsolete and kept only for compatibility with
+previous versions of SALOME.
 
 <br><h2>Intersection of a Shape and a Plane.</h2>
 
 \image html partition2.png
 
-\n <b>Arguments:</b> Name + a list of shapes which will be intersected
-+ 1 cutting plane.
+<b>Arguments:</b> Name + 1 shape to be intersected + 1 cutting plane.
 
-\n <b>Advanced option:</b>
-   \ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
+<b>Advanced option:</b>
+\ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
+
+<b>TUI Command:</b>
 
-\n <b>TUI Command:</b> <em> geompy.MakeHalfPartition(Shapes,
-Plane),</em> where \em Shapes are a list of Shapes to be intersected
-and \em Plane is a Tool shape, to intersect the \em Shapes.
+<em>geompy.MakeHalfPartition(Shape, Plane)</em>, where:
+- \em Shape is a source shape to be intersected by the \em Plane
+- \em Plane is a tool shape, to intersect the \em Shape.
 
-\n <b>Example:</b>
+<b>Examples:</b>
 
 \image html partitionsn1.png "Box intersected by a plane"
 
 \image html partitionsn2.png "Result of intersection"
 
 \anchor partition_picture_3
-\image html partitionsn3.png "Result of intersection of a box and a plane (both as \em Objects, no tools) with Resulting type \em Solid and checked \em Keep \em shapes \em of \em lower \em type"
+\image html partitionsn3.png "Result of intersection of a box and a plane (both as \em Objects, no tools) with the Resulting type \em Solid and checked 'Keep shapes of lower type'"
 
-Our <b>TUI Scripts</b> provide you with useful examples of the use of
-\ref tui_partition "Basic Operations".
+Our <b>TUI Scripts</b> provide you with useful examples of \ref tui_partition "Basic Operations".
 
 */
index 542f5c25e159b14b7005cffd7f2afc09263e2b7a..592c1b65346ae1a7df5fdc20c76b8e19c7ad1cb2 100644 (file)
@@ -17,6 +17,8 @@ holes with free boundaries on a selected face.</li>
 <li>\subpage sewing_operation_page "Sewing" - sews faces or shells.</li>
 <li>\subpage glue_faces_operation_page "Glue faces" - unites
 coincident faces within the given tolerance.</li>
+<li>\subpage limit_tolerance_operation_page "Limit Tolerance" - tries
+to set new tolerance value for the given shape.</li>
 <li>\subpage add_point_on_edge_operation_page "Add point on edge" -
 splits an edge in two.</li>
 <li>\subpage change_orientation_operation_page "Change orientation" -
index b10f35c6e198fdd1b48becaedc742735227d8596..5aac5fd1421b57a03f4b5b08d2ff09964e1ca81e 100644 (file)
@@ -3,7 +3,7 @@
 \page shape_processing_operation_page Shape Processing
 
 \n To produce a <b>Shape Processing</b> operation in the <b>Main Menu</b> 
-select <b>Repair - > Shape Processing</b>.
+   select <b>Repair - > Shape Processing</b>.
 \n This operation processes one or more shapes using various operators.
 
 \n The \b Result will be a \b GEOM_Object.
@@ -15,6 +15,19 @@ is a list of operators ("FixShape", "SplitClosedFaces", etc.),
 etc), \em Values is a list of values of parameters placed in the same
 order as in the list of Parameters.
 
+\note <b>Shape Processing</b> is useful not only on invalid shapes,
+      but also on the shapes, that are classified as valid by
+      the <b>Check</b> functionality. Use it, if an operation (for
+      example, <b>Partition</b>) fails.
+      Example of usage:
+      <ol>
+      <li>Try to partition objects obj1 and obj2.</li>
+      <li>Partition fails.</li>
+      <li>Perform Shape Processing on objects obj1 and obj2.</li>
+      <li>Try to partition them again.</li>
+      </ol>
+      See also \ref tui_limit_tolerance "TUI example".
+
 \n In this dialog box you can select the object that you need to
 process, define its name and operators applied to it during
 processing.
index 32958367d12e6e75ba2b7ccd233b734f91523f8c..98fe6808a9114114c5eadeecfbeb15368fe8d606 100644 (file)
@@ -31,7 +31,9 @@ of the vector.
 
 \image html transformation2.png
 
-\n Finally you can define an \b Object and the vector. The object will be translated by the length of the vector.  
+\n Finally you can define an \b Object and a vector. The object will be translated by the length of the vector. 
+If a curve has been selected instead of the vector, only its first and last vertices will be used to get the vector direction 
+and the dialog preview will display the vector along which the object will be translated. 
 \n <b>TUI Command:</b> <em>geompy.MakeTranslationVector(Object, Vector)</em>
 \n <b>Activate Distance</b> checkbox and <b>Distance</b> field allow defining the custom distance of translation.
 \n <b>TUI Command </b> for translation by vector and custom distance: <em>geompy.MakeTranslationVectorDistance(Object, Vector, Distance)</em> 
index 1a76d9be86b8d8c21220a3b266c49cf40409a02e..0e8861511ccfc80841041db4618332318c72095c 100644 (file)
@@ -10,6 +10,10 @@ import geompy
 import salome
 gg = salome.ImportComponentGUI("GEOM")
 
+#
+# create edge by two points
+#
+
 # create vertices
 p0   = geompy.MakeVertex(0.  , 0.  , 0.  )
 pxyz = geompy.MakeVertex(100., 100., 100.)
@@ -18,10 +22,30 @@ pxyz = geompy.MakeVertex(100., 100., 100.)
 edge = geompy.MakeEdge(p0, pxyz)
 
 # add object in the study
-id_edge = geompy.addToStudy(edge,"Edge")
+id_edge = geompy.addToStudy(edge,"Edge_1")
+
+# display an edge
+gg.createAndDisplayGO(id_edge) 
+
+#
+# create edge from wire
+#
+
+# create a circle
+c = geompy.MakeCircle(None, None, 100)
+
+# create a wire
+w = geompy.MakeWire([c], 1e-07)
+
+# create an edge from wire
+edge = geompy.MakeEdgeWire(w)
+
+# add object in the study
+id_edge = geompy.addToStudy(edge,"Edge_2")
 
 # display an edge
 gg.createAndDisplayGO(id_edge) 
+
 \endcode
  
 \anchor tui_creation_wire
index d55300562ef118b518c13aa0e84bf56967f3acbc..237440c2fc57cc9ddeb8d2bd208355c15974926c 100644 (file)
@@ -289,6 +289,43 @@ gg.createAndDisplayGO(id_glue)
 gg.setDisplayMode(id_glue,1) 
 \endcode
 
+\anchor tui_limit_tolerance
+<br><h2>Limit Tolerance</h2>
+
+\code
+import geompy
+gg = salome.ImportComponentGUI("GEOM")
+
+# import initial topology
+shape1 = geompy.ImportBREP("my_shape_1.brep")
+shape2 = geompy.ImportBREP("my_shape_2.brep")
+
+geompy.addToStudy(shape1, "Shape 1")
+geompy.addToStudy(shape2, "Shape 2")
+
+# perform partition
+try:
+    part = geompy.MakePartition([shape1, shape2])
+except:
+    # limit tolerance
+    tolerance = 1e-07
+    shape1_lt = geompy.LimitTolerance(shape1, tolerance)
+    shape2_lt = geompy.LimitTolerance(shape2, tolerance)
+
+    # process shape
+    good_shape1 = geompy.ProcessShape(shape1_lt, ["FixShape"], ["FixShape.Tolerance3d"], ["1e-7"])
+    good_shape2 = geompy.ProcessShape(shape2_lt, ["FixShape"], ["FixShape.Tolerance3d"], ["1e-7"])
+
+    geompy.addToStudy(good_shape1, "Shape 1 corrected")
+    geompy.addToStudy(good_shape2, "Shape 2 corrected")
+
+    # perform partition on corrected shapes
+    part = geompy.MakePartition([good_shape1, good_shape2])
+    pass
+
+geompy.addToStudy(part, "Partition")
+\endcode
+
 \anchor tui_add_point_on_edge
 <br><h2>Add Point on Edge</h2>
 
index 84779c467c638800dba7b0f200c6cec1df866590..7560a76de3156f2a0aefaa9736c20ee77cb1ed8c 100644 (file)
 \anchor swig_GetPoint
 \until blocksComp (-50, -50, -50)
 
+\anchor swig_GetVertexNearPoint
+\until near (40,  40,  40)
+
+\anchor swig_GetEdge
+\until by two points
+
 \anchor swig_GetEdgeNearPoint
 \until edge near point
 
 \anchor swig_GetBlockByParts
 \until "b0 image"
 
+\anchor swig_GetShapesNearPoint
+\until "faces near point"
+
 \anchor swig_GetShapesOnPlane
 \until Face on Plane
 
index ab6723a31f82eff410b8cbd2de6e73799ca1f6ff..4772dc4a01c8d0cb8c7b47256e26c980c68875a5 100755 (executable)
@@ -264,4 +264,4 @@ DOT_CLEANUP            = YES
 #---------------------------------------------------------------------------
 # Configuration::additions related to the search engine   
 #---------------------------------------------------------------------------
-SEARCHENGINE           = YES
+SEARCHENGINE           = NO
index 304b16a861880d0a674f075b0d20cb0c1464ade6..179ecf35a9606bd7a7b86cc7fde017b46c298a12 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 //  File   : GEOM_Gen.idl
 //  Author : Sergey RUIN
-//
+
 #ifndef __GEOM_GEN__
 #define __GEOM_GEN__
 
@@ -45,13 +44,13 @@ module GEOM
    * Marker type
    */
   enum marker_type { MT_NONE, MT_POINT, MT_PLUS, MT_STAR, MT_O, MT_X, MT_O_POINT, MT_O_PLUS,
-                    MT_O_STAR, MT_O_X, MT_BALL, MT_RING1, MT_RING2, MT_RING3, MT_USER };
+                     MT_O_STAR, MT_O_X, MT_BALL, MT_RING1, MT_RING2, MT_RING3, MT_USER };
 
   /*!
    * Marker size
    */
   enum marker_size { MS_NONE, MS_10, MS_15, MS_20, MS_25, MS_30, MS_35,
-                    MS_40, MS_45, MS_50, MS_55, MS_60, MS_65, MS_70 };
+                     MS_40, MS_45, MS_50, MS_55, MS_60, MS_65, MS_70 };
 
   /*!
    *  State of shape relatively geometrical surface like plane, sphere or cylinder.
@@ -167,6 +166,24 @@ module GEOM
      */
     shape_type GetShapeType();
 
+    /*!
+     *  Get the topology type of the object value.
+     *  In contrast to the shape type, this function returns type of the most
+     *  top-level sub-shape of the COMPOUND or COMPSOLID, if there is only one
+     *  sub-shape there.
+     *  \sa GetShapeType()
+     */
+    shape_type GetTopologyType();
+
+    /*!
+     *  Get a minimal type of the top-level shapes contained in the object.
+     *  This function is useful for the compounds only; for simple shapes it
+     *  exactly the same value as GetShapeType().
+     *  Note, that compounds are procesed recursively.
+     *  \sa GetShapeType(), GetTopologyType()
+     */
+    shape_type GetMinShapeType();
+
     /*!
      *  Set name of the object.
      *  \param theName is a name which will be associated with this object.
@@ -376,7 +393,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointWithReference (in GEOM_Object theReference,
-                                       in double theX, in double theY, in double theZ);
+                                        in double theX, in double theY, in double theZ);
 
     /*!
      *  Create a point, corresponding to the given parameter on the given curve.
@@ -385,7 +402,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnCurve (in GEOM_Object theRefCurve,
-                                 in double theParameter);
+                                  in double theParameter);
 
     /*!
      *  Create a point on the given curve, projecting given point
@@ -409,8 +426,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnSurface (in GEOM_Object theRefSurf,
-                                   in double theUParameter,
-                                   in double theVParameter);
+                                    in double theUParameter,
+                                    in double theVParameter);
 
     /*!
      *  Create a point on the given surface, projecting given point
@@ -432,7 +449,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object MakePointOnLinesIntersection (in GEOM_Object theRefLine1,
-                                             in GEOM_Object theRefLine2);
+                                              in GEOM_Object theRefLine2);
 
      /*!
      *  Create a vector, corresponding to tangent to the given parameter on the given curve.
@@ -443,7 +460,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
      GEOM_Object MakeTangentOnCurve (in GEOM_Object theRefCurve,
-                                    in double theParameter);
+                                     in double theParameter);
 
     /*!
      *  Create a vector with the given components.
@@ -453,8 +470,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created vector.
      */
     GEOM_Object MakeVectorDXDYDZ (in double theDX,
-                                 in double theDY,
-                                 in double theDZ);
+                                  in double theDY,
+                                  in double theDZ);
 
     /*!
      *  Create a vector between two points.
@@ -498,9 +515,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneThreePnt (in GEOM_Object thePnt1,
-                                  in GEOM_Object thePnt2,
-                                  in GEOM_Object thePnt3,
-                                  in double theTrimSize);
+                                   in GEOM_Object thePnt2,
+                                   in GEOM_Object thePnt3,
+                                   in double theTrimSize);
 
     /*!
      *  Create a plane, passing through the given point
@@ -511,8 +528,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlanePntVec (in GEOM_Object thePnt,
-                                in GEOM_Object theVec,
-                                in double theTrimSize);
+                                 in GEOM_Object theVec,
+                                 in double theTrimSize);
 
     /*!
      *  Create a plane, similar to the existing one, but with another size of representing face.
@@ -521,7 +538,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneFace (in GEOM_Object theFace,
-                              in double theTrimSize);
+                               in double theTrimSize);
 
     /*!
      *  Create a plane, by two vectors.
@@ -531,8 +548,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlane2Vec (in GEOM_Object theVec1,
-                              in GEOM_Object theVec2,
-                              in double theTrimSize);
+                               in GEOM_Object theVec2,
+                               in double theTrimSize);
 
     /*!
      *  Create a plane, defined by local coordinate system.
@@ -542,8 +559,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created plane.
      */
     GEOM_Object MakePlaneLCS (in GEOM_Object theLCS,
-                             in double theTrimSize,
-                             in double theOrientation);
+                              in double theTrimSize,
+                              in double theOrientation);
 
     /*!
      *  Create a local coordinate system.
@@ -553,8 +570,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created coordinate system.
      */
     GEOM_Object MakeMarker (in double theOX , in double theOY , in double theOZ,
-                           in double theXDX, in double theXDY, in double theXDZ,
-                           in double theYDX, in double theYDY, in double theYDZ);
+                            in double theXDX, in double theXDY, in double theXDZ,
+                            in double theYDX, in double theYDY, in double theYDZ);
 
     /*!
      *  Create a local coordinate system from shape.
@@ -562,7 +579,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created coordinate system.
      */
     GEOM_Object MakeMarkerFromShape (in GEOM_Object theShape);
-   
+
     /*!
      *  Create a local coordinate system from point and two vectors (DX, DY).
      *  \param theOrigin Point of coordinate system origin.
@@ -571,7 +588,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created coordinate system.
      */
     GEOM_Object MakeMarkerPntTwoVec (in GEOM_Object theOrigin, in GEOM_Object theXVec, in GEOM_Object theYVec);
-       
+
     /*!
      *  Create a tangent plane to specified face in the point with specified parameters.
      *  Values of parameters should be between 0. and 1.0
@@ -582,9 +599,9 @@ module GEOM
      *  \return New GEOM_Object, containing the face built on tangent plane.
      */
     GEOM_Object MakeTangentPlaneOnFace(in GEOM_Object theFace,
-                                      in double theParameterU,
-                                      in double theParameterV,
-                                      in double theTrimSize);
+                                       in double theParameterU,
+                                       in double theParameterV,
+                                       in double theTrimSize);
   };
 
   interface GEOM_ITransformOperations : GEOM_IOperations
@@ -597,8 +614,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateTwoPoints (in GEOM_Object theObject,
-                                   in GEOM_Object thePoint1,
-                                   in GEOM_Object thePoint2);
+                                    in GEOM_Object thePoint1,
+                                    in GEOM_Object thePoint2);
 
     /*!
      *  Translate the given object along the vector, specified
@@ -609,7 +626,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateTwoPointsCopy (in GEOM_Object theObject,
-                                       in GEOM_Object thePoint1,
+                                        in GEOM_Object thePoint1,
                                         in GEOM_Object thePoint2);
 
     /*!
@@ -619,7 +636,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateDXDYDZ (in GEOM_Object theObject,
-                                in double theDX, in double theDY, in double theDZ);
+                                 in double theDX, in double theDY, in double theDZ);
 
     /*!
      *  Translate the given object along the vector, specified
@@ -629,7 +646,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateDXDYDZCopy (in GEOM_Object theObject,
-                                    in double theDX, in double theDY, in double theDZ);
+                                     in double theDX, in double theDY, in double theDZ);
 
 
     /*!
@@ -639,7 +656,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object TranslateVector (in GEOM_Object theObject,
-                                in GEOM_Object theVector);
+                                 in GEOM_Object theVector);
 
     /*!
      *  Translate the given object along the given vector,
@@ -649,7 +666,7 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateVectorCopy (in GEOM_Object theObject,
-                                    in GEOM_Object theVector);
+                                     in GEOM_Object theVector);
 
     /*!
      *  Translate the given object along the given vector on given distance,
@@ -661,9 +678,9 @@ module GEOM
      *  \return New GEOM_Object, containing the translated object.
      */
     GEOM_Object TranslateVectorDistance (in GEOM_Object theObject,
-                                        in GEOM_Object theVector,
-                                        in double      theDistance,
-                                        in boolean     theCopy);
+                                         in GEOM_Object theVector,
+                                         in double      theDistance,
+                                         in boolean     theCopy);
 
     /*!
      *  Translate the given object along the given vector a given number times
@@ -675,9 +692,9 @@ module GEOM
      *          the shapes, obtained after each translation.
      */
     GEOM_Object MultiTranslate1D (in GEOM_Object theObject,
-                                 in GEOM_Object theVector,
-                                 in double theStep,
-                                 in long theNbTimes);
+                                  in GEOM_Object theVector,
+                                  in double theStep,
+                                  in long theNbTimes);
 
     /*!
      *  Conseqently apply two specified translations to theObject specified number of times.
@@ -692,12 +709,12 @@ module GEOM
      *          the shapes, obtained after each translation.
      */
     GEOM_Object MultiTranslate2D (in GEOM_Object theObject,
-                                 in GEOM_Object theVector1,
-                                 in double theStep1,
-                                 in long theNbTimes1,
-                                 in GEOM_Object theVector2,
-                                 in double theStep2,
-                                 in long theNbTimes2);
+                                  in GEOM_Object theVector1,
+                                  in double theStep1,
+                                  in long theNbTimes1,
+                                  in GEOM_Object theVector2,
+                                  in double theStep2,
+                                  in long theNbTimes2);
 
     /*!
      *  Rotate given object around vector perpendicular to plane containing three points.
@@ -708,9 +725,9 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object RotateThreePoints (in GEOM_Object theObject,
-                                  in GEOM_Object theCentPoint,
-                                  in GEOM_Object thePoint1,
-                                  in GEOM_Object thePoint2);
+                                   in GEOM_Object theCentPoint,
+                                   in GEOM_Object thePoint1,
+                                   in GEOM_Object thePoint2);
 
 
     /*!
@@ -723,9 +740,9 @@ module GEOM
      *  \return New GEOM_Object, containing the rotated object.
      */
     GEOM_Object RotateThreePointsCopy (in GEOM_Object theObject,
-                                      in GEOM_Object theCentPoint,
-                                      in GEOM_Object thePoint1,
-                                      in GEOM_Object thePoint2);
+                                       in GEOM_Object theCentPoint,
+                                       in GEOM_Object thePoint1,
+                                       in GEOM_Object thePoint2);
 
     /*!
      *  Rotate the given object around the given axis on the given angle.
@@ -735,8 +752,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object Rotate (in GEOM_Object theObject,
-                       in GEOM_Object theAxis,
-                       in double theAngle);
+                        in GEOM_Object theAxis,
+                        in double theAngle);
 
 
     /*!
@@ -748,8 +765,8 @@ module GEOM
      *  \return New GEOM_Object, containing the rotated object.
      */
     GEOM_Object RotateCopy (in GEOM_Object theObject,
-                           in GEOM_Object theAxis,
-                           in double theAngle);
+                            in GEOM_Object theAxis,
+                            in double theAngle);
 
 
     /*!
@@ -762,8 +779,8 @@ module GEOM
      *          shapes, obtained after each rotation.
      */
     GEOM_Object MultiRotate1D (in GEOM_Object theObject,
-                              in GEOM_Object theAxis,
-                              in long theNbTimes);
+                               in GEOM_Object theAxis,
+                               in long theNbTimes);
 
     /*!
      *  Rotate the given object around the
@@ -781,11 +798,11 @@ module GEOM
      *          shapes, obtained after each transformation.
      */
     GEOM_Object MultiRotate2D (in GEOM_Object theObject,
-                              in GEOM_Object theAxis,
-                              in double theAngle,
-                              in long theNbTimes1,
-                              in double theStep,
-                              in long theNbTimes2);
+                               in GEOM_Object theAxis,
+                               in double theAngle,
+                               in long theNbTimes1,
+                               in double theStep,
+                               in long theNbTimes2);
 
     /*!
      *  Replace the given object by an object,
@@ -862,7 +879,7 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object ScaleShape (in GEOM_Object theObject, in GEOM_Object thePoint,
-                           in double theFactor);
+                            in double theFactor);
 
     /*!
      *  Scale the given object by the factor, creating its copy before the scaling.
@@ -872,7 +889,7 @@ module GEOM
      *  \return New GEOM_Object, containing the scaled shape.
      */
     GEOM_Object ScaleShapeCopy (in GEOM_Object theObject, in GEOM_Object thePoint,
-                               in double theFactor);
+                                in double theFactor);
 
     /*!
      *  Scale the given object by different factors along coordinate axes.
@@ -913,8 +930,8 @@ module GEOM
      *  \return theObject.
      */
     GEOM_Object PositionShape (in GEOM_Object theObject,
-                              in GEOM_Object theStartLCS,
-                              in GEOM_Object theEndLCS);
+                               in GEOM_Object theStartLCS,
+                               in GEOM_Object theEndLCS);
 
     /*!
      *  Modify the Location of the given object by LCS,
@@ -929,24 +946,24 @@ module GEOM
      *  \return New GEOM_Object, containing the displaced shape.
      */
     GEOM_Object PositionShapeCopy (in GEOM_Object theObject,
-                                  in GEOM_Object theStartLCS,
-                                  in GEOM_Object theEndLCS);
+                                   in GEOM_Object theStartLCS,
+                                   in GEOM_Object theEndLCS);
 
     /*!
      *  Modify the Location of the given object by Path,
      *  \param  theObject The object to be displaced.
      *  \param  thePath Wire or Edge along that the object will be translated.
-     * \param  theDistance progress of Path (0 = actual location, 1 = end of path location).
-     * \param  theCopy is a true or false parameter. true is to create a copy, false to move the object.
-     * \param  theCopy is a true or false parameter. true is to reverse direction, false is to move normal direction.
+     *        \param  theDistance progress of Path (0 = actual location, 1 = end of path location).
+     *        \param  theCopy is a true or false parameter. true is to create a copy, false to move the object.
+     *        \param  theCopy is a true or false parameter. true is to reverse direction, false is to move normal direction.
      *  \return New GEOM_Object, containing the displaced shape.
      */
 
     GEOM_Object PositionAlongPath (in GEOM_Object theObject,
-                                  in GEOM_Object thePath,
-                                  in double theDistance,
-                                  in boolean theCopy,
-                                  in boolean theReverse);
+                                   in GEOM_Object thePath,
+                                   in double theDistance,
+                                   in boolean theCopy,
+                                   in boolean theReverse);
 
     /*!
      *  Recompute the shape from its arguments.
@@ -1010,16 +1027,16 @@ module GEOM
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDiskPntVecR (in GEOM_Object thePnt,
-                                in GEOM_Object theVec,
-                                in double theR);
+                                 in GEOM_Object theVec,
+                                 in double theR);
     /*!
      *  Create a disk (circular face), passing through three given points
      *  \param thePnt1, thePnt2, thePnt3 Points, defining the disk.
      *  \return New GEOM_Object, containing the created disk.
      */
     GEOM_Object MakeDiskThreePnt (in GEOM_Object thePnt1,
-                                 in GEOM_Object thePnt2,
-                                 in GEOM_Object thePnt3);
+                                  in GEOM_Object thePnt2,
+                                  in GEOM_Object thePnt3);
 
     /*!
      *  Create a disk specified dimensions along OX-OY coordinate axes,
@@ -1049,9 +1066,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created cylinder.
      */
     GEOM_Object MakeCylinderPntVecRH (in GEOM_Object thePnt,
-                                     in GEOM_Object theAxis,
-                                     in double      theR,
-                                     in double      theH);
+                                      in GEOM_Object theAxis,
+                                      in double      theR,
+                                      in double      theH);
 
     /*!
      *  Create a cone with given height and radiuses at
@@ -1078,10 +1095,10 @@ module GEOM
      *  \return New GEOM_Object, containing the created cone.
      */
     GEOM_Object MakeConePntVecR1R2H (in GEOM_Object thePnt,
-                                    in GEOM_Object theAxis,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in double      theH);
+                                     in GEOM_Object theAxis,
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in double      theH);
 
     /*!
      *  Create a torus with given radiuses at the origin of coordinate system.
@@ -1090,7 +1107,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created torus.
      */
     GEOM_Object MakeTorusRR (in double theRMajor,
-                            in double theRMinor);
+                             in double theRMinor);
 
     /*!
      *  Create a torus with given center, normal vector and radiuses.
@@ -1101,9 +1118,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created torus.
      */
     GEOM_Object MakeTorusPntVecRR (in GEOM_Object thePnt,
-                                  in GEOM_Object theVec,
-                                  in double theRMajor,
-                                  in double theRMinor);
+                                   in GEOM_Object theVec,
+                                   in double theRMajor,
+                                   in double theRMinor);
 
     /*!
      *  Create a sphere with given radius at the origin of coordinate system.
@@ -1130,12 +1147,12 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismVecH (in GEOM_Object theBase,
-                              in GEOM_Object theVec,
-                              in double      theH);
+                               in GEOM_Object theVec,
+                               in double      theH);
     /*  The Same Prism but in 2 directions (forward&backward) */
     GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
-                                   in GEOM_Object theVec,
-                                   in double      theH);
+                                    in GEOM_Object theVec,
+                                    in double      theH);
 
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by two points.
@@ -1145,12 +1162,12 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
-                                in GEOM_Object thePoint1,
-                                in GEOM_Object thePoint2);
+                                 in GEOM_Object thePoint1,
+                                 in GEOM_Object thePoint2);
     /*  The same prism but in two directions forward&backward */
     GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
-                                     in GEOM_Object thePoint1,
-                                     in GEOM_Object thePoint2);
+                                      in GEOM_Object thePoint1,
+                                      in GEOM_Object thePoint2);
 
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by DX DY DZ.
@@ -1159,7 +1176,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created prism.
      */
     GEOM_Object MakePrismDXDYDZ (in GEOM_Object theBase,
-                                in double theDX, in double theDY, in double theDZ);
+                                   in double theDX, in double theDY, in double theDZ);
     /*  The same prism but in two directions forward&backward */
     GEOM_Object MakePrismDXDYDZ2Ways (in GEOM_Object theBase,
                                       in double theDX, in double theDY, in double theDZ);
@@ -1183,12 +1200,12 @@ module GEOM
      *  \return New GEOM_Object, containing the created revolution.
      */
     GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
-                                        in GEOM_Object theAxis,
-                                        in double theAngle);
+                                         in GEOM_Object theAxis,
+                                         in double theAngle);
     /*  The Same Revolution but in both ways forward&backward */
     GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
-                                             in GEOM_Object theAxis,
-                                             in double theAngle);
+                                              in GEOM_Object theAxis,
+                                              in double theAngle);
 
     /*!
      *  Create a filling from the given compound of contours.
@@ -1201,9 +1218,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created filling surface.
      */
     GEOM_Object MakeFilling (in GEOM_Object theShape,
-                            in long theMinDeg, in long theMaxDeg,
-                            in double theTol2D, in double theTol3D,
-                            in long theNbIter,
+                             in long theMinDeg, in long theMaxDeg,
+                             in double theTol2D, in double theTol3D,
+                             in long theNbIter,
                              in filling_oper_method theMethod,
                              in boolean theApprox);
 
@@ -1216,8 +1233,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created shell or solid.
      */
     GEOM_Object MakeThruSections(in ListOfGO theSeqSections,
-                                in boolean theModeSolid,
-                                in double thePreci,
+                                 in boolean theModeSolid,
+                                 in double thePreci,
                                  in boolean theRuled);
 
       /*!
@@ -1232,14 +1249,14 @@ module GEOM
      *  \param theWithContact - the mode defining that the section is translated to be in
      *                          contact with the spine.
      *  \param - WithCorrection - defining that the section is rotated to be
-     *                          orthogonal to the spine tangent in the correspondent point
+     *                                 orthogonal to the spine tangent in the correspondent point
      *  \return New GEOM_Object, containing the created pipe.
      */
     GEOM_Object MakePipeWithDifferentSections (in ListOfGO theSeqBases,
-                                              in ListOfGO theLocations,
-                                              in GEOM_Object thePath,
-                                              in boolean theWithContact ,
-                                              in boolean theWithCorrection );
+                                               in ListOfGO theLocations,
+                                               in GEOM_Object thePath,
+                                               in boolean theWithContact ,
+                                               in boolean theWithCorrection );
 
     /*!
      *  Create a shape by extrusion of the profile shape along
@@ -1254,15 +1271,15 @@ module GEOM
      *  \param theWithContact - the mode defining that the section is translated to be in
      *                          contact with the spine.
      *  \param - WithCorrection - defining that the section is rotated to be
-     *                          orthogonal to the spine tangent in the correspondent point
+     *                                 orthogonal to the spine tangent in the correspondent point
      *  \return New GEOM_Object, containing the created pipe.
      */
     GEOM_Object MakePipeWithShellSections (in ListOfGO theSeqBases,
-                                          in ListOfGO theSeqSubBases,
-                                          in ListOfGO theLocations,
-                                          in GEOM_Object thePath,
-                                          in boolean theWithContact ,
-                                          in boolean theWithCorrection );
+                                           in ListOfGO theSeqSubBases,
+                                           in ListOfGO theLocations,
+                                           in GEOM_Object thePath,
+                                           in boolean theWithContact ,
+                                           in boolean theWithCorrection );
 
     /*!
      * Create solids between given sections
@@ -1271,7 +1288,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created solids.
      */
     GEOM_Object MakePipeShellsWithoutPath (in ListOfGO theSeqBases,
-                                          in ListOfGO theLocations);
+                                           in ListOfGO theLocations);
 
     /*!
      *  Create a shape by extrusion of the base shape along
@@ -1285,8 +1302,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created pipe.
      */
     GEOM_Object MakePipeBiNormalAlongVector (in GEOM_Object theBase,
-                                            in GEOM_Object thePath,
-                                            in GEOM_Object theVec);
+                                             in GEOM_Object thePath,
+                                             in GEOM_Object theVec);
 
   };
 
@@ -1305,6 +1322,17 @@ module GEOM
      */
     GEOM_Object MakeEdge (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
 
+    /*!
+     *  Create an edge from specified wire.
+     *  \param theWire source Wire.
+     *  \param theLinearTolerance linear tolerance value
+     *  \param theAngularTolerance angular tolerance value
+     *  \return New GEOM_Object, containing the created edge.
+     */
+    GEOM_Object MakeEdgeWire (in GEOM_Object theWire,
+                             in double theLinearTolerance, 
+                             in double theAngularTolerance);
+
     /*!
      *  Create a wire from the set of edges and wires.
      *  \param theEdgesAndWires List of edge and/or wires.
@@ -1388,7 +1416,18 @@ module GEOM
      *  \return New GEOM_Object, containing a copy of theShape without some faces.
      */
     GEOM_Object MakeGlueFacesByList (in GEOM_Object theShape, in double theTolerance,
-                                    in ListOfGO theFaces, in boolean doKeepNonSolids);
+                                     in ListOfGO theFaces, in boolean doKeepNonSolids);
+
+    /*!
+     *  Get all sub-shapes and groups of \a theShape,
+     *  that were created already by any other methods.
+     *  \param theShape Any shape.
+     *  \param theGroupsOnly If this parameter is TRUE, only groups will be
+     *                       returned, else all found sub-shapes and groups.
+     *  \return List of existing sub-objects of \a theShape.
+     */
+    ListOfGO GetExistingSubObjects (in GEOM_Object theShape,
+                                    in boolean     theGroupsOnly);
 
     /*!
      *  Deprecated method. Use MakeAllSubShapes() instead.
@@ -1436,7 +1475,7 @@ module GEOM
      *        Don't try to apply modification operations on them.
      */
     GEOM_Object GetSubShape (in GEOM_Object theMainShape,
-                            in long        theID);
+                             in long        theID);
 
     /*!
      *  Get global index of \a theSubShape in \a theMainShape.
@@ -1513,8 +1552,8 @@ module GEOM
      *  \return List of sub-shapes of theShape1, shared with theShape2.
      */
     ListOfGO GetSharedShapes (in GEOM_Object theShape1,
-                             in GEOM_Object theShape2,
-                             in long        theShapeType);
+                              in GEOM_Object theShape2,
+                              in long        theShapeType);
 
     /*!
      *  Get all sub-shapes, shared by all shapes in the list \a theShapes.
@@ -1536,9 +1575,9 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnPlane (in GEOM_Object theShape,
-                              in long        theShapeType,
-                              in GEOM_Object theAx1,
-                              in shape_state theState);
+                               in long        theShapeType,
+                               in GEOM_Object theAx1,
+                               in shape_state theState);
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
      *  the specified plane by the certain way, defined through \a theState parameter.
@@ -1551,10 +1590,10 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnPlaneWithLocation (in GEOM_Object theShape,
-                                          in long        theShapeType,
-                                          in GEOM_Object theAx1,
-                                          in GEOM_Object thePnt,
-                                          in shape_state theState);
+                                           in long        theShapeType,
+                                           in GEOM_Object theAx1,
+                                           in GEOM_Object thePnt,
+                                           in shape_state theState);
 
 
 
@@ -1570,10 +1609,10 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnCylinder (in GEOM_Object theShape,
-                                 in long        theShapeType,
-                                 in GEOM_Object theAxis,
-                                 in double      theRadius,
-                                 in shape_state theState);
+                                  in long        theShapeType,
+                                  in GEOM_Object theAxis,
+                                  in double      theRadius,
+                                  in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1605,10 +1644,10 @@ module GEOM
      *  \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnSphere (in GEOM_Object theShape,
-                               in long        theShapeType,
-                               in GEOM_Object theCenter,
-                               in double      theRadius,
-                               in shape_state theState);
+                                in long        theShapeType,
+                                in GEOM_Object theCenter,
+                                in double      theRadius,
+                                in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1641,9 +1680,9 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnPlaneIDs (in GEOM_Object theShape,
-                                   in long        theShapeType,
-                                   in GEOM_Object theAx1,
-                                   in shape_state theState);
+                                    in long        theShapeType,
+                                    in GEOM_Object theAx1,
+                                    in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1657,10 +1696,10 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnPlaneWithLocationIDs (in GEOM_Object theShape,
-                                               in long        theShapeType,
-                                               in GEOM_Object theAx1,
-                                               in GEOM_Object thePnt,
-                                               in shape_state theState);
+                                                in long        theShapeType,
+                                                in GEOM_Object theAx1,
+                                                in GEOM_Object thePnt,
+                                                in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1674,10 +1713,10 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnCylinderIDs (in GEOM_Object theShape,
-                                      in long        theShapeType,
-                                      in GEOM_Object theAxis,
-                                      in double      theRadius,
-                                      in shape_state theState);
+                                       in long        theShapeType,
+                                       in GEOM_Object theAxis,
+                                       in double      theRadius,
+                                       in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1709,10 +1748,10 @@ module GEOM
      *  \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnSphereIDs (in GEOM_Object theShape,
-                                    in long        theShapeType,
-                                    in GEOM_Object theCenter,
-                                    in double      theRadius,
-                                    in shape_state theState);
+                                     in long        theShapeType,
+                                     in GEOM_Object theCenter,
+                                     in double      theRadius,
+                                     in shape_state theState);
 
     /*!
      *  Find in \a theShape all sub-shapes of type \a theShapeType, situated relatively
@@ -1743,9 +1782,9 @@ module GEOM
      * \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnBoxIDs (in GEOM_Object theBox,
-                                 in GEOM_Object theShape,
-                                 in long        theShapeType,
-                                 in shape_state theState);
+                                  in GEOM_Object theShape,
+                                  in long        theShapeType,
+                                  in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
@@ -1756,9 +1795,9 @@ module GEOM
      * \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnBox (in GEOM_Object theBox,
-                            in GEOM_Object theShape,
-                            in long        theShapeType,
-                            in shape_state theState);
+                             in GEOM_Object theShape,
+                             in long        theShapeType,
+                             in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
@@ -1769,9 +1808,9 @@ module GEOM
      * \return List of IDs of all found sub-shapes.
      */
     ListOfLong GetShapesOnShapeIDs (in GEOM_Object theCheckShape,
-                                   in GEOM_Object theShape,
-                                   in short       theShapeType,
-                                   in shape_state theState);
+                                    in GEOM_Object theShape,
+                                    in short       theShapeType,
+                                    in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
@@ -1782,9 +1821,9 @@ module GEOM
      * \return List of all found sub-shapes.
      */
     ListOfGO GetShapesOnShape (in GEOM_Object theCheckShape,
-                              in GEOM_Object theShape,
-                              in short       theShapeType,
-                              in shape_state theState);
+                               in GEOM_Object theShape,
+                               in short       theShapeType,
+                               in shape_state theState);
 
     /*!
      * \brief Find subshapes complying with given status
@@ -1795,9 +1834,9 @@ module GEOM
      * \return compound includes all found sub-shapes.
      */
     GEOM_Object GetShapesOnShapeAsCompound (in GEOM_Object theCheckShape,
-                                           in GEOM_Object theShape,
-                                           in short       theShapeType,
-                                           in shape_state theState);
+                                            in GEOM_Object theShape,
+                                            in short       theShapeType,
+                                            in shape_state theState);
 
     /*!
      *  Get sub-shape(s) of \a theShapeWhere, which are
@@ -1807,7 +1846,7 @@ module GEOM
      *  \return Group of all found sub-shapes or a single found sub-shape.
      */
     GEOM_Object GetInPlace (in GEOM_Object theShapeWhere,
-                           in GEOM_Object theShapeWhat);
+                            in GEOM_Object theShapeWhat);
 
     /*!
      *  Get sub-shape(s) of \a theShapeWhere, which are
@@ -1824,7 +1863,7 @@ module GEOM
      *  \return Group of all found sub-shapes or a single found sub-shape.
      */
     GEOM_Object GetInPlaceByHistory (in GEOM_Object theShapeWhere,
-                                    in GEOM_Object theShapeWhat);
+                                     in GEOM_Object theShapeWhat);
 
     /*!
      *  Get sub-shape of theShapeWhere, which are
@@ -1834,7 +1873,7 @@ module GEOM
      *  \return found sub-shape.
      */
     GEOM_Object GetSame (in GEOM_Object theShapeWhere,
-                        in GEOM_Object theShapeWhat);
+                                in GEOM_Object theShapeWhat);
   };
 
   /*!
@@ -1855,9 +1894,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad (in GEOM_Object theEdge1,
-                         in GEOM_Object theEdge2,
-                         in GEOM_Object theEdge3,
-                         in GEOM_Object theEdge4);
+                          in GEOM_Object theEdge2,
+                          in GEOM_Object theEdge3,
+                          in GEOM_Object theEdge4);
 
     /*!
      *  Create a quadrangle face on two edges.
@@ -1866,7 +1905,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad2Edges (in GEOM_Object theEdge1,
-                               in GEOM_Object theEdge2);
+                                in GEOM_Object theEdge2);
 
     /*!
      *  Create a quadrangle face with specified corners.
@@ -1875,9 +1914,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created face.
      */
     GEOM_Object MakeQuad4Vertices (in GEOM_Object thePnt1,
-                                  in GEOM_Object thePnt2,
-                                  in GEOM_Object thePnt3,
-                                  in GEOM_Object thePnt4);
+                                   in GEOM_Object thePnt2,
+                                   in GEOM_Object thePnt3,
+                                   in GEOM_Object thePnt4);
 
     /*!
      *  Create a hexahedral solid, bounded by the six given faces. Order of
@@ -1886,11 +1925,11 @@ module GEOM
      *  \return New GEOM_Object, containing the created solid.
      */
     GEOM_Object MakeHexa (in GEOM_Object theFace1,
-                         in GEOM_Object theFace2,
-                         in GEOM_Object theFace3,
-                         in GEOM_Object theFace4,
-                         in GEOM_Object theFace5,
-                         in GEOM_Object theFace6);
+                          in GEOM_Object theFace2,
+                          in GEOM_Object theFace3,
+                          in GEOM_Object theFace4,
+                          in GEOM_Object theFace5,
+                          in GEOM_Object theFace6);
 
     /*!
      *  Create a hexahedral solid between two given faces.
@@ -1899,7 +1938,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created solid.
      */
     GEOM_Object MakeHexa2Faces (in GEOM_Object theFace1,
-                               in GEOM_Object theFace2);
+                                in GEOM_Object theFace2);
 
     /*!
      *  Extract elements of blocks and blocks compounds
@@ -1914,10 +1953,19 @@ module GEOM
      *  \return New GEOM_Object, containing the found vertex.
      */
     GEOM_Object GetPoint (in GEOM_Object theShape,
-                         in double      theX,
-                         in double      theY,
-                         in double      theZ,
-                         in double      theEpsilon);
+                          in double      theX,
+                          in double      theY,
+                          in double      theZ,
+                          in double      theEpsilon);
+
+    /*!
+     *  Find a vertex of the given shape, which has minimal distance to the given point.
+     *  \param theShape Any shape.
+     *  \param thePoint Point, close to the desired vertex.
+     *  \return New GEOM_Object, containing the found vertex.
+     */
+    GEOM_Object GetVertexNearPoint (in GEOM_Object theShape,
+                                    in GEOM_Object thePoint);
 
     /*!
      *  Get an edge, found in the given shape by two given vertices.
@@ -1926,8 +1974,8 @@ module GEOM
      *  \return New GEOM_Object, containing the found edge.
      */
     GEOM_Object GetEdge (in GEOM_Object theShape,
-                        in GEOM_Object thePoint1,
-                        in GEOM_Object thePoint2);
+                         in GEOM_Object thePoint1,
+                         in GEOM_Object thePoint2);
 
     /*!
      *  Find an edge of the given shape, which has minimal distance to the given point.
@@ -1936,7 +1984,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found edge.
      */
     GEOM_Object GetEdgeNearPoint (in GEOM_Object theShape,
-                                 in GEOM_Object thePoint);
+                                  in GEOM_Object thePoint);
 
     /*!
      *  Returns a face, found in the given shape by four given corner vertices.
@@ -1945,10 +1993,10 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByPoints (in GEOM_Object theShape,
-                                in GEOM_Object thePoint1,
-                                in GEOM_Object thePoint2,
-                                in GEOM_Object thePoint3,
-                                in GEOM_Object thePoint4);
+                                 in GEOM_Object thePoint1,
+                                 in GEOM_Object thePoint2,
+                                 in GEOM_Object thePoint3,
+                                 in GEOM_Object thePoint4);
 
     /*!
      *  Get a face of block, found in the given shape by two given edges.
@@ -1957,8 +2005,8 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByEdges (in GEOM_Object theShape,
-                               in GEOM_Object theEdge1,
-                               in GEOM_Object theEdge2);
+                                in GEOM_Object theEdge1,
+                                in GEOM_Object theEdge2);
 
     /*!
      *  Find a face, opposite to the given one in the given block.
@@ -1967,7 +2015,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetOppositeFace (in GEOM_Object theBlock,
-                                in GEOM_Object theFace);
+                                 in GEOM_Object theFace);
 
     /*!
      *  Find a face of the given shape, which has minimal distance to the given point.
@@ -1976,7 +2024,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceNearPoint (in GEOM_Object theShape,
-                                 in GEOM_Object thePoint);
+                                  in GEOM_Object thePoint);
 
     /*!
      *  Find a face of block, whose outside normale has minimal angle with the given vector.
@@ -1985,7 +2033,23 @@ module GEOM
      *  \return New GEOM_Object, containing the found face.
      */
     GEOM_Object GetFaceByNormale (in GEOM_Object theBlock,
-                                 in GEOM_Object theVector);
+                                  in GEOM_Object theVector);
+
+    /*!
+     *  Find all subshapes of type \a theShapeType of the given shape,
+     *  which have minimal distance to the given point.
+     *  \param theShape Any shape.
+     *  \param thePoint Point, close to the desired shape.
+     *  \param theShapeType Defines what kind of subshapes is searched.
+     *  \param theTolerance The tolerance for distances comparison. All shapes
+     *                      with distances to the given point in interval
+     *                      [minimal_distance, minimal_distance + theTolerance] will be gathered.
+     *  \return New GEOM_Object, containing a group of all found shapes.
+     */
+    GEOM_Object GetShapesNearPoint (in GEOM_Object theShape,
+                                    in GEOM_Object thePoint,
+                                    in long        theShapeType,
+                                    in double      theTolerance);
 
     /*!
      *  Extract blocks from blocks compounds
@@ -2001,9 +2065,9 @@ module GEOM
      *  \return theNbBlocks Number of specified blocks in theCompound.
      */
     boolean IsCompoundOfBlocks (in GEOM_Object theCompound,
-                               in long        theMinNbFaces,
-                               in long        theMaxNbFaces,
-                               out long       theNbBlocks);
+                                in long        theMinNbFaces,
+                                in long        theMaxNbFaces,
+                                out long       theNbBlocks);
 
     /*!
      *  Enumeration of Blocks Compound defects.
@@ -2054,7 +2118,7 @@ module GEOM
      *  \return theErrors Structure, containing discovered errors and incriminated sub-shapes.
      */
     boolean CheckCompoundOfBlocks (in GEOM_Object theCompound,
-                                  out BCErrors   theErrors);
+                                   out BCErrors   theErrors);
 
     /*!
      *  Convert sequence of Blocks Compound errors, returned by
@@ -2064,7 +2128,7 @@ module GEOM
      *  \return String, describing all the errors in form, suitable for printing.
      */
     string PrintBCErrors (in GEOM_Object theCompound,
-                         in BCErrors    theErrors);
+                          in BCErrors    theErrors);
 
     /*!
      *  Remove all seam and degenerated edges from \a theShape.
@@ -2097,8 +2161,8 @@ module GEOM
      *  \return List of GEOM_Objects, containing the retrieved blocks.
      */
     ListOfGO ExplodeCompoundOfBlocks (in GEOM_Object theCompound,
-                                     in long        theMinNbFaces,
-                                     in long        theMaxNbFaces);
+                                      in long        theMinNbFaces,
+                                      in long        theMaxNbFaces);
 
     /*!
      *  Find block, containing the given point inside its volume or on boundary.
@@ -2108,7 +2172,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found block.
      */
     GEOM_Object GetBlockNearPoint (in GEOM_Object theCompound,
-                                  in GEOM_Object thePoint);
+                                   in GEOM_Object thePoint);
 
     /*!
      *  Find block, containing all the elements, passed as the parts, or maximum quantity of them.
@@ -2117,7 +2181,7 @@ module GEOM
      *  \return New GEOM_Object, containing the found block.
      */
     GEOM_Object GetBlockByParts (in GEOM_Object theCompound,
-                                in ListOfGO    theParts);
+                                 in ListOfGO    theParts);
 
     /*!
      *  Return all blocks, containing all the elements, passed as the parts.
@@ -2126,7 +2190,7 @@ module GEOM
      *  \return List of GEOM_Objects, containing the found blocks.
      */
     ListOfGO GetBlocksByParts (in GEOM_Object theCompound,
-                              in ListOfGO    theParts);
+                               in ListOfGO    theParts);
 
     /*!
      *  Operations on blocks with gluing of result
@@ -2144,9 +2208,9 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeMultiTransformation1D (in GEOM_Object theBlock,
-                                          in long        theDirFace1,
-                                          in long        theDirFace2,
-                                          in long        theNbTimes);
+                                           in long        theDirFace1,
+                                           in long        theDirFace2,
+                                           in long        theNbTimes);
 
     /*!
      *  Multi-transformate block and glue the result.
@@ -2157,12 +2221,12 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeMultiTransformation2D (in GEOM_Object theBlock,
-                                          in long        theDirFace1U,
-                                          in long        theDirFace2U,
-                                          in long        theNbTimesU,
-                                          in long        theDirFace1V,
-                                          in long        theDirFace2V,
-                                          in long        theNbTimesV);
+                                           in long        theDirFace1U,
+                                           in long        theDirFace2U,
+                                           in long        theNbTimesU,
+                                           in long        theDirFace1V,
+                                           in long        theDirFace2V,
+                                           in long        theNbTimesV);
 
     /*!
      *  Special operation - propagation
@@ -2193,8 +2257,8 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeBoolean (in GEOM_Object theShape1,
-                            in GEOM_Object theShape2,
-                            in long theOperation);
+                             in GEOM_Object theShape2,
+                             in long theOperation);
 
     /*!
      *  Perform partition operation.
@@ -2222,13 +2286,13 @@ module GEOM
      *  \return New GEOM_Object, containing the result shapes.
      */
     GEOM_Object MakePartition (in ListOfGO   theShapes,
-                              in ListOfGO   theTools,
-                              in ListOfGO   theKeepInside,
-                              in ListOfGO   theRemoveInside,
-                              in short      theLimit,
-                              in boolean    theRemoveWebs,
-                              in ListOfLong theMaterials,
-                              in short      theKeepNonlimitShapes);
+                               in ListOfGO   theTools,
+                               in ListOfGO   theKeepInside,
+                               in ListOfGO   theRemoveInside,
+                               in short      theLimit,
+                               in boolean    theRemoveWebs,
+                               in ListOfLong theMaterials,
+                               in short      theKeepNonlimitShapes);
 
     /*!
      *  Perform partition operation.
@@ -2244,13 +2308,13 @@ module GEOM
      *  \return New GEOM_Object, containing the result shapes.
      */
     GEOM_Object MakePartitionNonSelfIntersectedShape (in ListOfGO   theShapes,
-                                                     in ListOfGO   theTools,
-                                                     in ListOfGO   theKeepInside,
-                                                     in ListOfGO   theRemoveInside,
-                                                     in short      theLimit,
-                                                     in boolean    theRemoveWebs,
-                                                     in ListOfLong theMaterials,
-                                                     in short      theKeepNonlimitShapes);
+                                                      in ListOfGO   theTools,
+                                                      in ListOfGO   theKeepInside,
+                                                      in ListOfGO   theRemoveInside,
+                                                      in short      theLimit,
+                                                      in boolean    theRemoveWebs,
+                                                      in ListOfLong theMaterials,
+                                                      in short      theKeepNonlimitShapes);
 
     /*!
      *  Perform partition of the Shape with the Plane
@@ -2259,7 +2323,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeHalfPartition (in GEOM_Object theShape,
-                                  in GEOM_Object thePlane);
+                                   in GEOM_Object thePlane);
   };
 
   /*!
@@ -2276,16 +2340,16 @@ module GEOM
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCirclePntVecR (in GEOM_Object thePnt,
-                                  in GEOM_Object theVec,
-                                  in double theR);
+                                   in GEOM_Object theVec,
+                                   in double theR);
     /*!
      *  Create a circle, passing through three given points
      *  \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
-                                   in GEOM_Object thePnt2,
-                                   in GEOM_Object thePnt3);
+                                    in GEOM_Object thePnt2,
+                                    in GEOM_Object thePnt3);
     /*!
      *  Create a circle with given center, with a radius equals the distance from center to Point1
      *  and on a plane defined by all of three points.
@@ -2293,8 +2357,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created circle.
      */
     GEOM_Object MakeCircleCenter2Pnt (in GEOM_Object thePnt1,
-                                     in GEOM_Object thePnt2,
-                                     in GEOM_Object thePnt3);
+                                      in GEOM_Object thePnt2,
+                                      in GEOM_Object thePnt3);
     /*!
      *  Create an ellipse with given center, normal vector and radiuses.
      *  \param thePnt Ellipse center.
@@ -2304,9 +2368,9 @@ module GEOM
      *  \return New GEOM_Object, containing the created ellipse.
      */
     GEOM_Object MakeEllipse (in GEOM_Object thePnt,
-                            in GEOM_Object theVec,
-                            in double theRMajor,
-                            in double theRMinor);
+                             in GEOM_Object theVec,
+                             in double theRMajor,
+                             in double theRMinor);
 
     /*!
      *  Create an ellipse with given center, normal vector, main axis vector and radiuses.
@@ -2318,10 +2382,10 @@ module GEOM
      *  \return New GEOM_Object, containing the created ellipse.
      */
     GEOM_Object MakeEllipseVec (in GEOM_Object thePnt,
-                               in GEOM_Object theVec,
-                               in double theRMajor,
-                               in double theRMinor,
-                               in GEOM_Object theVecMaj);
+                                in GEOM_Object theVec,
+                                in double theRMajor,
+                                in double theRMinor,
+                                in GEOM_Object theVecMaj);
 
     /*!
      *  Create an arc of circle, passing through three given points.
@@ -2331,8 +2395,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created arc.
      */
     GEOM_Object MakeArc (in GEOM_Object thePnt1,
-                        in GEOM_Object thePnt2,
-                        in GEOM_Object thePnt3);
+                         in GEOM_Object thePnt2,
+                         in GEOM_Object thePnt3);
 
     /*!
      *  Create an arc of circle of center C from one point to another
@@ -2355,8 +2419,8 @@ module GEOM
      *  \return New GEOM_Object, containing the created arc.
      */
     GEOM_Object MakeArcOfEllipse (in GEOM_Object theCenter,
-                                 in GEOM_Object thePnt1,
-                                 in GEOM_Object thePnt2);
+                                  in GEOM_Object thePnt1,
+                                  in GEOM_Object thePnt2);
 
 
     /*!
@@ -2452,7 +2516,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletAll (in GEOM_Object theShape,
-                              in double      theR);
+                               in double      theR);
 
     /*!
      *  Perform a fillet on the specified edges of the given shape
@@ -2464,12 +2528,12 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletEdges (in GEOM_Object theShape,
-                                in double      theR,
-                                in ListOfLong  theEdges);
+                                 in double      theR,
+                                 in ListOfLong  theEdges);
     GEOM_Object MakeFilletEdgesR1R2 (in GEOM_Object theShape,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in ListOfLong  theEdges);
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in ListOfLong  theEdges);
 
     /*!
      *  Perform a fillet on all edges of the specified faces of the given shape.
@@ -2481,13 +2545,13 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFilletFaces (in GEOM_Object theShape,
-                                in double      theR,
-                                in ListOfLong  theFaces);
+                                 in double      theR,
+                                 in ListOfLong  theFaces);
 
     GEOM_Object MakeFilletFacesR1R2 (in GEOM_Object theShape,
-                                    in double      theR1,
-                                    in double      theR2,
-                                    in ListOfLong  theFaces);
+                                     in double      theR1,
+                                     in double      theR2,
+                                     in ListOfLong  theFaces);
 
     /*!
      *  Perform a fillet on face of the specified vertexes of the given shape.
@@ -2499,8 +2563,8 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFillet2D (in GEOM_Object theShape,
-                             in double      theR,
-                             in ListOfLong  theVertexes);
+                              in double      theR,
+                              in ListOfLong  theVertexes);
 
     /*!
      *  Perform a fillet on edges of the specified vertexes of the given wire.
@@ -2514,8 +2578,8 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeFillet1D (in GEOM_Object theShape,
-                             in double      theR,
-                             in ListOfLong  theVertexes);
+                              in double      theR,
+                              in ListOfLong  theVertexes);
 
     /*!
      *  Perform a symmetric chamfer on all edges of the given shape.
@@ -2524,7 +2588,7 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferAll (in GEOM_Object theShape,
-                               in double      theD);
+                                in double      theD);
 
     /*!
      *  Perform a chamfer on edges, common to the specified faces.
@@ -2538,15 +2602,15 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferEdge (in GEOM_Object theShape,
-                                in double theD1, in double theD2,
-                                in long theFace1, in long theFace2);
+                                 in double theD1, in double theD2,
+                                 in long theFace1, in long theFace2);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
-                                  in double theD, in double theAngle,
-                                  in long theFace1, in long theFace2);
+                                   in double theD, in double theAngle,
+                                   in long theFace1, in long theFace2);
 
     /*!
      *  Perform a chamfer on all edges of the specified faces.
@@ -2562,15 +2626,15 @@ module GEOM
      *  \return New GEOM_Object, containing the result shape.
      */
     GEOM_Object MakeChamferFaces (in GEOM_Object theShape,
-                                 in double theD1, in double theD2,
-                                 in ListOfLong theFaces);
+                                  in double theD1, in double theD2,
+                                  in ListOfLong theFaces);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferFacesAD (in GEOM_Object theShape,
-                                   in double theD, in double theAngle,
-                                   in ListOfLong theFaces);
+                                    in double theD, in double theAngle,
+                                    in ListOfLong theFaces);
 
    /*!
     *  Perform a chamfer on edges,
@@ -2581,15 +2645,15 @@ module GEOM
     *  \return New GEOM_Object, containing the result shape.
     */
     GEOM_Object MakeChamferEdges (in GEOM_Object theShape,
-                                 in double theD1, in double theD2,
-                                 in ListOfLong theEdges);
+                                  in double theD1, in double theD2,
+                                  in ListOfLong theEdges);
     /*!
      *  The Same but with params theD = Chamfer Lenght
      *  and theAngle = Chamfer Angle (Angle in radians)
      */
     GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
-                                   in double theD, in double theAngle,
-                                   in ListOfLong theEdges);
+                                    in double theD, in double theAngle,
+                                    in ListOfLong theEdges);
 
     /*!
      *  Perform an Archimde operation on the given shape with given parameters.
@@ -2602,9 +2666,9 @@ module GEOM
      *          by a plane, corresponding to water level.
      */
     GEOM_Object MakeArchimede (in GEOM_Object theShape,
-                              in double theWeight,
-                              in double theWaterDensity,
-                              in double theMeshDeflection);
+                               in double theWeight,
+                               in double theWaterDensity,
+                               in double theMeshDeflection);
 
     /*!
      *  Duplicates <VAR>GEOM_IShapesOperations.GetSubShapeIndex()</VAR>.
@@ -2630,9 +2694,9 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object ProcessShape (in GEOM_Object theShapes,
-                             in string_array theOperators,
-                             in string_array theParameters,
-                             in string_array theValues);
+                              in string_array theOperators,
+                              in string_array theParameters,
+                              in string_array theValues);
 
     /*!
      *  Get default sequence of operators, their parameters and parameters' values
@@ -2644,8 +2708,8 @@ module GEOM
      *                           as parameters are listed in \a theParameters list.
      */
     void GetShapeProcessParameters (out string_array theOperators,
-                                   out string_array theParameters,
-                                   out string_array theValues);
+                                    out string_array theParameters,
+                                    out string_array theValues);
     /*!
      *  Get parameters and parameters' values for the given Shape Process operation.
      *  In the current implementation the defaults are
@@ -2656,8 +2720,8 @@ module GEOM
      *                           as parameters are listed in \a theParameters list.
      */
     void GetOperatorParameters (in string theOperator,
-                               out string_array theParameters,
-                               out string_array theValues);
+                                out string_array theParameters,
+                                out string_array theValues);
 
     /*!
      *  Remove faces from the given object (shape).
@@ -2678,7 +2742,7 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object CloseContour (in GEOM_Object theObject, in short_array theWires,
-                             in boolean isCommonVertex);
+                              in boolean isCommonVertex);
 
     /*!
      *  Remove internal wires and edges from the given object (face).
@@ -2718,7 +2782,7 @@ module GEOM
      *  \return New GEOM_Object, containing processed shape.
      */
     GEOM_Object DivideEdge (in GEOM_Object theObject, in short theEdgeIndex,
-                           in double theValue, in boolean isByParameter);
+                            in double theValue, in boolean isByParameter);
 
     /*!
      *  Get a list of wires (wrapped in GEOM_Object-s),
@@ -2729,8 +2793,8 @@ module GEOM
      *  \return FALSE, if an error(s) occured during the method execution.
      */
     boolean GetFreeBoundary (in GEOM_Object theObject,
-                            out ListOfGO theClosedWires,
-                            out ListOfGO theOpenWires);
+                             out ListOfGO theClosedWires,
+                             out ListOfGO theOpenWires);
 
     /*!
      *  Change orientation of the given object.
@@ -2740,6 +2804,14 @@ module GEOM
     GEOM_Object ChangeOrientation (in GEOM_Object theObject);
     GEOM_Object ChangeOrientationCopy (in GEOM_Object theObject);
 
+    /*!
+     *  Try to limit tolerance of the given object by value \a theTolerance.
+     *  \param theObject Shape to be processed.
+     *  \param theTolerance Required tolerance value.
+     *  \return New GEOM_Object, containing processed shape.
+     */
+    GEOM_Object LimitTolerance (in GEOM_Object theObject, in double theTolerance);
+
   };
 
   /*!
@@ -2781,7 +2853,7 @@ module GEOM
      *  \return Returns available formats and patterns through the arguments.
      */
     void ImportTranslators (out string_array theFormats,
-                           out string_array thePatterns);
+                            out string_array thePatterns);
 
     /*!
      *  Get the supported export formats and corresponding patterns for File dialog.
@@ -2790,7 +2862,7 @@ module GEOM
      *  \return Returns available formats and patterns through the arguments.
      */
     void ExportTranslators (out string_array theFormats,
-                           out string_array thePatterns);
+                            out string_array thePatterns);
 
     /*!
      * Load texture from file
@@ -2891,8 +2963,8 @@ module GEOM
      */
     //short KindOfShape (in GEOM_Object   theShape,
     GEOM_IKindOfShape::shape_kind KindOfShape (in  GEOM_Object  theShape,
-                                              out ListOfLong   theIntegers,
-                                              out ListOfDouble theDoubles);
+                                               out ListOfLong   theIntegers,
+                                               out ListOfDouble theDoubles);
 
     /*!
      *  Get position (LCS) of theShape.
@@ -2906,9 +2978,9 @@ module GEOM
      *  \return Returns position of the shape through the last nine arguments.
      */
     void GetPosition (in GEOM_Object theShape,
-                     out double Ox, out double Oy, out double Oz,
-                     out double Zx, out double Zy, out double Zz,
-                     out double Xx, out double Xy, out double Xz);
+                      out double Ox, out double Oy, out double Oz,
+                      out double Zx, out double Zy, out double Zz,
+                      out double Xx, out double Xy, out double Xz);
 
     /*!
      *  Get summarized length of all wires,
@@ -2920,9 +2992,9 @@ module GEOM
      *  \return Returns shape properties through the last three arguments.
      */
     void GetBasicProperties (in GEOM_Object theShape,
-                            out double theLength,
-                            out double theSurfArea,
-                            out double theVolume);
+                             out double theLength,
+                             out double theSurfArea,
+                             out double theVolume);
 
     /*!
      *  Get a point, situated at the centre of mass of theShape.
@@ -2930,8 +3002,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created point.
      */
     GEOM_Object GetCentreOfMass (in GEOM_Object theShape);
-    
-    
+
     /*
      *  Get the vertex by index for 1D objects depends the edge/wire orientation
      *  \param theShape Shape (wire or edge) to find the vertex on it
@@ -2949,7 +3020,7 @@ module GEOM
      *  \return New GEOM_Object, containing the created normal vector.
      */
     GEOM_Object GetNormal (in GEOM_Object theFace,
-                          in GEOM_Object theOptionalPoint);
+                           in GEOM_Object theOptionalPoint);
 
     /*!
      *  Get inertia matrix and moments of inertia of theShape.
@@ -2959,10 +3030,10 @@ module GEOM
      *  \return Returns inertia through the last twelve arguments.
      */
     void GetInertia (in GEOM_Object theShape,
-                    out double I11, out double I12, out double I13,
-                    out double I21, out double I22, out double I23,
-                    out double I31, out double I32, out double I33,
-                    out double Ix , out double Iy , out double Iz);
+                     out double I11, out double I12, out double I13,
+                     out double I21, out double I22, out double I23,
+                     out double I31, out double I32, out double I33,
+                     out double Ix , out double Iy , out double Iz);
 
     /*!
      *  Get parameters of bounding box of the given shape
@@ -2973,9 +3044,9 @@ module GEOM
      *  \return Returns parameters of bounding box through the last six arguments.
      */
     void GetBoundingBox (in GEOM_Object theShape,
-                        out double Xmin, out double Xmax,
-                        out double Ymin, out double Ymax,
-                        out double Zmin, out double Zmax);
+                         out double Xmin, out double Xmax,
+                         out double Ymin, out double Ymax,
+                         out double Zmin, out double Zmax);
 
     /*!
      *  Get min and max tolerances of sub-shapes of theShape
@@ -2986,9 +3057,9 @@ module GEOM
      *  \return Returns shape tolerances through the last six arguments.
      */
     void GetTolerance (in GEOM_Object theShape,
-                      out double FaceMin, out double FaceMax,
-                      out double EdgeMin, out double EdgeMax,
-                      out double VertMin, out double VertMax);
+                       out double FaceMin, out double FaceMax,
+                       out double EdgeMin, out double EdgeMax,
+                       out double VertMin, out double VertMax);
 
     /*!
      *  Check a topology of the given shape.
@@ -2997,7 +3068,7 @@ module GEOM
      *  \return TRUE, if the shape "seems to be valid" from the topological point of view.
      */
     boolean CheckShape (in GEOM_Object theShape,
-                       out string     theDescription);
+                        out string     theDescription);
 
     /*!
      *  Check a topology and a geometry of the given shape.
@@ -3006,7 +3077,7 @@ module GEOM
      *  \return TRUE, if the shape "seems to be valid".
      */
     boolean CheckShapeWithGeometry (in GEOM_Object theShape,
-                                   out string     theDescription);
+                                    out string     theDescription);
 
     /*!
      *  Obtain description of the given shape
@@ -3023,8 +3094,8 @@ module GEOM
      *  \return Value of the minimal distance between the given shapes.
      */
     double GetMinDistance (in GEOM_Object theShape1, in GEOM_Object theShape2,
-                          out double X1, out double Y1, out double Z1,
-                          out double X2, out double Y2, out double Z2);
+                           out double X1, out double Y1, out double Z1,
+                           out double X2, out double Y2, out double Z2);
 
     /*!
      *  Get angle between the given lines or linear edges.
@@ -3062,7 +3133,7 @@ module GEOM
      *  \return Value of curvature.
      */
     double MaxSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
-                                      in double theVParam);
+                                       in double theVParam);
 
     /*!
      *  Get max radius of curvature of surface in the given point
@@ -3080,7 +3151,7 @@ module GEOM
      *  \return Value of curvature.
      */
     double MinSurfaceCurvatureByParam (in GEOM_Object theShape, in double theUParam,
-                                      in double theVParam);
+                                       in double theVParam);
 
     /*!
      *  Get min radius of curvature of surface in the given point
@@ -3189,9 +3260,9 @@ module GEOM
      *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
-    ListOfGO MakePipeTShape (in double theR1, in double theW1, in double theL1, 
-                               in double theR2, in double theW2, in double theL2,
-                               in boolean theHexMesh);
+    ListOfGO MakePipeTShape (in double theR1, in double theW1, in double theL1,
+                                in double theR2, in double theW2, in double theL2,
+                                in boolean theHexMesh);
     /*!
      *  Create a T-shape object with specified caracteristics for the main and
      *  the incident pipes (radius, width, half-length).
@@ -3209,10 +3280,10 @@ module GEOM
      *  \param theP3 Junction point of incident pipe
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
-    ListOfGO MakePipeTShapeWithPosition (in double theR1, in double theW1, in double theL1, 
-                                           in double theR2, in double theW2, in double theL2,
-                                           in boolean theHexMesh,
-                                           in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    ListOfGO MakePipeTShapeWithPosition (in double theR1, in double theW1, in double theL1,
+                                            in double theR2, in double theW2, in double theL2,
+                                            in boolean theHexMesh,
+                                            in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
     /*!
      *  Create a T-shape object with specified caracteristics for the main and
      *  the incident pipes (radius, width, half-length). A chamfer is created
@@ -3230,8 +3301,8 @@ module GEOM
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
     ListOfGO MakePipeTShapeChamfer (in double theR1, in double theW1, in double theL1,
-                                   in double theR2, in double theW2, in double theL2,
-                                   in double theH, in double theW, in boolean theHexMesh);
+                                    in double theR2, in double theW2, in double theL2,
+                                    in double theH, in double theW, in boolean theHexMesh);
     /*!
      *  Create a T-shape object with specified caracteristics for the main and
      *  the incident pipes (radius, width, half-length). A chamfer is created
@@ -3252,10 +3323,10 @@ module GEOM
      *  \param theP3 Junction point of incident pipe
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
-    ListOfGO MakePipeTShapeChamferWithPosition (in double theR1, in double theW1, in double theL1, 
-                                                  in double theR2, in double theW2, in double theL2, 
-                                                  in double theH, in double theW, in boolean theHexMesh,
-                                                  in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    ListOfGO MakePipeTShapeChamferWithPosition (in double theR1, in double theW1, in double theL1,
+                                                   in double theR2, in double theW2, in double theL2,
+                                                   in double theH, in double theW, in boolean theHexMesh,
+                                                   in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
     /*!
      *  Create a T-shape object with specified caracteristics for the main and
      *  the incident pipes (radius, width, half-length). A fillet is created
@@ -3271,9 +3342,9 @@ module GEOM
      *  \param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=true)
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
-    ListOfGO MakePipeTShapeFillet (in double theR1, in double theW1, in double theL1, 
-                                     in double theR2, in double theW2, in double theL2, 
-                                     in double theRF, in boolean theHexMesh);
+    ListOfGO MakePipeTShapeFillet (in double theR1, in double theW1, in double theL1,
+                                      in double theR2, in double theW2, in double theL2,
+                                      in double theRF, in boolean theHexMesh);
     /*!
      *  Create a T-shape object with specified caracteristics for the main and
      *  the incident pipes (radius, width, half-length). A fillet is created
@@ -3293,13 +3364,13 @@ module GEOM
      *  \param theP3 Junction point of incident pipe
      *  \return List of GEOM_Objects, containing the created shape and propagation groups.
      */
-    ListOfGO MakePipeTShapeFilletWithPosition (in double theR1, in double theW1, in double theL1, 
-                                                 in double theR2, in double theW2, in double theL2, 
-                                                 in double theRF, in boolean theHexMesh,
-                                                 in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
+    ListOfGO MakePipeTShapeFilletWithPosition (in double theR1, in double theW1, in double theL1,
+                                                  in double theR2, in double theW2, in double theL2,
+                                                  in double theRF, in boolean theHexMesh,
+                                                  in GEOM_Object theP1, in GEOM_Object theP2, in GEOM_Object theP3);
     /*@@ insert new functions before this line @@ do not remove this line @@*/
   };
-    
+
   /*!
    *  GEOM_Gen: Interface to access other GEOM interfaces.
    *  Also contains some methods to access and manage GEOM objects.
@@ -3321,9 +3392,9 @@ module GEOM
      * Returns a SObject where theObject is placed
      */
     SALOMEDS::SObject AddInStudy (in SALOMEDS::Study theStudy,
-                                 in GEOM_Object theObject,
-                                 in string theName,
-                                 in GEOM_Object theFather);
+                                  in GEOM_Object theObject,
+                                  in string theName,
+                                  in GEOM_Object theFather);
 
     /*!
      *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
@@ -3349,12 +3420,42 @@ module GEOM
      *  \return list of published sub-shapes
      */
     ListOfGO RestoreSubShapesO (in SALOMEDS::Study   theStudy,
-                               in GEOM_Object       theObject,
-                               in ListOfGO          theArgs,
-                               in find_shape_method theFindMethod,
-                               in boolean           theInheritFirstArg,
+                                 in GEOM_Object       theObject,
+                                in ListOfGO          theArgs,
+                                in find_shape_method theFindMethod,
+                                in boolean           theInheritFirstArg,
                                 in boolean           theAddPrefix);
 
+    /*!
+     *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
+     *  To be used from python scripts out of geompy.addToStudy (non-default usage)
+     *  \param theStudy  the study, in which theObject is published already,
+     *                   and in which the arguments will be published
+     *  \param theObject published GEOM object, arguments of which will be published
+     *  \param theArgs   list of GEOM_Object, operation arguments to be published.
+     *                   If this list is empty, all operation arguments will be published
+     *  \param theFindMethod method to search subshapes, corresponding to arguments and
+     *                       their subshapes. Value from enumeration GEOM::find_shape_method.
+     *  \param theInheritFirstArg set properties of the first argument for \a theObject.
+     *                            Do not publish subshapes in place of arguments, but only
+     *                            in place of subshapes of the first argument,
+     *                            because the whole shape corresponds to the first argument.
+     *                            Mainly to be used after transformations, but it also can be
+     *                            usefull after partition with one object shape, and some other
+     *                            operations, where only the first argument has to be considered.
+     *                            If theObject has only one argument shape, this flag is automatically
+     *                            considered as True, not regarding really passed value.
+     *  \param theAddPrefix add prefix "from_" to names of restored sub-shapes,
+     *                      and prefix "from_subshapes_of_" to names of partially restored subshapes.
+     *  \return list of published sub-shapes
+     */
+    ListOfGO RestoreGivenSubShapesO (in SALOMEDS::Study   theStudy,
+                                     in GEOM_Object       theObject,
+                                     in ListOfGO          theArgs,
+                                     in find_shape_method theFindMethod,
+                                     in boolean           theInheritFirstArg,
+                                     in boolean           theAddPrefix);
+
     /*!
      *  Publish sub-shapes, standing for arguments and sub-shapes of arguments
      *  To be used from GUI and from geompy.addToStudy.
@@ -3362,10 +3463,10 @@ module GEOM
      *  \param theSObject study object, referencing GEOM object, arguments of which will be published
      */
     ListOfGO RestoreSubShapesSO (in SALOMEDS::Study   theStudy,
-                                in SALOMEDS::SObject theSObject,
-                                in ListOfGO          theArgs,
-                                in find_shape_method theFindMethod,
-                                in boolean           theInheritFirstArg,
+                                 in SALOMEDS::SObject theSObject,
+                                 in ListOfGO          theArgs,
+                                 in find_shape_method theFindMethod,
+                                 in boolean           theInheritFirstArg,
                                  in boolean           theAddPrefix);
 
     /*!
@@ -3446,8 +3547,8 @@ module GEOM
      *  \param theObject   The object which named subshapes are published
      */
     ListOfGO PublishNamedShapesInStudy(in SALOMEDS::Study theStudy,
-                                            //in SObject theSObject,
-                                            in Object theObject);
+                                       //in SObject theSObject,
+                                       in Object theObject);
   };
 };
 
index 654d2e1a35f6d1b24714639841a3630a41a7f63d..f338de4578327b6d4e5272bd9ff82ed865ead9a9 100644 (file)
@@ -1,5 +1,5 @@
 Import: BREP|IGES|STEP|ACIS
-Export: BREP|IGES|IGES_5_3|STEP|STL_Bin|STL_ASCII|ACIS
+Export: BREP|IGES|IGES_5_3|STEP|STL_Bin|STL_ASCII|ACIS|VTK
 
 BREP.Import: libBREPImport
 BREP.Export: libBREPExport
@@ -26,3 +26,6 @@ STL_ASCII.Pattern: STL ASCII Files ( *.stl )
 ACIS.Import: libACISImport
 ACIS.Export: libACISExport
 ACIS.Pattern: ACIS Files ( *.sat )
+
+VTK.Export: libVTKExport
+VTK.Pattern: VTK Files ( *.vtk )
index 94b2eb82548beb2316d9f9c267749c1e2a2def39..02d6e15bbf70dbf1009405f5e3696908e9de3705 100644 (file)
@@ -47,6 +47,7 @@ box2points.png                        \
 boxdxyz.png                    \
 build_compound.png             \
 build_edge.png                 \
+build_edge_wire.png                    \
 build_face.png                 \
 build_shell.png                        \
 build_solid.png                        \
@@ -93,6 +94,7 @@ filletface.png                        \
 filling.png                    \
 fuse.png                       \
 geometry.png                   \
+limit_tolerance.png            \
 line.png                       \
 line2points.png                        \
 line2faces.png                 \
@@ -109,6 +111,7 @@ multitranslationdouble.png  \
 multitranslationsimple.png     \
 normale.png                    \
 offset.png                     \
+origin_and_vectors.png         \
 partition.png                  \
 partitionkeep.png              \
 partitionplane.png             \
index 26adbc5ec82fd21644bae68d64b54fb4bd6e156e..e57d0cf32da2b48b080fc88068fbd7c7bf1cf742 100644 (file)
@@ -49,6 +49,8 @@
     <parameter name="isos_color"          value="200, 200, 200" />
     <parameter name="type_of_marker"      value="1"  />
     <parameter name="deflection_coeff"    value="0.001"  />
+    <parameter name="auto_create_base_objects" value="false"  />
+    <parameter name="base_vectors_length" value="1"  />
     <parameter name="marker_scale"        value="1"  />
     <!-- Input field precisions -->
     <parameter name="def_precision"       value="3"  />
diff --git a/resources/build_edge_wire.png b/resources/build_edge_wire.png
new file mode 100644 (file)
index 0000000..3c7b538
Binary files /dev/null and b/resources/build_edge_wire.png differ
diff --git a/resources/limit_tolerance.png b/resources/limit_tolerance.png
new file mode 100644 (file)
index 0000000..35f2080
Binary files /dev/null and b/resources/limit_tolerance.png differ
diff --git a/resources/origin_and_vectors.png b/resources/origin_and_vectors.png
new file mode 100755 (executable)
index 0000000..0c5fa9f
Binary files /dev/null and b/resources/origin_and_vectors.png differ
index b43126f0826c431447c7790f76e9f1ce59fd2160..d8563cff8d5b7c0de018eada2163fdd48ab19645 100644 (file)
@@ -427,7 +427,7 @@ void AdvancedGUI_PipeTShapeDlg::SelectionIntoArgument() {
                                        //Find SubShape Object in Father
                                        GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-                                       if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+                                       if (aFindedObject->_is_nil()) { // Object not found in study
                                                GEOM::GEOM_IShapesOperations_var aShapesOp =
                                                                getGeomEngine()->GetIShapesOperations(getStudyId());
                                                aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index a4a6dfc81c8f8fecc86ac43717e4f708c373b4db..ad6ebb30fbb567e286d3a35b2e00f073a2b2b992 100644 (file)
@@ -288,7 +288,7 @@ void BasicGUI_ArcDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-        if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+               if ( aFindedObject->_is_nil() ) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
         }
index 119176c59b3c980e79a7e4d1a9ba15ccccc79f40..5c9ab11c0e769f52203dc2bda3caf4ae4fff8321 100644 (file)
@@ -70,8 +70,8 @@ BasicGUI_CircleDlg::BasicGUI_CircleDlg( GeometryGUI* theGeometryGUI, QWidget* pa
   GroupPntVecR = new DlgRef_2Sel1Spin( centralWidget() );
   GroupPntVecR->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
   
-  GroupPntVecR->TextLabel1->setText( tr( "GEOM_CENTER_POINT" ) + " (Origin by default)" );
-  GroupPntVecR->TextLabel2->setText( tr( "GEOM_VECTOR" ) + " (Z axis by default)" );
+  GroupPntVecR->TextLabel1->setText( tr( "GEOM_CENTER_POINT" ) + " " + tr( "GEOM_CENTER_DEFAULT" )  );
+  GroupPntVecR->TextLabel2->setText( tr( "GEOM_VECTOR" ) + " " + tr( "GEOM_AXIS_DEFAULT" ) );
   GroupPntVecR->TextLabel3->setText( tr( "GEOM_RADIUS" ) );
   GroupPntVecR->PushButton1->setIcon( image1 );
   GroupPntVecR->PushButton2->setIcon( image1 );
@@ -358,7 +358,7 @@ void BasicGUI_CircleDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
 
-        if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+               if ( aFindedObject->_is_nil() ) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
           aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
         }
index 4354cf072987877bc1ec82e5a2d507dd0a9b6263..40af9d35e2d980f24215d446bf69e745fa721c14 100644 (file)
@@ -261,7 +261,7 @@ void BasicGUI_EllipseDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+               if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
         } 
index 9a45c86d434ee01c631b66864a6a6490f2922942..4e2e4d77e16bfb830eeee79c94cf5b6691d674c0 100644 (file)
@@ -275,7 +275,7 @@ void BasicGUI_LineDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
 
-        if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+        if ( aFindedObject->_is_nil() ) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
           aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
         }
index 70cdd2c2a28a6fcd27ffb47ea0d0c30946544d29..6a2007aefbcbf3989e0bbe959a02f6c9c7469371 100644 (file)
@@ -441,7 +441,7 @@ void BasicGUI_MarkerDlg::onSelectionDone()
             
             //Find SubShape Object in Father
             GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObj, aName );
-            if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+            if ( aFindedObject->_is_nil() ) { // Object not found in study
               GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
               aSelectedObj = aShapesOp->GetSubShape( aSelectedObj, anIndex );
             } 
index e6b6f6610a5e4ca9551a40ef2132b2f67ddbb8ef..b7462a70f191540b4a080be10a1d3a66d717f974 100644 (file)
@@ -470,7 +470,7 @@ void BasicGUI_PlaneDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
 
-        if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+        if ( aFindedObject->_is_nil() ) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
           aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
         } 
index dc8ff2693b106adeb54f76754e5fa6cfd3843fa9..90af070cd3c473f9527c92482eb8cd62245496bd 100644 (file)
@@ -510,8 +510,7 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
 
           //Find SubShape Object in Father
           GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
-
-          if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+          if ( aFindedObject->_is_nil() ) { // Object not found in study
             GEOM::GEOM_IShapesOperations_var aShapesOp =
               getGeomEngine()->GetIShapesOperations(getStudyId());
             aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
@@ -907,9 +906,11 @@ bool BasicGUI_PointDlg::execute( ObjectList& objects )
     if ( GEOMBase::GetShape( anObj, aShape ) && !aShape.IsNull() &&
          aShape.ShapeType() == TopAbs_VERTEX ) {
       gp_Pnt aPnt = BRep_Tool::Pnt( TopoDS::Vertex( aShape ) );
-      myX->setText( QString( "%1" ).arg( aPnt.X() ) );
-      myY->setText( QString( "%1" ).arg( aPnt.Y() ) );
-      myZ->setText( QString( "%1" ).arg( aPnt.Z() ) );
+      SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+      int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+      myX->setText( DlgRef::PrintDoubleValue( aPnt.X(), aPrecision ) );
+      myY->setText( DlgRef::PrintDoubleValue( aPnt.Y(), aPrecision ) );
+      myZ->setText( DlgRef::PrintDoubleValue( aPnt.Z(), aPrecision ) );
     }
     else {
       myX->setText( "" );
index abb2eab369994f7c711d6e0aeb7f196352a37416..0e6973fc41663597a6a0e7c2c634ced4410d5566 100644 (file)
@@ -83,7 +83,7 @@ private:
   GEOM::GEOM_Object_var              myLine2;
 
   bool                               myBusy;
-  
+
   DlgRef_3Spin*                      GroupXYZ;
   DlgRef_1Sel3Spin*                  GroupRefPoint;
   DlgRef_1Sel1Spin*                  GroupOnCurve;
index 97e19c98d38185d3605669fb57a2c50d4293c205..5d42f980fe2070c1ec4927619b04340a1dc5e202 100644 (file)
@@ -302,7 +302,7 @@ void BasicGUI_VectorDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
         
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
         }
index 280d911c8097d5bc839678562f775bb57ea11146..5c54588961fe98bc8dcf5f7f8ff75a1bed4c1dec 100644 (file)
@@ -269,7 +269,7 @@ void BlocksGUI_BlockDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
       }
index adbc2f524636c344aee35c41f8fc3ede117ec2f8..f458dc051a8ad09dd259a5cd932b846fee0bfb1c 100644 (file)
@@ -261,7 +261,7 @@ void BlocksGUI_QuadFaceDlg::SelectionIntoArgument()
           //Find SubShape Object in Father
           GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(anObj, aName);
 
-          if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+          if (aFindedObject->_is_nil()) { // Object not found in study
             GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
             anObj = aShapesOp->GetSubShape(anObj, anIndex);
           }
index e71337972019cd73fdb833552ce22e67b8a3d940..24f18c62218978429c9f367a6f76a6ed1570b898 100644 (file)
@@ -113,6 +113,7 @@ void BuildGUI_CompoundDlg::Init()
   globalSelection( GEOM_ALLSHAPES );
 
   initName( tr( "GEOM_COMPOUND" ) );
+  SelectionIntoArgument();
 }
 
 
index 5096b2a7ac70ffb6ab836cb0cb98c69099f78aa1..33e9f1e504c46eba3cf54c86002850992ea14149 100644 (file)
@@ -36,6 +36,7 @@
 #include <LightApp_SelectionMgr.h>
 
 #include <GEOMImpl_Types.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
 
 //=================================================================================
 // class    : BuildGUI_EdgeDlg()
 BuildGUI_EdgeDlg::BuildGUI_EdgeDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
   : GEOMBase_Skeleton(theGeometryGUI, parent)
 {
-  QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BUILD_EDGE")));
-  QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
+  QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
+  QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BUILD_EDGE")));
+  QPixmap image2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BUILD_EDGE_WIRE")));
 
   setWindowTitle(tr("GEOM_EDGE_TITLE"));
 
   /***************************************************************/
   mainFrame()->GroupConstructors->setTitle(tr("GEOM_EDGE"));
-  mainFrame()->RadioButton1->setIcon(image0);
-  mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
-  mainFrame()->RadioButton2->close();
-  mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->RadioButton1->setIcon(image1);
+  mainFrame()->RadioButton2->setIcon(image2);
+  mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
   mainFrame()->RadioButton3->close();
 
-  GroupPoints = new DlgRef_2Sel(centralWidget());
+  // two points
 
+  GroupPoints = new DlgRef_2Sel(centralWidget());
   GroupPoints->GroupBox1->setTitle(tr("GEOM_POINTS"));
   GroupPoints->TextLabel1->setText(tr("GEOM_POINT_I").arg(1));
   GroupPoints->TextLabel2->setText(tr("GEOM_POINT_I").arg(2));
-  GroupPoints->PushButton1->setIcon(image1);
-  GroupPoints->PushButton2->setIcon(image1);
-
+  GroupPoints->PushButton1->setIcon(image0);
+  GroupPoints->PushButton2->setIcon(image0);
   GroupPoints->LineEdit1->setReadOnly(true);
   GroupPoints->LineEdit2->setReadOnly(true);
 
+  // wire
+
+  GroupWire = new DlgRef_1Sel2Spin(centralWidget());
+  GroupWire->GroupBox1->setTitle(tr("GEOM_WIRE"));
+  GroupWire->TextLabel1->setText(tr("GEOM_WIRE"));
+  GroupWire->PushButton1->setIcon(image0);
+  GroupWire->LineEdit1->setReadOnly(true);
+  GroupWire->TextLabel2->setText( tr( "GEOM_LINEAR_TOLERANCE" ) );
+  GroupWire->TextLabel3->setText( tr( "GEOM_ANGULAR_TOLERANCE" ) );
+  double SpecificStep = 0.0001;
+  double prec1 = Precision::Confusion();
+  double prec2 = Precision::Angular();
+  initSpinBox(GroupWire->SpinBox_DX, prec1, MAX_NUMBER, SpecificStep, "len_tol_precision" );
+  initSpinBox(GroupWire->SpinBox_DY, prec2, MAX_NUMBER, SpecificStep, "ang_tol_precision" );
+  GroupWire->SpinBox_DX->setValue(prec1);
+  GroupWire->SpinBox_DY->setValue(prec2);
+
+  // layout
+
   QVBoxLayout* layout = new QVBoxLayout(centralWidget());
   layout->setMargin(0); layout->setSpacing(6);
   layout->addWidget(GroupPoints);
+  layout->addWidget(GroupWire);
   /***************************************************************/
 
   setHelpFileName("create_edge_page.html");
 
-  // Initialisation
+  // initialisation
   Init();
 }
 
@@ -98,28 +119,35 @@ BuildGUI_EdgeDlg::~BuildGUI_EdgeDlg()
 void BuildGUI_EdgeDlg::Init()
 {
   // init variables
-  GroupPoints->LineEdit1->setReadOnly(true);
-  GroupPoints->LineEdit2->setReadOnly(true);
-
-  GroupPoints->LineEdit1->setText("");
-  GroupPoints->LineEdit2->setText("");
-  myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
-  myOkPoint1 = myOkPoint2 = false;
+  myPoint1 = myPoint2 = myWire = GEOM::GEOM_Object::_nil();
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+  GroupPoints->PushButton1->setDown(true);
+  globalSelection(); // close local contexts, if any
+  localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
 
   // signals and slots connections
+  connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
+  connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ),        this, SLOT( ClickOnCancel() ) );
+
+  connect( this,      SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) );
+
   connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
 
   connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupWire->PushButton1,   SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
 
   connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(GroupWire->LineEdit1,   SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
+           this, SLOT( SelectionIntoArgument() ) );
 
   initName(tr("GEOM_EDGE"));
 
-  GroupPoints->PushButton1->click();
-  SelectionIntoArgument();
+  ConstructorsClicked( 0 );
 }
 
 //=================================================================================
@@ -142,11 +170,60 @@ bool BuildGUI_EdgeDlg::ClickOnApply()
     return false;
 
   initName();
-  // activate selection and connect selection manager
-  GroupPoints->PushButton1->click();
+
+  myEditCurrentArgument->setText( "" );
+  ConstructorsClicked( getConstructorId() );
+
   return true;
 }
 
+//=================================================================================
+// function : ConstructorsClicked()
+// purpose  : Radio button management
+//=================================================================================
+void BuildGUI_EdgeDlg::ConstructorsClicked( int constructorId )
+{
+  switch ( constructorId ) {
+  case 0:
+    {
+      globalSelection(); // close local contexts, if any
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
+
+      myEditCurrentArgument = GroupPoints->LineEdit1;
+      GroupPoints->LineEdit1->setText( "" );
+      GroupPoints->LineEdit2->setText( "" );
+      myPoint1 = GEOM::GEOM_Object::_nil();
+      myPoint2 = GEOM::GEOM_Object::_nil();
+      GroupPoints->PushButton1->setDown(true);
+      GroupPoints->PushButton2->setDown(false);
+      GroupPoints->LineEdit1->setEnabled(true);
+      GroupPoints->LineEdit2->setEnabled(false);
+      GroupPoints->show();
+      GroupWire->hide();
+      break;
+    }
+  case 1:
+    {
+      globalSelection(); // close local contexts, if any
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_WIRE );
+
+      myEditCurrentArgument = GroupWire->LineEdit1;
+      GroupWire->LineEdit1->setText("");
+      myWire = GEOM::GEOM_Object::_nil();
+      GroupWire->PushButton1->setDown(true);
+      GroupWire->LineEdit1->setEnabled(true);
+      GroupPoints->hide();
+      GroupWire->show();
+      break;
+    }
+  }
+
+  qApp->processEvents();
+  updateGeometry();
+  resize( minimumSizeHint() );
+  SelectionIntoArgument();
+}
+
 //=================================================================================
 // function : SelectionIntoArgument()
 // purpose  : Called when selection is changed or on dialog initialization or activation
@@ -161,38 +238,67 @@ void BuildGUI_EdgeDlg::SelectionIntoArgument()
   aSelMgr->selectedObjects(aSelList);
 
   if (aSelList.Extent() != 1) {
-    if (myEditCurrentArgument == GroupPoints->LineEdit1)
-      myOkPoint1 = false;
-    else if (myEditCurrentArgument == GroupPoints->LineEdit2)
-      myOkPoint2 = false;
+    if      (myEditCurrentArgument == GroupPoints->LineEdit1) myPoint1 = GEOM::GEOM_Object::_nil();
+    else if (myEditCurrentArgument == GroupPoints->LineEdit2) myPoint2 = GEOM::GEOM_Object::_nil();
+    else if (myEditCurrentArgument == GroupWire->LineEdit1)   myWire = GEOM::GEOM_Object::_nil();
+    displayPreview();
     return;
   }
 
   // nbSel == 1
   Standard_Boolean testResult = Standard_False;
   GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First(), testResult);
-  if (!testResult || aSelectedObject->_is_nil())
-    return;
-
-  myEditCurrentArgument->setText(GEOMBase::GetName(aSelectedObject));
 
-  // clear selection
-  disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
-  myGeomGUI->getApp()->selectionMgr()->clearSelected();
-  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
-          this, SLOT(SelectionIntoArgument()));
-
-  if (myEditCurrentArgument == GroupPoints->LineEdit1) {
-    myPoint1 = aSelectedObject;
-    myOkPoint1 = true;
-    if (!myOkPoint2)
-      GroupPoints->PushButton2->click();
-  }
-  else if (myEditCurrentArgument == GroupPoints->LineEdit2) {
-    myPoint2 = aSelectedObject;
-    myOkPoint2 = true;
-    if (!myOkPoint1)
-      GroupPoints->PushButton1->click();
+  if ( testResult && !aSelectedObject->_is_nil() ) {
+    QString aName = GEOMBase::GetName( aSelectedObject );
+    TopAbs_ShapeEnum aNeedType = myEditCurrentArgument == GroupWire->LineEdit1 ? TopAbs_WIRE : TopAbs_VERTEX;
+
+    TopoDS_Shape aShape;
+    if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() ) {
+      TColStd_IndexedMapOfInteger aMap;
+      aSelMgr->GetIndexes( aSelList.First(), aMap );
+      if ( aMap.Extent() == 1 ) { // Local Selection
+        int anIndex = aMap( 1 );
+       aName += ( aNeedType == TopAbs_WIRE ? QString( ":wire_%1" ).arg( anIndex ) : QString( ":vertex_%1" ).arg( anIndex ) );
+
+        //Find SubShape Object in Father
+        GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
+        if ( CORBA::is_nil( aFindedObject ) ) { // Object not found in study
+          GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
+          aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
+        }
+        else {
+          aSelectedObject = aFindedObject; // get Object from study
+        }
+      }
+      else { // Global Selection
+        if ( aShape.ShapeType() != aNeedType ) {
+          aSelectedObject = GEOM::GEOM_Object::_nil();
+          aName = "";
+        }
+      }
+    }
+
+    myEditCurrentArgument->setText( aName );
+
+    if (!aSelectedObject->_is_nil()) { // clear selection if something selected
+      globalSelection();
+      localSelection( GEOM::GEOM_Object::_nil(), aNeedType );
+    }
+
+    if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
+      myPoint1 = aSelectedObject;
+      if ( !myPoint1->_is_nil() && myPoint2->_is_nil() )
+        GroupPoints->PushButton2->click();
+    }
+    else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
+      myPoint2 = aSelectedObject;
+      if ( !myPoint2->_is_nil() && myPoint1->_is_nil() )
+        GroupPoints->PushButton1->click();
+    }
+    else if ( myEditCurrentArgument == GroupWire->LineEdit1 ) {
+      myWire = aSelectedObject;
+    }
   }
 
   displayPreview();
@@ -205,7 +311,6 @@ void BuildGUI_EdgeDlg::SelectionIntoArgument()
 void BuildGUI_EdgeDlg::SetEditCurrentArgument()
 {
   QPushButton* send = (QPushButton*)sender();
-  //globalSelection();//??
 
   if (send == GroupPoints->PushButton1) {
     myEditCurrentArgument = GroupPoints->LineEdit1;
@@ -217,19 +322,14 @@ void BuildGUI_EdgeDlg::SetEditCurrentArgument()
     GroupPoints->PushButton1->setDown(false);
     GroupPoints->LineEdit1->setEnabled(false);
   }
+  else if (send == GroupWire->PushButton1) {
+    myEditCurrentArgument = GroupWire->LineEdit1;
+  }
 
   // enable line edit
   myEditCurrentArgument->setEnabled(true);
   myEditCurrentArgument->setFocus();
-  // after setFocus(), because it will be setDown(false) when loses focus
   send->setDown(true);
-
-  disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
-  globalSelection(GEOM_POINT);
-  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
-          this, SLOT(SelectionIntoArgument()));
-
-  // seems we need it only to avoid preview disappearing, caused by selection mode change
   displayPreview();
 }
 
@@ -240,7 +340,7 @@ void BuildGUI_EdgeDlg::SetEditCurrentArgument()
 void BuildGUI_EdgeDlg::LineEditReturnPressed()
 {
   QLineEdit* send = (QLineEdit*)sender();
-  if (send == GroupPoints->LineEdit1 || send == GroupPoints->LineEdit2) {
+  if (send == GroupPoints->LineEdit1 || send == GroupPoints->LineEdit2 || send == GroupWire->LineEdit1 ) {
     myEditCurrentArgument = send;
     GEOMBase_Skeleton::LineEditReturnPressed();
   }
@@ -257,7 +357,7 @@ void BuildGUI_EdgeDlg::ActivateThisDialog()
   connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
            this, SLOT( SelectionIntoArgument() ) );
 
-  displayPreview();
+  ConstructorsClicked( getConstructorId() );
 }
 
 //=================================================================================
@@ -283,9 +383,18 @@ GEOM::GEOM_IOperations_ptr BuildGUI_EdgeDlg::createOperation()
 // function : isValid
 // purpose  :
 //=================================================================================
-bool BuildGUI_EdgeDlg::isValid (QString&)
+bool BuildGUI_EdgeDlg::isValid (QString& msg)
 {
-  return myOkPoint1 && myOkPoint2;
+  bool ok = false;
+  if ( getConstructorId() == 0 ) {
+    ok = !myPoint1->_is_nil() && !myPoint2->_is_nil();
+  }
+  else {
+    ok = !myWire->_is_nil();
+    ok = ok && GroupWire->SpinBox_DX->isValid( msg, !IsPreview() );
+    ok = ok && GroupWire->SpinBox_DY->isValid( msg, !IsPreview() );
+  }
+  return ok;
 }
 
 //=================================================================================
@@ -294,11 +403,57 @@ bool BuildGUI_EdgeDlg::isValid (QString&)
 //=================================================================================
 bool BuildGUI_EdgeDlg::execute (ObjectList& objects)
 {
+  bool res = false;
+  GEOM::GEOM_Object_var anObj;
+
   GEOM::GEOM_IShapesOperations_var anOper = GEOM::GEOM_IShapesOperations::_narrow( getOperation() );
-  GEOM::GEOM_Object_var anObj = anOper->MakeEdge(myPoint1, myPoint2);
 
-  if (!anObj->_is_nil())
-    objects.push_back(anObj._retn());
+  switch ( getConstructorId() ) {
+  case 0 :
+    {
+      anObj = anOper->MakeEdge( myPoint1, myPoint2 );
+      res = true;
+      break;
+    }
+  case 1:
+    {
+      double aLinearTolerance   = GroupWire->SpinBox_DX->value();
+      double anAngularTolerance = GroupWire->SpinBox_DY->value();
+      
+      QStringList aParameters;
+      aParameters << GroupWire->SpinBox_DX->text();
+      aParameters << GroupWire->SpinBox_DY->text();
+      
+      anObj = anOper->MakeEdgeWire( myWire, aLinearTolerance, anAngularTolerance );
+      
+      if ( !anObj->_is_nil() && !IsPreview() )
+       anObj->SetParameters( aParameters.join(":").toLatin1().constData() );
+      
+      res = true;
+      break;
+    }
+  }
 
-  return true;
+  if ( !anObj->_is_nil() ) objects.push_back( anObj._retn() );
+
+  return res;
+}
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void BuildGUI_EdgeDlg::addSubshapesToStudy()
+{
+  QMap<QString, GEOM::GEOM_Object_var> objMap;
+  switch ( getConstructorId() ) {
+  case 0 :
+    objMap[GroupPoints->LineEdit1->text()] = myPoint1;
+    objMap[GroupPoints->LineEdit2->text()] = myPoint2;
+    break;
+  case 1 :
+    objMap[GroupWire->LineEdit1->text()] = myWire;
+    break;
+  }
+  addSubshapesToFather( objMap );
 }
index 1f95ea8658e1f8b4c26b1893a2abf017cb2bcf08..f6e09236f3e91b46b95f3740cce6210b348530b1 100644 (file)
@@ -29,6 +29,7 @@
 
 #include <GEOMBase_Skeleton.h>
 
+class DlgRef_1Sel2Spin;
 class DlgRef_2Sel;
 
 //=================================================================================
@@ -48,19 +49,21 @@ protected:
   virtual GEOM::GEOM_IOperations_ptr createOperation();
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );    
+  virtual void                       addSubshapesToStudy();
 
 private:
   void                               Init();
   void                               enterEvent( QEvent* );
   
 private:
-  GEOM::GEOM_Object_var              myPoint1, myPoint2;   /* Points containing the edge */ 
-  bool                               myOkPoint1;   /* true when myPoint is defined */    
-  bool                               myOkPoint2;
+  GEOM::GEOM_Object_var              myPoint1, myPoint2;   /* Points containing the edge */
+  GEOM::GEOM_Object_var              myWire;               /* Wire */
   
   DlgRef_2Sel*                       GroupPoints;
+  DlgRef_1Sel2Spin*                  GroupWire;
 
 private slots:
+  void                               ConstructorsClicked( int );
   void                               ClickOnOk();
   bool                               ClickOnApply();
   void                               ActivateThisDialog();
index 05814b272e4ca1853c85c5fd9d4f3fcac0c66ad2..4f29cfcff4d57ff98c1b62ee77b884c92bc4e1e3 100644 (file)
@@ -117,6 +117,7 @@ void BuildGUI_SolidDlg::Init()
            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
 
   initName( tr( "GEOM_SOLID" ) );
+  SelectionIntoArgument();
 }
 
 
index 5ecf3efb234f4d9ba66071e1920a5f9ee04e1567..a769ce1c1ea6d2b1cf35353607b4cf13c150c315 100644 (file)
 #include <SUIT_Session.h>
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
+#include <SALOME_ListIteratorOfListIO.hxx>
 
 #include <TColStd_MapOfInteger.hxx>
+#include <TColStd_IndexedMapOfInteger.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 #include <Precision.hxx>
 
 //=================================================================================
@@ -63,8 +66,14 @@ BuildGUI_WireDlg::BuildGUI_WireDlg( GeometryGUI* theGeometryGUI, QWidget* parent
   mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
   mainFrame()->RadioButton3->close();
 
-  GroupArgs = new DlgRef_1Sel1Spin( centralWidget() );
+  GroupType = new DlgRef_3Radio( centralWidget() );
+  GroupType->GroupBox1->setTitle( tr( "GEOM_OBJECT_TYPE" ) );
+  GroupType->RadioButton1->setText( tr( "GEOM_EDGE" ) );
+  GroupType->RadioButton2->setText( tr( "GEOM_WIRE" ) );
+  GroupType->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
+  GroupType->RadioButton3->close();
 
+  GroupArgs = new DlgRef_1Sel1Spin( centralWidget() );
   GroupArgs->GroupBox1->setTitle( tr( "GEOM_WIRE_CONNECT" ) );
   GroupArgs->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
   GroupArgs->PushButton1->setIcon( image1 );
@@ -78,6 +87,7 @@ BuildGUI_WireDlg::BuildGUI_WireDlg( GeometryGUI* theGeometryGUI, QWidget* parent
 
   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
   layout->setMargin( 0 ); layout->setSpacing( 6 );
+  layout->addWidget( GroupType );
   layout->addWidget( GroupArgs );
   /***************************************************************/
 
@@ -107,13 +117,11 @@ void BuildGUI_WireDlg::Init()
   /* init variables */
   myEditCurrentArgument = GroupArgs->LineEdit1;
   GroupArgs->LineEdit1->setReadOnly( true );
+  GroupType->RadioButton1->setChecked(true);
   
   myOkEdgesAndWires = false;
   
-  TColStd_MapOfInteger aMap;
-  aMap.Add( GEOM_WIRE );
-  aMap.Add( GEOM_EDGE );
-  globalSelection( aMap );
+  localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
 
   /* signals and slots connections */
   connect( buttonOk(),    SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
@@ -121,6 +129,12 @@ void BuildGUI_WireDlg::Init()
   connect( GroupArgs->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
+
+  connect( GroupType->RadioButton1, SIGNAL( clicked() ), this, SLOT( TypeButtonClicked() ) );
+  connect( GroupType->RadioButton2, SIGNAL( clicked() ), this, SLOT( TypeButtonClicked() ) );
+
+  connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
+  connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ),        this, SLOT( ClickOnCancel() ) );
   
   initName( tr( "GEOM_WIRE" ) );
   SelectionIntoArgument();
@@ -144,13 +158,36 @@ void BuildGUI_WireDlg::ClickOnOk()
 //=================================================================================
 bool BuildGUI_WireDlg::ClickOnApply()
 {
-  if ( !onAccept() )
+  if ( !onAccept() || !myOkEdgesAndWires )
     return false;
 
   initName();
+  TypeButtonClicked();
+  myMapToStudy.clear();
+  myEdgesAndWires.length(0);
+  myOkEdgesAndWires = false;
+  myEditCurrentArgument->setText( "" );
   return true;
 }
 
+//=================================================================================
+// function : TypeBittonClicked()
+// purpose  : Radio button management
+//=================================================================================
+void BuildGUI_WireDlg::TypeButtonClicked()
+{
+  if ( GroupType->RadioButton1->isChecked() ) {
+    globalSelection(); // close local contexts, if any
+    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
+    GroupArgs->TextLabel1->setText( tr( "GEOM_EDGE" ) );
+  }
+  else if ( GroupType->RadioButton2->isChecked() ) {
+    globalSelection(); // close local contexts, if any
+    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_WIRE );
+    GroupArgs->TextLabel1->setText( tr( "GEOM_WIRE" ) );
+  }
+  SelectionIntoArgument();
+}
 
 //=================================================================================
 // function : SelectionIntoArgument()
@@ -168,14 +205,71 @@ void BuildGUI_WireDlg::SelectionIntoArgument()
   myOkEdgesAndWires = false;
   int nbSel = GEOMBase::GetNameOfSelectedIObjects(aSelList, aString);
 
-  if ( nbSel == 0 )
-    return;
-  if ( nbSel != 1 )
-    aString = tr( "%1_objects" ).arg( nbSel );
-
-  GEOMBase::ConvertListOfIOInListOfGO(aSelList,  myEdgesAndWires);
-  if ( !myEdgesAndWires.length() )
+  if ( nbSel == 0 ) {
+    myMapToStudy.clear();
     return;
+  }
+
+  TopAbs_ShapeEnum aNeedType = TopAbs_EDGE;
+  if (GroupType->RadioButton2->isChecked())
+    aNeedType = TopAbs_WIRE;
+
+  std::list<GEOM::GEOM_Object_var> aList; // subshapes list
+  TopoDS_Shape aShape;
+  Standard_Boolean aRes = Standard_False;
+  for (SALOME_ListIteratorOfListIO anIt (aSelList); anIt.More(); anIt.Next()) {
+    TColStd_IndexedMapOfInteger aMap;
+    GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIt.Value(), aRes );
+    if ( !CORBA::is_nil(aSelectedObject) && aRes && GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() ) {
+      aSelMgr->GetIndexes( anIt.Value(), aMap );
+
+      if ( aMap.Extent() > 0 ) { // local selection
+        for (int ind = 1; ind <= aMap.Extent(); ind++) {
+          aString = aSelectedObject->GetName();
+          int anIndex = aMap(ind);
+          if ( aNeedType == TopAbs_EDGE )
+            aString += QString( ":edge_%1" ).arg( anIndex );
+          else
+            aString += QString( ":wire_%1" ).arg( anIndex );
+          
+          //Find SubShape Object in Father
+          GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aString );
+          
+          if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+            GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
+            aList.push_back( aShapesOp->GetSubShape( aSelectedObject, anIndex ) );
+            myMapToStudy[aString] = aShapesOp->GetSubShape( aSelectedObject, anIndex );
+          }
+          else {
+            aList.push_back( aFindedObject ); // get Object from study
+          }
+        }
+      } else { // global selection
+        if ( aShape.ShapeType() == aNeedType ) {
+          GEOMBase::ConvertListOfIOInListOfGO(aSelList,  myEdgesAndWires);
+        } else {
+          aList.clear();
+          myEdgesAndWires.length(0);
+        }
+      }
+    }
+  }
+
+  // convert aList in listofgo
+  if ( aList.size() ) {
+    myEdgesAndWires.length( aList.size()  );
+    int k = 0;
+    for ( std::list<GEOM::GEOM_Object_var>::iterator j = aList.begin(); j != aList.end(); j++ )
+      myEdgesAndWires[k++] = *j;
+  }
+    
+  if ( myEdgesAndWires.length() > 1 )
+    aString = tr( "%1_objects" ).arg( myEdgesAndWires.length() );
+
+  if ( !myEdgesAndWires.length() ) {
+    aString = "";
+    myMapToStudy.clear();
+  }
 
   myEditCurrentArgument->setText( aString );
   myOkEdgesAndWires = true;
@@ -192,10 +286,7 @@ void BuildGUI_WireDlg::SetEditCurrentArgument()
   if ( send != GroupArgs->PushButton1 )
     return;
 
-  TColStd_MapOfInteger aMap;
-  aMap.Add( GEOM_WIRE );
-  aMap.Add( GEOM_EDGE );
-  globalSelection( aMap );
+  TypeButtonClicked();
   myEditCurrentArgument = GroupArgs->LineEdit1;
 
   myEditCurrentArgument->setFocus();
@@ -212,12 +303,18 @@ void BuildGUI_WireDlg::ActivateThisDialog()
   GEOMBase_Skeleton::ActivateThisDialog();
   connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
            SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
-  TColStd_MapOfInteger aMap;
-  aMap.Add( GEOM_WIRE );
-  aMap.Add( GEOM_EDGE );
-  globalSelection( aMap );
+
+  TypeButtonClicked();
 }
 
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  : public slot to deactivate if active
+//=================================================================================
+void BuildGUI_WireDlg::DeactivateActiveDialog()
+{
+  GEOMBase_Skeleton::DeactivateActiveDialog();
+}
 
 //=================================================================================
 // function : enterEvent()
@@ -262,3 +359,12 @@ bool BuildGUI_WireDlg::execute (ObjectList& objects)
 
   return true;
 }
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose  : virtual method to add new SubObjects if local selection
+//=================================================================================
+void BuildGUI_WireDlg::addSubshapesToStudy()
+{
+  addSubshapesToFather( myMapToStudy );
+}
index d3496692119658cef1702cd4914b139eee4da10f..2ebe55958b8f4d108e64f3e4c3d77fd2c45a4f08 100644 (file)
@@ -30,6 +30,7 @@
 #include <GEOMBase_Skeleton.h>
 
 class DlgRef_1Sel1Spin;
+class DlgRef_3Radio;
 
 //=================================================================================
 // class    : BuildGUI_WireDlg
@@ -47,7 +48,8 @@ protected:
   // redefined from GEOMBase_Helper
   virtual GEOM::GEOM_IOperations_ptr createOperation();
   virtual bool                       isValid( QString& );
-  virtual bool                       execute( ObjectList& );    
+  virtual bool                       execute( ObjectList& );
+  virtual void                       addSubshapesToStudy(); 
 
 private:
   void                               Init();
@@ -58,13 +60,18 @@ private:
   bool                               myOkEdgesAndWires;   /* to check when arguments is defined */
   
   DlgRef_1Sel1Spin*                  GroupArgs;
+  DlgRef_3Radio*                     GroupType;
+
+  QMap<QString, GEOM::GEOM_Object_var> myMapToStudy;
 
 private slots:
   void                               ClickOnOk();
   bool                               ClickOnApply();
   void                               ActivateThisDialog();
+  void                               DeactivateActiveDialog();
   void                               SelectionIntoArgument();
   void                               SetEditCurrentArgument();
+  void                               TypeButtonClicked();
 };
 
 #endif // BUILDGUI_WIREDLG_H
index 7d131f0ebae76a33ae69766fdfff701644b70194..d77481e8f77e0f8bd50c095804cb84c361655bee 100644 (file)
@@ -342,6 +342,7 @@ void DisplayGUI::SetDisplayMode( const int mode, SUIT_ViewWindow* viewWindow )
   if ( viewWindow->getViewManager()->getType() == SVTK_Viewer::Type() ) {
     SVTK_View* aView = ((SVTK_ViewWindow*)viewWindow)->getView();
     aView->SetDisplayMode( mode );
+    GeometryGUI::Modified();
   } 
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
@@ -363,6 +364,7 @@ void DisplayGUI::SetDisplayMode( const int mode, SUIT_ViewWindow* viewWindow )
     }
 
     ic->SetDisplayMode( newmode, Standard_False );
+    GeometryGUI::Modified();
   }
 }
 
@@ -413,6 +415,7 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow )
         }
       }
     }
+    GeometryGUI::Modified();
   }
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     viewWindow->setCustomData( "VectorsMode", QVariant( mode ) );
@@ -433,6 +436,7 @@ void DisplayGUI::SetVectorMode( const bool mode, SUIT_ViewWindow* viewWindow )
       }
       ite.Next();
     }
+    GeometryGUI::Modified();
   }
 }
 
@@ -504,6 +508,7 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
       }
     }
     aView->Repaint();
+    GeometryGUI::Modified();
   }
   else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
     OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
@@ -534,6 +539,7 @@ void DisplayGUI::ChangeDisplayMode( const int mode, SUIT_ViewWindow* viewWindow
       }
     }
     ic->UpdateCurrentViewer();
+    GeometryGUI::Modified();
   }
 }
 
index d3a0bc5ec6e606f444450299fcc355804a5cde98..1ff6c6b8761ef694da1313fc43654c60159f22e5 100644 (file)
@@ -288,6 +288,20 @@ DlgRef_2Sel1List1Check::~DlgRef_2Sel1List1Check()
 {
 }
 
+//////////////////////////////////////////
+// DlgRef_2Sel1List2Check
+//////////////////////////////////////////
+
+DlgRef_2Sel1List2Check::DlgRef_2Sel1List2Check( QWidget* parent, Qt::WindowFlags f )
+: QWidget( parent, f )
+{
+  setupUi( this );
+}
+
+DlgRef_2Sel1List2Check::~DlgRef_2Sel1List2Check()
+{
+}
+
 //////////////////////////////////////////
 // DlgRef_2Sel1List
 //////////////////////////////////////////
@@ -781,13 +795,12 @@ QString DlgRef::PrintDoubleValue( double theValue, int thePrecision )
   if ( qAbs(theValue) < prec )
     return "0";
 
-  QString aRes;
-  aRes.setNum( theValue, 'g', thePrecision );
+  QString aRes = QLocale().toString( theValue, thePrecision >= 0 ? 'f' : 'g', qAbs( thePrecision ) );
 
   if ( prec > 0 ) {
     int p = 0;
     while ( p < thePrecision ) {
-      aRes.setNum( theValue, 'g', p++ );
+      QString aRes = QLocale().toString( theValue, thePrecision >= 0 ? 'f' : 'g', qAbs( p++ ) );
       double v = aRes.toDouble();
       double err = qAbs( theValue - v );
       if ( err > 0 && err <= prec )
@@ -796,21 +809,19 @@ QString DlgRef::PrintDoubleValue( double theValue, int thePrecision )
   }
 
   // remove trailing zeroes
-  QString delim( "." );
-
-  int idx = aRes.lastIndexOf( delim );
-  if ( idx == -1 )
-    return aRes;
 
-  QString iPart = aRes.left( idx );
-  QString fPart = aRes.mid( idx + 1 );
+  QRegExp expre( QString( "(%1|%2)[+-]?[0-9]+$" ).arg( QLocale().exponential().toLower(), 
+                                                      QLocale().exponential().toUpper() ) );
 
-  while ( !fPart.isEmpty() && fPart.at( fPart.length() - 1 ) == '0' )
-    fPart.remove( fPart.length() - 1, 1 );
+  int idx = aRes.indexOf( expre );
+  QString aResExp = "";
+  if ( idx >= 0 ) {
+    aResExp = aRes.mid( idx );
+    aRes = aRes.left( idx );
+  }
 
-  aRes = iPart;
-  if ( !fPart.isEmpty() )
-    aRes += delim + fPart;
+  if ( aRes.contains( QLocale().decimalPoint() ) )
+    aRes.remove( QRegExp( QString( "(\\%1|0)0*$" ).arg( QLocale().decimalPoint() ) ) );
 
-  return aRes;
+  return aRes == "-0" ? QString( "0" ) : aRes + aResExp;
 }
index 642aba6296ac35a2d6c2f6b8090214e6c436bd76..a7b31a94513f3d8baa92c349f3ab457a2a95e32f 100644 (file)
@@ -339,6 +339,22 @@ public:
   ~DlgRef_2Sel1List1Check();
 };
 
+//////////////////////////////////////////
+// DlgRef_2Sel1List2Check
+//////////////////////////////////////////
+
+#include "ui_DlgRef_2Sel1List2Check_QTD.h"
+
+class DLGREF_EXPORT DlgRef_2Sel1List2Check : public QWidget, 
+                                             public Ui::DlgRef_2Sel1List2Check_QTD
+{
+  Q_OBJECT
+
+public:
+  DlgRef_2Sel1List2Check( QWidget* = 0, Qt::WindowFlags = 0 );
+  ~DlgRef_2Sel1List2Check();
+};
+
 //////////////////////////////////////////
 // DlgRef_2Sel1List
 //////////////////////////////////////////
diff --git a/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui b/src/DlgRef/DlgRef_2Sel1List2Check_QTD.ui
new file mode 100644 (file)
index 0000000..8cc018c
--- /dev/null
@@ -0,0 +1,151 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>DlgRef_2Sel1List2Check_QTD</class>
+ <widget class="QWidget" name="DlgRef_2Sel1List2Check_QTD">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>127</width>
+    <height>140</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string/>
+  </property>
+  <layout class="QGridLayout">
+   <property name="margin">
+    <number>0</number>
+   </property>
+   <property name="spacing">
+    <number>0</number>
+   </property>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="GroupBox1">
+     <property name="title">
+      <string/>
+     </property>
+     <layout class="QGridLayout" name="gridLayout">
+      <item row="0" column="0">
+       <widget class="QLabel" name="TextLabel1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>TL1</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QPushButton" name="PushButton1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <widget class="QLineEdit" name="LineEdit1"/>
+      </item>
+      <item row="1" column="0">
+       <widget class="QLabel" name="TextLabel2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>TL2</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="1">
+       <widget class="QPushButton" name="PushButton2">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="2">
+       <widget class="QLineEdit" name="LineEdit2"/>
+      </item>
+      <item row="2" column="0">
+       <widget class="QLabel" name="TextLabel3">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string>TL3</string>
+        </property>
+        <property name="wordWrap">
+         <bool>false</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1" colspan="2">
+       <widget class="QComboBox" name="ComboBox1">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+       </widget>
+      </item>
+      <item row="3" column="0" colspan="3">
+       <widget class="QCheckBox" name="CheckButton1">
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0" colspan="3">
+       <widget class="QCheckBox" name="CheckButton2">
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
+ <tabstops>
+  <tabstop>PushButton1</tabstop>
+  <tabstop>LineEdit1</tabstop>
+  <tabstop>PushButton2</tabstop>
+  <tabstop>LineEdit2</tabstop>
+  <tabstop>ComboBox1</tabstop>
+  <tabstop>CheckButton1</tabstop>
+  <tabstop>CheckButton2</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
index 0aadfc72d83a8b9645b863dc7277d7eceadd0e27..f7af410b2c90ea22b9958fa0be834b7ea4f29303 100644 (file)
@@ -55,6 +55,7 @@ UIC_FILES =                                   \
        ui_DlgRef_1SelExt_QTD.h                 \
        ui_DlgRef_1Spin_QTD.h                   \
        ui_DlgRef_2Sel1List1Check_QTD.h         \
+       ui_DlgRef_2Sel1List2Check_QTD.h         \
        ui_DlgRef_2Sel1List_QTD.h               \
        ui_DlgRef_2Sel1Spin2Check_QTD.h         \
        ui_DlgRef_2Sel1Spin_QTD.h               \
index cd93e922eae5213e47caf393f35b6b45b235dd02..43e6e8981c13367e8d558777705a0253a1fdc070 100755 (executable)
 #include <LightApp_Application.h>
 #include <LightApp_SelectionMgr.h>
 
-#include <BRep_Tool.hxx>
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopoDS_Vertex.hxx>
-#include <TopoDS.hxx>
+//#include <BRep_Tool.hxx>
+//#include <TopExp.hxx>
+//#include <TopExp_Explorer.hxx>
+//#include <TopoDS_Vertex.hxx>
+//#include <TopoDS.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
-#include <BRepBuilderAPI_Transform.hxx>
-#include <BRepBuilderAPI_MakeWire.hxx>
+//#include <BRepBuilderAPI_Transform.hxx>
+//#include <BRepBuilderAPI_MakeWire.hxx>
+#include <BRepBuilderAPI_MakeVertex.hxx>
+#include <BRepBuilderAPI_MakePolygon.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
 
 class Locker
 {
@@ -596,13 +599,48 @@ void EntityGUI_3DSketcherDlg::displayPreview( GEOM::GEOM_Object_ptr object,
 // Function : createShapes
 // Purpose  : Create applyed wire, and last segment from entry object
 //================================================================
-bool EntityGUI_3DSketcherDlg::createShapes( GEOM::GEOM_Object_ptr theObject,
+bool EntityGUI_3DSketcherDlg::createShapes( GEOM::GEOM_Object_ptr /*theObject*/,
                                             TopoDS_Shape&         theApplyedWire,
                                             TopoDS_Shape&         theLastSegment )
 {
+  QList<gp_Pnt> points;
+  foreach( XYZ xyz, myPointsList) {
+    gp_Pnt p(xyz.x, xyz.y, xyz.z);
+    if ( points.isEmpty() || points.last().Distance(p) > gp::Resolution())
+      points << p;
+  } 
+  
+  if ( points.count() == 1 ) {
+    // only one point is created
+    BRepBuilderAPI_MakeVertex mkVertex (points.last());
+    theApplyedWire = mkVertex.Shape();
+  }
+  else if ( points.count() > 1 ) {
+    // wire is created
+    BRepBuilderAPI_MakePolygon mkWire;
+    foreach( gp_Pnt p, points )
+      mkWire.Add(p);
+    theApplyedWire = mkWire.Shape();
+  }
+
+  XYZ curxyz = getCurrentPoint();
+  gp_Pnt curpnt(curxyz.x, curxyz.y, curxyz.z);
+  
+  if ( points.isEmpty() || points.last().Distance(curpnt) <= gp::Resolution() ) {
+    BRepBuilderAPI_MakeVertex mkVertex (curpnt);
+    theLastSegment = mkVertex.Shape();
+  }
+  else {
+    BRepBuilderAPI_MakeEdge mkEdge(points.last(), curpnt);
+    theLastSegment = mkEdge.Shape();
+  }
+
+  /* VSR: old algorithm does not work properly, see bug 0020899
   TopoDS_Shape aShape;
-  if ( !GEOMBase::GetShape( theObject, aShape ) ||
-       aShape.ShapeType() != TopAbs_WIRE && aShape.ShapeType() != TopAbs_VERTEX )
+  if ( !GEOMBase::GetShape( theObject, aShape ) )
+    return false;
+
+  if( aShape.ShapeType() != TopAbs_WIRE && aShape.ShapeType() != TopAbs_VERTEX )
     return false;
 
   theApplyedWire = aShape;
@@ -628,7 +666,8 @@ bool EntityGUI_3DSketcherDlg::createShapes( GEOM::GEOM_Object_ptr theObject,
   else if ( !theLastSegment.IsNull() ) {
     TopExp_Explorer vertexExp( theLastSegment, TopAbs_VERTEX );
     theApplyedWire = vertexExp.Current();
-  }
+    }
+  */
 
   return true;
 }
index 8af4d0d690598fb1b95a91f06af93618466a2928..0400c1a4af9ae39ff6819d3c5b9a74e942642e6d 100644 (file)
@@ -1454,7 +1454,7 @@ void EntityGUI_SketcherDlg::ActivateThisDialog()
 //=================================================================================
 void EntityGUI_SketcherDlg::enterEvent( QEvent* )
 {
-  if ( !MainWidget->GroupConstructors->isEnabled() )
+  if ( !isEnabled() )
     ActivateThisDialog();
 }
 
index 60a5e7da762479f8a900ad8b330867ae1f73b059..f3607e52fbda125c5083aecf2c187472533e6de5 100644 (file)
@@ -189,10 +189,12 @@ GEOM_Engine::GEOM_Engine()
 GEOM_Engine::~GEOM_Engine()
 {
   GEOM_DataMapIteratorOfDataMapOfAsciiStringTransient It(_objects);
+  std::list< Handle(GEOM_Object) > objs;
   for(; It.More(); It.Next())
-    {
-      RemoveObject(Handle(GEOM_Object)::DownCast(It.Value()));
-    }
+    objs.push_back( Handle(GEOM_Object)::DownCast(It.Value()) );
+  std::list< Handle(GEOM_Object) >::iterator objit;
+  for(objit = objs.begin(); objit != objs.end(); ++objit)
+    RemoveObject(*objit);
 
   //Close all documents not closed
   for(Interface_DataMapIteratorOfDataMapOfIntegerTransient anItr(_mapIDDocument); anItr.More(); anItr.Next())
@@ -310,7 +312,7 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) theMainShape,
                                              Handle(TColStd_HArray1OfInteger) theIndices,
                                              bool isStandaloneOperation)
 {
-  if(theMainShape.IsNull() || theIndices.IsNull()) return NULL;
+  if (theMainShape.IsNull() || theIndices.IsNull()) return NULL;
 
   Handle(TDocStd_Document) aDoc = GetDocument(theMainShape->GetDocID());
   Handle(TDataStd_TreeNode) aRoot = TDataStd_TreeNode::Set(aDoc->Main());
@@ -319,21 +321,6 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) theMainShape,
   //            if this label has been freed (object deleted)
   bool useExisting = false;
   TDF_Label aChild;
-  /*
-  if (!_lastCleared.IsNull()) {
-    if (_lastCleared.Root() == aDoc->Main().Root()) {
-      useExisting = true;
-      aChild = _lastCleared;
-      // 0020229: if next label exists and is empty, try to reuse it
-      Standard_Integer aNextTag = aChild.Tag() + 1;
-      TDF_Label aNextL = aDoc->Main().FindChild(aNextTag, Standard_False);
-      if (!aNextL.IsNull() && !aNextL.HasAttribute())
-        _lastCleared = aNextL;
-      else
-        _lastCleared.Nullify();
-    }
-  }
-  */
   int aDocID = theMainShape->GetDocID();
   if (_freeLabels.find(aDocID) != _freeLabels.end()) {
     std::list<TDF_Label>& aFreeLabels = _freeLabels[aDocID];
@@ -349,10 +336,10 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) theMainShape,
   }
 
   Handle(GEOM_Function) aMainShape = theMainShape->GetLastFunction();
-  Handle(GEOM_Object) anObject = new GEOM_Object(aChild, 28); //28 is SUBSHAPE type
+  Handle(GEOM_Object) anObject = new GEOM_Object (aChild, 28); //28 is SUBSHAPE type
   Handle(GEOM_Function) aFunction = anObject->AddFunction(GEOM_Object::GetSubShapeID(), 1);
 
-  GEOM_ISubShape aSSI(aFunction);
+  GEOM_ISubShape aSSI (aFunction);
   aSSI.SetMainShape(aMainShape);
   aSSI.SetIndices(theIndices);
 
@@ -372,11 +359,14 @@ Handle(GEOM_Object) GEOM_Engine::AddSubShape(Handle(GEOM_Object) theMainShape,
     return NULL;
   }
 
-  //Put an object in the map of created objects
+  // Put an object in the map of created objects
   TCollection_AsciiString anID = BuildIDFromObject(anObject);
-  if(_objects.IsBound(anID)) _objects.UnBind(anID);
+  if (_objects.IsBound(anID)) _objects.UnBind(anID);
   _objects.Bind(anID, anObject);
 
+  // Put this subshape in the list of subshapes of theMainShape
+  aMainShape->AddSubShapeReference(aFunction);
+
   GEOM::TPythonDump pd (aFunction);
 
   if (isStandaloneOperation) {
@@ -410,9 +400,19 @@ bool GEOM_Engine::RemoveObject(Handle(GEOM_Object) theObject)
   TCollection_AsciiString anID = BuildIDFromObject(theObject);
   if (_objects.IsBound(anID)) _objects.UnBind(anID);
 
+  // If subshape, remove it from the list of subshapes of its main shape
+  if (!theObject->IsMainShape()) {
+    Handle(GEOM_Function) aFunction = theObject->GetFunction(1);
+    GEOM_ISubShape aSSI (aFunction);
+    Handle(GEOM_Function) aMainShape = aSSI.GetMainShape();
+    //If main shape is not null, then remove
+    if(!aMainShape.IsNull())
+      aMainShape->RemoveSubShapeReference(aFunction);
+  }
+
   int nb = theObject->GetNbFunctions();
   Handle(TDataStd_TreeNode) aNode;
-  for (int i = 1; i<=nb; i++) {
+  for (int i = 1; i <= nb; i++) {
     Handle(GEOM_Function) aFunction = theObject->GetFunction(i);
     if (aFunction->GetEntry().FindAttribute(GEOM_Function::GetFunctionTreeID(), aNode))
       aNode->Remove();
@@ -627,9 +627,11 @@ TCollection_AsciiString GEOM_Engine::DumpPython(int theDocID,
         for ( ; anEntryToCommand != anEntryToCommandMap.end(); ++anEntryToCommand )
           aFuncScript += (char*)anEntryToCommand->second.c_str();
 
-        // PTv, 0020001 add result objects from RestoreSubShapes into ignore list,
+        // PTv, 0020001 add result objects from RestoreGivenSubShapes into ignore list,
         //  because they will be published during command execution
-        int indx = anAfterScript.Search( "RestoreSubShapes" );
+        int indx = anAfterScript.Search( "RestoreGivenSubShapes" );
+        if ( indx == -1 )
+          indx = anAfterScript.Search( "RestoreSubShapes" );
         if ( indx != -1 ) {
           TCollection_AsciiString aSubStr = anAfterScript.SubString(1, indx);
           Handle(TColStd_HSequenceOfInteger) aSeq = FindEntries(aSubStr);
@@ -922,9 +924,11 @@ bool ProcessFunction(Handle(GEOM_Function)&     theFunction,
   // 0020001 PTv, check for critical functions, which requier dump of objects
   if (theIsPublished)
   {
-    // currently, there is only one function "RestoreSubShapes",
+    // currently, there is only one function "RestoreGivenSubShapes",
     // later this check could be replaced by iterations on list of such functions
-    if (aDescr.Search( "RestoreSubShapes" ) != -1)
+    if (aDescr.Search( "RestoreGivenSubShapes" ) != -1)
+      theIsDumpCollected = true;
+    else if (aDescr.Search( "RestoreSubShapes" ) != -1)
       theIsDumpCollected = true;
   }
 
@@ -935,7 +939,9 @@ bool ProcessFunction(Handle(GEOM_Function)&     theFunction,
     bool isBefore = true;
     TCollection_AsciiString aSubStr = aDescr.Token("\n\t", i++);
     while (!aSubStr.IsEmpty()) {
-      if (isBefore && aSubStr.Search( "RestoreSubShapes" ) == -1)
+      if (isBefore &&
+          aSubStr.Search( "RestoreGivenSubShapes" ) == -1 &&
+          aSubStr.Search( "RestoreSubShapes" ) == -1)
         theScript += TCollection_AsciiString("\n\t") + aSubStr;
       else
         theAfterScript += TCollection_AsciiString("\n\t") + aSubStr;
index 3a348fd5e429e71b694da1a1488b5a823e4bef56..46da48dfc0b47a5b23b8dc6819fbf36b85bb7f4e 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
@@ -43,6 +42,7 @@
 #include <TDataStd_UAttribute.hxx>
 #include <TDataStd_ChildNodeIterator.hxx>
 #include <TDataStd_ExtStringArray.hxx>
+#include <TDataStd_ExtStringList.hxx>
 #include <TDocStd_Owner.hxx>
 #include <TDocStd_Document.hxx>
 #include <TFunction_Function.hxx>
@@ -64,6 +64,8 @@
 #define RESULT_LABEL 2
 #define DESCRIPTION_LABEL 3
 #define HISTORY_LABEL 4
+#define SUBSHAPES_LABEL 5 // 0020756: GetGroups
+#define NAMING_LABEL 6 // 002020750: Naming during STEP import
 
 #define ARGUMENTS _label.FindChild((ARGUMENT_LABEL))
 #define ARGUMENT(thePosition) _label.FindChild((ARGUMENT_LABEL)).FindChild((thePosition))
@@ -471,8 +473,8 @@ TCollection_AsciiString GEOM_Function::GetString(int thePosition)
 void GEOM_Function::SetReference(int thePosition, Handle(GEOM_Function) theReference)
 {
   _isDone = false;
-  if(thePosition <= 0) return;
-  if(theReference.IsNull()) return;
+  if (thePosition <= 0) return;
+  if (theReference.IsNull()) return;
   TDF_Label anArgLabel = ARGUMENT(thePosition);
   TDF_Reference::Set(anArgLabel, theReference->GetEntry());
   TDataStd_UAttribute::Set(anArgLabel, GetDependencyID());
@@ -670,6 +672,85 @@ void GEOM_Function::GetDependency(TDF_LabelSequence& theSeq)
   }
 }
 
+//=============================================================================
+/*!
+ *  AddSubShapeReference
+ */
+//=============================================================================
+void GEOM_Function::AddSubShapeReference(Handle(GEOM_Function) theSubShape)
+{
+  _isDone = false;
+
+  TDF_Label aSubShapesLabel = _label.FindChild(SUBSHAPES_LABEL);
+
+  Handle(TDataStd_ExtStringList) aList;
+  if (!aSubShapesLabel.FindAttribute(TDataStd_ExtStringList::GetID(), aList)) {
+    aList = new TDataStd_ExtStringList;
+    aSubShapesLabel.AddAttribute(aList);
+  }
+
+  TCollection_AsciiString anEntry;
+  TDF_Tool::Entry(theSubShape->GetOwnerEntry(), anEntry);
+  aList->Append(anEntry);
+
+  _isDone = true;
+}
+
+//=============================================================================
+/*!
+ *  RemoveSubShapeReference
+ */
+//=============================================================================
+void GEOM_Function::RemoveSubShapeReference(Handle(GEOM_Function) theSubShape)
+{
+  _isDone = false;
+
+  TDF_Label aSubShapesLabel = _label.FindChild(SUBSHAPES_LABEL);
+
+  Handle(TDataStd_ExtStringList) aList;
+  if (aSubShapesLabel.FindAttribute(TDataStd_ExtStringList::GetID(), aList)) {
+    TCollection_AsciiString anEntry;
+    TDF_Tool::Entry(theSubShape->GetOwnerEntry(), anEntry);
+    aList->Remove(anEntry);
+  }
+
+  _isDone = true;
+}
+
+//=============================================================================
+/*!
+ *  HasSubShapeReferences
+ */
+//=============================================================================
+bool GEOM_Function::HasSubShapeReferences()
+{
+  _isDone = true;
+
+  TDF_Label aSubShapesLabel = _label.FindChild(SUBSHAPES_LABEL);
+  return aSubShapesLabel.IsAttribute(TDataStd_ExtStringList::GetID());
+}
+
+//=============================================================================
+/*!
+ *  GetSubShapeReferences
+ */
+//=============================================================================
+const TDataStd_ListOfExtendedString& GEOM_Function::GetSubShapeReferences()
+{
+  _isDone = false;
+
+  TDF_Label aSubShapesLabel = _label.FindChild(SUBSHAPES_LABEL);
+
+  Handle(TDataStd_ExtStringList) aList;
+  if (!aSubShapesLabel.FindAttribute(TDataStd_ExtStringList::GetID(), aList)) {
+    aList = new TDataStd_ExtStringList;
+    aSubShapesLabel.AddAttribute(aList);
+  }
+
+  _isDone = true;
+  return aList->List();
+}
+
 //=============================================================================
 /*!
  *  GetHistoryEntry
@@ -713,6 +794,16 @@ TDF_Label GEOM_Function::GetArgumentHistoryEntry (const TDF_Label&       theArgu
   return aHistoryCurLabel;
 }
 
+//=============================================================================
+/*!
+ *  GetNamingEntry
+ */
+//=============================================================================
+TDF_Label GEOM_Function::GetNamingEntry (const Standard_Boolean create)
+{
+  return _label.FindChild(NAMING_LABEL, create);
+}
+
 //=======================================================================
 //function :  GEOM_Function_Type_
 //purpose  :
@@ -721,10 +812,9 @@ Standard_EXPORT Handle_Standard_Type& GEOM_Function_Type_()
 {
 
   static Handle_Standard_Type aType1 = STANDARD_TYPE(MMgt_TShared);
-  if ( aType1.IsNull()) aType1 = STANDARD_TYPE(MMgt_TShared);
+  if (aType1.IsNull()) aType1 = STANDARD_TYPE(MMgt_TShared);
   static Handle_Standard_Type aType2 = STANDARD_TYPE(Standard_Transient);
-  if ( aType2.IsNull()) aType2 = STANDARD_TYPE(Standard_Transient);
-
+  if (aType2.IsNull()) aType2 = STANDARD_TYPE(Standard_Transient);
 
   static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,NULL};
   static Handle_Standard_Type _aType = new Standard_Type("GEOM_Function",
@@ -751,5 +841,5 @@ const Handle(GEOM_Function) Handle(GEOM_Function)::DownCast(const Handle(Standar
      }
   }
 
-  return _anOtherObject ;
+  return _anOtherObject;
 }
index 4cd9fe3ff974c525aec31c18ebcecc626f7240ce..9476ae2e64a3f28a5f642be43755b5dec4a451fd 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifndef _GEOM_Function_HeaderFile
 #define _GEOM_Function_HeaderFile
 #endif
 #ifndef _Handle_MMgt_TShared_HeaderFile
 #include <Handle_MMgt_TShared.hxx>
-#endif  
+#endif
 #ifndef _MMgt_TShared_HeaderFile
 #include <MMgt_TShared.hxx>
-#endif  
+#endif
 #ifndef _Standard_GUID_HeaderFile
 #include <Standard_GUID.hxx>
 #endif
@@ -65,31 +64,31 @@ class Handle(MMgt_TShared);
 class GEOM_Function;
 
 #include <TCollection_AsciiString.hxx>
-
+#include <TDataStd_ListOfExtendedString.hxx>
 
 Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOM_Function);
 
 class Handle(GEOM_Function) : public Handle(MMgt_TShared) {
   public:
-    inline void* operator new(size_t,void* anAddress) 
+    inline void* operator new(size_t,void* anAddress)
       {
         return anAddress;
       }
-    inline void* operator new(size_t size) 
-      { 
-        return Standard::Allocate(size); 
+    inline void* operator new(size_t size)
+      {
+        return Standard::Allocate(size);
       }
-    inline void  operator delete(void *anAddress) 
-      { 
-        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+    inline void  operator delete(void *anAddress)
+      {
+        if (anAddress) Standard::Free((Standard_Address&)anAddress);
       }
 
-    Handle(GEOM_Function)():Handle(MMgt_TShared)() {} 
-    Handle(GEOM_Function)(const Handle(GEOM_Function)& aHandle) : Handle(MMgt_TShared)(aHandle) 
+    Handle(GEOM_Function)():Handle(MMgt_TShared)() {}
+    Handle(GEOM_Function)(const Handle(GEOM_Function)& aHandle) : Handle(MMgt_TShared)(aHandle)
      {
      }
 
-    Handle(GEOM_Function)(const GEOM_Function* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem) 
+    Handle(GEOM_Function)(const GEOM_Function* anItem) : Handle(MMgt_TShared)((MMgt_TShared *)anItem)
      {
      }
 
@@ -105,18 +104,18 @@ class Handle(GEOM_Function) : public Handle(MMgt_TShared) {
       return *this;
      }
 
-    GEOM_Function* operator->() 
+    GEOM_Function* operator->()
      {
       return (GEOM_Function *)ControlAccess();
      }
 
-    GEOM_Function* operator->() const 
+    GEOM_Function* operator->() const
      {
       return (GEOM_Function *)ControlAccess();
      }
 
    Standard_EXPORT ~Handle(GEOM_Function)() {};
+
    Standard_EXPORT static const Handle(GEOM_Function) DownCast(const Handle(Standard_Transient)& AnObject);
 };
 
@@ -125,24 +124,26 @@ class GEOM_Function : public MMgt_TShared
 
 public:
 
-    inline void* operator new(size_t,void* anAddress) 
+    inline void* operator new(size_t,void* anAddress)
       {
         return anAddress;
       }
-    inline void* operator new(size_t size) 
-      { 
-        return Standard::Allocate(size); 
+    inline void* operator new(size_t size)
+      {
+        return Standard::Allocate(size);
       }
-    inline void  operator delete(void *anAddress) 
-      { 
-        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+    inline void  operator delete(void *anAddress)
+      {
+        if (anAddress) Standard::Free((Standard_Address&)anAddress);
       }
 
     // Type management
     //
     Standard_EXPORT friend Handle_Standard_Type& GEOM_Function_Type_();
-    Standard_EXPORT const Handle(Standard_Type)& DynamicType() const  { return STANDARD_TYPE(GEOM_Function) ; }
-    Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const { return (STANDARD_TYPE(GEOM_Function) == AType || MMgt_TShared::IsKind(AType)); } 
+    Standard_EXPORT const Handle(Standard_Type)& DynamicType() const
+      { return STANDARD_TYPE(GEOM_Function) ; }
+    Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const
+      { return (STANDARD_TYPE(GEOM_Function) == AType || MMgt_TShared::IsKind(AType)); }
 
 
 private:
@@ -150,22 +151,22 @@ private:
 
 public:
 
-  //Returns a GUID for a function tree  
+  //Returns a GUID for a function tree
   Standard_EXPORT static const Standard_GUID& GetFunctionTreeID();
 
-  //Returns the ID which is associated with a reference to another function  
+  //Returns the ID which is associated with a reference to another function
   Standard_EXPORT static const Standard_GUID& GetDependencyID();
 
   //Finds and returns a function located on a label theEntry
   Standard_EXPORT static Handle(GEOM_Function) GetFunction(const TDF_Label& theEntry);
 
 
-  Standard_EXPORT GEOM_Function(const TDF_Label& theEntry, const Standard_GUID& theGUID, int theType); 
+  Standard_EXPORT GEOM_Function(const TDF_Label& theEntry, const Standard_GUID& theGUID, int theType);
   Standard_EXPORT ~GEOM_Function() {;}
 
   Standard_EXPORT TDF_Label GetOwnerEntry();
 
-  //Access to properties 
+  //Access to properties
 
   //Returns a result of the function built by the function Driver
   Standard_EXPORT TopoDS_Shape GetValue();
@@ -177,7 +178,7 @@ public:
   Standard_EXPORT TDF_Label& GetEntry() { return _label; }
 
   //Returns the type of the function
-  Standard_EXPORT int GetType();    
+  Standard_EXPORT int GetType();
 
   //Returns a function Driver GUID
   Standard_EXPORT Standard_GUID GetDriverGUID();
@@ -185,8 +186,8 @@ public:
   //Returns aPython description of the function
   Standard_EXPORT TCollection_AsciiString GetDescription();
 
-  //Sets aPython description of the function  
-  Standard_EXPORT void SetDescription(const TCollection_AsciiString& theDescription);  
+  //Sets aPython description of the function
+  Standard_EXPORT void SetDescription(const TCollection_AsciiString& theDescription);
 
   //Access to arguments
 
@@ -206,8 +207,8 @@ public:
   Standard_EXPORT void SetInteger(int thePosition, int theValue);
 
   //Returns an integer argument at position thePosition
-  Standard_EXPORT int GetInteger(int thePosition);  
-  
+  Standard_EXPORT int GetInteger(int thePosition);
+
   //Sets an integer array argument at position thePosition
   Standard_EXPORT void SetIntegerArray(int thePosition, const Handle(TColStd_HArray1OfInteger)& theArray);
 
@@ -221,18 +222,18 @@ public:
   Standard_EXPORT void SetString(int thePosition, const TCollection_AsciiString& theValue);
 
   //Returns a string argument at position thePosition
-  Standard_EXPORT TCollection_AsciiString GetString(int thePosition);  
-  
+  Standard_EXPORT TCollection_AsciiString GetString(int thePosition);
+
   //Returns a reference to other function argument at position thePosition
-  Standard_EXPORT Handle(GEOM_Function) GetReference(int thePosition); 
+  Standard_EXPORT Handle(GEOM_Function) GetReference(int thePosition);
 
   //Set an array of ExtendedString
   Standard_EXPORT void SetStringArray(int thePosition, const Handle(TColStd_HArray1OfExtendedString)& theArray);
-    
+
   //Returns the array of ExtendedString
   Standard_EXPORT Handle(TColStd_HArray1OfExtendedString) GetStringArray(int thePosition);
 
-  //Returns a GUID for a references tree  
+  //Returns a GUID for a references tree
   Standard_EXPORT static const Standard_GUID& GetReferencesTreeID();
 
   //Sets a list of references to other function arguments at position thePosition
@@ -240,33 +241,41 @@ public:
                          const Handle(TColStd_HSequenceOfTransient)& theRefList);
 
   //Returns a list of references to other function arguments at position thePosition
-  Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetReferenceList (int thePosition); 
+  Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetReferenceList (int thePosition);
 
   //Sets a TopoDS_Shape argument at position thePosition
   //void SetShape(int thePosition, const TopoDS_Shape& theShape);
-    
+
   //Returns a TopoDS_Shape argument at position thePosition
-  //TopoDS_Shape GetShape(int thePosition);  
-  
-  //Returns true if the last method succided 
+  //TopoDS_Shape GetShape(int thePosition);
+
+  //Returns true if the last method succided
   Standard_EXPORT bool IsDone() { return _isDone; }
 
   //Returns a sequence of the external dependencies of this function
   Standard_EXPORT void GetDependency(TDF_LabelSequence& theSeq);
 
+  // Add/Remove/Check/Get subshape references
+  Standard_EXPORT void AddSubShapeReference   (Handle(GEOM_Function) theSubShape);
+  Standard_EXPORT void RemoveSubShapeReference(Handle(GEOM_Function) theSubShape);
+  Standard_EXPORT bool HasSubShapeReferences();
+  Standard_EXPORT const TDataStd_ListOfExtendedString& GetSubShapeReferences();
+
   //Returns top label of this function's history tree
   Standard_EXPORT TDF_Label GetHistoryEntry (const Standard_Boolean create = Standard_True);
 
   //Returns history label, corresponding to the label,
   //on which a reference on argument is stored
   Standard_EXPORT TDF_Label GetArgumentHistoryEntry (const TDF_Label&       theArgumentRefEntry,
-                                     const Standard_Boolean create = Standard_True);
+                                                     const Standard_Boolean create = Standard_True);
+
+  //Returns top label of this function's naming tree
+  Standard_EXPORT TDF_Label GetNamingEntry (const Standard_Boolean create = Standard_True);
 
 private:
 
-  
-  TDF_Label    _label;
-  bool _isDone;
+  TDF_Label _label;
+  bool      _isDone;
 };
 
 #endif
index 96e9809188d8b55e31fba3e3ee69ce5c1191bf4f..2f09aa141b17c4ae324efd0518dc70332fe0ad4e 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  NOTE: This is an intreface to a function for the Shapes
+//  (Wire, Face, Shell, Solid and Compound) creation.
 
-// NOTE: This is an intreface to a function for the Shapes
-// (Wire, Face, Shell, Solid and Compound) creation.
-//
 #include "GEOM_Function.hxx"
 
 #include "TColStd_HSequenceOfTransient.hxx"
 #include "TColStd_HArray1OfInteger.hxx"
 
-#define SHAPE_ARG_MAIN_SHAPE     1 
-#define SHAPE_ARG_INDICES             2 
-#define SHAPE_ARG_SORTED             3
+#define SHAPE_ARG_MAIN_SHAPE  1
+#define SHAPE_ARG_INDICES     2
 
 class GEOM_ISubShape
 {
index 04216b60865d08bbbded748670836aac57ad7a09..03a5db3c548f441363d970786bc691cdffe31cd2 100644 (file)
@@ -73,7 +73,7 @@ libGEOMbasic_la_CPPFLAGS =    \
 
 libGEOMbasic_la_LDFLAGS  =                     \
        $(CORBA_LIBS)                           \
-       $(KERNEL_LDFLAGS) -lSALOMELocalTrace    \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics     \
        $(STDLIB)                               \
        $(CAS_LDPATH) -lTKXSBase                \
        $(CAS_OCAF)                             \
index 602c3e85927524185bf13e3f2a6fcb95f078b304..8dd2946b08a56b638fb14c26620c3a798081a5b9 100644 (file)
@@ -291,9 +291,15 @@ TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape,
   TopoDS_Shape aResult = myContext->Apply(Shape);
 
   // processing each solid
-  TopExp_Explorer exps;
-  for(exps.Init(Shape, TopAbs_SOLID); exps.More(); exps.Next()) {
-    TopoDS_Solid aSolid = TopoDS::Solid(exps.Current());
+  TopAbs_ShapeEnum aType = TopAbs_SOLID;
+  TopExp_Explorer exps (Shape, aType);
+  if (!exps.More()) {
+    aType = TopAbs_SHELL;
+    exps.Init(Shape, aType);
+  }
+  for (; exps.More(); exps.Next()) {
+    //TopoDS_Solid aSolid = TopoDS::Solid(exps.Current());
+    TopoDS_Shape aSolid = exps.Current();
 
     TopTools_IndexedMapOfShape ChangedFaces;
 
@@ -307,21 +313,21 @@ TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape,
 
     // processing each face
     TopExp_Explorer exp;
-    for(exp.Init(aRes, TopAbs_FACE); exp.More(); exp.Next()) {
+    for (exp.Init(aRes, TopAbs_FACE); exp.More(); exp.Next()) {
       TopoDS_Face aFace =
         TopoDS::Face(aContext->Apply(exp.Current().Oriented(TopAbs_FORWARD)));
       TopTools_IndexedDataMapOfShapeListOfShape aMapFacesEdges;
 
-      for(TopExp_Explorer expe(aFace,TopAbs_EDGE); expe.More(); expe.Next()) {
+      for (TopExp_Explorer expe(aFace,TopAbs_EDGE); expe.More(); expe.Next()) {
         TopoDS_Edge edge = TopoDS::Edge(expe.Current());
-        if(!aMapEdgeFaces.Contains(edge)) continue;
+        if (!aMapEdgeFaces.Contains(edge)) continue;
         const TopTools_ListOfShape& aList = aMapEdgeFaces.FindFromKey(edge);
         TopTools_ListIteratorOfListOfShape anIter(aList);
-        for( ; anIter.More(); anIter.Next()) {
+        for ( ; anIter.More(); anIter.Next()) {
           TopoDS_Face face = TopoDS::Face(anIter.Value());
           TopoDS_Face face1 = TopoDS::Face(aContext->Apply(anIter.Value()));
-          if(face1.IsSame(aFace)) continue;
-          if(aMapFacesEdges.Contains(face)) {
+          if (face1.IsSame(aFace)) continue;
+          if (aMapFacesEdges.Contains(face)) {
             aMapFacesEdges.ChangeFromKey(face).Append(edge);
           }
           else {
@@ -332,27 +338,27 @@ TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape,
         }
       }
 
-      for(Standard_Integer i=1; i<=aMapFacesEdges.Extent(); i++) {
+      for (Standard_Integer i=1; i<=aMapFacesEdges.Extent(); i++) {
         const TopTools_ListOfShape& ListEdges = aMapFacesEdges.FindFromIndex(i);
         TopTools_SequenceOfShape SeqEdges;
         TopTools_ListIteratorOfListOfShape anIter(ListEdges);
-        for( ; anIter.More(); anIter.Next()) {
+        for ( ; anIter.More(); anIter.Next()) {
           SeqEdges.Append(anIter.Value());
         }
-        if(SeqEdges.Length()==1) continue;
+        if (SeqEdges.Length()==1) continue;
         TopoDS_Edge E;
-        if( MergeEdges(SeqEdges,aFace,Tol,E) ) {
+        if ( MergeEdges(SeqEdges,aFace,Tol,E) ) {
           // now we have only one edge - aChain.Value(1)
           // we have to replace old ListEdges with this new edge
           aContext->Replace(SeqEdges(1),E);
-          for(Standard_Integer j=2; j<=SeqEdges.Length(); j++) {
+          for (Standard_Integer j=2; j<=SeqEdges.Length(); j++) {
             aContext->Remove(SeqEdges(j));
           }
           TopoDS_Face tmpF = TopoDS::Face(exp.Current());
-          if( !ChangedFaces.Contains(tmpF) )
+          if ( !ChangedFaces.Contains(tmpF) )
             ChangedFaces.Add(tmpF);
           tmpF = TopoDS::Face(aMapFacesEdges.FindKey(i));
-          if( !ChangedFaces.Contains(tmpF) )
+          if ( !ChangedFaces.Contains(tmpF) )
             ChangedFaces.Add(tmpF);
         }
       }
@@ -360,7 +366,7 @@ TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape,
     } // end processing each face
 
     // fix changed faces and replace them in the local context
-    for(Standard_Integer i=1; i<=ChangedFaces.Extent(); i++) {
+    for (Standard_Integer i=1; i<=ChangedFaces.Extent(); i++) {
       TopoDS_Face aFace = TopoDS::Face(aContext->Apply(ChangedFaces.FindKey(i)));
       Handle(ShapeFix_Face) sff = new ShapeFix_Face(aFace);
       sff->SetContext(myContext);
@@ -371,11 +377,11 @@ TopoDS_Shape BlockFix_UnionEdges::Perform(const TopoDS_Shape& Shape,
       aContext->Replace(aFace,sff->Face());
     }
 
-    if(ChangedFaces.Extent()>0) {
+    if (ChangedFaces.Extent() > 0) {
       // fix changed shell and replace it in the local context
       TopoDS_Shape aRes1 = aContext->Apply(aRes);
       TopExp_Explorer expsh;
-      for(expsh.Init(aRes1, TopAbs_SHELL); expsh.More(); expsh.Next()) {
+      for (expsh.Init(aRes1, TopAbs_SHELL); expsh.More(); expsh.Next()) {
         TopoDS_Shell aShell = TopoDS::Shell(expsh.Current());
         Handle(ShapeFix_Shell) sfsh = new ShapeFix_Shell;
         sfsh->FixFaceOrientation(aShell);
index a9349ecabba0a761bc67d6be0f957120e64f5dae..3d5fadbb9a30ad206f593fc41a8b700c2fef5bb8 100755 (executable)
 --
 --  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 --
-
 -- File:       GEOMAlgo.cdl
 -- Created:    Sat Dec 04 12:36:22 2004
 -- Author:     Peter KURNEV
 --             <peter@PREFEX>
---
+
 package GEOMAlgo 
 
        ---Purpose: 
@@ -117,7 +116,7 @@ is
     deferred class Clsf;
     class ClsfSurf; 
     class ClsfBox; 
-    class FinderShapeOn2; 
+    --class FinderShapeOn2; 
     class PassKeyShapeMapHasher; 
     -- 
     --  classes 
@@ -131,7 +130,8 @@ is
     --  gluer               
     class Gluer; 
     class Gluer1;  
-    class GlueAnalyser; 
+    class GlueAnalyser;  
+    
     class CoupleOfShapes; 
     class PassKey;  
     class PassKeyMapHasher; 
@@ -146,20 +146,14 @@ is
     class ShellSolid; 
     class VertexSolid; 
     class SolidSolid; 
-    class FinderShapeOn; 
+    --class FinderShapeOn; 
     -- 
-    class FinderShapeOn1;
+    --class FinderShapeOn1;
     class StateCollector; 
-    --  adds
-    deferred class HAlgo;
-    deferred class Clsf;
-    class ClsfSurf; 
-    class ClsfBox;  
-    --modified by NIZNHY-PKV Mon Jan 29 10:27:44 2007f
+
     class ClsfSolid;  
-    --modified by NIZNHY-PKV Mon Jan 29 10:27:46 2007t
-    class FinderShapeOn2; 
-    class PassKeyShapeMapHasher;
+--    class FinderShapeOn2; 
+--    class PassKeyShapeMapHasher;
     --
     -- Builder/Splitter 
     deferred class BuilderShape; 
@@ -177,6 +171,7 @@ is
     class WireSplitter; 
     class WireEdgeSet; 
     class WESCorrector; 
+    class WESScaler; 
     -- 
     --  Pointers
     --     
@@ -243,20 +238,9 @@ is
                                               Shape from TopoDS, 
                                               PassKeyShapeMapHasher from GEOMAlgo); 
 
-    class DataMapOfShapeShapeSet instantiates 
-       DataMap from TCollection(Shape from TopoDS, 
-                                ShapeSet from GEOMAlgo, 
-                                ShapeMapHasher from TopTools); 
-        
-    class DataMapOfShapeReal instantiates 
-       DataMap from TCollection(Shape from TopoDS, 
-                                Real from Standard, 
-                                ShapeMapHasher from TopTools);          
-                                 
-    
-    class DataMapOfRealListOfShape instantiates  
-       DataMap from TCollection(Real from Standard, 
-                                ListOfShape from TopTools,  
-                                MapRealHasher from TColStd);      
+    class DataMapOfOrientedShapeShape instantiates
+        DataMap from TCollection (Shape                  from TopoDS,
+                                  Shape                  from TopoDS,
+                                  OrientedShapeMapHasher from TopTools);
     
 end GEOMAlgo;
index feee863dbf9fbc93b13c7d92c54efb292532acf7..6fd87144123ee6602d447b8edb0c2dcf580a0f87 100755 (executable)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx
new file mode 100644 (file)
index 0000000..4c8a9f2
--- /dev/null
@@ -0,0 +1,112 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_HeaderFile
+#define _GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_HeaderFile
+
+#ifndef _TCollection_BasicMapIterator_HeaderFile
+#include <TCollection_BasicMapIterator.hxx>
+#endif
+#ifndef _Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#include <Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#endif
+class Standard_NoSuchObject;
+class TopoDS_Shape;
+class TopTools_OrientedShapeMapHasher;
+class GEOMAlgo_DataMapOfOrientedShapeShape;
+class GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape;
+
+
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+#ifndef _Standard_Macro_HeaderFile
+#include <Standard_Macro.hxx>
+#endif
+
+
+class GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape  : public TCollection_BasicMapIterator {
+
+public:
+
+    void* operator new(size_t,void* anAddress) 
+      {
+        return anAddress;
+      }
+    void* operator new(size_t size) 
+      { 
+        return Standard::Allocate(size); 
+      }
+    void  operator delete(void *anAddress) 
+      { 
+        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+      }
+ // Methods PUBLIC
+ // 
+
+
+Standard_EXPORT GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape();
+
+
+Standard_EXPORT GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape(const GEOMAlgo_DataMapOfOrientedShapeShape& aMap);
+
+
+Standard_EXPORT   void Initialize(const GEOMAlgo_DataMapOfOrientedShapeShape& aMap) ;
+
+
+Standard_EXPORT  const TopoDS_Shape& Key() const;
+
+
+Standard_EXPORT  const TopoDS_Shape& Value() const;
+
+
+
+
+
+protected:
+
+ // Methods PROTECTED
+ // 
+
+
+ // Fields PROTECTED
+ //
+
+
+private: 
+
+ // Methods PRIVATE
+ // 
+
+
+ // Fields PRIVATE
+ //
+
+
+};
+
+
+
+
+
+// other Inline functions and methods (like "C++: function call" methods)
+//
+
+
+#endif
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_0.cxx b/src/GEOMAlgo/GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_0.cxx
new file mode 100644 (file)
index 0000000..e809e4a
--- /dev/null
@@ -0,0 +1,54 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+
+#ifndef _Standard_NoSuchObject_HeaderFile
+#include <Standard_NoSuchObject.hxx>
+#endif
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _TopTools_OrientedShapeMapHasher_HeaderFile
+#include <TopTools_OrientedShapeMapHasher.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#endif
+
+#define TheKey TopoDS_Shape
+#define TheKey_hxx <TopoDS_Shape.hxx>
+#define TheItem TopoDS_Shape
+#define TheItem_hxx <TopoDS_Shape.hxx>
+#define Hasher TopTools_OrientedShapeMapHasher
+#define Hasher_hxx <TopTools_OrientedShapeMapHasher.hxx>
+#define TCollection_DataMapNode GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_hxx <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#define TCollection_DataMapIterator GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapIterator_hxx <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#define Handle_TCollection_DataMapNode Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_Type_() GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_Type_()
+#define TCollection_DataMap GEOMAlgo_DataMapOfOrientedShapeShape
+#define TCollection_DataMap_hxx <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#include <TCollection_DataMapIterator.gxx>
+
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx
new file mode 100644 (file)
index 0000000..529a10b
--- /dev/null
@@ -0,0 +1,128 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#define _GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+#ifndef _Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#include <Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#endif
+
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _TCollection_MapNode_HeaderFile
+#include <TCollection_MapNode.hxx>
+#endif
+#ifndef _TCollection_MapNodePtr_HeaderFile
+#include <TCollection_MapNodePtr.hxx>
+#endif
+class TopoDS_Shape;
+class TopTools_OrientedShapeMapHasher;
+class GEOMAlgo_DataMapOfOrientedShapeShape;
+class GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape;
+
+
+
+class GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape : public TCollection_MapNode {
+
+public:
+ // Methods PUBLIC
+ // 
+
+GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape(const TopoDS_Shape& K,const TopoDS_Shape& I,const TCollection_MapNodePtr& n);
+
+  TopoDS_Shape& Key() const;
+
+  TopoDS_Shape& Value() const;
+//Standard_EXPORT ~GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape();
+
+
+
+
+ // Type management
+ //
+ Standard_EXPORT const Handle(Standard_Type)& DynamicType() const;
+ //Standard_EXPORT Standard_Boolean           IsKind(const Handle(Standard_Type)&) const;
+
+protected:
+
+ // Methods PROTECTED
+ // 
+
+
+ // Fields PROTECTED
+ //
+
+
+private: 
+
+ // Methods PRIVATE
+ // 
+
+
+ // Fields PRIVATE
+ //
+TopoDS_Shape myKey;
+TopoDS_Shape myValue;
+
+
+};
+
+#define TheKey TopoDS_Shape
+#define TheKey_hxx <TopoDS_Shape.hxx>
+#define TheItem TopoDS_Shape
+#define TheItem_hxx <TopoDS_Shape.hxx>
+#define Hasher TopTools_OrientedShapeMapHasher
+#define Hasher_hxx <TopTools_OrientedShapeMapHasher.hxx>
+#define TCollection_DataMapNode GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_hxx <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#define TCollection_DataMapIterator GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapIterator_hxx <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#define Handle_TCollection_DataMapNode Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_Type_() GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_Type_()
+#define TCollection_DataMap GEOMAlgo_DataMapOfOrientedShapeShape
+#define TCollection_DataMap_hxx <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+
+#include <TCollection_DataMapNode.lxx>
+
+#undef TheKey
+#undef TheKey_hxx
+#undef TheItem
+#undef TheItem_hxx
+#undef Hasher
+#undef Hasher_hxx
+#undef TCollection_DataMapNode
+#undef TCollection_DataMapNode_hxx
+#undef TCollection_DataMapIterator
+#undef TCollection_DataMapIterator_hxx
+#undef Handle_TCollection_DataMapNode
+#undef TCollection_DataMapNode_Type_
+#undef TCollection_DataMap
+#undef TCollection_DataMap_hxx
+
+
+// other Inline functions and methods (like "C++: function call" methods)
+//
+
+
+#endif
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_0.cxx b/src/GEOMAlgo/GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_0.cxx
new file mode 100644 (file)
index 0000000..d2dd356
--- /dev/null
@@ -0,0 +1,100 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+
+#ifndef _Standard_TypeMismatch_HeaderFile
+#include <Standard_TypeMismatch.hxx>
+#endif
+
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _TopTools_OrientedShapeMapHasher_HeaderFile
+#include <TopTools_OrientedShapeMapHasher.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#endif
+//GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape::~GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape() {}
+
+
+Standard_EXPORT Handle_Standard_Type& GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_Type_()
+{
+
+    static Handle_Standard_Type aType1 = STANDARD_TYPE(TCollection_MapNode);
+  static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared);
+  static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient);
+
+  static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
+  static Handle_Standard_Type _aType = new Standard_Type("GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape",
+                                                        sizeof(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape),
+                                                        1,
+                                                        (Standard_Address)_Ancestors,
+                                                        (Standard_Address)NULL);
+
+  return _aType;
+}
+
+
+// DownCast method
+//   allow safe downcasting
+//
+const Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)::DownCast(const Handle(Standard_Transient)& AnObject) 
+{
+  Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) _anOtherObject;
+
+  if (!AnObject.IsNull()) {
+     if (AnObject->IsKind(STANDARD_TYPE(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape))) {
+       _anOtherObject = Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)((Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)&)AnObject);
+     }
+  }
+
+  return _anOtherObject ;
+}
+const Handle(Standard_Type)& GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape::DynamicType() const 
+{ 
+  return STANDARD_TYPE(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) ; 
+}
+//Standard_Boolean GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape::IsKind(const Handle(Standard_Type)& AType) const 
+//{ 
+//  return (STANDARD_TYPE(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) == AType || TCollection_MapNode::IsKind(AType)); 
+//}
+//Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape::~Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape() {}
+#define TheKey TopoDS_Shape
+#define TheKey_hxx <TopoDS_Shape.hxx>
+#define TheItem TopoDS_Shape
+#define TheItem_hxx <TopoDS_Shape.hxx>
+#define Hasher TopTools_OrientedShapeMapHasher
+#define Hasher_hxx <TopTools_OrientedShapeMapHasher.hxx>
+#define TCollection_DataMapNode GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_hxx <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#define TCollection_DataMapIterator GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapIterator_hxx <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#define Handle_TCollection_DataMapNode Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_Type_() GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_Type_()
+#define TCollection_DataMap GEOMAlgo_DataMapOfOrientedShapeShape
+#define TCollection_DataMap_hxx <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#include <TCollection_DataMapNode.gxx>
+
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape.hxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape.hxx
new file mode 100644 (file)
index 0000000..f2a0e12
--- /dev/null
@@ -0,0 +1,154 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+#define _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+
+#ifndef _TCollection_BasicMap_HeaderFile
+#include <TCollection_BasicMap.hxx>
+#endif
+#ifndef _Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#include <Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _Standard_Integer_HeaderFile
+#include <Standard_Integer.hxx>
+#endif
+#ifndef _Standard_Boolean_HeaderFile
+#include <Standard_Boolean.hxx>
+#endif
+class Standard_DomainError;
+class Standard_NoSuchObject;
+class TopoDS_Shape;
+class TopTools_OrientedShapeMapHasher;
+class GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape;
+class GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape;
+
+
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+#ifndef _Standard_Macro_HeaderFile
+#include <Standard_Macro.hxx>
+#endif
+
+
+class GEOMAlgo_DataMapOfOrientedShapeShape  : public TCollection_BasicMap {
+
+public:
+
+    void* operator new(size_t,void* anAddress) 
+      {
+        return anAddress;
+      }
+    void* operator new(size_t size) 
+      { 
+        return Standard::Allocate(size); 
+      }
+    void  operator delete(void *anAddress) 
+      { 
+        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+      }
+ // Methods PUBLIC
+ // 
+
+
+Standard_EXPORT GEOMAlgo_DataMapOfOrientedShapeShape(const Standard_Integer NbBuckets = 1);
+
+
+Standard_EXPORT   GEOMAlgo_DataMapOfOrientedShapeShape& Assign(const GEOMAlgo_DataMapOfOrientedShapeShape& Other) ;
+  GEOMAlgo_DataMapOfOrientedShapeShape& operator =(const GEOMAlgo_DataMapOfOrientedShapeShape& Other) 
+{
+  return Assign(Other);
+}
+
+
+
+Standard_EXPORT   void ReSize(const Standard_Integer NbBuckets) ;
+
+
+Standard_EXPORT   void Clear() ;
+~GEOMAlgo_DataMapOfOrientedShapeShape()
+{
+  Clear();
+}
+
+
+
+Standard_EXPORT   Standard_Boolean Bind(const TopoDS_Shape& K,const TopoDS_Shape& I) ;
+
+
+Standard_EXPORT   Standard_Boolean IsBound(const TopoDS_Shape& K) const;
+
+
+Standard_EXPORT   Standard_Boolean UnBind(const TopoDS_Shape& K) ;
+
+
+Standard_EXPORT  const TopoDS_Shape& Find(const TopoDS_Shape& K) const;
+ const TopoDS_Shape& operator()(const TopoDS_Shape& K) const
+{
+  return Find(K);
+}
+
+
+
+Standard_EXPORT   TopoDS_Shape& ChangeFind(const TopoDS_Shape& K) ;
+  TopoDS_Shape& operator()(const TopoDS_Shape& K) 
+{
+  return ChangeFind(K);
+}
+
+
+
+
+
+
+protected:
+
+ // Methods PROTECTED
+ // 
+
+
+ // Fields PROTECTED
+ //
+
+
+private: 
+
+ // Methods PRIVATE
+ // 
+
+
+Standard_EXPORT GEOMAlgo_DataMapOfOrientedShapeShape(const GEOMAlgo_DataMapOfOrientedShapeShape& Other);
+
+
+ // Fields PRIVATE
+ //
+
+
+};
+
+
+
+
+
+// other Inline functions and methods (like "C++: function call" methods)
+//
+
+
+#endif
diff --git a/src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape_0.cxx b/src/GEOMAlgo/GEOMAlgo_DataMapOfOrientedShapeShape_0.cxx
new file mode 100644 (file)
index 0000000..6d57bbe
--- /dev/null
@@ -0,0 +1,57 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+
+#ifndef _Standard_DomainError_HeaderFile
+#include <Standard_DomainError.hxx>
+#endif
+#ifndef _Standard_NoSuchObject_HeaderFile
+#include <Standard_NoSuchObject.hxx>
+#endif
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _TopTools_OrientedShapeMapHasher_HeaderFile
+#include <TopTools_OrientedShapeMapHasher.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#endif
+
+#define TheKey TopoDS_Shape
+#define TheKey_hxx <TopoDS_Shape.hxx>
+#define TheItem TopoDS_Shape
+#define TheItem_hxx <TopoDS_Shape.hxx>
+#define Hasher TopTools_OrientedShapeMapHasher
+#define Hasher_hxx <TopTools_OrientedShapeMapHasher.hxx>
+#define TCollection_DataMapNode GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_hxx <GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx>
+#define TCollection_DataMapIterator GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapIterator_hxx <GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx>
+#define Handle_TCollection_DataMapNode Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape
+#define TCollection_DataMapNode_Type_() GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_Type_()
+#define TCollection_DataMap GEOMAlgo_DataMapOfOrientedShapeShape
+#define TCollection_DataMap_hxx <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#include <TCollection_DataMap.gxx>
+
index 92beb2e4869df886c10effa94a76a83076b86794..e44936b6bddad1b9b868599a3081f85826946a96 100644 (file)
@@ -1,4 +1,4 @@
---  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
+--  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 --
 --  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 --  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 50de1a5de9741a475b7b2d340eb123434cb353ab..5fe38013e4a69ea4728dff60be15cf7371cec42a 100644 (file)
@@ -1,23 +1,24 @@
-// File generated by CPPExt (Value)
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
 //
-//                     Copyright (C) 1991 - 2000 by  
-//                      Matra Datavision SA.  All rights reserved.
-//  
-//                     Copyright (C) 2001 - 2004 by
-//                     Open CASCADE SA.  All rights reserved.
-// 
-// This file is part of the Open CASCADE Technology software.
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  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
 //
-// This software may be distributed and/or modified under the terms and
-// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
-// and appearing in the file LICENSE included in the packaging of this file.
-//  
-// This software is distributed on an "AS IS" basis, without warranty of any
-// kind, and Open CASCADE SA hereby disclaims all such warranties,
-// including without limitation, any warranties of merchantability, fitness
-// for a particular purpose or non-infringement. Please see the License for
-// the specific terms and conditions governing rights and limitations under the
-// License.
 
 #ifndef _GEOMAlgo_Tools_HeaderFile
 #define _GEOMAlgo_Tools_HeaderFile
index c679c32a403934a3ea09f79a935f02d926df3ff6..b273ae5feb0de34b0644e73b8f638c62c29badc5 100755 (executable)
@@ -1054,10 +1054,10 @@ void GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aEx,
                                   Standard_Real aT, 
                                   gp_Pnt& aPF, 
                                   gp_Dir& aDNF,
-                                  IntTools_Context& aCtx)
+                                  IntTools_Context& )//aCtx)
 {
   Standard_Boolean bReverse;
-  Standard_Real aT1, aT2, dT, aU, aV;
+  Standard_Real aT1, aT2, dT;//, aU, aV;
   gp_Dir aDTT, aDNFT, aDBT;
   gp_Pnt aPFT, aPFx;
   Handle(Geom_Curve) aC3D;
@@ -1099,7 +1099,7 @@ void GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aEx,
     aTS=aGAS.GetType();
     if (aTS==GeomAbs_BSplineSurface ||
         aTS==GeomAbs_BezierSurface ||
-        aTS==GeomAbs_Plane) {//modified by NIZNHY-PKV Fri Dec  4 08:23:24 2009ft
+        aTS==GeomAbs_Plane) {
       Standard_Real aTolEx, aTolFx, aTol, dUR, dVR, dR;
       //
       aTolEx=BRep_Tool::Tolerance(aEx);
@@ -1123,6 +1123,8 @@ void GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aEx,
     aDNF.Reverse();
   }
   //
+  //modified by NIZNHY-PKV Wed Sep 22 10:52:54 2010f
+  /*
   GeomAPI_ProjectPointOnSurf& aProjector=aCtx.ProjPS(aF);
   //
   aProjector.Perform(aPFx);
@@ -1134,4 +1136,6 @@ void GetApproxNormalToFaceOnEdge (const TopoDS_Edge& aEx,
       aDNF.Reverse();
     }
   }
+  */
+  //modified by NIZNHY-PKV Wed Sep 22 10:52:59 2010t
 }
index 992c8af4c48bcd39230a33dd7672dd9edd481318..9f1aaf15b2eae67dad68cd292e21538cdbe4d0cf 100644 (file)
@@ -1,9 +1,26 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
 // File:       GEOMAlgo_Tools_1.cxx
 // Created:    Thu May  6 10:46:21 2010
 // Author:     Peter KURNEV
 //             <pkv@irinox>
 
-
 #include <GEOMAlgo_Tools.ixx>
 //
 #include <NCollection_DataMap.hxx>
@@ -38,6 +55,7 @@
 #include <TopTools_DataMapOfShapeListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 #include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
+#include <BRepTools.hxx>
 
 static 
   inline Standard_Boolean IsEqual(const TopoDS_Shape& aS1, 
@@ -72,7 +90,7 @@ static
       const Handle(Geom_Surface)& aS=BRep_Tool::Surface(aF, aLoc);
       aGAS.Load(aS);
       aTS=aGAS.GetType();
-      if (aTS==GeomAbs_Cylinder) {
+      if (aTS==GeomAbs_Cylinder || aTS==GeomAbs_Plane) {
        aItF.Initialize(aF);
        for (; aItF.More(); aItF.Next()) {
          const TopoDS_Wire& aW=*((TopoDS_Wire*)&aItF.Value());
index e033ad2440640a4798029ee1449f46933a0f3ddd..4ee7d7a69bccffd6372e367ed61e84351eb2c37f 100755 (executable)
@@ -19,7 +19,6 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 // File:        NMTAlgo_WESCorrector.cxx
 // Created:     
 // Author:      Peter KURNEV
 //
 #include <GEOMAlgo_WESCorrector.ixx>
 
+#include <Geom_Surface.hxx>
+
+#include <TopLoc_Location.hxx>
 #include <TopoDS.hxx>
+
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Face.hxx>
@@ -35,6 +38,7 @@
 
 #include <BRep_Builder.hxx>
 #include <BRep_Tool.hxx>
+#include <BRepAdaptor_Surface.hxx>
 
 #include <TopTools_IndexedMapOfOrientedShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 #include <TopTools_MapIteratorOfMapOfShape.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <GEOMAlgo_WireSplitter.hxx>
-
+#include <GEOMAlgo_WESScaler.hxx>
 
 static
   void MakeWire(const TopTools_ListOfShape& aLE, 
                 TopoDS_Wire& newWire);
 
+
+static
+  Standard_Boolean IsToScale(const TopoDS_Face& aF, 
+                            Standard_Real& aScale);
+
 //=======================================================================
 // function: 
 // purpose: 
@@ -215,19 +224,21 @@ static
         aER.Orientation(TopAbs_REVERSED);
         aLEC.Append(aER);
         //
-        //modified by NIZNHY-PKV Tue Nov 28 12:02:29 2006f
-        //bClosed=BRep_Tool::IsClosed(TopoDS::Edge(aER), myWES->Face());
-        //if (!bClosed) {
-          bRegular=Standard_False;
-        //}
-        //modified by NIZNHY-PKV Tue Nov 28 12:02:33 2006t
+       bRegular=Standard_False;
       }
       else {
         aLEC.Append(aER);
       }
       //
       if (bRegular) {
-        TopExp::MapShapesAndAncestors(aER, TopAbs_VERTEX, TopAbs_EDGE, aMVER);
+       //modified by NIZNHY-PKV Wed Oct 20 14:45:52 2010f
+       const  TopoDS_Edge& aEx=*((TopoDS_Edge*)&aER);
+       if (!BRep_Tool::Degenerated(aEx)) {
+         TopExp::MapShapesAndAncestors(aER, TopAbs_VERTEX, TopAbs_EDGE, aMVER);
+       }
+       //
+        //TopExp::MapShapesAndAncestors(aER, TopAbs_VERTEX, TopAbs_EDGE, aMVER);
+       //modified by NIZNHY-PKV Wed Oct 20 14:46:48 2010t
       }
     }//for (j=1; j<=aNbC; ++j) {
     //
@@ -266,21 +277,24 @@ static
 //=======================================================================
   void GEOMAlgo_WESCorrector::DoCorrections()
 {
-  Standard_Boolean bIsRegular, bIsNothingToDo;
+  Standard_Boolean bIsRegular, bIsNothingToDo, bToScale;
   Standard_Integer iErr;
+  Standard_Real aScale;
   TopoDS_Wire aW;
   BOP_ListIteratorOfListOfConnexityBlock aCBIt;
+  GEOMAlgo_WESScaler aWSC;
   //
   const TopoDS_Face& aF=myWES->Face();
   //
+  bToScale=IsToScale(aF, aScale);
+  //
   myNewWES.SetFace(aF);
   aCBIt.Initialize(myConnexityBlocks);
   for (; aCBIt.More(); aCBIt.Next()) {
     const BOP_ConnexityBlock& aCB=aCBIt.Value();
     const TopTools_ListOfShape& aLE=aCB.Shapes();
-
+    //
     bIsRegular=aCB.IsRegular();
-
     if (bIsRegular) {
       MakeWire(aLE, aW);
       myNewWES.AddShape (aW);
@@ -289,30 +303,84 @@ static
     //
     GEOMAlgo_WireSplitter aWS;
     //
-    aWS.SetFace(aF);
-    aWS.SetEdges(aLE);
-    //
-    aWS.Perform();
-    iErr=aWS.ErrorStatus();
-    if (iErr) {
-      continue;
-    }
-    bIsNothingToDo=aWS.IsNothingToDo();
-    if (bIsNothingToDo) {
-      MakeWire(aLE, aW);
-      myNewWES.AddShape (aW);
-      continue;
-    }
+    if(bToScale) {
+      TopoDS_Shape aE;
+      TopTools_ListIteratorOfListOfShape aIt;
+      BOPTColStd_ListIteratorOfListOfListOfShape aItLLSS;
+      //
+      aWSC.SetScale(aScale);
+      aWSC.SetFace(aF);
+      aWSC.SetEdges(aLE);
+      //
+      aWSC.Perform();
+      iErr=aWSC.ErrorStatus();
+      if (iErr) {
+       return;
+      }
+      //
+      const TopoDS_Face& aFS=aWSC.FaceScaled();
+      const TopTools_ListOfShape& aLES=aWSC.EdgesScaled();
+      //
+      aWS.SetFace(aFS);
+      aWS.SetEdges(aLES);
+      //
+      aWS.Perform();
+      iErr=aWS.ErrorStatus();
+      if (iErr) {
+       continue;
+      }
+      //
+      bIsNothingToDo=aWS.IsNothingToDo();
+      if (bIsNothingToDo) {
+       MakeWire(aLE, aW);
+       myNewWES.AddShape (aW);
+       continue;
+      }
+      //
+      const BOPTColStd_ListOfListOfShape& aLLSS=aWS.Shapes();
+      aItLLSS.Initialize(aLLSS);
+      for (; aItLLSS.More(); aItLLSS.Next()) {
+       TopTools_ListOfShape aLS;
+       //
+       const TopTools_ListOfShape& aLSS=aItLLSS.Value();
+       aIt.Initialize(aLSS);
+       for (; aIt.More(); aIt.Next()) {
+         const TopoDS_Shape& aES=aIt.Value();
+         aE=aWSC.Origin(aES);
+         aLS.Append(aE);
+       }
+       //
+       MakeWire(aLS, aW);
+       myNewWES.AddShape (aW);
+      }
+    }//if(bToScale)
     //
-    const BOPTColStd_ListOfListOfShape& aSSS=aWS.Shapes();
-    
-    BOPTColStd_ListIteratorOfListOfListOfShape aWireIt(aSSS);
-    for (; aWireIt.More(); aWireIt.Next()) {
-      const TopTools_ListOfShape& aLEx=aWireIt.Value();
+    else {
+      aWS.SetFace(aF);
+      aWS.SetEdges(aLE);
       //
-      MakeWire(aLEx, aW);
-      myNewWES.AddShape (aW);
-    }
+      aWS.Perform();
+      iErr=aWS.ErrorStatus();
+      if (iErr) {
+       continue;
+      }
+      bIsNothingToDo=aWS.IsNothingToDo();
+      if (bIsNothingToDo) {
+       MakeWire(aLE, aW);
+       myNewWES.AddShape (aW);
+       continue;
+      }
+      //
+      const BOPTColStd_ListOfListOfShape& aSSS=aWS.Shapes();
+    
+      BOPTColStd_ListIteratorOfListOfListOfShape aWireIt(aSSS);
+      for (; aWireIt.More(); aWireIt.Next()) {
+       const TopTools_ListOfShape& aLEx=aWireIt.Value();
+       //
+       MakeWire(aLEx, aW);
+       myNewWES.AddShape (aW);
+      }
+    }// else
   }
 }
 //=======================================================================
@@ -331,3 +399,36 @@ static
     aBB.Add(newWire, aE);
   }
 }
+//
+
+//=======================================================================
+//function : IsToScale
+//purpose  : 
+//=======================================================================
+Standard_Boolean IsToScale(const TopoDS_Face& aF, 
+                          Standard_Real& aScale)
+{
+  Standard_Boolean bRet;
+  Standard_Real aV1, aV2, dV, aTr;
+  GeomAbs_SurfaceType aType;
+  BRepAdaptor_Surface aBAS;
+  //
+  bRet=Standard_False;
+  aScale=1.;
+  //
+  aBAS.Initialize(aF);
+  aType=aBAS.GetType();
+  if (aType==GeomAbs_Cylinder) {
+    aTr=1.e5;
+    aV1=aBAS.FirstVParameter();
+    aV2=aBAS.LastVParameter();
+    dV=aV2-aV1;
+    if (dV>aTr) {
+      bRet=!bRet;
+      aScale=1./aTr;
+    }
+  }
+  return bRet;
+}
+
diff --git a/src/GEOMAlgo/GEOMAlgo_WESScaler.cdl b/src/GEOMAlgo/GEOMAlgo_WESScaler.cdl
new file mode 100644 (file)
index 0000000..fe4cdc0
--- /dev/null
@@ -0,0 +1,121 @@
+--  Copyright (C) 2007-2010  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
+--  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
+--
+-- File:       GEOMAlgo_WESScaler.cdl
+-- Created:    
+-- Author:     
+--             <pkv@VORTEX>
+
+class WESScaler from GEOMAlgo  
+       inherits Algo from GEOMAlgo  
+
+       ---Purpose: 
+
+uses 
+    Face from TopoDS, 
+    Shape  from TopoDS,
+    ListOfShape from  TopTools,        
+    DataMapOfOrientedShapeShape from GEOMAlgo,
+    WireEdgeSet from GEOMAlgo,  
+    PWireEdgeSet from GEOMAlgo  
+--raises
+
+is 
+    Create 
+       ---Purpose: Empty constructor    
+       returns WESScaler from GEOMAlgo; 
+    ---C++: alias "Standard_EXPORT virtual ~GEOMAlgo_WESScaler();"  
+     
+    SetScale  (me:out; 
+               aWES: Real from Standard);  
+    ---Purpose: 
+    -- Modifier  
+      
+    Scale(me) 
+       returns Real from Standard;       
+    ---Purpose: 
+    -- Selector  
+        
+    SetFace  (me:out; 
+               aF: Face from TopoDS); 
+     
+    Face (me) 
+       returns Face from TopoDS; 
+    ---C++:  return const & 
+     
+    SetEdges  (me:out; 
+               aLE:ListOfShape from  TopTools);  
+     
+    Edges  (me)
+        returns ListOfShape from  TopTools;  
+    ---C++:  return const &             
+    
+    Perform(me:out)  
+       ---Purpose:  Performs the algorithm 
+       is redefined;   
+      
+    FaceScaled (me) 
+       returns Face from TopoDS; 
+    ---C++:  return const & 
+     
+    EdgesScaled  (me)
+        returns ListOfShape from  TopTools;  
+    ---C++:  return const &   
+    
+    Image(me; 
+           aS:Shape from TopoDS)  
+       returns Shape from TopoDS; 
+    ---C++: return const &  
+    ---Purpose: 
+     
+    Origin(me; 
+           aS:Shape from TopoDS)  
+       returns Shape from TopoDS; 
+    ---C++: return const &   
+    
+    ---Purpose: 
+    Images(me)  
+       returns  DataMapOfOrientedShapeShape from GEOMAlgo; 
+    ---C++: return const &  
+    ---Purpose: 
+    --- Selector 
+     
+    Origins(me)  
+       returns   DataMapOfOrientedShapeShape from GEOMAlgo; 
+    ---C++: return const &  
+    ---Purpose: 
+    --- Selector    
+     
+    CheckData(me:out)  
+       ---Purpose:  Performs the algorithm 
+       is redefined protected; 
+        
+fields 
+    myScale         : Real from Standard is protected; 
+    myFace          : Face from TopoDS is protected;    
+    
+    myEdges         : ListOfShape from  TopTools is protected;    
+    myFaceScaled    : Face from TopoDS is protected;    
+    myEdgesScaled   : ListOfShape from  TopTools is protected;
+    myImages        : DataMapOfOrientedShapeShape from GEOMAlgo is protected;     
+    myOrigins       : DataMapOfOrientedShapeShape from GEOMAlgo is protected;      
+    myShapeTmp      : Shape  from TopoDS is protected;    
+end WESScaler;
+
diff --git a/src/GEOMAlgo/GEOMAlgo_WESScaler.cxx b/src/GEOMAlgo/GEOMAlgo_WESScaler.cxx
new file mode 100644 (file)
index 0000000..a7e2834
--- /dev/null
@@ -0,0 +1,267 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+// File:       GEOMAlgo_WESScaler.cxx
+// Created:    
+// Author:     
+//             <pkv@VORTEX>
+
+
+#include <GEOMAlgo_WESScaler.ixx>
+
+#include <gp_Pnt.hxx>
+#include <gp_Trsf.hxx>
+
+#include <TopoDS_Face.hxx>
+#include <TopoDS_Iterator.hxx>
+#include <TopoDS_Wire.hxx>
+#include <BRep_Builder.hxx>
+
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
+
+#include <BRepBuilderAPI_Transform.hxx>
+
+
+//=======================================================================
+//function : 
+//purpose  : 
+//=======================================================================
+  GEOMAlgo_WESScaler::GEOMAlgo_WESScaler() 
+:
+  GEOMAlgo_Algo()
+{
+  myScale=1.;
+}
+//=======================================================================
+//function : ~
+//purpose  : 
+//=======================================================================
+  GEOMAlgo_WESScaler::~GEOMAlgo_WESScaler() 
+{
+}
+//=======================================================================
+// function: SetScale
+// purpose: 
+//=======================================================================
+  void GEOMAlgo_WESScaler::SetScale (const Standard_Real aScale)
+{
+  myScale=aScale;
+}
+//=======================================================================
+// function: Scale
+// purpose: 
+//=======================================================================
+  Standard_Real GEOMAlgo_WESScaler::Scale()const 
+{
+  return myScale;
+}
+//=======================================================================
+// function: SetFace
+// purpose: 
+//=======================================================================
+  void GEOMAlgo_WESScaler::SetFace(const TopoDS_Face& aF)
+{
+  myFace=aF;
+}
+//=======================================================================
+// function: Face
+// purpose: 
+//=======================================================================
+  const TopoDS_Face& GEOMAlgo_WESScaler::Face()const
+{
+  return myFace;
+}
+//=======================================================================
+// function: SetEdges
+// purpose: 
+//=======================================================================
+  void GEOMAlgo_WESScaler::SetEdges(const TopTools_ListOfShape& aLE)
+{
+  myEdges=aLE;
+}
+//=======================================================================
+// function: Edges
+// purpose: 
+//=======================================================================
+  const TopTools_ListOfShape& GEOMAlgo_WESScaler::Edges()const
+{
+  return myEdges;
+}
+//=======================================================================
+// function: FaceScaled
+// purpose: 
+//=======================================================================
+  const TopoDS_Face& GEOMAlgo_WESScaler::FaceScaled()const
+{
+  return myFaceScaled;
+}
+//=======================================================================
+// function: EdgesScaled
+// purpose: 
+//=======================================================================
+  const TopTools_ListOfShape& GEOMAlgo_WESScaler::EdgesScaled()const
+{
+  return myEdgesScaled;
+}
+//=======================================================================
+// function: Image
+// purpose: 
+//=======================================================================
+  const TopoDS_Shape& GEOMAlgo_WESScaler::Image (const TopoDS_Shape& aS) const
+{
+  if (myImages.IsBound(aS)) {
+    return myImages.Find(aS);
+  }
+  return myShapeTmp;
+}
+//=======================================================================
+// function: Origin
+// purpose: 
+//=======================================================================
+  const TopoDS_Shape& GEOMAlgo_WESScaler::Origin (const TopoDS_Shape& aS) const
+{
+  if (myOrigins.IsBound(aS)) {
+    return myOrigins.Find(aS);
+  }
+  return myShapeTmp;
+}
+//=======================================================================
+// function: Images
+// purpose: 
+//=======================================================================
+  const GEOMAlgo_DataMapOfOrientedShapeShape& GEOMAlgo_WESScaler::Images () const
+{
+  return myImages;
+}
+//=======================================================================
+// function: Origins
+// purpose: 
+//=======================================================================
+  const GEOMAlgo_DataMapOfOrientedShapeShape& GEOMAlgo_WESScaler::Origins () const
+{
+  return myOrigins;
+}
+//=======================================================================
+// function: CheckData
+// purpose: 
+//=======================================================================
+  void GEOMAlgo_WESScaler::CheckData()
+{
+  myErrorStatus=0;
+  //
+  if(myFace.IsNull()) {
+    myErrorStatus=2;
+    return;
+  }
+  if(!myEdges.Extent()) {
+    myErrorStatus=3;
+    return;
+  }
+  if (myScale<=0.){
+    myErrorStatus=4;
+  }
+}
+//=======================================================================
+// function: Perform
+// purpose: 
+//=======================================================================
+  void GEOMAlgo_WESScaler::Perform()
+{
+  Standard_Boolean bIsDone;
+  Standard_Integer i;
+  gp_Pnt aP;
+  gp_Trsf aTrsf;
+  TopAbs_Orientation aOr;
+  TopoDS_Shape aFC, aFR, aER;
+  TopoDS_Wire aWE;
+  TopoDS_Iterator aItS;
+  BRep_Builder aBB;
+  TopTools_ListIteratorOfListOfShape aIt;
+  //
+  // 0. CheckData
+  CheckData();
+  if(myErrorStatus) {
+    return;
+  }
+  //
+  myImages.Clear();
+  myOrigins.Clear();
+  myEdgesScaled.Clear();
+  //
+  // 1. aFC
+  aFC=myFace.EmptyCopied();
+  //
+  aBB.MakeWire(aWE);
+  aIt.Initialize(myEdges);
+  for (; aIt.More(); aIt.Next()) {
+    const TopoDS_Shape& aE=aIt.Value();
+    aBB.Add(aWE, aE);
+  }
+  aBB.Add(aFC, aWE);
+  //
+  aItS.Initialize(myFace);
+  for (; aItS.More(); aItS.Next()) {
+    const TopoDS_Shape& aW=aItS.Value();
+    aBB.Add(aFC, aW);
+  }
+  //
+  // 2. Scale aFC
+  aP.SetCoord(0.,0.,0.);
+  aTrsf.SetScale(aP, myScale);
+  //
+  BRepBuilderAPI_Transform aBT(aTrsf);
+  aBT.Perform(aFC);
+  bIsDone=aBT.IsDone();
+  if (!bIsDone) {
+    myErrorStatus=10;
+    return;
+  }
+  //
+  const TopoDS_Shape& aSR=aBT.Shape();
+  //
+  // Refined image face FR 
+  aFR=aSR.EmptyCopied();
+  aItS.Initialize(aSR);
+  for (i=0; aItS.More(); aItS.Next(),++i) {
+    const TopoDS_Shape& aWR=aItS.Value();
+    if (i) {
+      aBB.Add(aFR, aWR);
+    }
+  }
+  myFaceScaled=*((TopoDS_Face*)&aFR);
+  //
+  // 3. Fill Images, Origins, EdgesScaled
+  aIt.Initialize(myEdges);
+  for (; aIt.More(); aIt.Next()) {
+    const TopoDS_Shape& aE=aIt.Value();
+    aOr=aE.Orientation();
+    //
+    aER=aBT.ModifiedShape(aE);
+    if(aER.IsNull()) {
+      myErrorStatus=11;
+      return;
+    }
+    //
+    aER.Orientation(aOr);
+    myImages.Bind(aE, aER);
+    myOrigins.Bind(aER, aE);
+    //
+    myEdgesScaled.Append(aER);
+  }
+}
diff --git a/src/GEOMAlgo/GEOMAlgo_WESScaler.hxx b/src/GEOMAlgo/GEOMAlgo_WESScaler.hxx
new file mode 100644 (file)
index 0000000..a3f150f
--- /dev/null
@@ -0,0 +1,166 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _GEOMAlgo_WESScaler_HeaderFile
+#define _GEOMAlgo_WESScaler_HeaderFile
+
+#ifndef _Standard_Real_HeaderFile
+#include <Standard_Real.hxx>
+#endif
+#ifndef _TopoDS_Face_HeaderFile
+#include <TopoDS_Face.hxx>
+#endif
+#ifndef _TopTools_ListOfShape_HeaderFile
+#include <TopTools_ListOfShape.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _GEOMAlgo_Algo_HeaderFile
+#include <GEOMAlgo_Algo.hxx>
+#endif
+class TopoDS_Face;
+class TopTools_ListOfShape;
+class TopoDS_Shape;
+class GEOMAlgo_DataMapOfOrientedShapeShape;
+
+
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+#ifndef _Standard_Macro_HeaderFile
+#include <Standard_Macro.hxx>
+#endif
+
+
+class GEOMAlgo_WESScaler  : public GEOMAlgo_Algo {
+
+public:
+
+    void* operator new(size_t,void* anAddress) 
+      {
+        return anAddress;
+      }
+    void* operator new(size_t size) 
+      { 
+        return Standard::Allocate(size); 
+      }
+    void  operator delete(void *anAddress) 
+      { 
+        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+      }
+ // Methods PUBLIC
+ // 
+
+//! Empty constructor <br>
+Standard_EXPORT GEOMAlgo_WESScaler();
+Standard_EXPORT virtual ~GEOMAlgo_WESScaler();
+
+
+//! Modifier <br>
+Standard_EXPORT   void SetScale(const Standard_Real aWES) ;
+
+
+//! Selector <br>
+Standard_EXPORT   Standard_Real Scale() const;
+
+
+Standard_EXPORT   void SetFace(const TopoDS_Face& aF) ;
+
+
+Standard_EXPORT  const TopoDS_Face& Face() const;
+
+
+Standard_EXPORT   void SetEdges(const TopTools_ListOfShape& aLE) ;
+
+
+Standard_EXPORT  const TopTools_ListOfShape& Edges() const;
+
+//!  Performs the algorithm <br>
+Standard_EXPORT virtual  void Perform() ;
+
+
+Standard_EXPORT  const TopoDS_Face& FaceScaled() const;
+
+
+Standard_EXPORT  const TopTools_ListOfShape& EdgesScaled() const;
+
+
+Standard_EXPORT  const TopoDS_Shape& Image(const TopoDS_Shape& aS) const;
+
+
+Standard_EXPORT  const TopoDS_Shape& Origin(const TopoDS_Shape& aS) const;
+
+
+//! Selector <br>
+Standard_EXPORT  const GEOMAlgo_DataMapOfOrientedShapeShape& Images() const;
+
+
+//! Selector <br>
+Standard_EXPORT  const GEOMAlgo_DataMapOfOrientedShapeShape& Origins() const;
+
+
+
+
+
+protected:
+
+ // Methods PROTECTED
+ // 
+
+//!  Performs the algorithm <br>
+Standard_EXPORT virtual  void CheckData() ;
+
+
+ // Fields PROTECTED
+ //
+Standard_Real myScale;
+TopoDS_Face myFace;
+TopTools_ListOfShape myEdges;
+TopoDS_Face myFaceScaled;
+TopTools_ListOfShape myEdgesScaled;
+GEOMAlgo_DataMapOfOrientedShapeShape myImages;
+GEOMAlgo_DataMapOfOrientedShapeShape myOrigins;
+TopoDS_Shape myShapeTmp;
+
+
+private: 
+
+ // Methods PRIVATE
+ // 
+
+
+ // Fields PRIVATE
+ //
+
+
+};
+
+
+
+
+
+// other Inline functions and methods (like "C++: function call" methods)
+//
+
+
+#endif
diff --git a/src/GEOMAlgo/GEOMAlgo_WESScaler.ixx b/src/GEOMAlgo/GEOMAlgo_WESScaler.ixx
new file mode 100644 (file)
index 0000000..1660c58
--- /dev/null
@@ -0,0 +1,24 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include <GEOMAlgo_WESScaler.jxx>
+
+
+
diff --git a/src/GEOMAlgo/GEOMAlgo_WESScaler.jxx b/src/GEOMAlgo/GEOMAlgo_WESScaler.jxx
new file mode 100644 (file)
index 0000000..adfba23
--- /dev/null
@@ -0,0 +1,34 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _TopoDS_Face_HeaderFile
+#include <TopoDS_Face.hxx>
+#endif
+#ifndef _TopTools_ListOfShape_HeaderFile
+#include <TopTools_ListOfShape.hxx>
+#endif
+#ifndef _TopoDS_Shape_HeaderFile
+#include <TopoDS_Shape.hxx>
+#endif
+#ifndef _GEOMAlgo_DataMapOfOrientedShapeShape_HeaderFile
+#include <GEOMAlgo_DataMapOfOrientedShapeShape.hxx>
+#endif
+#ifndef _GEOMAlgo_WESScaler_HeaderFile
+#include <GEOMAlgo_WESScaler.hxx>
+#endif
diff --git a/src/GEOMAlgo/Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx b/src/GEOMAlgo/Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx
new file mode 100644 (file)
index 0000000..47455d9
--- /dev/null
@@ -0,0 +1,72 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef _Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+#define _Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_HeaderFile
+
+#ifndef _Standard_Macro_HeaderFile
+#include <Standard_Macro.hxx>
+#endif
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+
+#ifndef _Handle_TCollection_MapNode_HeaderFile
+#include <Handle_TCollection_MapNode.hxx>
+#endif
+
+class Standard_Transient;
+class Handle_Standard_Type;
+class Handle(TCollection_MapNode);
+class GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape;
+Standard_EXPORT Handle_Standard_Type& STANDARD_TYPE(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape);
+
+class Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) : public Handle(TCollection_MapNode) {
+  public:
+    Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)():Handle(TCollection_MapNode)() {} 
+    Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)(const Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)& aHandle) : Handle(TCollection_MapNode)(aHandle) 
+     {
+     }
+
+    Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)(const GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape* anItem) : Handle(TCollection_MapNode)((TCollection_MapNode *)anItem) 
+     {
+     }
+
+    Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)& operator=(const Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)& aHandle)
+     {
+      Assign(aHandle.Access());
+      return *this;
+     }
+
+    Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)& operator=(const GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape* anItem)
+     {
+      Assign((Standard_Transient *)anItem);
+      return *this;
+     }
+
+    GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape* operator->() const
+     {
+      return (GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape *)ControlAccess();
+     }
+
+//   Standard_EXPORT ~Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape)();
+   Standard_EXPORT static const Handle(GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape) DownCast(const Handle(Standard_Transient)& AnObject);
+};
+#endif
index 597d6d5c69a8eed340ec5f034a2a388bf4fdaadf..3372a1ed38d78ac7c2fb0f36ef56f01ec659071f 100644 (file)
 #
 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-
+#
 #  GEOM GEOMAlgo : tools for Glue Faces algorithm
 #  File   : Makefile.in
 #  Author : Julia DOROVSKIKH
 #  Modified by : Alexander BORODIN (OCN) - autotools usage
 #  Module : GEOM
 #  $Header$
-#
+
 include $(top_srcdir)/adm_local/unix/make_common_starter.am
 
 # Libraries targets
@@ -51,20 +51,27 @@ dist_libGEOMAlgo_la_SOURCES =                       \
        GEOMAlgo_BuilderTools.cxx               \
        GEOMAlgo_ClsfBox.cxx                    \
        GEOMAlgo_Clsf.cxx                       \
+       GEOMAlgo_ClsfSolid.cxx                  \
        GEOMAlgo_ClsfSurf.cxx                   \
        GEOMAlgo_CoupleOfShapes.cxx             \
+       GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape_0.cxx     \
        GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger_0.cxx         \
+       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyShapeShape_0.cxx      \
        GEOMAlgo_DataMapIteratorOfDataMapOfRealListOfShape_0.cxx        \
        GEOMAlgo_DataMapIteratorOfDataMapOfShapeReal_0.cxx              \
        GEOMAlgo_DataMapIteratorOfDataMapOfShapeShapeSet_0.cxx          \
+       GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape_0.cxx         \
        GEOMAlgo_DataMapNodeOfDataMapOfPassKeyInteger_0.cxx             \
+       GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape_0.cxx          \
        GEOMAlgo_DataMapNodeOfDataMapOfRealListOfShape_0.cxx            \
        GEOMAlgo_DataMapNodeOfDataMapOfShapeReal_0.cxx                  \
        GEOMAlgo_DataMapNodeOfDataMapOfShapeShapeSet_0.cxx              \
-       GEOMAlgo_DataMapOfPassKeyInteger_0.cxx  \
-       GEOMAlgo_DataMapOfRealListOfShape_0.cxx \
-       GEOMAlgo_DataMapOfShapeReal_0.cxx       \
-       GEOMAlgo_DataMapOfShapeShapeSet_0.cxx   \
+       GEOMAlgo_DataMapOfOrientedShapeShape_0.cxx      \
+       GEOMAlgo_DataMapOfPassKeyInteger_0.cxx          \
+       GEOMAlgo_DataMapOfPassKeyShapeShape_0.cxx       \
+       GEOMAlgo_DataMapOfRealListOfShape_0.cxx         \
+       GEOMAlgo_DataMapOfShapeReal_0.cxx               \
+       GEOMAlgo_DataMapOfShapeShapeSet_0.cxx           \
        GEOMAlgo_FinderShapeOn1.cxx             \
        GEOMAlgo_FinderShapeOn2.cxx             \
        GEOMAlgo_FinderShapeOn.cxx              \
@@ -76,13 +83,15 @@ dist_libGEOMAlgo_la_SOURCES =                       \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfIntegerShape_0.cxx                 \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyListOfShape_0.cxx           \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyShapeListOfShape_0.cxx      \
-       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeBox_0.cxx     \
-       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeState_0.cxx   \
-       GEOMAlgo_IndexedDataMapOfIntegerShape_0.cxx                     \
-       GEOMAlgo_IndexedDataMapOfPassKeyListOfShape_0.cxx               \
-       GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape_0.cxx          \
-       GEOMAlgo_IndexedDataMapOfShapeBox_0.cxx                         \
-       GEOMAlgo_IndexedDataMapOfShapeState_0.cxx                       \
+       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeBox_0.cxx             \
+       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo_0.cxx       \
+       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeState_0.cxx           \
+       GEOMAlgo_IndexedDataMapOfIntegerShape_0.cxx                             \
+       GEOMAlgo_IndexedDataMapOfPassKeyListOfShape_0.cxx                       \
+       GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape_0.cxx                  \
+       GEOMAlgo_IndexedDataMapOfShapeBox_0.cxx                                 \
+       GEOMAlgo_IndexedDataMapOfShapeShapeInfo_0.cxx                           \
+       GEOMAlgo_IndexedDataMapOfShapeState_0.cxx                               \
        GEOMAlgo_ListIteratorOfListOfCoupleOfShapes_0.cxx               \
        GEOMAlgo_ListIteratorOfListOfPnt_0.cxx                          \
        GEOMAlgo_ListNodeOfListOfCoupleOfShapes_0.cxx                   \
@@ -94,6 +103,9 @@ dist_libGEOMAlgo_la_SOURCES =                        \
        GEOMAlgo_PassKeyShape.cxx               \
        GEOMAlgo_PassKeyShapeMapHasher.cxx      \
        GEOMAlgo_ShapeAlgo.cxx                  \
+       GEOMAlgo_ShapeInfo.cxx                  \
+       GEOMAlgo_ShapeInfoFiller.cxx            \
+       GEOMAlgo_ShapeInfoFiller_1.cxx          \
        GEOMAlgo_ShapeSet.cxx                   \
        GEOMAlgo_ShapeSolid.cxx                 \
        GEOMAlgo_ShellSolid.cxx                 \
@@ -106,18 +118,10 @@ dist_libGEOMAlgo_la_SOURCES =                     \
        GEOMAlgo_Tools_1.cxx                    \
        GEOMAlgo_VertexSolid.cxx                \
        GEOMAlgo_WESCorrector.cxx               \
+       GEOMAlgo_WESScaler.cxx                  \
        GEOMAlgo_WireEdgeSet.cxx                \
        GEOMAlgo_WireSolid.cxx                  \
-       GEOMAlgo_WireSplitter.cxx               \
-       GEOMAlgo_ClsfSolid.cxx                  \
-       GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape_0.cxx                  \
-       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyShapeShape_0.cxx              \
-       GEOMAlgo_DataMapOfPassKeyShapeShape_0.cxx                               \
-       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo_0.cxx       \
-       GEOMAlgo_ShapeInfoFiller_1.cxx                                          \
-       GEOMAlgo_IndexedDataMapOfShapeShapeInfo_0.cxx                           \
-       GEOMAlgo_ShapeInfo.cxx                                                  \
-       GEOMAlgo_ShapeInfoFiller.cxx
+       GEOMAlgo_WireSplitter.cxx
 
 # header files
 salomeinclude_HEADERS =                                        \
@@ -173,24 +177,33 @@ salomeinclude_HEADERS =                                   \
        GEOMAlgo_Clsf.hxx                               \
        GEOMAlgo_Clsf.ixx                               \
        GEOMAlgo_Clsf.jxx                               \
+       GEOMAlgo_ClsfSolid.hxx                          \
+       GEOMAlgo_ClsfSolid.ixx                          \
+       GEOMAlgo_ClsfSolid.jxx                          \
        GEOMAlgo_ClsfSurf.hxx                           \
        GEOMAlgo_ClsfSurf.ixx                           \
        GEOMAlgo_ClsfSurf.jxx                           \
        GEOMAlgo_CoupleOfShapes.hxx                     \
        GEOMAlgo_CoupleOfShapes.ixx                     \
        GEOMAlgo_CoupleOfShapes.jxx                     \
-       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx   \
-       GEOMAlgo_DataMapIteratorOfDataMapOfRealListOfShape.hxx  \
-       GEOMAlgo_DataMapIteratorOfDataMapOfShapeReal.hxx        \
-       GEOMAlgo_DataMapIteratorOfDataMapOfShapeShapeSet.hxx    \
+       GEOMAlgo_DataMapIteratorOfDataMapOfOrientedShapeShape.hxx       \
+       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyInteger.hxx           \
+       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyShapeShape.hxx        \
+       GEOMAlgo_DataMapIteratorOfDataMapOfRealListOfShape.hxx          \
+       GEOMAlgo_DataMapIteratorOfDataMapOfShapeReal.hxx                \
+       GEOMAlgo_DataMapIteratorOfDataMapOfShapeShapeSet.hxx            \
+       GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx   \
        GEOMAlgo_DataMapNodeOfDataMapOfPassKeyInteger.hxx       \
+       GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape.hxx    \
        GEOMAlgo_DataMapNodeOfDataMapOfRealListOfShape.hxx      \
        GEOMAlgo_DataMapNodeOfDataMapOfShapeReal.hxx            \
        GEOMAlgo_DataMapNodeOfDataMapOfShapeShapeSet.hxx        \
-       GEOMAlgo_DataMapOfPassKeyInteger.hxx    \
-       GEOMAlgo_DataMapOfRealListOfShape.hxx   \
-       GEOMAlgo_DataMapOfShapeReal.hxx         \
-       GEOMAlgo_DataMapOfShapeShapeSet.hxx     \
+       GEOMAlgo_DataMapOfOrientedShapeShape.hxx        \
+       GEOMAlgo_DataMapOfPassKeyInteger.hxx            \
+       GEOMAlgo_DataMapOfPassKeyShapeShape.hxx         \
+       GEOMAlgo_DataMapOfRealListOfShape.hxx           \
+       GEOMAlgo_DataMapOfShapeReal.hxx                 \
+       GEOMAlgo_DataMapOfShapeShapeSet.hxx             \
        GEOMAlgo_FinderShapeOn1.ixx             \
        GEOMAlgo_FinderShapeOn1.hxx             \
        GEOMAlgo_FinderShapeOn1.jxx             \
@@ -217,18 +230,24 @@ salomeinclude_HEADERS =                                   \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyListOfShape.hxx             \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyShapeListOfShape.hxx        \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeBox.hxx                       \
+       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo.hxx                 \
        GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeState.hxx                     \
        GEOMAlgo_IndexedDataMapOfIntegerShape.hxx                                       \
        GEOMAlgo_IndexedDataMapOfPassKeyListOfShape.hxx                                 \
        GEOMAlgo_IndexedDataMapOfPassKeyShapeListOfShape.hxx                            \
        GEOMAlgo_IndexedDataMapOfShapeBox.hxx                                           \
+       GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx                                     \
        GEOMAlgo_IndexedDataMapOfShapeState.hxx                                         \
-       GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx                                 \
-       GEOMAlgo_ListIteratorOfListOfPnt.hxx                                            \
-       GEOMAlgo_ListNodeOfListOfCoupleOfShapes.hxx                                     \
-       GEOMAlgo_ListNodeOfListOfPnt.hxx        \
-       GEOMAlgo_ListOfCoupleOfShapes.hxx       \
-       GEOMAlgo_ListOfPnt.hxx                  \
+       GEOMAlgo_KindOfBounds.hxx               \
+       GEOMAlgo_KindOfClosed.hxx               \
+       GEOMAlgo_KindOfName.hxx                 \
+       GEOMAlgo_KindOfShape.hxx                \
+       GEOMAlgo_ListIteratorOfListOfCoupleOfShapes.hxx \
+       GEOMAlgo_ListIteratorOfListOfPnt.hxx            \
+       GEOMAlgo_ListNodeOfListOfCoupleOfShapes.hxx     \
+       GEOMAlgo_ListNodeOfListOfPnt.hxx                \
+       GEOMAlgo_ListOfCoupleOfShapes.hxx               \
+       GEOMAlgo_ListOfPnt.hxx                          \
        GEOMAlgo_PassKey.hxx                    \
        GEOMAlgo_PassKey.ixx                    \
        GEOMAlgo_PassKey.jxx                    \
@@ -245,6 +264,12 @@ salomeinclude_HEADERS =                                    \
        GEOMAlgo_ShapeAlgo.hxx                  \
        GEOMAlgo_ShapeAlgo.ixx                  \
        GEOMAlgo_ShapeAlgo.jxx                  \
+       GEOMAlgo_ShapeInfo.hxx                  \
+       GEOMAlgo_ShapeInfo.ixx                  \
+       GEOMAlgo_ShapeInfo.jxx                  \
+       GEOMAlgo_ShapeInfoFiller.hxx            \
+       GEOMAlgo_ShapeInfoFiller.ixx            \
+       GEOMAlgo_ShapeInfoFiller.jxx            \
        GEOMAlgo_ShapeSet.hxx                   \
        GEOMAlgo_ShapeSet.ixx                   \
        GEOMAlgo_ShapeSet.jxx                   \
@@ -279,6 +304,9 @@ salomeinclude_HEADERS =                                     \
        GEOMAlgo_WESCorrector.hxx               \
        GEOMAlgo_WESCorrector.ixx               \
        GEOMAlgo_WESCorrector.jxx               \
+       GEOMAlgo_WESScaler.hxx                  \
+       GEOMAlgo_WESScaler.ixx                  \
+       GEOMAlgo_WESScaler.jxx                  \
        GEOMAlgo_WireEdgeSet.hxx                \
        GEOMAlgo_WireEdgeSet.ixx                \
        GEOMAlgo_WireEdgeSet.jxx                \
@@ -290,8 +318,11 @@ salomeinclude_HEADERS =                                    \
        GEOMAlgo_WireSplitter.jxx               \
        Handle_GEOMAlgo_ClsfBox.hxx             \
        Handle_GEOMAlgo_Clsf.hxx                \
+       Handle_GEOMAlgo_ClsfSolid.hxx           \
        Handle_GEOMAlgo_ClsfSurf.hxx            \
+       Handle_GEOMAlgo_DataMapNodeOfDataMapOfOrientedShapeShape.hxx                    \
        Handle_GEOMAlgo_DataMapNodeOfDataMapOfPassKeyInteger.hxx                        \
+       Handle_GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape.hxx                     \
        Handle_GEOMAlgo_DataMapNodeOfDataMapOfRealListOfShape.hxx                       \
        Handle_GEOMAlgo_DataMapNodeOfDataMapOfShapeReal.hxx                             \
        Handle_GEOMAlgo_DataMapNodeOfDataMapOfShapeShapeSet.hxx                         \
@@ -300,30 +331,10 @@ salomeinclude_HEADERS =                                   \
        Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyListOfShape.hxx      \
        Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfPassKeyShapeListOfShape.hxx \
        Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeBox.hxx                \
+       Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo.hxx          \
        Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeState.hxx              \
        Handle_GEOMAlgo_ListNodeOfListOfCoupleOfShapes.hxx                              \
-       Handle_GEOMAlgo_ListNodeOfListOfPnt.hxx                                         \
-       GEOMAlgo_ClsfSolid.hxx                                                          \
-       GEOMAlgo_ClsfSolid.ixx                                                          \
-       GEOMAlgo_ClsfSolid.jxx                                                          \
-       GEOMAlgo_DataMapIteratorOfDataMapOfPassKeyShapeShape.hxx                        \
-       GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape.hxx                            \
-       GEOMAlgo_DataMapOfPassKeyShapeShape.hxx                                         \
-       GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo.hxx                 \
-       GEOMAlgo_IndexedDataMapOfShapeShapeInfo.hxx                                     \
-       GEOMAlgo_KindOfBounds.hxx               \
-       GEOMAlgo_KindOfClosed.hxx               \
-       GEOMAlgo_KindOfName.hxx                 \
-       GEOMAlgo_KindOfShape.hxx                \
-       GEOMAlgo_ShapeInfo.hxx                  \
-       GEOMAlgo_ShapeInfo.ixx                  \
-       GEOMAlgo_ShapeInfo.jxx                  \
-       GEOMAlgo_ShapeInfoFiller.hxx            \
-       GEOMAlgo_ShapeInfoFiller.ixx            \
-       GEOMAlgo_ShapeInfoFiller.jxx            \
-       Handle_GEOMAlgo_ClsfSolid.hxx           \
-       Handle_GEOMAlgo_DataMapNodeOfDataMapOfPassKeyShapeShape.hxx                     \
-       Handle_GEOMAlgo_IndexedDataMapNodeOfIndexedDataMapOfShapeShapeInfo.hxx
+       Handle_GEOMAlgo_ListNodeOfListOfPnt.hxx
 
 libGEOMAlgo_la_CPPFLAGS =      \
        $(CAS_CPPFLAGS)         \
@@ -384,6 +395,7 @@ CDL_FILES =                                 \
        GEOMAlgo_Tools3D.cdl                    \
        GEOMAlgo_VertexSolid.cdl                \
        GEOMAlgo_WESCorrector.cdl               \
+       GEOMAlgo_WESScaler.cdl                  \
        GEOMAlgo_WireEdgeSet.cdl                \
        GEOMAlgo_WireSolid.cdl                  \
        GEOMAlgo_WireSplitter.cdl
index 6cbf4f37413e94c9d7c6d09c910f448af4ed8af8..efd69ff3c6024c5419a63839b6742b40e1d96ae8 100644 (file)
@@ -893,7 +893,7 @@ GEOM::GEOM_Object_ptr GEOMBase::GetObjectFromIOR( const char* theIOR )
 // function : GetIORFromObject()
 // purpose  : returns IOR of a given GEOM_Object
 //=======================================================================
-char* GEOMBase::GetIORFromObject( const GEOM::GEOM_Object_ptr& theObject )
+QString GEOMBase::GetIORFromObject( const GEOM::GEOM_Object_ptr& theObject )
 {
   if ( CORBA::is_nil( theObject ) )
     return NULL;
index e1bd56882315fc912ddbb1eed05404475a62d8ab..fb846fe3c59a15ede7a059d72ba349d56f2e07a4 100644 (file)
@@ -90,7 +90,7 @@ public :
 
   static GEOM::GEOM_Object_ptr GetObjectFromIOR(const char* theIOR);
 
-  static char* GetIORFromObject(const GEOM::GEOM_Object_ptr& theObject);
+  static QString GetIORFromObject(const GEOM::GEOM_Object_ptr& theObject);
 
   /* Geometry */
   static bool VertexToPoint(const TopoDS_Shape& S, gp_Pnt& P);
index 3a287865874b03d11eb1e4b3e6752f7649460a8c..de5f92978a387ffe1dea7b401cd842499f8037f3 100755 (executable)
@@ -95,7 +95,8 @@ GEOMBase_Helper::GEOMBase_Helper( SUIT_Desktop* desktop )
 //================================================================
 GEOMBase_Helper::~GEOMBase_Helper()
 {
-  if ( !SUIT_Session::session()->activeApplication()->desktop() )
+  //rnv: Fix for the "IPAL21922 : WinTC5.1.4: incorrect quit salome"
+  if ( !SUIT_Session::session()->activeApplication() || !SUIT_Session::session()->activeApplication()->desktop() )
     return;
 
   if ( myPreview.size() )
@@ -169,9 +170,10 @@ void GEOMBase_Helper::erase( const ObjectList& objList, const bool updateView )
 void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView )
 {
   if ( !object->_is_nil() ) {
-    std::string entry = getEntry( object );
+    QString entry = getEntry( object );
     getDisplayer()->Erase( new SALOME_InteractiveObject(
-      entry.c_str(), "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView );
+      entry.toLatin1().constData(), 
+      "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView );
   }
 }
 
@@ -208,9 +210,9 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object,
     // Enable activisation of selection
     getDisplayer()->SetToActivate( true );
 
-    std::string entry = getEntry( object );
+    QString entry = getEntry( object );
     getDisplayer()->Redisplay(new SALOME_InteractiveObject
-                              (entry.c_str(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false);
+                              (entry.toLatin1().constData(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false);
   }
 
   if ( withChildren ) {
@@ -226,9 +228,9 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object,
             (GeometryGUI::ClientSObjectToObject(anIt->Value()));
           if ( !CORBA::is_nil( aChild ) ) {
             if ( !aChild->_is_nil() ) {
-              std::string entry = getEntry( aChild );
+              QString entry = getEntry( aChild );
               getDisplayer()->Redisplay( new SALOME_InteractiveObject(
-                entry.c_str(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false );
+                entry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false );
             }
           }
         }
@@ -448,10 +450,10 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo
     GEOM::GEOM_Object_ptr anObj = *anIter;
     if ( anObj->_is_nil() )
       continue;
-    std::string aEntry = getEntry( anObj );
-    if ( aEntry != "" )
+    QString anEntry = getEntry( anObj );
+    if ( anEntry != "" )
       aListOfIO.Append( new SALOME_InteractiveObject(
-        aEntry.c_str(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
+        anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
   }
 
   getDisplayer()->LocalSelection( aListOfIO, theMode );
@@ -618,21 +620,18 @@ SalomeApp_Study* GEOMBase_Helper::getStudy() const
 // Function : getEntry
 // Purpose  :
 //================================================================
-char* GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const
+QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const
 {
   SalomeApp_Study* study = getStudy();
   if ( study )  {
-    char * objIOR = GEOMBase::GetIORFromObject( object );
-    std::string IOR( objIOR );
-    free( objIOR );
-    if ( IOR != "" ) {
-      _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( IOR ) );
-      if ( SO ) {
-              return (char*) TCollection_AsciiString((char*)SO->GetID().c_str()).ToCString();
-      }
+    QString objIOR = GEOMBase::GetIORFromObject( object );
+    if ( objIOR != "" ) {
+      _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toLatin1().constData() ) );
+      if ( SO )
+        return QString::fromStdString(SO->GetID());
     }
   }
-  return (char*)"";
+  return "";
 }
 
 //================================================================
@@ -1024,9 +1023,8 @@ bool GEOMBase_Helper::selectObjects( ObjectList& objects )
   ObjectList::iterator anIter;
   for ( anIter = objects.begin(); anIter != objects.end(); ++anIter )
   {
-    std::string entry = getEntry( *anIter );
-    QString aEntry( entry.c_str() );
-    LightApp_DataOwner* anOwher = new LightApp_DataOwner( aEntry );
+    QString anEntry = getEntry( *anIter );
+    LightApp_DataOwner* anOwher = new LightApp_DataOwner( anEntry );
     aList.append( anOwher );
   }
 
@@ -1056,8 +1054,8 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr
     dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
   _PTR(Study) aDStudy = appStudy->studyDS();
-  std::string IOR = GEOMBase::GetIORFromObject( theFather );
-  _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR ) );
+  QString IOR = GEOMBase::GetIORFromObject( theFather );
+  _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toLatin1().constData() ) );
 
   bool inStudy = false;
   GEOM::GEOM_Object_var aReturnObject;
@@ -1072,7 +1070,7 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr
   }
   if (inStudy)
     return aReturnObject._retn();
-
+  
   return GEOM::GEOM_Object::_nil();
 }
 
@@ -1103,11 +1101,11 @@ void GEOMBase_Helper::addSubshapesToFather( QMap<QString, GEOM::GEOM_Object_var>
     if ( !anOp->_is_nil() ) {
       GEOM::GEOM_Object_var aFatherObj = anOp->GetMainShape( it.value() );
       if ( !aFatherObj->_is_nil() ) {
-        std::string aFatherEntry = getEntry( aFatherObj );
+        QString aFatherEntry = getEntry( aFatherObj );
         if ( aFatherEntry != "") { // additional checking that object is valid 0020598 EDF 1191
           GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aFatherObj, it.key().toLatin1().data() );
           //Add Object to study if its not exist
-          if ( aFindedObject == GEOM::GEOM_Object::_nil() )
+         if ( aFindedObject->_is_nil() )
             GeometryGUI::GetGeomGen()->AddInStudy(GeometryGUI::ClientStudyToStudy(aDStudy),
                                                   it.value(), it.key().toLatin1().data(), aFatherObj );
         }
index b8e12adbaafb7f663b1c8bc0293bbb17515b9953..0a3fc2914fd827aa7bcd98a97295a41142aeec7e 100755 (executable)
@@ -177,7 +177,7 @@ protected:
   SUIT_Desktop*               getDesktop() const;
 
 private:
-  char* getEntry              ( GEOM::GEOM_Object_ptr ) const;
+  QString                     getEntry( GEOM::GEOM_Object_ptr ) const;
   void                        clearShapeBuffer( GEOM::GEOM_Object_ptr );
 
 private:
index 7d09904663716d3430497fa6245f5c695d62ffa0..0e07e69d3bbd9a8ae93aeff9206695e316728869 100644 (file)
@@ -30,7 +30,7 @@
 
 #include <Standard_Stream.hxx>
 
-#include <strstream>
+#include <sstream>
 
 #include "GEOM_Client.hxx"
 #include <SALOMEconfig.h>
@@ -81,7 +81,7 @@ TopoDS_Shape GEOM_Client::Load( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_ptr a
     int sizebuf = SeqFile->length();
     char* buf;
     buf = (char*) &SeqFile[0];
-    std::istrstream streamBrep(buf,sizebuf);
+    std::istringstream streamBrep(buf);
     BRep_Builder aBuilder;
     BRepTools::Read(S, streamBrep, aBuilder);
     return(S);
index 5e5269504fb326acf2589521e0f89f2d8e658aa6..f5f9cafc2727aa3d774da36ad0397d85375ee57d 100644 (file)
@@ -32,6 +32,9 @@
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(GEOM_Gen)
 #
+#ifdef HAVE_FINITE
+#undef HAVE_FINITE // E.A. fix a warning about redefinition of HAVE_FINITE in re-inclusion of Standard_values.h
+#endif
 #ifndef _TColStd_SequenceOfAsciiString_HeaderFile
 #include <TColStd_SequenceOfAsciiString.hxx>
 #endif
index 898d60177e67c44104da6a8aefa982e2f0e13fae..36a455dcf3904ea7d24ff196aa61c9e15454a254 100644 (file)
@@ -114,11 +114,12 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const
 
       if (!entryStr.isEmpty())
       {
+        Handle(SALOME_InteractiveObject) anIO = Handle(SALOME_InteractiveObject)::DownCast(io->GetOwner()); 
         LightApp_DataOwner* owner;
         if (index > -1) // Local Selection
           owner = new LightApp_DataSubOwner (entryStr, index);
-        else // Global Selection
-          owner = new LightApp_DataOwner (entryStr);
+        else if ( !anIO.IsNull() ) // Global Selection
+          owner = new LightApp_DataOwner( anIO );
 
         aList.append(SUIT_DataOwnerPtr(owner));
       }
@@ -134,8 +135,11 @@ void GEOMGUI_OCCSelector::getSelection( SUIT_DataOwnerPtrList& aList ) const
 
       if ( !entryStr.isEmpty() )
       {
-        LightApp_DataOwner* owner = new LightApp_DataOwner( entryStr );
-        aList.append( SUIT_DataOwnerPtr( owner ) );
+        Handle(SALOME_InteractiveObject) anIO = Handle(SALOME_InteractiveObject)::DownCast(io->GetOwner()); 
+        if ( !anIO.IsNull() ) {
+          LightApp_DataOwner* owner = new LightApp_DataOwner( anIO );
+          aList.append( SUIT_DataOwnerPtr( owner ) );
+        }
       }
     }
   }
@@ -196,11 +200,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
   Handle(AIS_InteractiveContext) ic = vw->getAISContext();
 
   // "entry - list_of_int" map for LOCAL selection
-#ifndef WNT
   NCollection_DataMap<TCollection_AsciiString, TColStd_IndexedMapOfInteger> indexesMap;
-#else
-  NCollection_DataMap<Standard_CString, TColStd_IndexedMapOfInteger> indexesMap;
-#endif
 
   QMap<QString,int> globalSelMap; // only Key=entry from this map is used.  value(int) is NOT used at all.
   SelectMgr_IndexedMapOfOwner ownersmap; // map of owners to be selected
@@ -216,11 +216,7 @@ void GEOMGUI_OCCSelector::setSelection( const SUIT_DataOwnerPtrList& aList )
     if ( subOwner )
     {
       QString entry = subOwner->entry();
-#ifndef WNT
       if ( indexesMap.IsBound( TCollection_AsciiString(entry.toLatin1().data())))
-#else
-      if ( indexesMap.IsBound( entry.toLatin1().data() ) )
-#endif
       {
         TColStd_IndexedMapOfInteger& subIndexes = indexesMap.ChangeFind(entry.toLatin1().data());
         subIndexes.Add( subOwner->index() );
index 3d4920b3edc07682cfcfee1d662e8cfcbacae4a9..f4aeb8ccfec76545ed58681fcbc389bf00cfee68 100644 (file)
@@ -98,6 +98,8 @@ QVariant GEOMGUI_Selection::parameter( const int ind, const QString& p ) const
     return QVariant( hasHiddenChildren( ind ) );
   else if ( p == "hasShownChildren" )
     return QVariant( hasShownChildren( ind ) );
+  else if ( p == "compoundOfVertices" )
+    return QVariant( compoundOfVertices( ind ) );
   else
     return LightApp_Selection::parameter( ind, p );
 }
@@ -129,7 +131,8 @@ int GEOMGUI_Selection::typeId( const int index ) const
   int aType = -1;
   GEOM::GEOM_Object_var anObj = getObject( index );
   if ( !CORBA::is_nil( anObj ) )
-    aType = anObj->GetType();
+    //aType = anObj->GetType();
+    aType = (int)anObj->GetShapeType();
   return aType;
 }
 
@@ -273,6 +276,29 @@ bool GEOMGUI_Selection::expandable( const _PTR(SObject)& obj )
   return exp;
 }
 
+bool GEOMGUI_Selection::isCompoundOfVertices( GEOM::GEOM_Object_ptr obj )
+{
+  bool ret = false;
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
+    (SUIT_Session::session()->activeApplication()->activeStudy());
+  if ( appStudy && !CORBA::is_nil( obj ) && obj->GetShapeType() == GEOM::COMPOUND ) {
+    GEOM::GEOM_IMeasureOperations_var anOper = GeometryGUI::GetGeomGen()->GetIMeasureOperations( appStudy->id() );
+    QString whatIs = anOper->WhatIs( obj );
+    QStringList data = whatIs.split( "\n", QString::SkipEmptyParts );
+    int nbVertices = 0, nbCompounds = 0, nbOther = 0;
+    foreach ( QString s, data ) {
+      QString type = s.section( ":", 0, 0 ).trimmed().toLower();
+      int cnt = s.section( ":", 1, 1 ).trimmed().toInt();
+      if ( type == "vertex" ) nbVertices += cnt;
+      else if ( type == "compound" ) nbCompounds += cnt;
+      else if ( type != "shape" ) nbOther += cnt;
+    }
+    ret = nbVertices > 0 && nbCompounds == 1 && nbOther == 0;
+    anOper->Destroy();
+  }
+  return ret;
+}
+
 bool GEOMGUI_Selection::hasHiddenChildren( const int index ) const
 {
   bool OK = false;
@@ -309,6 +335,11 @@ bool GEOMGUI_Selection::hasShownChildren( const int index ) const
   return OK;
 }
 
+bool GEOMGUI_Selection::compoundOfVertices( const int index ) const
+{
+  return isCompoundOfVertices( getObject( index ) );
+}
+
 bool GEOMGUI_Selection::isComponent( const int index ) const
 {
   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>
index e6cb762e8b2e44562a79218b2f7c7f47a661650c..9911ad4dfa34bd1af28fc2a92c9fd866c62a2899 100644 (file)
@@ -48,6 +48,10 @@ public:
   
   virtual bool          processOwner( const LightApp_DataOwner* );
 
+  static bool           hasChildren( const _PTR(SObject)& );
+  static bool           expandable( const _PTR(SObject)& );
+  static bool           isCompoundOfVertices( GEOM::GEOM_Object_ptr );
+
 private:
   bool                  isVisible( const int ) const;
   bool                  isAutoColor( const int ) const;
@@ -58,9 +62,7 @@ private:
   bool                  isVectorsMode( const int ) const;
   bool                  hasHiddenChildren( const int ) const;
   bool                  hasShownChildren( const int ) const;
-
-  static bool           hasChildren( const _PTR(SObject)& );
-  static bool           expandable( const _PTR(SObject)& );
+  bool                  compoundOfVertices( const int ) const;
 
   bool                  isComponent( const int ) const;
   GEOM::GEOM_Object_ptr getObject( const int ) const;
index 82853c712ff04441591de18bf7fd9352b4790a13..3196289e5fb2b854a5e38850812ab4f6c0438131 100644 (file)
@@ -81,6 +81,9 @@
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <Graphic3d_AspectMarker3d.hxx>
+#include <TopTools_MapOfShape.hxx>
+#include <TopTools_ListOfShape.hxx>
+#include <TopTools_ListIteratorOfListOfShape.hxx>
 
 // VTK Includes
 #include <vtkActorCollection.h>
@@ -126,6 +129,36 @@ static inline int getTopAbsMode( const int implType )
   }
 }
 
+static bool isCompoundOfVertices( const TopoDS_Shape& theShape )
+{
+  bool ret = false;
+  if ( !theShape.IsNull() ) {
+    int iType, nbTypes [TopAbs_SHAPE];
+    for (iType = 0; iType < TopAbs_SHAPE; ++iType)
+      nbTypes[iType] = 0;
+    nbTypes[theShape.ShapeType()]++;
+
+    TopTools_MapOfShape aMapOfShape;
+    aMapOfShape.Add(theShape);
+    TopTools_ListOfShape aListOfShape;
+    aListOfShape.Append(theShape);
+
+    TopTools_ListIteratorOfListOfShape itL (aListOfShape);
+    for (; itL.More(); itL.Next()) {
+      TopoDS_Iterator it (itL.Value());
+      for (; it.More(); it.Next()) {
+        TopoDS_Shape s = it.Value();
+        if (aMapOfShape.Add(s)) {
+          aListOfShape.Append(s);
+          nbTypes[s.ShapeType()]++;
+        }
+      }
+    }
+    ret = nbTypes[TopAbs_VERTEX] > 0 && nbTypes[TopAbs_COMPOUND] == 1;
+  }
+  return ret;
+}
+
 //================================================================
 // Function : getFilter
 // Purpose  : Get filter corresponding to the type of object
@@ -579,7 +612,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
           AISShape->SetColor( (Quantity_NameOfColor)GetColor() );
           Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
           anAspect->SetColor( (Quantity_NameOfColor)GetColor() );
-          if ( myShape.ShapeType() == TopAbs_VERTEX )
+          if ( myShape.ShapeType() == TopAbs_VERTEX || isCompoundOfVertices( myShape ) )
           {
             anAspect->SetScale( myScaleOfMarker );
             anAspect->SetTypeOfMarker( myTypeOfMarker );
@@ -588,7 +621,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
         }
         else
         {
-          if ( myShape.ShapeType() == TopAbs_VERTEX )
+          if ( myShape.ShapeType() == TopAbs_VERTEX || isCompoundOfVertices( myShape ) )
           {
             col = aResMgr->colorValue( "Geometry", "point_color", QColor( 255, 255, 0 ) );
             aColor = SalomeApp_Tools::color( col );
@@ -727,7 +760,7 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs )
                       Quantity_Color aQuanColor( aSColor.R, aSColor.G, aSColor.B, Quantity_TOC_RGB );
                       AISShape->SetColor( aQuanColor );
                       AISShape->SetShadingColor( aQuanColor );
-                      if ( myShape.ShapeType() == TopAbs_VERTEX ) {
+                      if ( myShape.ShapeType() == TopAbs_VERTEX || isCompoundOfVertices( myShape ) ) {
                         Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect();
                         anAspect->SetColor( aQuanColor );
                         anAspect->SetScale( myScaleOfMarker );
index 61a9e5362c7ffdedc46ceabcd4aba2a6bfc82713..a99fc90cd513de70848d7d1e44fb0bfcf9192a22 100644 (file)
             <source>ICON_DLG_BUILD_EDGE</source>
             <translation>build_edge.png</translation>
         </message>
+        <message>
+            <source>ICON_DLG_BUILD_EDGE_WIRE</source>
+            <translation>build_edge_wire.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_BUILD_FACE</source>
             <translation>build_face.png</translation>
             <source>ICON_DLG_GLUE_FACES2</source>
             <translation>glue2.png</translation>
         </message>
+        <message>
+            <source>ICON_DLG_LIMIT_TOLERANCE</source>
+            <translation>limit_tolerance.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_INERTIA</source>
             <translation>axisinertia.png</translation>
             <source>ICO_GLUE_FACES</source>
             <translation>glue.png</translation>
         </message>
+        <message>
+            <source>ICO_LIMIT_TOLERANCE</source>
+            <translation>limit_tolerance.png</translation>
+        </message>
         <message>
             <source>ICO_GROUP_CREATE</source>
             <translation>group_new.png</translation>
             <source>ICO_OFFSET</source>
             <translation>offset.png</translation>
         </message>
+        <message>
+            <source>ICO_ORIGIN_AND_VECTORS</source>
+            <translation>origin_and_vectors.png</translation>
+        </message>
         <message>
             <source>ICO_PARTITION</source>
             <translation>partition.png</translation>
index 895af0c3f6272858154d9747039757d03c796559..b0ea88ed136f538fe77173383abd1bd1589aa38d 100644 (file)
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<!--
-  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
-
-  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-
-  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
+<TS version="2.0" language="en_US">
+<context>
+    <name>@default</name>
+    <message>
+        <source>BRep_API: command not done</source>
+        <translation>Error: can&apos;t build object</translation>
+    </message>
+    <message>
+        <source>CHANGE_ORIENTATION_NEW_OBJ_NAME</source>
+        <translation>Invert</translation>
+    </message>
+    <message>
+        <source>CLOSE_CONTOUR_NEW_OBJ_NAME</source>
+        <translation>CloseContour</translation>
+    </message>
+    <message>
+        <source>DEP_OBJECT</source>
+        <translation>Selected object has been used to create another one.
+It can&apos;t be deleted </translation>
+    </message>
+    <message>
+        <source>DEVIDE_EDGE_NEW_OBJECT_NAME</source>
+        <translation>NewObject</translation>
+    </message>
+    <message>
+        <source>ERROR_SHAPE_TYPE</source>
+        <translation>Object of incorrect type selected!
+Please, select face, shell or solid and try again</translation>
+    </message>
+    <message>
+        <source> iErr : 10</source>
+        <translation>the Classifier is NULL</translation>
+    </message>
+    <message>
+        <source> iErr : 11</source>
+        <translation>the Shape is NULL</translation>
+    </message>
+    <message>
+        <source> iErr : 12</source>
+        <translation>Unallowed Type of Subshape</translation>
+    </message>
+    <message>
+        <source> iErr : 13</source>
+        <translation>Unallowed State</translation>
+    </message>
+    <message>
+        <source> iErr : 15</source>
+        <translation>Unallowed Surface Type</translation>
+    </message>
+    <message>
+        <source> iErr : 20</source>
+        <translation>Triangulation is not Found</translation>
+    </message>
+    <message>
+        <source> iErr : 30</source>
+        <translation>Can not Obtain the Line From the Link</translation>
+    </message>
+    <message>
+        <source> iErr : 40</source>
+        <translation>A Point Can Not Be Classified</translation>
+    </message>
+    <message>
+        <source> iErr : 41</source>
+        <translation>Invalid Data for Classifier</translation>
+    </message>
+    <message>
+        <source>GEOM_2D_CONTINUTY</source>
+        <translation>2D continuity</translation>
+    </message>
+    <message>
+        <source>GEOM_2D_CURVE_MODE</source>
+        <translation>2D curve mode</translation>
+    </message>
+    <message>
+        <source>GEOM_2D_TOLERANCE</source>
+        <translation>2D tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_CONTINUTY</source>
+        <translation>3D continuity</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_CURVE_MODE</source>
+        <translation>3D curve mode</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_TOLERANCE</source>
+        <translation>3D tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_3_POINTS</source>
+        <translation>3 points</translation>
+    </message>
+    <message>
+        <source>GEOM_ADD_POINT</source>
+        <translation>Add point</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGLE</source>
+        <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGLE_1</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC_ELLIPSE</source>
+        <translation>Arc of ellipse</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>GEOM_ARCHIMEDE</source>
+        <translation>Archimede</translation>
+    </message>
+    <message>
+        <source>GEOM_ARCHIMEDE_TITLE</source>
+        <translation>Archimede Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC_TITLE</source>
+        <translation>Arc Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_ARGUMENTS</source>
+        <translation>Arguments</translation>
+    </message>
+    <message>
+        <source>GEOM_AXE_MIRROR</source>
+        <translation>Axe Mirror</translation>
+    </message>
+    <message>
+        <source>GEOM_AXIS</source>
+        <translation>Axis</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE</source>
+        <translation>Base</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE_OBJECT</source>
+        <translation>Base Object</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE_POINT</source>
+        <translation>Base Point</translation>
+    </message>
+    <message>
+        <source>GEOM_BEZIER</source>
+        <translation>Bezier</translation>
+    </message>
+    <message>
+        <source>GEOM_BINORMAL</source>
+        <translation>BiNormal</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK</source>
+        <translation>Hexahedral Solid</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCKS_COMPOUND</source>
+        <translation>BlocksCompound</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_EXPLODE</source>
+        <translation>Sub Blocks</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_EXPLODE_TITLE</source>
+        <translation>Sub Blocks Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF</source>
+        <translation>Block Multi-Transformation</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_DOUBLE</source>
+        <translation>Multi-Transformation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_SIMPLE</source>
+        <translation>Multi-Transformation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_TITLE</source>
+        <translation>Block Multi-Transformation</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_TITLE</source>
+        <translation>Hexahedral Solid Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX</source>
+        <translation>Bounding Box</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX_OBJDIM</source>
+        <translation>Object And Its Dimensions</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX_TITLE</source>
+        <translation>Bounding Box Information</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX</source>
+        <translation>Box</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX_OBJ</source>
+        <translation>Dimensions At Origin</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX_TITLE</source>
+        <translation>Box Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_BSplineRestriction</source>
+        <translation>BSplineRestriction</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_APPLY</source>
+        <translation>&amp;Apply</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CANCEL</source>
+        <translation>&amp;Cancel</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CLOSE</source>
+        <translation>&amp;Close</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CLOSE_SKETCH</source>
+        <translation>Sketch Closure</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_END_SKETCH</source>
+        <translation>Sketch Validation</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_EXPLODE</source>
+        <translation>&amp;Explode</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_HELP</source>
+        <translation>&amp;Help</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_NO</source>
+        <translation>&amp;No</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_OK</source>
+        <translation>O&amp;k</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_APPLY_AND_CLOSE</source>
+        <translation>A&amp;pply and Close</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_YES</source>
+        <translation>&amp;Yes</translation>
+    </message>
+    <message>
+        <source>GEOM_BY_LENGTH</source>
+        <translation>By length</translation>
+    </message>
+    <message>
+        <source>GEOM_BY_PARAMETER</source>
+        <translation>By parameter</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER</source>
+        <translation>Center</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_DEFAULT</source>
+        <translation>(Origin by default)</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_POINT</source>
+        <translation>Center Point</translation>
+    </message>
 
-  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+    <message>
+        <source>GEOM_CENTRAL_POINT</source>
+        <translation>Central Point</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER</source>
+        <translation>Chamfer</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_ABORT</source>
+        <translation>Chamfer can&apos;t be computed with %1 and %2</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_ALL</source>
+        <translation>Chamfer On Whole Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_EDGES</source>
+        <translation>Chamfer On Edges From Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_FACES</source>
+        <translation>Chamfer On Faces From Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_TITLE</source>
+        <translation>Chamfer Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_CHANGE_ORIENTATION</source>
+        <translation>Objects to change orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_CHANGE_ORIENTATION_TITLE</source>
+        <translation>Change orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND</source>
+        <translation>Check and Improve Blocks Compound</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_FAILED</source>
+        <translation>Check failed</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_ERRORS</source>
+        <translation>Errors</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_ERRORS</source>
+        <translation>The Compound of Blocks has errors</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS</source>
+        <translation>The Compound of Blocks has no errors</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES</source>
+        <translation>Incriminated Sub-Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INFOS</source>
+        <translation>Object And Its Topological Information</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_SHAPE</source>
+        <translation>Check Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_TITLE</source>
+        <translation>Check Shape Information</translation>
+    </message>
+    <message>
+        <source>GEOM_CIRCLE</source>
+        <translation>Circle</translation>
+    </message>
+    <message>
+        <source>GEOM_CIRCLE_TITLE</source>
+        <translation>Circle Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSECONTOUR_TITLE</source>
+        <translation>Close contour</translation>
+    </message>
+    <message>
+        <source>GEOM_CMASS</source>
+        <translation>Center Of Mass</translation>
+    </message>
+    <message>
+        <source>GEOM_CMASS_TITLE</source>
+        <translation>Center Of Mass Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_COMMON</source>
+        <translation>Common</translation>
+    </message>
+    <message>
+        <source>GEOM_COMMON_TITLE</source>
+        <translation>Common Of Two Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUND</source>
+        <translation>Compound</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUNDSOLID</source>
+        <translation>CompSolid</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUND_TITLE</source>
+        <translation>Create A Compound</translation>
+    </message>
+    <message>
+        <source>GEOM_CONE</source>
+        <translation>Cone</translation>
+    </message>
+    <message>
+        <source>GEOM_CONE_TITLE</source>
+        <translation>Cone Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_CONFIRM</source>
+        <translation>Confirm operation</translation>
+    </message>
+    <message>
+        <source>GEOM_CONFIRM_INFO</source>
+        <translation>Shape contains %1 sub shapes !</translation>
+    </message>
+    <message>
+        <source>GEOM_COOR</source>
+        <translation>Coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES</source>
+        <translation>Coordinates</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES_RES</source>
+        <translation>Result coordinates</translation>
+    </message>
+    <message>
+        <source>GEOM_CREATE_COPY</source>
+        <translation>Create a copy</translation>
+    </message>
+    <message>
+        <source>GEOM_CREATE_SINGLE_SOLID</source>
+        <translation>Create a single solid</translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE</source>
+        <translation>Curve</translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE_CONTINUTY</source>
+        <translation>Curve continuity</translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE_TITLE</source>
+        <translation>Curve Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_CUT</source>
+        <translation>Cut</translation>
+    </message>
+    <message>
+        <source>GEOM_CUT_TITLE</source>
+        <translation>Cut Of Two Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_CYLINDER</source>
+        <translation>Cylinder</translation>
+    </message>
+    <message>
+        <source>GEOM_CYLINDER_TITLE</source>
+        <translation>Cylinder Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_D1</source>
+        <translation>D1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_D2</source>
+        <translation>D2 :</translation>
+    </message>
+    <message>
+        <source>GEOM_DETECT</source>
+        <translation>Detect</translation>
+    </message>
+    <message>
+        <source>GEOM_DIAGONAL_POINTS</source>
+        <translation>Diagonal Points</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK</source>
+        <translation>Disk</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_TITLE</source>
+        <translation>Disk Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_DIMENSIONS</source>
+        <translation>Dimensions</translation>
+    </message>
+    <message>
+        <source>GEOM_DISTANCE</source>
+        <translation>Distance</translation>
+    </message>
+    <message>
+        <source>GEOM_DIVIDE_EDGE_TITLE</source>
+        <translation>Addition of point</translation>
+    </message>
+    <message>
+        <source>GEOM_DX</source>
+        <translation>Dx :</translation>
+    </message>
+    <message>
+        <source>GEOM_DY</source>
+        <translation>Dy :</translation>
+    </message>
+    <message>
+        <source>GEOM_DZ</source>
+        <translation>Dz :</translation>
+    </message>
+    <message>
+        <source>GEOM_DropSmallEdges</source>
+        <translation>DropSmallEdges</translation>
+    </message>
+    <message>
+        <source>GEOM_EDGE</source>
+        <translation>Edge</translation>
+    </message>
+    <message>
+        <source>GEOM_EDGE_TITLE</source>
+        <translation>Create An Edge</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE</source>
+        <translation>Ellipse</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE_ERROR_1</source>
+        <translation>Error creating ellipse.  Reason: minor radius is greater than major radius.</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE_TITLE</source>
+        <translation>Ellipse Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_END_LCS</source>
+        <translation>End LCS</translation>
+    </message>
+    <message>
+        <source>GEOM_ERROR</source>
+        <translation>Error</translation>
+    </message>
+    <message>
+        <source>GEOM_ERROR_STATUS</source>
+        <translation>Operation status</translation>
+    </message>
+    <message>
+        <source>GEOM_ERR_GET_ENGINE</source>
+        <translation>Failed to obtain GEOM Engine component.  Reload Geometry module and try again.</translation>
+    </message>
+    <message>
+        <source>GEOM_ERR_LIB_NOT_FOUND</source>
+        <translation>GUI library corresponding to the user action can not be found or loaded</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION</source>
+        <translation>Extrusion</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_BSV</source>
+        <translation>Base Shapes + Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_BSV_2P</source>
+        <translation>Base Shapes + 2 Points</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_DXDYDZ</source>
+        <translation>Base Shapes + DX DY DZ Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_TITLE</source>
+        <translation>Construction by Extrusion</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>GEOM_CS</source>
+        <translation>Coordinate system</translation>
+    </message>
+    <message>
+        <source>GEOM_GCS</source>
+        <translation>Global coordinate system</translation>
+    </message>
+    <message>
+        <source>GEOM_LCS</source>
+        <translation>Local coordinate system</translation>
+    </message>
+    <message>
+        <source>GEOM_FACES</source>
+        <translation>Faces</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_FFW</source>
+        <translation>Face creation from wires and/or edges</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_OPT</source>
+        <translation>Try to create a planar face</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_OR_LCS</source>
+        <translation>Face or LCS</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_SELECTION</source>
+        <translation>Face Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_TITLE</source>
+        <translation>Create A Face</translation>
+    </message>
+    <message>
+        <source>GEOM_RECTANGLE_TITLE</source>
+        <translation>Rectangle Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_RECTANGLE</source>
+        <translation>Rectangle</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET</source>
+        <translation>Fillet</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_2D</source>
+        <translation>Fillet 2D</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_1D</source>
+        <translation>Fillet 1D</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_ABORT</source>
+        <translation>Fillet can&apos;t be computed with radius %1</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_ALL</source>
+        <translation>Fillet On Whole Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_EDGES</source>
+        <translation>Fillet On Edges From Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_WIRES</source>
+        <translation>Fillet On Wires From Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_FACES</source>
+        <translation>Fillet On Faces From Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_VERTEXES</source>
+        <translation>Fillet On Vertexes From Face</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_TITLE</source>
+        <translation>Fillet Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_2D_TITLE</source>
+        <translation>2D Fillet Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_1D_TITLE</source>
+        <translation>1D Fillet Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING</source>
+        <translation>Filling</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_ARG</source>
+        <translation>Arguments And Parameters</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_COMPOUND</source>
+        <translation>Input compound</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_MAX_DEG</source>
+        <translation>Max deg</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_MIN_DEG</source>
+        <translation>Min deg</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_NB_ITER</source>
+        <translation>Nb. Iter :</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TITLE</source>
+        <translation>Filling Surface With Edges</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TOL_2D</source>
+        <translation>Tol. 2D :</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TOL_3D</source>
+        <translation>Tol. 3D :</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDARIES</source>
+        <translation>Free boundaries</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_ERROR</source>
+        <translation>Object is not selected</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_MSG</source>
+        <translation>Number of free boundaries detected: %1 (%2 closed, %3 open)</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_TLT</source>
+        <translation>Free boundary detection</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_FACES</source>
+        <translation>Free faces</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_FACES_TITLE</source>
+        <translation>Free faces</translation>
+    </message>
+    <message>
+        <source>GEOM_FUSE</source>
+        <translation>Fuse</translation>
+    </message>
+    <message>
+        <source>GEOM_FUSE_TITLE</source>
+        <translation>Fuse Two Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_FixFaceSize</source>
+        <translation>FixFaceSize</translation>
+    </message>
+    <message>
+        <source>GEOM_FixShape</source>
+        <translation>FixShape</translation>
+    </message>
+    <message>
+        <source>GEOM_GLUE</source>
+        <translation>Glue</translation>
+    </message>
+    <message>
+        <source>GEOM_GLUE_TITLE</source>
+        <translation>Glue faces</translation>
+    </message>
+    <message>
+        <source>GEOM_LIMIT_TOLERANCE_TITLE</source>
+        <translation>Limit tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_HEIGHT</source>
+        <translation>Height :</translation>
+    </message>
+    <message>
+        <source>GEOM_HOLES</source>
+        <translation>Holes</translation>
+    </message>
+    <message>
+        <source>GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE</source>
+        <translation>Identical names : select by mouse !</translation>
+    </message>
+    <message>
+        <source>GEOM_IMPORT</source>
+        <translation>Imported_Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_INCORRECT_INPUT</source>
+        <translation>Incorrect Input Data!</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_CONSTR</source>
+        <translation>Matrix And Moments Of Inertia</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_I</source>
+        <translation>%1:1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_IXYZ</source>
+        <translation>IX &amp; IY &amp; IZ :</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_TITLE</source>
+        <translation>Calculs Of Inertia</translation>
+    </message>
+    <message>
+        <source>GEOM_INF_LOADED</source>
+        <translation>File %1 loaded.</translation>
+    </message>
+    <message>
+        <source>GEOM_INTERNAL_WIRES</source>
+        <translation>Internal wires</translation>
+    </message>
+    <message>
+        <source>GEOM_INTERPOL</source>
+        <translation>Interpolation</translation>
+    </message>
+    <message>
+        <source>GEOM_KEEP_OBJECT</source>
+        <translation>Keep Object</translation>
+    </message>
+    <message>
+        <source>GEOM_LENGTH</source>
+        <translation>Length :</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE</source>
+        <translation>Line</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE_TITLE</source>
+        <translation>Line Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_MAIN_OBJECT</source>
+        <translation>Main Object</translation>
+    </message>
+    <message>
+        <source>GEOM_MARKER</source>
+        <translation>Marker</translation>
+    </message>
+    <message>
+        <source>GEOM_MARKER_TITLE</source>
+        <translation>Create marker</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_ID</source>
+        <translation>Material ID:</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_MATERIAL</source>
+        <translation>Material</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_SET</source>
+        <translation>&lt;&lt; Set</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_SHAPE</source>
+        <translation>Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_TITLE</source>
+        <translation>Define materials for Dominant Fuse</translation>
+    </message>
+    <message>
+        <source>GEOM_MATRIX</source>
+        <translation>Matrix :</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX</source>
+        <translation>Max :</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX_3D_TOLERANCE</source>
+        <translation>Max 3D tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX_TOLERANCE</source>
+        <translation>Max tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ALL_FILES</source>
+        <translation>All Files ( * )</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ANGLE</source>
+        <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_COMPONENT</source>
+        <translation>Geometry</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ENTER_ANGLE</source>
+        <translation>Enter An Angle In Degrees</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_EXPORT</source>
+        <translation>Export</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_IMPORT</source>
+        <translation>Import</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOS</source>
+        <translation>Select Number Of Isos</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOU</source>
+        <translation>Isos U :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOV</source>
+        <translation>Isos V :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_POPUP_NAME</source>
+        <translation>%1 Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SKETCHER_X</source>
+        <translation>Enter a Length to Set X</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SKETCHER_Y</source>
+        <translation>Enter a Length to Set Y</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_STEP_LABEL</source>
+        <translation>Step :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_TRANSPARENCY</source>
+        <translation>Transparency</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_TRANSPARENCY_LABEL</source>
+        <translation>Transparency :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_WIREFRAME</source>
+        <translation>Wireframe</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_X</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_Y</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_MESHING_DEFLECTION</source>
+        <translation>Meshing Deflect. :</translation>
+    </message>
+    <message>
+        <source>GEOM_MIN</source>
+        <translation>Min :</translation>
+    </message>
+    <message>
+        <source>GEOM_MINDIST_OBJ</source>
+        <translation>Objects And Results</translation>
+    </message>
+    <message>
+        <source>GEOM_MINDIST_TITLE</source>
+        <translation>Minimun Distance Between Two Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_MIRROR</source>
+        <translation>Mirror</translation>
+    </message>
+    <message>
+        <source>GEOM_MIRROR_TITLE</source>
+        <translation>Mirror An Object</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_DOUBLE</source>
+        <translation>Multi Rotation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_SIMPLE</source>
+        <translation>Multi Rotation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_TITLE</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_DOUBLE</source>
+        <translation>Multi Translation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_SIMPLE</source>
+        <translation>Multi Translation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_TITLE</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_NAME_INCORRECT</source>
+        <translation>Object name not found</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_BLOCKS_NO_OTHERS</source>
+        <translation>There are %1 specified blocks and NO other solids</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_BLOCKS_SOME_OTHERS</source>
+        <translation>There are %1 specified blocks and some other solids</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES</source>
+        <translation>Nb. Times :</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES_U</source>
+        <translation>Nb. Times U :</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES_V</source>
+        <translation>Nb. Times V :</translation>
+    </message>
+    <message>
+        <source>GEOM_NODES</source>
+        <translation>Nodes</translation>
+    </message>
+    <message>
+        <source>GEOM_NUM_SPLIT_POINTS</source>
+        <translation>Number of splitting points</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT</source>
+        <translation>Object</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_TYPE</source>
+        <translation>Object Type</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECTS</source>
+        <translation>Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_I</source>
+        <translation>Object %1</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_RESULT</source>
+        <translation>Object And Result</translation>
+    </message>
+    <message>
+        <source>GEOM_OFFSET</source>
+        <translation>Offset</translation>
+    </message>
+    <message>
+        <source>GEOM_OFFSET_TITLE</source>
+        <translation>Offset Surface</translation>
+    </message>
+    <message>
+        <source>GEOM_OPERATIONS</source>
+        <translation>Operations</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION</source>
+        <translation>Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION_OPT</source>
+        <translation>Reverse orientation with normal vectors simulation</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION_TITLE</source>
+        <translation>Change Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAMETER</source>
+        <translation>Parameter :</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAMETERS</source>
+        <translation>Parameters</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_ON_EDGE</source>
+        <translation>Point on Edge</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_ON_FACE</source>
+        <translation>Point on Face</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAM_VALUE</source>
+        <translation>By parameter</translation>
+    </message>
+    <message>
+        <source>GEOM_COORD_VALUE</source>
+        <translation>By coordinate</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_PARTITION_RESULT_EMPTY</source>
+        <translation>The partition result is empty, please verify the reconstruction limit parameter.</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_HALFSPACE</source>
+        <translation>Half-space partition</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_ORIENTATION</source>
+        <translation>Change Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_TITLE</source>
+        <translation>Partition Of Object With Tool</translation>
+    </message>
+    <message>
+        <source>GEOM_PATH_OBJECT</source>
+        <translation>Path Object</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE</source>
+        <translation>Pipe</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TITLE</source>
+        <translation>Pipe Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SEGMENT</source>
+        <translation>Segment of straight line</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECT_UNPUBLISHED_EDGES</source>
+        <translation>Select unpublished edges</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE</source>
+        <translation>Plane</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_MIRROR</source>
+        <translation>Plane Mirror</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_PV</source>
+        <translation>Point + Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_PVC</source>
+        <translation>Point + Coordinate Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_SIZE</source>
+        <translation>Size of plane :</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_TITLE</source>
+        <translation>Plane Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT1</source>
+        <translation>Point 1</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT2</source>
+        <translation>Point 2</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT3</source>
+        <translation>Point 3</translation>
+    </message>
+    <message>
+        <source>GEOM_POINTS</source>
+        <translation>Points</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_I</source>
+        <translation>Point %1</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_MIRROR</source>
+        <translation>Point Mirror</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_TITLE</source>
+        <translation>Point Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_POLYLINE</source>
+        <translation>Polyline</translation>
+    </message>
+    <message>
+        <source>GEOM_POSITION</source>
+        <translation>Location</translation>
+    </message>
+    <message>
+        <source>GEOM_POSITION_TITLE</source>
+        <translation>Modify the Location of an Object</translation>
+    </message>
+    <message>
+        <source>GEOM_PRECISION</source>
+        <translation>Precision :</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPAGATE</source>
+        <translation>Propagate</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPAGATE_TITLE</source>
+        <translation>Propagate</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES</source>
+        <translation>Basic Properties</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_CONSTR</source>
+        <translation>Object And Its Properties</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_SURFACE</source>
+        <translation>Surface is :</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_TITLE</source>
+        <translation>Basic Properties Information</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_VOLUME</source>
+        <translation>Volume is :</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_ABORT</source>
+        <translation>Operation aborted</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_COMMAND</source>
+        <translation>No command associated with this id = %1.</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_DONE</source>
+        <translation>Operation done</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_EXPORT</source>
+        <translation>Exporting geometry to %1 ...</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_LOADING</source>
+        <translation>Loading %1 ...</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_MIN_DIST</source>
+        <translation>Min Distance not computed</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_NOT_FOR_VTK_VIEWER</source>
+        <translation>Not allowed in VTK viewer</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_NULLSHAPE</source>
+        <translation>Error, null or inappropriate shape !</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_READY</source>
+        <translation>Ready</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_EDGE</source>
+        <translation>Select edges and click on Apply</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_FACE</source>
+        <translation>Select faces to suppress and click on Ok/Apply</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_FIRST</source>
+        <translation>Select main shape first</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_SUBSHAPES</source>
+        <translation>Select Sub Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SHAPE_IN_STUDY</source>
+        <translation>Main shape must be in the study before</translation>
+    </message>
+    <message>
+        <source>GEOM_QUAD_FACE</source>
+        <translation>Quadrangle Face</translation>
+    </message>
+    <message>
+        <source>GEOM_QUAD_FACE_TITLE</source>
+        <translation>Quadrangle Face Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS</source>
+        <translation>Radius :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_I</source>
+        <translation>Radius %1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_MAJOR</source>
+        <translation>Major radius :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_MINOR</source>
+        <translation>Minor radius :</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT</source>
+        <translation>Resulting Type</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_EDGE</source>
+        <translation>Edge</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SHAPE</source>
+        <translation>Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SHELL</source>
+        <translation>Shell</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SOLID</source>
+        <translation>Solid</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_VERTEX</source>
+        <translation>Vertex</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_WIRE</source>
+        <translation>Wire</translation>
+    </message>
+    <message>
+        <source>GEOM_REF_POINT</source>
+        <translation>Point with reference</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_ALL_HOLES</source>
+        <translation>Remove all holes</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_ALL_INT_WIRES</source>
+        <translation>Remove all internal wires</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_HOLES_TITLE</source>
+        <translation>Suppress holes</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_INTERNAL_WIRES_TITLE</source>
+        <translation>Suppress internal wires</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_WEBS</source>
+        <translation>Remove webs</translation>
+    </message>
+    <message>
+        <source>GEOM_REQUIRED_DEGREE</source>
+        <translation>Required degree</translation>
+    </message>
+    <message>
+        <source>GEOM_REQUIRED_NUM_SEGMENTS</source>
+        <translation>Required number of segments</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE</source>
+        <translation>Reverse</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_DIRECTION</source>
+        <translation>Reverse Direction</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_PLANE</source>
+        <translation>Reverse the plane normal</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_U</source>
+        <translation>Reverse U</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_V</source>
+        <translation>Reverse V</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_VECTOR</source>
+        <translation>Reverse Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_REVOLUTION</source>
+        <translation>Revolution</translation>
+    </message>
+    <message>
+        <source>GEOM_REVOLUTION_TITLE</source>
+        <translation>Construction By Revolution</translation>
+    </message>
+    <message>
+        <source>GEOM_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_ROTATION_TITLE</source>
+        <translation>Rotation Of An Object</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE</source>
+        <translation>Scale</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR</source>
+        <translation>Scale Factor :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_TITLE</source>
+        <translation>Scale An Object</translation>
+    </message>
+    <message>
+        <source>GEOM_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>GEOM_SECTION_TITLE</source>
+        <translation>Section Of Two Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_FACE</source>
+        <translation>Selected face</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_OBJECTS</source>
+        <translation>Selected objects</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_SHAPE</source>
+        <translation>Selected shape</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTION</source>
+        <translation>Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_SET_MATERIALS</source>
+        <translation>Set materials</translation>
+    </message>
+    <message>
+        <source>GEOM_SEWING</source>
+        <translation>Sewing</translation>
+    </message>
+    <message>
+        <source>GEOM_SEWING_TITLE</source>
+        <translation>Topological sewing</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPE</source>
+        <translation>Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPEPROCESS_TITLE</source>
+        <translation>Shape Processing</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES</source>
+        <translation>Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELL</source>
+        <translation>Shell</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELLS</source>
+        <translation>Shells</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELL_TITLE</source>
+        <translation>Shell Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ABS</source>
+        <translation>Absolute</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ADD_PARAMS</source>
+       <translation>Additionnal Parameters</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ANGLE</source>
+       <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ANGLE2</source>
+       <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_APPLY</source>
+        <translation>Apply</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_CENTER</source>
+       <translation>Center</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_CENTER2</source>
+        <translation>Center :</translation>
+    </message>  
+    <message>
+        <source>GEOM_SKETCHER_CENTER_X</source>
+        <translation>Center X coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_CENTER_Y</source>
+        <translation>Center Y coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_CENTER_DX</source>
+        <translation>Center DX coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_CENTER_DY</source>
+        <translation>Center DY coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DEST</source>
+        <translation>Destination</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DIR</source>
+        <translation>Direction</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DX2</source>
+        <translation>DX :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DY2</source>
+        <translation>DY :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DZ2</source>
+        <translation>DZ :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_EL</source>
+        <translation>Element Type</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_RESTORE</source>
+        <translation>Restore</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_LENGTH</source>
+        <translation>Length</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_LENGTH2</source>
+        <translation>Length :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_NONE</source>
+        <translation>None (Tangential)</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_PER</source>
+        <translation>Perpendicular</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_POINT2</source>
+        <translation>Point :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_END_POINT2</source>
+       <translation>End Point :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_RADIUS</source>
+        <translation>Radius</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_RADIUS2</source>
+        <translation>Radius :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_REL</source>
+        <translation>Relative</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_SEGMENT</source>
+        <translation>Segment</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_SEL</source>
+        <translation>Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TAN</source>
+        <translation>Tangent</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TITLE</source>
+        <translation>2D Sketch Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_3DSKETCHER_TITLE</source>
+        <translation>3D Sketch Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TYPE</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_UNDO</source>
+        <translation>Undo</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VALUES</source>
+        <translation>Values</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VX2</source>
+        <translation>VX :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VXVY</source>
+        <translation>VX-VY</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VY2</source>
+        <translation>VY :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X2</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X3</source>
+        <translation>Abs. X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y2</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y3</source>
+        <translation>Abs. Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Z2</source>
+        <translation>Z :</translation>
+    </message>
+    <message>
+        <source>GEOM_3DSKETCHER</source>
+        <translation>3D Sketcher</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES_TYPE</source>
+        <translation>Coordinates Type</translation>
+    </message>
+    <message>
+        <source>GEOM_SOLID</source>
+        <translation>Solid</translation>
+    </message>
+    <message>
+        <source>GEOM_SOLID_TITLE</source>
+        <translation>Solid Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE</source>
+        <translation>Sphere</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_CR</source>
+        <translation>Center + Radius</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_RO</source>
+        <translation>Radius At Origin</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_TITLE</source>
+        <translation>Sphere Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_SPLINE</source>
+        <translation>Spline</translation>
+    </message>
+    <message>
+        <source>GEOM_SPLINE_TITLE</source>
+        <translation>Spline Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_START_LCS</source>
+        <translation>Start LCS</translation>
+    </message>
+    <message>
+        <source>SELECT_UNPUBLISHED_EDGES</source>
+        <translation>Select unpublished edges</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP</source>
+        <translation>Step :</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_TITLE</source>
+        <translation>Step value for GUI constructions</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_U</source>
+        <translation>Step U :</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_V</source>
+        <translation>Step V :</translation>
+    </message>
+    <message>
+        <source>GEOM_STUDY_LOCKED</source>
+        <translation>The active study is locked and therefore cannot be modified</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_SELECT</source>
+        <translation>Select Sub Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_TITLE</source>
+        <translation>Sub Shapes Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_TYPE</source>
+        <translation>Sub Shapes Type</translation>
+    </message>
+    <message>
+        <source>GEOM_SUB_SHAPE</source>
+        <translation>Sub Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_FACE_SHELL</source>
+        <translation>Face or shell</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTFACE</source>
+        <translation>Select the face with hole</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTFACE_END</source>
+        <translation>Select end face (if hole traversing)</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTWIRE</source>
+        <translation>Select wire on face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTWIRE_END</source>
+        <translation>Select end wire (if hole traversing)</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECT_HOLES_ON_FACE</source>
+        <translation>Select hole(s) on the face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_TITLE</source>
+        <translation>Suppress holes</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT</source>
+        <translation>Suppress Result</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT_INSIDE</source>
+        <translation>Inside</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT_OUTSIDE</source>
+        <translation>Outside</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE</source>
+        <translation>Supress Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE_SELECT</source>
+        <translation>Select Faces To Suppress</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE_TITLE</source>
+        <translation>Suppress Faces In An Object</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFACE_CONTINUTY</source>
+        <translation>Surface continuity</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFACE_MODE</source>
+        <translation>Surface mode</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFCONE</source>
+        <translation>Conical Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFCYLINDER</source>
+        <translation>Cylindrical Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFSPHERE</source>
+        <translation>Spherical Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFTORUS</source>
+        <translation>Toroidal Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SameParameter</source>
+        <translation>SameParameter</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitAngle</source>
+        <translation>SplitAngle</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitClosedFaces</source>
+        <translation>SplitClosedFaces</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitContinuity</source>
+        <translation>SplitContinuity</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE</source>
+        <translation>Tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_LINEAR_TOLERANCE</source>
+        <translation>Linear Tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGULAR_TOLERANCE</source>
+        <translation>Angular Tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_CONSTR</source>
+        <translation>Object And Its Tolerances</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_EDGE</source>
+        <translation>Edge :</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_FACE</source>
+        <translation>Face :</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_TITLE</source>
+        <translation>Maximum Tolerance</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_VERTEX</source>
+        <translation>Vertex :</translation>
+    </message>
+    <message>
+        <source>GEOM_TOOL_OBJECT</source>
+        <translation>Tool Object</translation>
+    </message>
+    <message>
+        <source>GEOM_TOOL_OBJECTS</source>
+        <translation>Tool Objects</translation>
+    </message>
+    <message>
+        <source>GEOM_TORUS</source>
+        <translation>Torus</translation>
+    </message>
+    <message>
+        <source>GEOM_TORUS_TITLE</source>
+        <translation>Torus Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION_COOR</source>
+        <translation>Translation With Coordinates</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION_TITLE</source>
+        <translation>Translation Of An Object</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_OPAQUE</source>
+        <translation>Opaque</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_TITLE</source>
+        <translation>Transparency</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_TRANSPARENT</source>
+        <translation>Transparent</translation>
+    </message>
+    <message>
+        <source>GEOM_TRIHEDRON</source>
+        <translation>Trihedron</translation>
+    </message>
+    <message>
+        <source>GEOM_ToBezier</source>
+        <translation>ToBezier</translation>
+    </message>
+    <message>
+        <source>GEOM_VALUE</source>
+        <translation>Value</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR</source>
+        <translation>Vector</translation>
+    </message>
+    <message>
+        <source>GEOM_AXIS_DEFAULT</source>
+        <translation>(Z axis by default)</translation>
+    </message>
 
--->
-<TS version="1.1" >
-    <context>
-        <name>@default</name>
-        <message>
-            <source>BRep_API: command not done</source>
-            <translation>Error: can't build object</translation>
-        </message>
-        <message>
-            <source>CHANGE_ORIENTATION_NEW_OBJ_NAME</source>
-            <translation>Invert</translation>
-        </message>
-        <message>
-            <source>CLOSE_CONTOUR_NEW_OBJ_NAME</source>
-            <translation>CloseContour</translation>
-        </message>
-        <message>
-            <source>DEP_OBJECT</source>
-            <translation>Selected object has been used to create another one.
-It can't be deleted </translation>
-        </message>
-        <message>
-            <source>DEVIDE_EDGE_NEW_OBJECT_NAME</source>
-            <translation>NewObject</translation>
-        </message>
-        <message>
-            <source>ERROR_SHAPE_TYPE</source>
-            <translation>Object of incorrect type selected!
-Please, select face, shell or solid and try again</translation>
-        </message>
-       <message>
-           <source> iErr : 10</source>
-           <translation>the Classifier is NULL</translation>
-       </message>
-       <message>
-           <source> iErr : 11</source>
-           <translation>the Shape is NULL</translation>
-       </message>
-       <message>
-           <source> iErr : 12</source>
-           <translation>Unallowed Type of Subshape</translation>
-       </message>
-       <message>
-           <source> iErr : 13</source>
-           <translation>Unallowed State</translation>
-       </message>
-       <message>
-           <source> iErr : 15</source>
-           <translation>Unallowed Surface Type</translation>
-       </message>
-       <message>
-           <source> iErr : 20</source>
-           <translation>Triangulation is not Found</translation>
-       </message>
-       <message>
-           <source> iErr : 30</source>
-           <translation>Can not Obtain the Line From the Link</translation>
-       </message>
-       <message>
-           <source> iErr : 40</source>
-           <translation>A Point Can Not Be Classified</translation>
-       </message>
-       <message>
-           <source> iErr : 41</source>
-           <translation>Invalid Data for Classifier</translation>
-       </message>
-        <message>
-            <source>GEOM_2D_CONTINUTY</source>
-            <translation>2D continuity</translation>
-        </message>
-        <message>
-            <source>GEOM_2D_CURVE_MODE</source>
-            <translation>2D curve mode</translation>
-        </message>
-        <message>
-            <source>GEOM_2D_TOLERANCE</source>
-            <translation>2D tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_3D_CONTINUTY</source>
-            <translation>3D continuity</translation>
-        </message>
-        <message>
-            <source>GEOM_3D_CURVE_MODE</source>
-            <translation>3D curve mode</translation>
-        </message>
-        <message>
-            <source>GEOM_3D_TOLERANCE</source>
-            <translation>3D tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_3_POINTS</source>
-            <translation>3 points</translation>
-        </message>
-        <message>
-            <source>GEOM_ADD_POINT</source>
-            <translation>Add point</translation>
-        </message>
-        <message>
-            <source>GEOM_ANGLE</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_ANGLE_1</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>GEOM_ARC_ELLIPSE</source>
-            <translation>Arc of ellipse</translation>
-        </message>
-        <message>
-            <source>GEOM_ARC</source>
-            <translation>Arc</translation>
-        </message>
-        <message>
-            <source>GEOM_ARCHIMEDE</source>
-            <translation>Archimede</translation>
-        </message>
-        <message>
-            <source>GEOM_ARCHIMEDE_TITLE</source>
-            <translation>Archimede Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_ARC_TITLE</source>
-            <translation>Arc Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_ARGUMENTS</source>
-            <translation>Arguments</translation>
-        </message>
-        <message>
-            <source>GEOM_AXE_MIRROR</source>
-            <translation>Axe Mirror</translation>
-        </message>
-        <message>
-            <source>GEOM_AXIS</source>
-            <translation>Axis</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE</source>
-            <translation>Base</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE_OBJECT</source>
-            <translation>Base Object</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE_POINT</source>
-            <translation>Base Point</translation>
-        </message>
-        <message>
-            <source>GEOM_BEZIER</source>
-            <translation>Bezier</translation>
-        </message>
-        <message>
-            <source>GEOM_BINORMAL</source>
-            <translation>BiNormal</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK</source>
-            <translation>Hexahedral Solid</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCKS_COMPOUND</source>
-            <translation>BlocksCompound</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_EXPLODE</source>
-            <translation>Sub Blocks</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_EXPLODE_TITLE</source>
-            <translation>Sub Blocks Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_MULTITRSF</source>
-            <translation>Block Multi-Transformation</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_MULTITRSF_DOUBLE</source>
-            <translation>Multi-Transformation Double</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_MULTITRSF_SIMPLE</source>
-            <translation>Multi-Transformation Simple</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_MULTITRSF_TITLE</source>
-            <translation>Block Multi-Transformation</translation>
-        </message>
-        <message>
-            <source>GEOM_BLOCK_TITLE</source>
-            <translation>Hexahedral Solid Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX</source>
-            <translation>Bounding Box</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX_OBJDIM</source>
-            <translation>Object And Its Dimensions</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX_TITLE</source>
-            <translation>Bounding Box Information</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX</source>
-            <translation>Box</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX_OBJ</source>
-            <translation>Dimensions At Origin</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX_TITLE</source>
-            <translation>Box Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_BSplineRestriction</source>
-            <translation>BSplineRestriction</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_APPLY</source>
-            <translation>&amp;Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CANCEL</source>
-            <translation>&amp;Cancel</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CLOSE</source>
-            <translation>&amp;Close</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CLOSE_SKETCH</source>
-            <translation>Sketch Closure</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_END_SKETCH</source>
-            <translation>Sketch Validation</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_EXPLODE</source>
-            <translation>&amp;Explode</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_HELP</source>
-            <translation>&amp;Help</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_NO</source>
-            <translation>&amp;No</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_OK</source>
-            <translation>O&amp;k</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_APPLY_AND_CLOSE</source>
-            <translation>A&amp;pply and Close</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_YES</source>
-            <translation>&amp;Yes</translation>
-        </message>
-        <message>
-            <source>GEOM_BY_LENGTH</source>
-            <translation>By length</translation>
-        </message>
-        <message>
-            <source>GEOM_BY_PARAMETER</source>
-            <translation>By parameter</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTER</source>
-            <translation>Center</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTER_POINT</source>
-            <translation>Center Point</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTRAL_POINT</source>
-            <translation>Central Point</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER</source>
-            <translation>Chamfer</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_ABORT</source>
-            <translation>Chamfer can't be computed with %1 and %2</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_ALL</source>
-            <translation>Chamfer On Whole Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_EDGES</source>
-            <translation>Chamfer On Edges From Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_FACES</source>
-            <translation>Chamfer On Faces From Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_TITLE</source>
-            <translation>Chamfer Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_CHANGE_ORIENTATION</source>
-            <translation>Objects to change orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_CHANGE_ORIENTATION_TITLE</source>
-            <translation>Change orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND</source>
-            <translation>Check and Improve Blocks Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_FAILED</source>
-            <translation>Check failed</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_ERRORS</source>
-            <translation>Errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_ERRORS</source>
-            <translation>The Compound of Blocks has errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS</source>
-            <translation>The Compound of Blocks has no errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES</source>
-            <translation>Incriminated Sub-Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_INFOS</source>
-            <translation>Object And Its Topological Information</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_SHAPE</source>
-            <translation>Check Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_TITLE</source>
-            <translation>Check Shape Information</translation>
-        </message>
-        <message>
-            <source>GEOM_CIRCLE</source>
-            <translation>Circle</translation>
-        </message>
-        <message>
-            <source>GEOM_CIRCLE_TITLE</source>
-            <translation>Circle Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_CLOSECONTOUR_TITLE</source>
-            <translation>Close contour</translation>
-        </message>
-        <message>
-            <source>GEOM_CMASS</source>
-            <translation>Center Of Mass</translation>
-        </message>
-        <message>
-            <source>GEOM_CMASS_TITLE</source>
-            <translation>Center Of Mass Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_COMMON</source>
-            <translation>Common</translation>
-        </message>
-        <message>
-            <source>GEOM_COMMON_TITLE</source>
-            <translation>Common Of Two Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUND</source>
-            <translation>Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUNDSOLID</source>
-            <translation>CompSolid</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUND_TITLE</source>
-            <translation>Create A Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_CONE</source>
-            <translation>Cone</translation>
-        </message>
-        <message>
-            <source>GEOM_CONE_TITLE</source>
-            <translation>Cone Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_CONFIRM</source>
-            <translation>Confirm operation</translation>
-        </message>
-        <message>
-            <source>GEOM_CONFIRM_INFO</source>
-            <translation>Shape contains %1 sub shapes !</translation>
-        </message>
-        <message>
-            <source>GEOM_COOR</source>
-            <translation>Coord. :</translation>
-        </message>
-        <message>
-            <source>GEOM_COORDINATES</source>
-            <translation>Coordinates</translation>
-        </message>
-        <message>
-            <source>GEOM_COORDINATES_RES</source>
-            <translation>Result coordinates</translation>
-        </message>
-        <message>
-            <source>GEOM_CREATE_COPY</source>
-            <translation>Create a copy</translation>
-        </message>
-        <message>
-            <source>GEOM_CREATE_SINGLE_SOLID</source>
-            <translation>Create a single solid</translation>
-        </message>
-        <message>
-            <source>GEOM_CURVE</source>
-            <translation>Curve</translation>
-        </message>
-        <message>
-            <source>GEOM_CURVE_CONTINUTY</source>
-            <translation>Curve continuity</translation>
-        </message>
-        <message>
-            <source>GEOM_CURVE_TITLE</source>
-            <translation>Curve Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_CUT</source>
-            <translation>Cut</translation>
-        </message>
-        <message>
-            <source>GEOM_CUT_TITLE</source>
-            <translation>Cut Of Two Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_CYLINDER</source>
-            <translation>Cylinder</translation>
-        </message>
-        <message>
-            <source>GEOM_CYLINDER_TITLE</source>
-            <translation>Cylinder Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_D1</source>
-            <translation>D1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_D2</source>
-            <translation>D2 :</translation>
-        </message>
-        <message>
-            <source>GEOM_DETECT</source>
-            <translation>Detect</translation>
-        </message>
-        <message>
-            <source>GEOM_DIAGONAL_POINTS</source>
-            <translation>Diagonal Points</translation>
-        </message>
-       <message>
-            <source>GEOM_DISK</source>
-            <translation>Disk</translation>
-        </message>
-       <message>
-            <source>GEOM_DISK_TITLE</source>
-            <translation>Disk Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_DIMENSIONS</source>
-            <translation>Dimensions</translation>
-        </message>
-        <message>
-            <source>GEOM_DISTANCE</source>
-            <translation>Distance</translation>
-        </message>
-        <message>
-            <source>GEOM_DIVIDE_EDGE_TITLE</source>
-            <translation>Addition of point</translation>
-        </message>
-        <message>
-            <source>GEOM_DX</source>
-            <translation>Dx :</translation>
-        </message>
-        <message>
-            <source>GEOM_DY</source>
-            <translation>Dy :</translation>
-        </message>
-        <message>
-            <source>GEOM_DZ</source>
-            <translation>Dz :</translation>
-        </message>
-        <message>
-            <source>GEOM_DropSmallEdges</source>
-            <translation>DropSmallEdges</translation>
-        </message>
-        <message>
-            <source>GEOM_EDGE</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_EDGE_TITLE</source>
-            <translation>Create An Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_ELLIPSE</source>
-            <translation>Ellipse</translation>
-        </message>
-        <message>
-            <source>GEOM_ELLIPSE_ERROR_1</source>
-            <translation>Error creating ellipse.  Reason: minor radius is greater than major radius.</translation>
-        </message>
-        <message>
-            <source>GEOM_ELLIPSE_TITLE</source>
-            <translation>Ellipse Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_END_LCS</source>
-            <translation>End LCS</translation>
-        </message>
-        <message>
-            <source>GEOM_ERROR</source>
-            <translation>Error</translation>
-        </message>
-        <message>
-            <source>GEOM_ERROR_STATUS</source>
-            <translation>Operation status</translation>
-        </message>
-        <message>
-            <source>GEOM_ERR_GET_ENGINE</source>
-            <translation>Failed to obtain GEOM Engine component.  Reload Geometry module and try again.</translation>
-        </message>
-        <message>
-            <source>GEOM_ERR_LIB_NOT_FOUND</source>
-            <translation>GUI library corresponding to the user action can not be found or loaded</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION</source>
-            <translation>Extrusion</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_BSV</source>
-            <translation>Base Shape + Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_BSV_2P</source>
-            <translation>Base Shape + 2 Points</translation>
-        </message>
-       <message>
-            <source>GEOM_EXTRUSION_DXDYDZ</source>
-            <translation>Base Shape + DX DY DZ Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_TITLE</source>
-            <translation>Construction by Extrusion</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE</source>
-            <translation>Face</translation>
-        </message>
-       <message>
-            <source>GEOM_CS</source>
-            <translation>Coordinate system</translation>
-        </message>
-       <message>
-            <source>GEOM_GCS</source>
-            <translation>Global coordinate system</translation>
-        </message>
-       <message>
-            <source>GEOM_LCS</source>
-            <translation>Local coordinate system</translation>
-        </message>
-        <message>
-            <source>GEOM_FACES</source>
-            <translation>Faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_FFW</source>
-            <translation>Face creation from wires and/or edges</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_OPT</source>
-            <translation>Try to create a planar face</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_OR_LCS</source>
-            <translation>Face or LCS</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_SELECTION</source>
-            <translation>Face Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_TITLE</source>
-            <translation>Create A Face</translation>
-        </message>
-        <message>
-            <source>GEOM_RECTANGLE_TITLE</source>
-            <translation>Rectangle Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_RECTANGLE</source>
-            <translation>Rectangle</translation>
-        </message>
-        <message>
-          <source>GEOM_FILLET</source>
-            <translation>Fillet</translation>
-        </message>
-       <message>
-            <source>GEOM_FILLET_2D</source>
-            <translation>Fillet 2D</translation>
-        </message>
-       <message>
-            <source>GEOM_FILLET_1D</source>
-            <translation>Fillet 1D</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_ABORT</source>
-            <translation>Fillet can't be computed with radius %1</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_ALL</source>
-            <translation>Fillet On Whole Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_EDGES</source>
-            <translation>Fillet On Edges From Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_WIRES</source>
-            <translation>Fillet On Wires From Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_FACES</source>
-            <translation>Fillet On Faces From Shape</translation>
-        </message>
-       <message>
-            <source>GEOM_FILLET_VERTEXES</source>
-            <translation>Fillet On Vertexes From Face</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_TITLE</source>
-            <translation>Fillet Construction</translation>
-        </message>
-       <message>
-            <source>GEOM_FILLET_2D_TITLE</source>
-            <translation>2D Fillet Construction</translation>
-        </message>
-       <message>
-            <source>GEOM_FILLET_1D_TITLE</source>
-            <translation>1D Fillet Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING</source>
-            <translation>Filling</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_ARG</source>
-            <translation>Arguments And Parameters</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_COMPOUND</source>
-            <translation>Input compound</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_MAX_DEG</source>
-            <translation>Max deg</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_MIN_DEG</source>
-            <translation>Min deg</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_NB_ITER</source>
-            <translation>Nb. Iter :</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TITLE</source>
-            <translation>Filling Surface With Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TOL_2D</source>
-            <translation>Tol. 2D :</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TOL_3D</source>
-            <translation>Tol. 3D :</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_BOUNDARIES</source>
-            <translation>Free boundaries</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_BOUNDS_ERROR</source>
-            <translation>Object is not selected</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_BOUNDS_MSG</source>
-            <translation>Number of free boundaries detected: %1 (%2 closed, %3 open)</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_BOUNDS_TLT</source>
-            <translation>Free boundary detection</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_FACES</source>
-            <translation>Free faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_FACES_TITLE</source>
-            <translation>Free faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FUSE</source>
-            <translation>Fuse</translation>
-        </message>
-        <message>
-            <source>GEOM_FUSE_TITLE</source>
-            <translation>Fuse Two Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_FixFaceSize</source>
-            <translation>FixFaceSize</translation>
-        </message>
-        <message>
-            <source>GEOM_FixShape</source>
-            <translation>FixShape</translation>
-        </message>
-        <message>
-            <source>GEOM_GLUE</source>
-            <translation>Glue</translation>
-        </message>
-        <message>
-            <source>GEOM_GLUE_TITLE</source>
-            <translation>Glue faces</translation>
-        </message>
-        <message>
-            <source>GEOM_HEIGHT</source>
-            <translation>Height :</translation>
-        </message>
-        <message>
-            <source>GEOM_HOLES</source>
-            <translation>Holes</translation>
-        </message>
-        <message>
-            <source>GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE</source>
-            <translation>Identical names : select by mouse !</translation>
-        </message>
-        <message>
-            <source>GEOM_IMPORT</source>
-            <translation>Imported_Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_INCORRECT_INPUT</source>
-            <translation>Incorrect Input Data!</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_CONSTR</source>
-            <translation>Matrix And Moments Of Inertia</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_I</source>
-            <translation>%1:1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_IXYZ</source>
-            <translation>IX &amp; IY &amp; IZ :</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_TITLE</source>
-            <translation>Calculs Of Inertia</translation>
-        </message>
-        <message>
-            <source>GEOM_INF_LOADED</source>
-            <translation>File %1 loaded.</translation>
-        </message>
-        <message>
-            <source>GEOM_INTERNAL_WIRES</source>
-            <translation>Internal wires</translation>
-        </message>
-        <message>
-            <source>GEOM_INTERPOL</source>
-            <translation>Interpolation</translation>
-        </message>
-        <message>
-            <source>GEOM_KEEP_OBJECT</source>
-            <translation>Keep Object</translation>
-        </message>
-        <message>
-            <source>GEOM_LENGTH</source>
-            <translation>Length :</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE</source>
-            <translation>Line</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE_TITLE</source>
-            <translation>Line Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_MAIN_OBJECT</source>
-            <translation>Main Object</translation>
-        </message>
-        <message>
-            <source>GEOM_MARKER</source>
-            <translation>Marker</translation>
-        </message>
-        <message>
-            <source>GEOM_MARKER_TITLE</source>
-            <translation>Create marker</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_ID</source>
-            <translation>Material ID:</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_MATERIAL</source>
-            <translation>Material</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_SET</source>
-            <translation>&lt;&lt; Set</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_SHAPE</source>
-            <translation>Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_TITLE</source>
-            <translation>Define materials for Dominant Fuse</translation>
-        </message>
-        <message>
-            <source>GEOM_MATRIX</source>
-            <translation>Matrix :</translation>
-        </message>
-        <message>
-            <source>GEOM_MAX</source>
-            <translation>Max :</translation>
-        </message>
-        <message>
-            <source>GEOM_MAX_3D_TOLERANCE</source>
-            <translation>Max 3D tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_MAX_TOLERANCE</source>
-            <translation>Max tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ALL_FILES</source>
-            <translation>All Files ( * )</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ANGLE</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_COMPONENT</source>
-            <translation>Geometry</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ENTER_ANGLE</source>
-            <translation>Enter An Angle In Degrees</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_EXPORT</source>
-            <translation>Export</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_IMPORT</source>
-            <translation>Import</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOS</source>
-            <translation>Select Number Of Isos</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOU</source>
-            <translation>Isos U :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOV</source>
-            <translation>Isos V :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_POPUP_NAME</source>
-            <translation>%1 Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SKETCHER_X</source>
-            <translation>Enter a Length to Set X</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SKETCHER_Y</source>
-            <translation>Enter a Length to Set Y</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_STEP_LABEL</source>
-            <translation>Step :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_TRANSPARENCY</source>
-            <translation>Transparency</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_TRANSPARENCY_LABEL</source>
-            <translation>Transparency :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_WIREFRAME</source>
-            <translation>Wireframe</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_X</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_Y</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_MESHING_DEFLECTION</source>
-            <translation>Meshing Deflect. :</translation>
-        </message>
-        <message>
-            <source>GEOM_MIN</source>
-            <translation>Min :</translation>
-        </message>
-        <message>
-            <source>GEOM_MINDIST_OBJ</source>
-            <translation>Objects And Results</translation>
-        </message>
-        <message>
-            <source>GEOM_MINDIST_TITLE</source>
-            <translation>Minimun Distance Between Two Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_MIRROR</source>
-            <translation>Mirror</translation>
-        </message>
-        <message>
-            <source>GEOM_MIRROR_TITLE</source>
-            <translation>Mirror An Object</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_DOUBLE</source>
-            <translation>Multi Rotation Double</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_SIMPLE</source>
-            <translation>Multi Rotation Simple</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_TITLE</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_DOUBLE</source>
-            <translation>Multi Translation Double</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_SIMPLE</source>
-            <translation>Multi Translation Simple</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_TITLE</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_NAME_INCORRECT</source>
-            <translation>Object name not found</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_BLOCKS_NO_OTHERS</source>
-            <translation>There are %1 specified blocks and NO other solids</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_BLOCKS_SOME_OTHERS</source>
-            <translation>There are %1 specified blocks and some other solids</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES</source>
-            <translation>Nb. Times :</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES_U</source>
-            <translation>Nb. Times U :</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES_V</source>
-            <translation>Nb. Times V :</translation>
-        </message>
-        <message>
-            <source>GEOM_NODES</source>
-            <translation>Nodes</translation>
-        </message>
-        <message>
-            <source>GEOM_NUM_SPLIT_POINTS</source>
-            <translation>Number of splitting points</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT</source>
-            <translation>Object</translation>
-        </message>
-       <message>
-            <source>GEOM_OBJECT_TYPE</source>
-            <translation>Object Type</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECTS</source>
-            <translation>Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT_I</source>
-            <translation>Object %1</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT_RESULT</source>
-            <translation>Object And Result</translation>
-        </message>
-        <message>
-            <source>GEOM_OFFSET</source>
-            <translation>Offset</translation>
-        </message>
-        <message>
-            <source>GEOM_OFFSET_TITLE</source>
-            <translation>Offset Surface</translation>
-        </message>
-        <message>
-            <source>GEOM_OPERATIONS</source>
-            <translation>Operations</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION</source>
-            <translation>Orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION_OPT</source>
-            <translation>Reverse orientation with normal vectors simulation</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION_TITLE</source>
-            <translation>Change Orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_PARAMETER</source>
-            <translation>Parameter :</translation>
-        </message>
-        <message>
-            <source>GEOM_PARAMETERS</source>
-            <translation>Parameters</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_ON_EDGE</source>
-            <translation>Point on Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_ON_FACE</source>
-            <translation>Point on Face</translation>
-        </message>
-        <message>
-            <source>GEOM_PARAM_VALUE</source>
-            <translation>By parameter</translation>
-        </message>
-        <message>
-            <source>GEOM_COORD_VALUE</source>
-            <translation>By coordinate</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION</source>
-            <translation>Partition</translation>
-        </message>
-       <message>
-            <source>GEOM_WRN_PARTITION_RESULT_EMPTY</source>
-            <translation>The partition result is empty, please verify the reconstruction limit parameter.</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_HALFSPACE</source>
-            <translation>Half-space partition</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_ORIENTATION</source>
-            <translation>Change Orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_TITLE</source>
-            <translation>Partition Of Object With Tool</translation>
-        </message>
-        <message>
-            <source>GEOM_PATH_OBJECT</source>
-            <translation>Path Object</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE</source>
-            <translation>Pipe</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TITLE</source>
-            <translation>Pipe Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_SEGMENT</source>
-            <translation>Segment of straight line</translation>
-        </message>
-       <message>
-            <source>GEOM_SELECT_UNPUBLISHED_EDGES</source>
-            <translation>Select unpublished edges</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE</source>
-            <translation>Plane</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_MIRROR</source>
-            <translation>Plane Mirror</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_PV</source>
-            <translation>Point + Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_PVC</source>
-            <translation>Point + Coordinate Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_SIZE</source>
-            <translation>Size of plane :</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_TITLE</source>
-            <translation>Plane Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT1</source>
-            <translation>Point 1</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT2</source>
-            <translation>Point 2</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT3</source>
-            <translation>Point 3</translation>
-        </message>
-        <message>
-            <source>GEOM_POINTS</source>
-            <translation>Points</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_I</source>
-            <translation>Point %1</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_MIRROR</source>
-            <translation>Point Mirror</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_TITLE</source>
-            <translation>Point Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_POLYLINE</source>
-            <translation>Polyline</translation>
-        </message>
-        <message>
-            <source>GEOM_POSITION</source>
-            <translation>Location</translation>
-        </message>
-        <message>
-            <source>GEOM_POSITION_TITLE</source>
-            <translation>Modify the Location of an Object</translation>
-        </message>
-        <message>
-            <source>GEOM_PRECISION</source>
-            <translation>Precision :</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPAGATE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPAGATE_TITLE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES</source>
-            <translation>Basic Properties</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_CONSTR</source>
-            <translation>Object And Its Properties</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_SURFACE</source>
-            <translation>Surface is :</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_TITLE</source>
-            <translation>Basic Properties Information</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_VOLUME</source>
-            <translation>Volume is :</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_ABORT</source>
-            <translation>Operation aborted</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_COMMAND</source>
-            <translation>No command associated with this id = %1.</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_DONE</source>
-            <translation>Operation done</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_EXPORT</source>
-            <translation>Exporting geometry to %1 ...</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_LOADING</source>
-            <translation>Loading %1 ...</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_MIN_DIST</source>
-            <translation>Min Distance not computed</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_NOT_FOR_VTK_VIEWER</source>
-            <translation>Not allowed in VTK viewer</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_NULLSHAPE</source>
-            <translation>Error, null or inappropriate shape !</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_READY</source>
-            <translation>Ready</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_EDGE</source>
-            <translation>Select edges and click on Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_FACE</source>
-            <translation>Select faces to suppress and click on Ok/Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_FIRST</source>
-            <translation>Select main shape first</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_SUBSHAPES</source>
-            <translation>Select Sub Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SHAPE_IN_STUDY</source>
-            <translation>Main shape must be in the study before</translation>
-        </message>
-        <message>
-            <source>GEOM_QUAD_FACE</source>
-            <translation>Quadrangle Face</translation>
-        </message>
-        <message>
-            <source>GEOM_QUAD_FACE_TITLE</source>
-            <translation>Quadrangle Face Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS</source>
-            <translation>Radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_I</source>
-            <translation>Radius %1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_MAJOR</source>
-            <translation>Major radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_MINOR</source>
-            <translation>Minor radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT</source>
-            <translation>Resulting Type</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_EDGE</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_FACE</source>
-            <translation>Face</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SHAPE</source>
-            <translation>Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SHELL</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SOLID</source>
-            <translation>Solid</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_VERTEX</source>
-            <translation>Vertex</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_WIRE</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_REF_POINT</source>
-            <translation>Point with reference</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_ALL_HOLES</source>
-            <translation>Remove all holes</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_ALL_INT_WIRES</source>
-            <translation>Remove all internal wires</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_HOLES_TITLE</source>
-            <translation>Suppress holes</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_INTERNAL_WIRES_TITLE</source>
-            <translation>Suppress internal wires</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_WEBS</source>
-            <translation>Remove webs</translation>
-        </message>
-        <message>
-            <source>GEOM_REQUIRED_DEGREE</source>
-            <translation>Required degree</translation>
-        </message>
-        <message>
-            <source>GEOM_REQUIRED_NUM_SEGMENTS</source>
-            <translation>Required number of segments</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE</source>
-            <translation>Reverse</translation>
-        </message>
-       <message>
-            <source>GEOM_REVERSE_DIRECTION</source>
-            <translation>Reverse Direction</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_PLANE</source>
-            <translation>Reverse the plane normal</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_U</source>
-            <translation>Reverse U</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_V</source>
-            <translation>Reverse V</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_VECTOR</source>
-            <translation>Reverse Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_REVOLUTION</source>
-            <translation>Revolution</translation>
-        </message>
-        <message>
-            <source>GEOM_REVOLUTION_TITLE</source>
-            <translation>Construction By Revolution</translation>
-        </message>
-        <message>
-            <source>GEOM_ROTATION</source>
-            <translation>Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_ROTATION_TITLE</source>
-            <translation>Rotation Of An Object</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE</source>
-            <translation>Scale</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_FACTOR</source>
-            <translation>Scale Factor :</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_TITLE</source>
-            <translation>Scale An Object</translation>
-        </message>
-        <message>
-            <source>GEOM_SECTION</source>
-            <translation>Section</translation>
-        </message>
-        <message>
-            <source>GEOM_SECTION_TITLE</source>
-            <translation>Section Of Two Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_SELECTED_FACE</source>
-            <translation>Selected face</translation>
-        </message>
-        <message>
-            <source>GEOM_SELECTED_OBJECTS</source>
-            <translation>Selected objects</translation>
-        </message>
-        <message>
-            <source>GEOM_SELECTED_SHAPE</source>
-            <translation>Selected shape</translation>
-        </message>
-        <message>
-            <source>GEOM_SELECTION</source>
-            <translation>Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_SET_MATERIALS</source>
-            <translation>Set materials</translation>
-        </message>
-        <message>
-            <source>GEOM_SEWING</source>
-            <translation>Sewing</translation>
-        </message>
-        <message>
-            <source>GEOM_SEWING_TITLE</source>
-            <translation>Topological sewing</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPE</source>
-            <translation>Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPEPROCESS_TITLE</source>
-            <translation>Shape Processing</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES</source>
-            <translation>Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELL</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELLS</source>
-            <translation>Shells</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELL_TITLE</source>
-            <translation>Shell Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ABS</source>
-            <translation>Absolute</translation>
-       </message>
-        <message>
-            <source>GEOM_SKETCHER_ADD_PARAMS</source>
-            <translation>Additionnal Parameters</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ANGLE</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ANGLE2</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_APPLY</source>
-            <translation>Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ARC</source>
-            <translation>Arc</translation>
-       </message>
-        <message>
-            <source>GEOM_SKETCHER_CENTER</source>
-            <translation>Center</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_CENTER2</source>
-            <translation>Center :</translation>
-       </message>  
-       <message>
-            <source>GEOM_SKETCHER_CENTER_X</source>
-            <translation>Center X coord. :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_CENTER_Y</source>
-            <translation>Center Y coord. :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_CENTER_DX</source>
-            <translation>Center DX coord. :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_CENTER_DY</source>
-            <translation>Center DY coord. :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_DEST</source>
-            <translation>Destination</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DIR</source>
-            <translation>Direction</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DX2</source>
-            <translation>DX :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DY2</source>
-            <translation>DY :</translation>
-        </message>
-       <message>
-            <source>GEOM_SKETCHER_DZ2</source>
-            <translation>DZ :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_EL</source>
-            <translation>Element Type</translation>
-        </message>
-       <message>
-            <source>GEOM_SKETCHER_RESTORE</source>
-            <translation>Restore</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_LENGTH</source>
-            <translation>Length</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_LENGTH2</source>
-            <translation>Length :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_NONE</source>
-            <translation>None (Tangential)</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_PER</source>
-            <translation>Perpendicular</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_POINT2</source>
-            <translation>Point :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_END_POINT2</source>
-            <translation>End Point :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_RADIUS</source>
-            <translation>Radius</translation>
-        </message> 
-        <message>
-            <source>GEOM_SKETCHER_RADIUS2</source>
-            <translation>Radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_REL</source>
-            <translation>Relative</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_SEGMENT</source>
-            <translation>Segment</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_SEL</source>
-            <translation>Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TAN</source>
-            <translation>Tangent</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TITLE</source>
-            <translation>2D Sketch Construction</translation>
-        </message>
-       <message>
-            <source>GEOM_3DSKETCHER_TITLE</source>
-            <translation>3D Sketch Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TYPE</source>
-            <translation>Type</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_UNDO</source>
-            <translation>Undo</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VALUES</source>
-            <translation>Values</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VX2</source>
-            <translation>VX :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VXVY</source>
-            <translation>VX-VY</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VY2</source>
-            <translation>VY :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X</source>
-            <translation>X</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X2</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X3</source>
-            <translation>Abs. X :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y</source>
-            <translation>Y</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y2</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y3</source>
-            <translation>Abs. Y :</translation>
-        </message>
-       <message>
-            <source>GEOM_SKETCHER_Z2</source>
-            <translation>Z :</translation>
-        </message>
-       <message>
-            <source>GEOM_3DSKETCHER</source>
-            <translation>3D Sketcher</translation>
-        </message>
-       <message>
-            <source>GEOM_COORDINATES_TYPE</source>
-            <translation>Coordinates Type</translation>
-        </message>
-        <message>
-            <source>GEOM_SOLID</source>
-            <translation>Solid</translation>
-        </message>
-        <message>
-            <source>GEOM_SOLID_TITLE</source>
-            <translation>Solid Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE</source>
-            <translation>Sphere</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_CR</source>
-            <translation>Center + Radius</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_RO</source>
-            <translation>Radius At Origin</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_TITLE</source>
-            <translation>Sphere Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_SPLINE</source>
-            <translation>Spline</translation>
-        </message>
-        <message>
-            <source>GEOM_SPLINE_TITLE</source>
-            <translation>Spline Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_START_LCS</source>
-            <translation>Start LCS</translation>
-        </message>
-       <message>
-            <source>SELECT_UNPUBLISHED_EDGES</source>
-            <translation>Select unpublished edges</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP</source>
-            <translation>Step :</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_TITLE</source>
-            <translation>Step value for GUI constructions</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_U</source>
-            <translation>Step U :</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_V</source>
-            <translation>Step V :</translation>
-        </message>
-        <message>
-            <source>GEOM_STUDY_LOCKED</source>
-            <translation>The active study is locked and therefore cannot be modified</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_SELECT</source>
-            <translation>Select Sub Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_TITLE</source>
-            <translation>Sub Shapes Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_TYPE</source>
-            <translation>Sub Shapes Type</translation>
-        </message>
-        <message>
-            <source>GEOM_SUB_SHAPE</source>
-            <translation>Sub Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_FACE_SHELL</source>
-            <translation>Face or shell</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTFACE</source>
-            <translation>Select the face with hole</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTFACE_END</source>
-            <translation>Select end face (if hole traversing)</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTWIRE</source>
-            <translation>Select wire on face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTWIRE_END</source>
-            <translation>Select end wire (if hole traversing)</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECT_HOLES_ON_FACE</source>
-            <translation>Select hole(s) on the face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_TITLE</source>
-            <translation>Suppress holes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT</source>
-            <translation>Suppress Result</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT_INSIDE</source>
-            <translation>Inside</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT_OUTSIDE</source>
-            <translation>Outside</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE</source>
-            <translation>Supress Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE_SELECT</source>
-            <translation>Select Faces To Suppress</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE_TITLE</source>
-            <translation>Suppress Faces In An Object</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFACE_CONTINUTY</source>
-            <translation>Surface continuity</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFACE_MODE</source>
-            <translation>Surface mode</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFCONE</source>
-            <translation>Conical Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFCYLINDER</source>
-            <translation>Cylindrical Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFSPHERE</source>
-            <translation>Spherical Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFTORUS</source>
-            <translation>Toroidal Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SameParameter</source>
-            <translation>SameParameter</translation>
-        </message>
-        <message>
-            <source>GEOM_SplitAngle</source>
-            <translation>SplitAngle</translation>
-        </message>
-        <message>
-            <source>GEOM_SplitClosedFaces</source>
-            <translation>SplitClosedFaces</translation>
-        </message>
-        <message>
-            <source>GEOM_SplitContinuity</source>
-            <translation>SplitContinuity</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE</source>
-            <translation>Tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_CONSTR</source>
-            <translation>Object And Its Tolerances</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_EDGE</source>
-            <translation>Edge :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_FACE</source>
-            <translation>Face :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_TITLE</source>
-            <translation>Maximum Tolerance</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_VERTEX</source>
-            <translation>Vertex :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOOL_OBJECT</source>
-            <translation>Tool Object</translation>
-        </message>
-       <message>
-            <source>GEOM_TOOL_OBJECTS</source>
-            <translation>Tool Objects</translation>
-        </message>
-        <message>
-            <source>GEOM_TORUS</source>
-            <translation>Torus</translation>
-        </message>
-        <message>
-            <source>GEOM_TORUS_TITLE</source>
-            <translation>Torus Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION</source>
-            <translation>Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION_COOR</source>
-            <translation>Translation With Coordinates</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION_TITLE</source>
-            <translation>Translation Of An Object</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_OPAQUE</source>
-            <translation>Opaque</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_TITLE</source>
-            <translation>Transparency</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_TRANSPARENT</source>
-            <translation>Transparent</translation>
-        </message>
-        <message>
-            <source>GEOM_TRIHEDRON</source>
-            <translation>Trihedron</translation>
-        </message>
-        <message>
-            <source>GEOM_ToBezier</source>
-            <translation>ToBezier</translation>
-        </message>
-        <message>
-            <source>GEOM_VALUE</source>
-            <translation>Value</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR</source>
-            <translation>Vector</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_LENGTH</source>
-            <translation>Vector Length :</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_TITLE</source>
-            <translation>Vector Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_U</source>
-            <translation>Vector U</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_V</source>
-            <translation>Vector V</translation>
-        </message>
-        <message>
-            <source>GEOM_VERTEX</source>
-            <translation>Vertex</translation>
-        </message>
-       <message>
-            <source>GEOM_VERTEXES</source>
-            <translation>Vertexes</translation>
-        </message>
-        <message>
-            <source>GEOM_WATER_DENSITY</source>
-            <translation>Water Density :</translation>
-        </message>
-        <message>
-            <source>GEOM_WEIGHT</source>
-            <translation>Weight :</translation>
-        </message>
-       <message>
-            <source>GEOM_WIDTH</source>
-            <translation>Width :</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS</source>
-            <translation>Whatis</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS_OBJECT</source>
-            <translation>Object And Its Topological Information</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS_TITLE</source>
-            <translation>Whatis Information</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRES</source>
-            <translation>Wire(s)</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRES_TO_REMOVE</source>
-            <translation>Wires to remove</translation>
-        </message>
-        <message>
-            <source>GEOM_WIREZ</source>
-            <translation>Wires</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE_CONNECT</source>
-            <translation>Wire creation from wires/edges connected</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE_TITLE</source>
-            <translation>Create A Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE</source>
-            <translation>Working Plane</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_FACE</source>
-            <translation>Plane, Planar Face or LCS</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_ORIGIN</source>
-            <translation>Select a plane</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_OXY</source>
-            <translation>OXY</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_OYZ</source>
-            <translation>OYZ</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_OZX</source>
-            <translation>OZX</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_TITLE</source>
-            <translation>Working Plane Selection</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_VECTOR</source>
-            <translation>Select 2 vectors</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_VX</source>
-            <translation>Vector X</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_VZ</source>
-            <translation>Vector Z</translation>
-        </message>
-        <message>
-            <source>GEOM_WRN_RADIUS_NULL</source>
-            <translation>Radius is null</translation>
-        </message>
-        <message>
-            <source>GEOM_WRN_WARNING</source>
-            <translation>Warning</translation>
-        </message>
-        <message>
-            <source>WRN_SHAPE_UNCLOSED</source>
-            <translation>Unable to create solid from unclosed shape %1</translation>
-        </message>
-        <message>
-            <source>GEOM_X</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_Y</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_Z</source>
-            <translation>Z :</translation>
-        </message>
-        <message>
-            <source>GLUE_NEW_OBJ_NAME</source>
-            <translation>Glue</translation>
-        </message>
-        <message>
-            <source>MEN_ALL_SEL_ONLY</source>
-            <translation>Select All</translation>
-        </message>
-        <message>
-            <source>MEN_ARC</source>
-            <translation>Arc</translation>
-        </message>
-        <message>
-            <source>MEN_ARCHIMEDE</source>
-            <translation>Archimede</translation>
-        </message>
-        <message>
-            <source>MEN_BASIC</source>
-            <translation>Basic</translation>
-        </message>
-        <message>
-            <source>MEN_BASIC_PROPS</source>
-            <translation>Basic Properties</translation>
-        </message>
-        <message>
-            <source>MEN_BLOCKS</source>
-            <translation>Blocks</translation>
-        </message>
-        <message>
-            <source>MEN_BND_BOX</source>
-            <translation>Bounding Box</translation>
-        </message>
-        <message>
-            <source>MEN_BOOLEAN</source>
-            <translation>Boolean</translation>
-        </message>
-        <message>
-            <source>MEN_BOX</source>
-            <translation>Box</translation>
-        </message>
-        <message>
-            <source>MEN_BUILD</source>
-            <translation>Build</translation>
-        </message>
-        <message>
-            <source>MEN_CHAMFER</source>
-            <translation>Chamfer</translation>
-        </message>
-        <message>
-            <source>MEN_CHANGE_ORIENTATION</source>
-            <translation>Change Orientation</translation>
-        </message>
-        <message>
-            <source>MEN_CHECK</source>
-            <translation>Check Shape</translation>
-        </message>
-        <message>
-            <source>MEN_CHECK_COMPOUND</source>
-            <translation>Check Compound of Blocks</translation>
-        </message>
-        <message>
-            <source>MEN_CHECK_FREE_BNDS</source>
-            <translation>Check Free Boundaries</translation>
-        </message>
-        <message>
-            <source>MEN_CHECK_FREE_FACES</source>
-            <translation>Check Free Faces</translation>
-        </message>
-        <message>
-            <source>MEN_CHECK_GEOMETRY</source>
-            <translation>Check Geometry</translation>
-        </message>
-        <message>
-            <source>MEN_CIRCLE</source>
-            <translation>Circle</translation>
-        </message>
-        <message>
-            <source>MEN_CLIPPING</source>
-            <translation>Clipping Range</translation>
-        </message>
-        <message>
-            <source>MEN_CLOSE_CONTOUR</source>
-            <translation>Close Contour</translation>
-        </message>
-        <message>
-            <source>MEN_COMMON</source>
-            <translation>Common</translation>
-        </message>
-        <message>
-            <source>MEN_COMPOUND</source>
-            <translation>Compound</translation>
-        </message>
-        <message>
-            <source>MEN_COMPOUND_SEL_ONLY</source>
-            <translation>Compound</translation>
-        </message>
-        <message>
-            <source>MEN_CONE</source>
-            <translation>Cone</translation>
-        </message>
-        <message>
-            <source>MEN_CURVE</source>
-            <translation>Curve</translation>
-        </message>
-        <message>
-            <source>MEN_CUT</source>
-            <translation>Cut</translation>
-        </message>
-        <message>
-            <source>MEN_CYLINDER</source>
-            <translation>Cylinder</translation>
-        </message>
-        <message>
-            <source>MEN_RECTANGLE</source>
-            <translation>Rectangle</translation>
-        </message>
-        <message>
-            <source>MEN_DELETE</source>
-            <translation>Delete</translation>
-        </message>
-        <message>
-            <source>MEN_DIMENSIONS</source>
-            <translation>Dimensions</translation>
-        </message>
-        <message>
-            <source>MEN_DISPLAY</source>
-            <translation>Show</translation>
-        </message>
-       <message>
-            <source>MEN_DISK</source>
-            <translation>Disk</translation>
-        </message>
-        <message>
-            <source>MEN_DISPLAY_ALL</source>
-            <translation>Show All</translation>
-        </message>
-        <message>
-            <source>MEN_DISPLAY_MODE</source>
-            <translation>Display Mode</translation>
-        </message>
-        <message>
-            <source>MEN_DISPLAY_ONLY</source>
-            <translation>Show Only</translation>
-        </message>
-        <message>
-            <source>MEN_EDGE</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>MEN_EDGE_SEL_ONLY</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>MEN_EDIT</source>
-            <translation>Edit</translation>
-        </message>
-        <message>
-            <source>MEN_ELLIPSE</source>
-            <translation>Ellipse</translation>
-        </message>
-        <message>
-            <source>MEN_ERASE</source>
-            <translation>Hide</translation>
-        </message>
-        <message>
-            <source>MEN_ERASE_ALL</source>
-            <translation>Hide All</translation>
-        </message>
-        <message>
-            <source>MEN_EXPLODE</source>
-            <translation>Explode</translation>
-        </message>
-        <message>
-            <source>MEN_EXPLODE_BLOCKS</source>
-            <translation>Explode on Blocks</translation>
-        </message>
-        <message>
-            <source>MEN_EXPORT</source>
-            <translation>Export...</translation>
-        </message>
-        <message>
-            <source>MEN_EXTRUSION</source>
-            <translation>Extrusion</translation>
-        </message>
-        <message>
-            <source>MEN_FACE</source>
-            <translation>Face</translation>
-        </message>
-        <message>
-            <source>MEN_FACE_SEL_ONLY</source>
-            <translation>Face</translation>
-        </message>
-        <message>
-            <source>MEN_FILE</source>
-            <translation>File</translation>
-        </message>
-        <message>
-            <source>MEN_FILLET</source>
-            <translation>Fillet 3D</translation>
-        </message>
-       <message>
-            <source>MEN_FILLET_1D</source>
-            <translation>Fillet 1D</translation>
-        </message>
-       <message>
-            <source>MEN_FILLET_2D</source>
-            <translation>Fillet 2D</translation>
-        </message>
-        <message>
-            <source>MEN_FILLING</source>
-            <translation>Filling</translation>
-        </message>
-        <message>
-            <source>MEN_FUSE</source>
-            <translation>Fuse</translation>
-        </message>
-        <message>
-            <source>MEN_GENERATION</source>
-            <translation>Generation</translation>
-        </message>
-        <message>
-            <source>MEN_GLUE_FACES</source>
-            <translation>Glue Faces</translation>
-        </message>
-        <message>
-            <source>MEN_GROUP</source>
-            <translation>Group</translation>
-        </message>
-        <message>
-            <source>MEN_GROUP_CREATE</source>
-            <translation>Create</translation>
-        </message>
-        <message>
-            <source>MEN_GROUP_EDIT</source>
-            <translation>Edit</translation>
-        </message>
-        <message>
-            <source>MEN_RELOAD_IMPORTED</source>
-            <translation>Reload From Disk</translation>
-        </message>
-        <message>
-            <source>MEN_HEX_SOLID</source>
-            <translation>Hexahedral Solid</translation>
-        </message>
-        <message>
-            <source>MEN_IMPORT</source>
-            <translation>Import...</translation>
-        </message>
-        <message>
-            <source>MEN_INERTIA</source>
-            <translation>Inertia</translation>
-        </message>
-        <message>
-            <source>MEN_ISOS</source>
-            <translation>Isos</translation>
-        </message>
-        <message>
-            <source>MEN_LINE</source>
-            <translation>Line</translation>
-        </message>
-        <message>
-            <source>MEN_LOCAL_CS</source>
-            <translation>Local Coordinate System</translation>
-        </message>
-        <message>
-            <source>MEN_MASS_CENTER</source>
-            <translation>Center of Mass</translation>
-        </message>
-        <message>
-            <source>MEN_MEASURES</source>
-            <translation>Measures</translation>
-        </message>
-        <message>
-            <source>MEN_MIN_DIST</source>
-            <translation>Min Distance</translation>
-        </message>
-        <message>
-            <source>MEN_MIRROR</source>
-            <translation>Mirror Image</translation>
-        </message>
-        <message>
-            <source>MEN_MODIFY_LOCATION</source>
-            <translation>Modify Location</translation>
-        </message>
-        <message>
-            <source>MEN_MUL_ROTATION</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>MEN_MUL_TRANSFORM</source>
-            <translation>Multi-Transformation</translation>
-        </message>
-        <message>
-            <source>MEN_MUL_TRANSLATION</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>MEN_NEW_ENTITY</source>
-            <translation>New Entity</translation>
-        </message>
-        <message>
-            <source>MEN_OFFSET</source>
-            <translation>Offset Surface</translation>
-        </message>
-        <message>
-            <source>MEN_OPERATIONS</source>
-            <translation>Operations</translation>
-        </message>
-        <message>
-            <source>MEN_PARTITION</source>
-            <translation>Partition</translation>
-        </message>
-        <message>
-            <source>MEN_PIPE</source>
-            <translation>Extrusion Along Path</translation>
-        </message>
-        <message>
-            <source>MEN_PLANE</source>
-            <translation>Plane</translation>
-        </message>
-        <message>
-            <source>MEN_POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>MEN_POINT_COORDS</source>
-            <translation>Point Coordinates</translation>
-        </message>
-        <message>
-            <source>MEN_POINT_ON_EDGE</source>
-            <translation>Add Point on Edge</translation>
-        </message>
-        <message>
-            <source>MEN_POP_COLOR</source>
-            <translation>Color</translation>
-        </message>
-        <message>
-            <source>MEN_POP_CREATE_GROUP</source>
-            <translation>Create Group</translation>
-        </message>
-        <message>
-            <source>MEN_POP_SHOW_CHILDREN</source>
-            <translation>Show Children</translation>
-        </message>
-        <message>
-            <source>MEN_POP_HIDE_CHILDREN</source>
-            <translation>Hide Children</translation>
-        </message>
-        <message>
-            <source>MEN_POP_ISOS</source>
-            <translation>Isos</translation>
-        </message>
-        <message>
-            <source>MEN_POP_DEFLECTION</source>
-            <translation>Deflection Coefficient</translation>
-        </message>
-        <message>
-            <source>MEN_POP_RENAME</source>
-            <translation>Rename</translation>
-        </message>
-        <message>
-            <source>MEN_POP_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>MEN_POP_TRANSPARENCY</source>
-            <translation>Transparency</translation>
-        </message>
-        <message>
-            <source>MEN_POP_WIREFRAME</source>
-            <translation>Wireframe</translation>
-        </message>
-       <message>
-            <source>MEN_POP_VECTORS</source>
-            <translation>Show Edge Direction</translation>
-        </message>
-        <message>
-            <source>MEN_PREFERENCES</source>
-            <translation>Preferences</translation>
-        </message>
-        <message>
-            <source>MEN_PREFERENCES_GEOM</source>
-            <translation>Geometry</translation>
-        </message>
-        <message>
-            <source>MEN_PRIMITIVES</source>
-            <translation>Primitives</translation>
-        </message>
-        <message>
-            <source>MEN_ADVANCED</source>
-            <translation>Advanced</translation>
-        </message>
-        <message>
-            <source>MEN_PROPAGATE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>MEN_Q_FACE</source>
-            <translation>Quadrangle Face</translation>
-        </message>
-        <message>
-            <source>MEN_REPAIR</source>
-            <translation>Repair</translation>
-        </message>
-        <message>
-            <source>MEN_REVOLUTION</source>
-            <translation>Revolution</translation>
-        </message>
-        <message>
-            <source>MEN_ROTATION</source>
-            <translation>Rotation</translation>
-        </message>
-        <message>
-            <source>MEN_SCALE</source>
-            <translation>Scale Transform</translation>
-        </message>
-        <message>
-            <source>MEN_SECTION</source>
-            <translation>Section</translation>
-        </message>
-        <message>
-            <source>MEN_SELECT_ONLY</source>
-            <translation>Select Only</translation>
-        </message>
-        <message>
-            <source>MEN_SEWING</source>
-            <translation>Sewing</translation>
-        </message>
-        <message>
-            <source>MEN_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>MEN_SHADING_COLOR</source>
-            <translation>Shading Color</translation>
-        </message>
-        <message>
-            <source>MEN_SHAPE_PROCESS</source>
-            <translation>Shape Processing</translation>
-        </message>
-        <message>
-            <source>MEN_SHELL</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>MEN_SHELL_SEL_ONLY</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>MEN_SKETCH</source>
-            <translation>2D Sketch</translation>
-        </message>
-       <message>
-            <source>MEN_3DSKETCH</source>
-            <translation>3D Sketch</translation>
-        </message>
-        <message>
-            <source>MEN_SOLID</source>
-            <translation>Solid</translation>
-        </message>
-        <message>
-            <source>MEN_SOLID_SEL_ONLY</source>
-            <translation>Solid</translation>
-        </message>
-        <message>
-            <source>MEN_SPHERE</source>
-            <translation>Sphere</translation>
-        </message>
-        <message>
-            <source>MEN_STEP_VALUE</source>
-            <translation>Step Value</translation>
-        </message>
-        <message>
-            <source>MEN_SUPPERSS_HOLES</source>
-            <translation>Suppress Holes</translation>
-        </message>
-        <message>
-            <source>MEN_SUPPRESS_FACES</source>
-            <translation>Suppress Faces</translation>
-        </message>
-        <message>
-            <source>MEN_SUPPRESS_INT_WIRES</source>
-            <translation>Suppress Internal Wires</translation>
-        </message>
-        <message>
-            <source>MEN_TOLERANCE</source>
-            <translation>Tolerance</translation>
-        </message>
-        <message>
-            <source>MEN_TOOLS</source>
-            <translation>Tools</translation>
-        </message>
-        <message>
-            <source>MEN_TORUS</source>
-            <translation>Torus</translation>
-        </message>
-        <message>
-            <source>MEN_TRANSFORMATION</source>
-            <translation>Transformation</translation>
-        </message>
-        <message>
-            <source>MEN_TRANSLATION</source>
-            <translation>Translation</translation>
-        </message>
-        <message>
-            <source>MEN_VECTOR</source>
-            <translation>Vector</translation>
-        </message>
-        <message>
-            <source>MEN_VERTEX_SEL_ONLY</source>
-            <translation>Vertex</translation>
-        </message>
-        <message>
-            <source>MEN_VIEW</source>
-            <translation>View</translation>
-        </message>
-        <message>
-            <source>MEN_WHAT_IS</source>
-            <translation>What is</translation>
-        </message>
-        <message>
-            <source>MEN_WIRE</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>MEN_VECTOR_MODE_ON</source>
-            <translation>Show Edge Direction</translation>
-        </message>
-       <message>
-            <source>MEN_VECTOR_MODE_OFF</source>
-            <translation>Hide Edge Direction</translation>
-        </message>
-       <message>
-            <source>MEN_WIREFRAME</source>
-            <translation>Wireframe</translation>
-        </message>
-        <message>
-            <source>MEN_WIRE_SEL_ONLY</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>MEN_WORK_PLANE</source>
-            <translation>Working Plane</translation>
-        </message>
-        <message>
-            <source>MEN_POP_POINT_MARKER</source>
-            <translation>Point Marker</translation>
-        </message>
-        <message>
-            <source>NAME_LBL</source>
-            <translation>Name: </translation>
-        </message>
-        <message>
-            <source>NON_GEOM_OBJECTS_SELECTED</source>
-            <translation>There are objects selected which do not belong to %1 component.</translation>
-        </message>
-        <message>
-            <source>PREF_DEFLECTION</source>
-            <translation>Deflection coefficient</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_def_precision</source>
-            <translation>Default precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_length_precision</source>
-            <translation>Length precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_angle_precision</source>
-            <translation>Angular precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_len_tol_precision</source>
-            <translation>Length tolerance precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_ang_tol_precision</source>
-            <translation>Angular tolerance precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_weight_precision</source>
-            <translation>Weight precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_density_precision</source>
-            <translation>Density precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_parametric_precision</source>
-            <translation>Parametric precision</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_param_tol_precision</source>
-            <translation>Parametric tolerance precision</translation>
-        </message>
-        <message>
-            <source>PREF_DISPLAY_MODE</source>
-            <translation>Default display mode</translation>
-        </message>
-        <message>
-            <source>PREF_FREE_BOUND_COLOR</source>
-            <translation>Color of free boundaries</translation>
-        </message>
-        <message>
-            <source>PREF_GROUP_GENERAL</source>
-            <translation>General</translation>
-        </message>
-        <message>
-            <source>PREF_GROUP_OCCVIEWER</source>
-            <translation>OCC Viewer 3d</translation>
-        </message>
-        <message>
-            <source>GEOM_PREF_GROUP_PRECISION</source>
-            <translation>Input fields precision</translation>
-        </message>
-        <message>
-            <source>PREF_GROUP_VERTEX</source>
-            <translation>Marker of Points</translation>
-        </message>
-        <message>
-            <source>PREF_ISOS_COLOR</source>
-            <translation>Color of isolines</translation>
-        </message>
-        <message>
-            <source>PREF_LINE_COLOR</source>
-            <translation>Color of edges, vectors, wires</translation>
-        </message>
-        <message>
-            <source>PREF_MARKER_SCALE</source>
-            <translation>Size</translation>
-        </message>
-        <message>
-            <source>PREF_POINT_COLOR</source>
-            <translation>Color of points</translation>
-        </message>
-        <message>
-            <source>PREF_SHADING_COLOR</source>
-            <translation>Default shading color</translation>
-        </message>
-        <message>
-            <source>PREF_STEP_VALUE</source>
-            <translation>Step value for spin boxes</translation>
-        </message>
-        <message>
-            <source>PREF_TAB_SETTINGS</source>
-            <translation>Settings</translation>
-        </message>
-        <message>
-            <source>PREF_TYPE_OF_MARKER</source>
-            <translation>Type</translation>
-        </message>
-        <message>
-            <source>PREF_WIREFRAME_COLOR</source>
-            <translation>Default wireframe color</translation>
-        </message>
-        <message>
-            <source>PROCESS_SHAPE_NEW_OBJ_NAME</source>
-            <translation>ProcessShape</translation>
-        </message>
-        <message>
-            <source>REMOVE_HOLES_NEW_OBJ_NAME</source>
-            <translation>SupressHoles</translation>
-        </message>
-        <message>
-            <source>REMOVE_INT_WIRES_NEW_OBJ_NAME</source>
-            <translation>RemoveIntWires</translation>
-        </message>
-        <message>
-            <source>SEWING_NEW_OBJ_NAME</source>
-            <translation>Sewing</translation>
-        </message>
-        <message>
-            <source>STB_ALL_SEL_ONLY</source>
-            <translation>Select all Objects</translation>
-        </message>
-        <message>
-            <source>STB_ARC</source>
-            <translation>Create an arc</translation>
-        </message>
-        <message>
-            <source>STB_ARCHIMEDE</source>
-            <translation>Archimede operation</translation>
-        </message>
-        <message>
-            <source>STB_BASIC_PROPS</source>
-            <translation>Show basic properties of the shape</translation>
-        </message>
-        <message>
-            <source>STB_BND_BOX</source>
-            <translation>Compute bounding box of the shape</translation>
-        </message>
-        <message>
-            <source>STB_BOX</source>
-            <translation>Create a box</translation>
-        </message>
-        <message>
-            <source>STB_CHAMFER</source>
-            <translation>Create a chamfer</translation>
-        </message>
-        <message>
-            <source>STB_CHANGE_ORIENTATION</source>
-            <translation>Change orientation</translation>
-        </message>
-        <message>
-            <source>STB_CHECK</source>
-            <translation>Check shape validity</translation>
-        </message>
-        <message>
-            <source>STB_CHECK_COMPOUND</source>
-            <translation>Check compound of blocks</translation>
-        </message>
-        <message>
-            <source>STB_CHECK_FREE_BNDS</source>
-            <translation>Check free boundaries</translation>
-        </message>
-        <message>
-            <source>STB_CHECK_FREE_FACES</source>
-            <translation>Check free faces</translation>
-        </message>
-        <message>
-            <source>STB_CHECK_GEOMETRY</source>
-            <translation>Check Geometry</translation>
-        </message>
-        <message>
-            <source>STB_CIRCLE</source>
-            <translation>Create a circle</translation>
-        </message>
-        <message>
-            <source>STB_CLIPPING</source>
-            <translation>Clipping range</translation>
-        </message>
-        <message>
-            <source>STB_CLOSE_CONTOUR</source>
-            <translation>Perform close contour</translation>
-        </message>
-        <message>
-            <source>STB_COMMON</source>
-            <translation>Common</translation>
-        </message>
-        <message>
-            <source>STB_COMPOUND</source>
-            <translation>Build a compound</translation>
-        </message>
-        <message>
-            <source>STB_COMPOUND_SEL_ONLY</source>
-            <translation>Select only a Compounds</translation>
-        </message>
-        <message>
-            <source>STB_CONE</source>
-            <translation>Create a cone</translation>
-        </message>
-        <message>
-            <source>STB_CURVE</source>
-            <translation>Create a curve</translation>
-        </message>
-        <message>
-            <source>STB_CUT</source>
-            <translation>Cut</translation>
-        </message>
-        <message>
-            <source>STB_CYLINDER</source>
-            <translation>Create a cylinder</translation>
-        </message>
-        <message>
-            <source>STB_RECTANGLE</source>
-            <translation>Create rectangular face</translation>
-        </message>
-        <message>
-            <source>STB_DELETE</source>
-            <translation>Delete object</translation>
-        </message>
-       <message>
-            <source>STB_DISK</source>
-            <translation>Create a disk</translation>
-        </message>
-        <message>
-            <source>STB_DISPLAY</source>
-            <translation>Show object(s)</translation>
-        </message>
-        <message>
-            <source>STB_DISPLAY_ALL</source>
-            <translation>Show all</translation>
-        </message>
-        <message>
-            <source>STB_DISPLAY_ONLY</source>
-            <translation>Show only</translation>
-        </message>
-        <message>
-            <source>STB_EDGE</source>
-            <translation>Build an edge</translation>
-        </message>
-        <message>
-            <source>STB_EDGE_SEL_ONLY</source>
-            <translation>Select only a Edges</translation>
-        </message>
-        <message>
-            <source>STB_ELLIPSE</source>
-            <translation>Create an ellipse</translation>
-        </message>
-        <message>
-            <source>STB_ERASE</source>
-            <translation>Hide object(s)</translation>
-        </message>
-        <message>
-            <source>STB_ERASE_ALL</source>
-            <translation>Hide all</translation>
-        </message>
-        <message>
-            <source>STB_EXPLODE</source>
-            <translation>Explode</translation>
-        </message>
-        <message>
-            <source>STB_EXPLODE_BLOCKS</source>
-            <translation>Explode on Blocks</translation>
-        </message>
-        <message>
-            <source>STB_EXPORT</source>
-            <translation>Export geometry to BREP file</translation>
-        </message>
-        <message>
-            <source>STB_EXTRUSION</source>
-            <translation>Create an extrusion</translation>
-        </message>
-        <message>
-            <source>STB_FACE</source>
-            <translation>Build a face</translation>
-        </message>
-        <message>
-            <source>STB_FACE_SEL_ONLY</source>
-            <translation>Select only a Faces</translation>
-        </message>
-        <message>
-            <source>STB_FILLET</source>
-            <translation>Create 3D fillet</translation>
-        </message>
-        <message>
-            <source>STB_FILLET_1D</source>
-            <translation>Create 1D fillet</translation>
-        </message>
-        <message>
-            <source>STB_FILLET_2D</source>
-            <translation>Create 2D fillet</translation>
-        </message>
-        <message>
-            <source>STB_FILLING</source>
-            <translation>Create a filling</translation>
-        </message>
-        <message>
-            <source>STB_FUSE</source>
-            <translation>Fuse</translation>
-        </message>
-        <message>
-            <source>STB_GLUE_FACES</source>
-            <translation>Perform glue faces</translation>
-        </message>
-        <message>
-            <source>STB_GROUP_CREATE</source>
-            <translation>Create a group</translation>
-        </message>
-        <message>
-            <source>STB_GROUP_EDIT</source>
-            <translation>Edit a group</translation>
-        </message>
-        <message>
-            <source>STB_RELOAD_IMPORTED</source>
-            <translation>Reload imported shape from its original place on disk</translation>
-        </message>
-        <message>
-            <source>STB_HEX_SOLID</source>
-            <translation>Hexahedral Solid</translation>
-        </message>
-        <message>
-            <source>STB_IMPORT</source>
-            <translation>Import geometry from BREP file</translation>
-        </message>
-        <message>
-            <source>STB_INERTIA</source>
-            <translation>Compute moments of intertia of the shape</translation>
-        </message>
-        <message>
-            <source>STB_ISOS</source>
-            <translation>Set number of isolines</translation>
-        </message>
-        <message>
-            <source>STB_LINE</source>
-            <translation>Create a line</translation>
-        </message>
-        <message>
-            <source>STB_LOCAL_CS</source>
-            <translation>Create a local coordinate system</translation>
-        </message>
-        <message>
-            <source>STB_MASS_CENTER</source>
-            <translation>Compute center of mass of the shape</translation>
-        </message>
-        <message>
-            <source>STB_MIN_DIST</source>
-            <translation>Compute minimum distance between two objects</translation>
-        </message>
-        <message>
-            <source>STB_MIRROR</source>
-            <translation>Mirror a shape</translation>
-        </message>
-        <message>
-            <source>STB_MODIFY_LOCATION</source>
-            <translation>Modify shape's location</translation>
-        </message>
-        <message>
-            <source>STB_MUL_ROTATION</source>
-            <translation>Perform multi-rotation</translation>
-        </message>
-        <message>
-            <source>STB_MUL_TRANSFORM</source>
-            <translation>Perform multi-transformation</translation>
-        </message>
-        <message>
-            <source>STB_MUL_TRANSLATION</source>
-            <translation>Perform multi-translation</translation>
-        </message>
-        <message>
-            <source>STB_OFFSET</source>
-            <translation>Offset surface</translation>
-        </message>
-        <message>
-            <source>STB_PARTITION</source>
-            <translation>Make a partition</translation>
-        </message>
-        <message>
-            <source>STB_PIPE</source>
-            <translation>Create a shape by extrusion along a path</translation>
-        </message>
-        <message>
-            <source>STB_PLANE</source>
-            <translation>Create a plane</translation>
-        </message>
-        <message>
-            <source>STB_POINT</source>
-            <translation>Create a point</translation>
-        </message>
-        <message>
-            <source>STB_POINT_COORDS</source>
-            <translation>Display point coordinates</translation>
-        </message>
-        <message>
-            <source>STB_POINT_ON_EDGE</source>
-            <translation>Add point on edge</translation>
-        </message>
-        <message>
-            <source>STB_POP_COLOR</source>
-            <translation>Color</translation>
-        </message>
-        <message>
-            <source>STB_POP_CREATE_GROUP</source>
-            <translation>Create Group</translation>
-        </message>
-        <message>
-            <source>STB_POP_SHOW_CHILDREN</source>
-            <translation>Show child objects</translation>
-        </message>
-        <message>
-            <source>STB_POP_HIDE_CHILDREN</source>
-            <translation>Hide child objects</translation>
-        </message>
-        <message>
-            <source>STB_POP_ISOS</source>
-            <translation>Isolines</translation>
-        </message>
-        <message>
-            <source>STB_POP_DEFLECTION</source>
-            <translation>Deflection Coefficient</translation>
-        </message>
-        <message>
-            <source>STB_POP_RENAME</source>
-            <translation>Rename</translation>
-        </message>
-        <message>
-            <source>STB_POP_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>STB_POP_TRANSPARENCY</source>
-            <translation>Transparency</translation>
-        </message>
-        <message>
-            <source>STB_POP_WIREFRAME</source>
-            <translation>Wireframe</translation>
-        </message>
-        <message>
-            <source>STB_PROPAGATE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>STB_Q_FACE</source>
-            <translation>Quadrangle Face</translation>
-        </message>
-        <message>
-            <source>STB_REVOLUTION</source>
-            <translation>Create a revolution</translation>
-        </message>
-        <message>
-            <source>STB_ROTATION</source>
-            <translation>Rotate a shape</translation>
-        </message>
-        <message>
-            <source>STB_SCALE</source>
-            <translation>Scale a shape</translation>
-        </message>
-        <message>
-            <source>STB_SECTION</source>
-            <translation>Section</translation>
-        </message>
-        <message>
-            <source>STB_SEWING</source>
-            <translation>Perform sewing</translation>
-        </message>
-        <message>
-            <source>STB_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-       <message>
-            <source>STB_VECTOR_MODE</source>
-            <translation>Change Edge Presentation Mode</translation>
-        </message>
-        <message>
-            <source>STB_SHADING_COLOR</source>
-            <translation>Set shading color</translation>
-        </message>
-        <message>
-            <source>STB_SHAPE_PROCESS</source>
-            <translation>Perform shape processing </translation>
-        </message>
-        <message>
-            <source>STB_SHELL</source>
-            <translation>Build a shell</translation>
-        </message>
-        <message>
-            <source>STB_SHELL_SEL_ONLY</source>
-            <translation>Select only a Shells</translation>
-        </message>
-        <message>
-            <source>STB_SKETCH</source>
-            <translation>Create 2D sketch</translation>
-        </message>
-        <message>
-            <source>STB_3DSKETCH</source>
-            <translation>Create 3D sketch</translation>
-        </message>
-        <message>
-            <source>STB_SOLID</source>
-            <translation>Build a solid</translation>
-        </message>
-        <message>
-            <source>STB_SOLID_SEL_ONLY</source>
-            <translation>Select only a Solids</translation>
-        </message>
-        <message>
-            <source>STB_SPHERE</source>
-            <translation>Create a sphere</translation>
-        </message>
-        <message>
-            <source>STB_STEP_VALUE</source>
-            <translation>Set step value</translation>
-        </message>
-        <message>
-            <source>STB_SUPPERSS_HOLES</source>
-            <translation>Perform suppress holes</translation>
-        </message>
-        <message>
-            <source>STB_SUPPRESS_FACES</source>
-            <translation>Perform suppress faces</translation>
-        </message>
-        <message>
-            <source>STB_SUPPRESS_INT_WIRES</source>
-            <translation>Perform suppress internal wires</translation>
-        </message>
-        <message>
-            <source>STB_TOLERANCE</source>
-            <translation>Compute tolerance of the shape</translation>
-        </message>
-        <message>
-            <source>STB_TORUS</source>
-            <translation>Create a torus</translation>
-        </message>
-        <message>
-            <source>STB_TRANSLATION</source>
-            <translation>Translate shape</translation>
-        </message>
-        <message>
-            <source>STB_VECTOR</source>
-            <translation>Create a vector</translation>
-        </message>
-        <message>
-            <source>STB_VERTEX_SEL_ONLY</source>
-            <translation>Select only a Points</translation>
-        </message>
-        <message>
-            <source>STB_WHAT_IS</source>
-            <translation>What is</translation>
-        </message>
-        <message>
-            <source>STB_WIRE</source>
-            <translation>Build a wire</translation>
-        </message>
-        <message>
-            <source>STB_WIRE_SEL_ONLY</source>
-            <translation>Select only a Wires</translation>
-        </message>
-        <message>
-            <source>STB_WORK_PLANE</source>
-            <translation>Create a working plane</translation>
-        </message>
-        <message>
-            <source>STB_POP_POINT_MARKER</source>
-            <translation>Set Point Marker</translation>
-        </message>
-        <message>
-            <source>SUPPRESS_RESULT</source>
-            <translation>Suppress Result</translation>
-        </message>
-        <message>
-            <source>SUPRESS_FACE_NEW_OBJ_NAME</source>
-            <translation>SupressFaces</translation>
-        </message>
-        <message>
-            <source>ShHealOper_ErrorExecution_msg</source>
-            <translation>Shape Healing algorithm failed</translation>
-        </message>
-        <message>
-            <source>ShHealOper_InvalidParameters_msg</source>
-            <translation>Incorrect parameters for Shape Healing algorithm</translation>
-        </message>
-        <message>
-            <source>ShHealOper_NotError_msg</source>
-            <translation>Shape Healing algorithm has done no modification of the original shape</translation>
-        </message>
-        <message>
-            <source>TLT_RENAME</source>
-            <translation>Rename</translation>
-        </message>
-        <message>
-            <source>TOM_O</source>
-            <translation>O</translation>
-        </message>
-        <message>
-            <source>TOM_O_PLUS</source>
-            <translation>+ in O</translation>
-        </message>
-        <message>
-            <source>TOM_O_POINT</source>
-            <translation>. in O</translation>
-        </message>
-        <message>
-            <source>TOM_O_STAR</source>
-            <translation>* in O</translation>
-        </message>
-        <message>
-            <source>TOM_O_X</source>
-            <translation>X in O</translation>
-        </message>
-        <message>
-            <source>TOM_PLUS</source>
-            <translation>+</translation>
-        </message>
-        <message>
-            <source>TOM_POINT</source>
-            <translation>.</translation>
-        </message>
-        <message>
-            <source>TOM_STAR</source>
-            <translation>*</translation>
-        </message>
-        <message>
-            <source>TOM_X</source>
-            <translation>X</translation>
-        </message>
-        <message>
-            <source>TOOL_BASIC</source>
-            <translation>Basic</translation>
-        </message>
-        <message>
-            <source>TOOL_BOOLEAN</source>
-            <translation>Boolean operations</translation>
-        </message>
-        <message>
-            <source>TOOL_GENERATION</source>
-            <translation>Generation</translation>
-        </message>
-        <message>
-            <source>TOOL_PRIMITIVES</source>
-            <translation>Primitives</translation>
-        </message>
-        <message>
-            <source>TOOL_TRANSFORMATION</source>
-            <translation>Transformation</translation>
-        </message>
-        <message>
-            <source>TOOL_BUILD</source>
-            <translation>Build</translation>
-        </message>
-        <message>
-            <source>TOOL_OPERATIONS</source>
-            <translation>Operations</translation>
-        </message>
-        <message>
-            <source>TOOL_ADVANCED</source>
-            <translation>Advanced</translation>
-        </message>
-        <message>
-            <source>TOOL_MEASURES</source>
-            <translation>Measures</translation>
-        </message>
-        <message>
-            <source>TOP_ARC</source>
-            <translation>Create an arc</translation>
-        </message>
-        <message>
-            <source>TOP_ARCHIMEDE</source>
-            <translation>Archimede</translation>
-        </message>
-        <message>
-            <source>TOP_BASIC_PROPS</source>
-            <translation>Basic properties</translation>
-        </message>
-        <message>
-            <source>TOP_BND_BOX</source>
-            <translation>Bounding box</translation>
-        </message>
-        <message>
-            <source>TOP_BOX</source>
-            <translation>Create a box</translation>
-        </message>
-        <message>
-            <source>TOP_CHAMFER</source>
-            <translation>Chamfer</translation>
-        </message>
-        <message>
-            <source>TOP_CHANGE_ORIENTATION</source>
-            <translation>Change orientation</translation>
-        </message>
-        <message>
-            <source>TOP_CHECK</source>
-            <translation>Check shape</translation>
-        </message>
-        <message>
-            <source>TOP_CHECK_COMPOUND</source>
-            <translation>Check compound of blocks</translation>
-        </message>
-        <message>
-            <source>TOP_CHECK_FREE_BNDS</source>
-            <translation>Check free boundaries</translation>
-        </message>
-        <message>
-            <source>TOP_CHECK_FREE_FACES</source>
-            <translation>Check free faces</translation>
-        </message>
-        <message>
-            <source>TOP_CHECK_GEOMETRY</source>
-            <translation>Check Geometry</translation>
-        </message>
-        <message>
-            <source>TOP_CIRCLE</source>
-            <translation>Create a circle</translation>
-        </message>
-        <message>
-            <source>TOP_CLIPPING</source>
-            <translation>Clipping range</translation>
-        </message>
-        <message>
-            <source>TOP_CLOSE_CONTOUR</source>
-            <translation>Perform close contour</translation>
-        </message>
-        <message>
-            <source>TOP_COMMON</source>
-            <translation>Common</translation>
-        </message>
-        <message>
-            <source>TOP_COMPOUND</source>
-            <translation>Build compound</translation>
-        </message>
-        <message>
-            <source>TOP_CONE</source>
-            <translation>Create a cone</translation>
-        </message>
-        <message>
-            <source>TOP_CURVE</source>
-            <translation>Create a curve</translation>
-        </message>
-        <message>
-            <source>TOP_CUT</source>
-            <translation>Cut</translation>
-        </message>
-        <message>
-            <source>TOP_CYLINDER</source>
-            <translation>Create a cylinder</translation>
-        </message>
-        <message>
-            <source>TOP_DELETE</source>
-            <translation>Delete object</translation>
-        </message>
-        <message>
-            <source>TOP_RECTANGLE</source>
-            <translation>Create rectangular face</translation>
-        </message>
-       <message>
-            <source>TOP_DISK</source>
-            <translation>Create a disk</translation>
-        </message>
-        <message>
-            <source>TOP_DISPLAY</source>
-            <translation>Show</translation>
-        </message>
-        <message>
-            <source>TOP_DISPLAY_ALL</source>
-            <translation>Show all</translation>
-        </message>
-        <message>
-            <source>TOP_DISPLAY_ONLY</source>
-            <translation>Show only</translation>
-        </message>
-        <message>
-            <source>TOP_EDGE</source>
-            <translation>Build edge</translation>
-        </message>
-        <message>
-            <source>TOP_ELLIPSE</source>
-            <translation>Create an ellipse</translation>
-        </message>
-        <message>
-            <source>TOP_ERASE</source>
-            <translation>Hide</translation>
-        </message>
-        <message>
-            <source>TOP_ERASE_ALL</source>
-            <translation>Hide all</translation>
-        </message>
-        <message>
-            <source>TOP_EXPLODE</source>
-            <translation>Explode</translation>
-        </message>
-        <message>
-            <source>TOP_EXPLODE_BLOCKS</source>
-            <translation>Explode on Blocks</translation>
-        </message>
-        <message>
-            <source>TOP_EXPORT</source>
-            <translation>Export geometry to BREP file</translation>
-        </message>
-        <message>
-            <source>TOP_EXTRUSION</source>
-            <translation>Create an extrusion</translation>
-        </message>
-        <message>
-            <source>TOP_FACE</source>
-            <translation>Build face</translation>
-        </message>
-        <message>
-            <source>TOP_FILLET</source>
-            <translation>Fillet 3D</translation>
-        </message>
-        <message>
-            <source>TOP_FILLET_1D</source>
-            <translation>Fillet 1D</translation>
-        </message>
-        <message>
-            <source>TOP_FILLET_2D</source>
-            <translation>Fillet 2D</translation>
-        </message>
-        <message>
-            <source>TOP_FILLING</source>
-            <translation>Create a filling</translation>
-        </message>
-        <message>
-            <source>TOP_FUSE</source>
-            <translation>Fuse</translation>
-        </message>
-        <message>
-            <source>TOP_GLUE_FACES</source>
-            <translation>Perform glue faces</translation>
-        </message>
-        <message>
-            <source>TOP_GROUP_CREATE</source>
-            <translation>Create a group</translation>
-        </message>
-        <message>
-            <source>TOP_GROUP_EDIT</source>
-            <translation>Edit a group</translation>
-        </message>
-        <message>
-            <source>TOP_HEX_SOLID</source>
-            <translation>Hexahedral Solid</translation>
-        </message>
-        <message>
-            <source>TOP_IMPORT</source>
-            <translation>Import geometry from BREP file</translation>
-        </message>
-        <message>
-            <source>TOP_INERTIA</source>
-            <translation>Moments of intertia</translation>
-        </message>
-        <message>
-            <source>TOP_ISOS</source>
-            <translation>Set number of isolines</translation>
-        </message>
-        <message>
-            <source>TOP_LINE</source>
-            <translation>Create a line</translation>
-        </message>
-        <message>
-            <source>TOP_LOCAL_CS</source>
-            <translation>Create a local coordinate system</translation>
-        </message>
-        <message>
-            <source>TOP_MASS_CENTER</source>
-            <translation>Center of mass</translation>
-        </message>
-        <message>
-            <source>TOP_MIN_DIST</source>
-            <translation>Minimum distance</translation>
-        </message>
-        <message>
-            <source>TOP_MIRROR</source>
-            <translation>Mirror image</translation>
-        </message>
-        <message>
-            <source>TOP_MODIFY_LOCATION</source>
-            <translation>Modify location</translation>
-        </message>
-        <message>
-            <source>TOP_MUL_ROTATION</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>TOP_MUL_TRANSFORM</source>
-            <translation>Multi-transformation</translation>
-        </message>
-        <message>
-            <source>TOP_MUL_TRANSLATION</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>TOP_OFFSET</source>
-            <translation>Offset surface</translation>
-        </message>
-        <message>
-            <source>TOP_PARTITION</source>
-            <translation>Partition</translation>
-        </message>
-        <message>
-            <source>TOP_PIPE</source>
-            <translation>Extrusion along path</translation>
-        </message>
-        <message>
-            <source>TOP_PLANE</source>
-            <translation>Create a plane</translation>
-        </message>
-        <message>
-            <source>TOP_POINT</source>
-            <translation>Create a point</translation>
-        </message>
-        <message>
-            <source>TOP_POINT_COORDS</source>
-            <translation>Point coordinates</translation>
-        </message>
-        <message>
-            <source>TOP_POINT_ON_EDGE</source>
-            <translation>Add point on edge</translation>
-        </message>
-        <message>
-            <source>TOP_POP_COLOR</source>
-            <translation>Color</translation>
-        </message>
-        <message>
-            <source>TOP_POP_CREATE_GROUP</source>
-            <translation>Create Group</translation>
-        </message>
-        <message>
-            <source>TOP_POP_SHOW_CHILDREN</source>
-            <translation>Show Children</translation>
-        </message>
-        <message>
-            <source>TOP_POP_HIDE_CHILDREN</source>
-            <translation>Hide Children</translation>
-        </message>
-        <message>
-            <source>TOP_POP_ISOS</source>
-            <translation>Isolines</translation>
-        </message>
-        <message>
-            <source>TOP_POP_DEFLECTION</source>
-            <translation>Deflection Coefficient</translation>
-        </message>
-        <message>
-            <source>TOP_POP_RENAME</source>
-            <translation>Rename</translation>
-        </message>
-        <message>
-            <source>TOP_POP_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>TOP_POP_TRANSPARENCY</source>
-            <translation>Transparency</translation>
-        </message>
-        <message>
-            <source>TOP_POP_WIREFRAME</source>
-            <translation>Wireframe</translation>
-        </message>
-        <message>
-            <source>TOP_PROPAGATE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>TOP_Q_FACE</source>
-            <translation>Quadrangle Face</translation>
-        </message>
-        <message>
-            <source>TOP_REVOLUTION</source>
-            <translation>Create a revolution</translation>
-        </message>
-        <message>
-            <source>TOP_ROTATION</source>
-            <translation>Rotation</translation>
-        </message>
-        <message>
-            <source>TOP_SCALE</source>
-            <translation>Scale transform</translation>
-        </message>
-        <message>
-            <source>TOP_SECTION</source>
-            <translation>Section</translation>
-        </message>
-        <message>
-            <source>TOP_SEWING</source>
-            <translation>Perform sewing</translation>
-        </message>
-        <message>
-            <source>TOP_SHADING</source>
-            <translation>Shading</translation>
-        </message>
-        <message>
-            <source>TOP_SHADING_COLOR</source>
-            <translation>Set shading color</translation>
-        </message>
-        <message>
-            <source>TOP_SHAPE_PROCESS</source>
-            <translation>Perform shape processing</translation>
-        </message>
-        <message>
-            <source>TOP_SHELL</source>
-            <translation>Build shell</translation>
-        </message>
-        <message>
-            <source>TOP_SKETCH</source>
-            <translation>2D sketch</translation>
-        </message>
-        <message>
-            <source>TOP_3DSKETCH</source>
-            <translation>3D sketch</translation>
-        </message>
-        <message>
-            <source>TOP_SOLID</source>
-            <translation>Build solid</translation>
-        </message>
-        <message>
-            <source>TOP_SPHERE</source>
-            <translation>Create a sphere</translation>
-        </message>
-        <message>
-            <source>TOP_STEP_VALUE</source>
-            <translation>Set step value</translation>
-        </message>
-        <message>
-            <source>TOP_SUPPERSS_HOLES</source>
-            <translation>Perform suppress holes</translation>
-        </message>
-        <message>
-            <source>TOP_SUPPRESS_FACES</source>
-            <translation>Perform suppress faces</translation>
-        </message>
-        <message>
-            <source>TOP_SUPPRESS_INT_WIRES</source>
-            <translation>Perform suppress internal wires</translation>
-        </message>
-        <message>
-            <source>TOP_TOLERANCE</source>
-            <translation>Tolerance</translation>
-        </message>
-        <message>
-            <source>TOP_TORUS</source>
-            <translation>Create a torus</translation>
-        </message>
-        <message>
-            <source>TOP_TRANSLATION</source>
-            <translation>Translation</translation>
-        </message>
-        <message>
-            <source>TOP_VECTOR</source>
-            <translation>Create a vector</translation>
-        </message>
-        <message>
-            <source>TOP_WHAT_IS</source>
-            <translation>What is</translation>
-        </message>
-        <message>
-            <source>TOP_WIRE</source>
-            <translation>Build wire</translation>
-        </message>
-        <message>
-            <source>TOP_WORK_PLANE</source>
-            <translation>Create a working plane</translation>
-        </message>
-        <message>
-            <source>TOP_POP_POINT_MARKER</source>
-            <translation>Point Marker</translation>
-        </message>
-        <message>
-            <source>WRN_NOT_IMPLEMENTED</source>
-            <translation>Sorry, this functionality is not yet implemented</translation>
-        </message>
-        <message>
-            <source>_S_</source>
-            <translation>(s)</translation>
-        </message>
-        <message>
-            <source>NOT_FOUND_ANY</source>
-            <translation>Not a single entity has been found</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_I</source>
-            <translation>Face %1</translation>
-        </message>
-        <message>
-            <source>GEOM_CONSTANT_RADIUS</source>
-            <translation>Radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_R1</source>
-            <translation>R1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_R2</source>
-            <translation>R2 :</translation>
-        </message>
-        <message>
-            <source>GEOM_BOTHWAY</source>
-            <translation>Both Directions</translation>
-        </message>
-        <message>
-            <source>GEOM_NORMALE</source>
-            <translation>Normal To A Face</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_NORMALE</source>
-            <translation>Vector_Normal</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE1</source>
-            <translation>Line 1</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE2</source>
-            <translation>Line 2</translation>
-        </message>
-        <message>
-            <source>GEOM_D</source>
-            <translation>D :</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_EDGE</source>
-            <translation>Chamfer On Selected Edges</translation>
-        </message>
-        <message>
-            <source>SELECTED_EDGE</source>
-            <translation>Selected Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_NORMALE_TITLE</source>
-            <translation>Create Normal To A Face</translation>
-        </message>
-        <message>
-            <source>GEOM_MEASURE_ANGLE_TITLE</source>
-            <translation>Angle Between Two Straight Edges/Lines/Vectors</translation>
-        </message>
-        <message>
-            <source>GEOM_MEASURE_ANGLE_ANGLE</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>GEOM_MEASURE_ANGLE_OBJ</source>
-            <translation>Objects And Results</translation>
-        </message>
-        <message>
-            <source>GEOM_MEASURE_ANGLE_IS</source>
-            <translation>Angle in degrees :</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE_INTERSECTION</source>
-            <translation>Point On Lines Intersection</translation>
-        </message>
-        <message>
-            <source>GEOM_KEEP_NONLIMIT_SHAPES</source>
-            <translation>Keep shapes of lower type</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTER_2POINTS</source>
-            <translation>Center and two points</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_EXTRA_EDGES_TITLE</source>
-            <translation>Remove extra edges</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_EXTRA_EDGES</source>
-            <translation>Object to remove extra edges</translation>
-        </message>
-        <message>
-            <source>GEOM_RMEE_UNION_FACES</source>
-            <translation>Union faces, laying on common surface</translation>
-        </message>
-        <message>
-            <source>REMOVE_EXTRA_EDGES_NEW_OBJ_NAME</source>
-            <translation>NoExtraEdges</translation>
-        </message>
-        <message>
-            <source>TOP_REMOVE_EXTRA_EDGES</source>
-            <translation>Remove extra edges</translation>
-        </message>
-        <message>
-            <source>MEN_REMOVE_EXTRA_EDGES</source>
-            <translation>Remove Extra Edges</translation>
-        </message>
-        <message>
-            <source>STB_REMOVE_EXTRA_EDGES</source>
-            <translation>Remove extra edges</translation>
-        </message>
-        <message>
-            <source>TOP_NORMALE</source>
-            <translation>Normal to a face</translation>
-        </message>
-        <message>
-            <source>MEN_NORMALE</source>
-            <translation>Normal to a Face</translation>
-        </message>
-        <message>
-            <source>STB_NORMALE</source>
-            <translation>Compute normal to the face</translation>
-        </message>
-        <message>
-            <source>TOP_MEASURE_ANGLE</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>MEN_MEASURE_ANGLE</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>STB_MEASURE_ANGLE</source>
-            <translation>Compute angle between two lines or linear edges</translation>
-        </message>
-        <message>
-            <source>TOP_POP_AUTO_COLOR</source>
-            <translation>Auto color</translation>
-        </message>
-        <message>
-            <source>MEN_POP_AUTO_COLOR</source>
-            <translation>Auto Color</translation>
-        </message>
-        <message>
-            <source>STB_POP_AUTO_COLOR</source>
-            <translation>Auto color</translation>
-        </message>
-        <message>
-            <source>TOP_POP_DISABLE_AUTO_COLOR</source>
-            <translation>Disable auto color</translation>
-        </message>
-        <message>
-            <source>MEN_POP_DISABLE_AUTO_COLOR</source>
-            <translation>Disable Auto Color</translation>
-        </message>
-        <message>
-            <source>STB_POP_DISABLE_AUTO_COLOR</source>
-            <translation>Disable auto color</translation>
-        </message>
-        <message>
-            <source>GEOM_RESULT_NAME_GRP</source>
-            <translation>Result name</translation>
-        </message>
-        <message>
-            <source>GEOM_RESULT_NAME_LBL</source>
-            <translation>Name</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_APPROX</source>
-            <translation>Approximation</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_METHOD</source>
-            <translation>Method</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_DEFAULT</source>
-            <translation>Default (standard behaviour)</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_USEORI</source>
-            <translation>Use edges orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_AUTO</source>
-            <translation>Auto-correct edges orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source>
-            <translation>No appropriate objects selected</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES_ON_SHAPE</source>
-            <translation>Get shapes on shape</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES_ON_SHAPE_ESHAPE</source>
-            <translation>Shape for exploding</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES_ON_SHAPE_CSHAPE</source>
-            <translation>Solid for checking</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES_ON_SHAPE_STATE</source>
-            <translation>State</translation>
-        </message>
-        <message>
-            <source>GEOM_KIND_OF_SHAPE</source>
-            <translation>Kind of Shape :</translation>
-        </message>
-        <message>
-            <source>GEOM_CLOSED</source>
-            <translation>Closed</translation>
-        </message>
-        <message>
-            <source>GEOM_UNCLOSED</source>
-            <translation>Opened</translation>
-        </message>
-        <message>
-            <source>GEOM_CLOSEDUNCLOSED</source>
-            <translation>Not defined, Closed or Opened. Possibly, error occured.</translation>
-        </message>
-        <message>
-            <source>GEOM_DISK_CIRCLE</source>
-            <translation>Disk</translation>
-        </message>
-        <message>
-            <source>GEOM_DISK_ELLIPSE</source>
-            <translation>Elliptical face</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANAR_FACE</source>
-            <translation>Planar Face</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANAR_EDGE_WIRE</source>
-            <translation>Wire with Planar Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_POLYGON</source>
-            <translation>Polygon</translation>
-        </message>
-        <message>
-            <source>GEOM_POLYHEDRON</source>
-            <translation>Polyhedron</translation>
-        </message>
-        <message>
-            <source>GEOM_NORMAL</source>
-            <translation>Normal direction</translation>
-        </message>
-        <message>
-            <source>GEOM_DIRECTION</source>
-            <translation>Direction</translation>
-        </message>
-        <message>
-            <source>GEOM_UPARAMETER</source>
-            <translation>U-parameter :</translation>
-        </message>
-        <message>
-            <source>GEOM_VPARAMETER</source>
-            <translation>V-parameter :</translation>
-        </message>
-        <message>
-            <source>GEOM_X_I</source>
-            <translation>X%1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_Y_I</source>
-            <translation>Y%1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_Z_I</source>
-            <translation>Z%1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPES_ON_SHAPE_TITLE</source>
-            <translation>Get shapes on shape</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_FACTOR_X</source>
-            <translation>Scale Factor X :</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_FACTOR_Y</source>
-            <translation>Scale Factor Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_FACTOR_Z</source>
-            <translation>Scale Factor Z :</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_IN</source>
-            <translation>IN</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_OUT</source>
-            <translation>OUT</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_ON</source>
-            <translation>ON</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_ONIN</source>
-            <translation>ONIN</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_ONOUT</source>
-            <translation>ONOUT</translation>
-        </message>
-        <message>
-            <source>GEOM_STATE_INOUT</source>
-            <translation>INOUT</translation>
-        </message>
-        <message>
-            <source>TOP_GET_SHAPES_ON_SHAPE</source>
-            <translation>Get shapes on shape</translation>
-        </message>
-        <message>
-            <source>MEN_GET_SHAPES_ON_SHAPE</source>
-            <translation>Get Shapes on Shape</translation>
-        </message>
-        <message>
-            <source>STB_GET_SHAPES_ON_SHAPE</source>
-            <translation>Get shapes on shape</translation>
-        </message>
-        <message>
-            <source>TOP_GET_SHARED_SHAPES</source>
-            <translation>Get shared shapes</translation>
-        </message>
-        <message>
-            <source>MEN_GET_SHARED_SHAPES</source>
-            <translation>Get Shared Shapes</translation>
-        </message>
-        <message>
-            <source>STB_GET_SHARED_SHAPES</source>
-            <translation>Get shared shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_PUBLISH_RESULT_GRP</source>
-            <translation>Advanced options</translation>
-        </message>
-        <message>
-            <source>GEOM_RESTORE_SUB_SHAPES</source>
-            <translation>Set presentation parameters and subshapes from arguments</translation>
-        </message>
-        <message>
-            <source>GEOM_RSS_ADD_FREFIX</source>
-            <translation>Add prefix to names of restored subshapes</translation>
-        </message>
-        <message>
-            <source>GEOM_ALL_IMPORT_FILES</source>
-            <translation>All supported formats ( %1 )</translation>
-        </message>
-        <message>
-            <source>GEOM_UNSUPPORTED_TYPE</source>
-            <translation>Unsupported format for the file</translation>
-        </message>
-        <message>
-            <source>GEOM_UNKNOWN_IMPORT_ERROR</source>
-            <translation>Unknown error</translation>
-        </message>
-        <message>
-            <source>GEOM_IMPORT_ERRORS</source>
-            <translation>Import operation has finished with errors:</translation>
-        </message>
-        <message>
-            <source>GEOM_PUBLISH_NAMED_SHAPES</source>
-            <translation>Create groups for named shapes (if there are any)?</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_DIMENSIONS</source>
-            <translation>Would you like to take into account the units?
+    <message>
+        <source>GEOM_VECTOR_LENGTH</source>
+        <translation>Vector Length :</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_TITLE</source>
+        <translation>Vector Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_U</source>
+        <translation>Vector U</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_V</source>
+        <translation>Vector V</translation>
+    </message>
+    <message>
+        <source>GEOM_VERTEX</source>
+        <translation>Vertex</translation>
+    </message>
+    <message>
+        <source>GEOM_VERTEXES</source>
+        <translation>Vertexes</translation>
+    </message>
+    <message>
+        <source>GEOM_WATER_DENSITY</source>
+        <translation>Water Density :</translation>
+    </message>
+    <message>
+        <source>GEOM_WEIGHT</source>
+        <translation>Weight :</translation>
+    </message>
+    <message>
+        <source>GEOM_WIDTH</source>
+        <translation>Width :</translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS</source>
+        <translation>Whatis</translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS_OBJECT</source>
+        <translation>Object And Its Topological Information</translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS_TITLE</source>
+        <translation>Whatis Information</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE</source>
+        <translation>Wire</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRES</source>
+        <translation>Wire(s)</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRES_TO_REMOVE</source>
+        <translation>Wires to remove</translation>
+    </message>
+    <message>
+        <source>GEOM_WIREZ</source>
+        <translation>Wires</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE_CONNECT</source>
+        <translation>Wire creation from wires/edges connected</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE_TITLE</source>
+        <translation>Create A Wire</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE</source>
+        <translation>Working Plane</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_FACE</source>
+        <translation>Plane, Planar Face or LCS</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_ORIGIN</source>
+        <translation>Select a plane</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OXY</source>
+        <translation>OXY</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OYZ</source>
+        <translation>OYZ</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OZX</source>
+        <translation>OZX</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_TITLE</source>
+        <translation>Working Plane Selection</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VECTOR</source>
+        <translation>Select 2 vectors</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VX</source>
+        <translation>Vector X</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VZ</source>
+        <translation>Vector Z</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_RADIUS_NULL</source>
+        <translation>Radius is null</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_WARNING</source>
+        <translation>Warning</translation>
+    </message>
+    <message>
+        <source>WRN_SHAPE_UNCLOSED</source>
+        <translation>Unable to create solid from unclosed shape %1</translation>
+    </message>
+    <message>
+        <source>GEOM_X</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_Y</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_Z</source>
+        <translation>Z :</translation>
+    </message>
+    <message>
+        <source>GLUE_NEW_OBJ_NAME</source>
+        <translation>Glue</translation>
+    </message>
+    <message>
+        <source>LIMIT_TOLERANCE_NEW_OBJ_NAME</source>
+        <translation>Limit_tolerance</translation>
+    </message>
+    <message>
+        <source>MEN_ALL_SEL_ONLY</source>
+        <translation>Select All</translation>
+    </message>
+    <message>
+        <source>MEN_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>MEN_ARCHIMEDE</source>
+        <translation>Archimede</translation>
+    </message>
+    <message>
+        <source>MEN_BASIC</source>
+        <translation>Basic</translation>
+    </message>
+    <message>
+        <source>MEN_BASIC_PROPS</source>
+        <translation>Basic Properties</translation>
+    </message>
+    <message>
+        <source>MEN_BLOCKS</source>
+        <translation>Blocks</translation>
+    </message>
+    <message>
+        <source>MEN_BND_BOX</source>
+        <translation>Bounding Box</translation>
+    </message>
+    <message>
+        <source>MEN_BOOLEAN</source>
+        <translation>Boolean</translation>
+    </message>
+    <message>
+        <source>MEN_BOX</source>
+        <translation>Box</translation>
+    </message>
+    <message>
+        <source>MEN_BUILD</source>
+        <translation>Build</translation>
+    </message>
+    <message>
+        <source>MEN_CHAMFER</source>
+        <translation>Chamfer</translation>
+    </message>
+    <message>
+        <source>MEN_CHANGE_ORIENTATION</source>
+        <translation>Change Orientation</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK</source>
+        <translation>Check Shape</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_COMPOUND</source>
+        <translation>Check Compound of Blocks</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_FREE_BNDS</source>
+        <translation>Check Free Boundaries</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_FREE_FACES</source>
+        <translation>Check Free Faces</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_GEOMETRY</source>
+        <translation>Check Geometry</translation>
+    </message>
+    <message>
+        <source>MEN_CIRCLE</source>
+        <translation>Circle</translation>
+    </message>
+    <message>
+        <source>MEN_CLIPPING</source>
+        <translation>Clipping Range</translation>
+    </message>
+    <message>
+        <source>MEN_CLOSE_CONTOUR</source>
+        <translation>Close Contour</translation>
+    </message>
+    <message>
+        <source>MEN_COMMON</source>
+        <translation>Common</translation>
+    </message>
+    <message>
+        <source>MEN_COMPOUND</source>
+        <translation>Compound</translation>
+    </message>
+    <message>
+        <source>MEN_COMPOUND_SEL_ONLY</source>
+        <translation>Compound</translation>
+    </message>
+    <message>
+        <source>MEN_CONE</source>
+        <translation>Cone</translation>
+    </message>
+    <message>
+        <source>MEN_CURVE</source>
+        <translation>Curve</translation>
+    </message>
+    <message>
+        <source>MEN_CUT</source>
+        <translation>Cut</translation>
+    </message>
+    <message>
+        <source>MEN_CYLINDER</source>
+        <translation>Cylinder</translation>
+    </message>
+    <message>
+        <source>MEN_RECTANGLE</source>
+        <translation>Rectangle</translation>
+    </message>
+    <message>
+        <source>MEN_DELETE</source>
+        <translation>Delete</translation>
+    </message>
+    <message>
+        <source>MEN_DIMENSIONS</source>
+        <translation>Dimensions</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY</source>
+        <translation>Show</translation>
+    </message>
+    <message>
+        <source>MEN_DISK</source>
+        <translation>Disk</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_ALL</source>
+        <translation>Show All</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_MODE</source>
+        <translation>Display Mode</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_ONLY</source>
+        <translation>Show Only</translation>
+    </message>
+    <message>
+        <source>MEN_EDGE</source>
+        <translation>Edge</translation>
+    </message>
+    <message>
+        <source>MEN_EDGE_SEL_ONLY</source>
+        <translation>Edge</translation>
+    </message>
+    <message>
+        <source>MEN_EDIT</source>
+        <translation>Edit</translation>
+    </message>
+    <message>
+        <source>MEN_ELLIPSE</source>
+        <translation>Ellipse</translation>
+    </message>
+    <message>
+        <source>MEN_ERASE</source>
+        <translation>Hide</translation>
+    </message>
+    <message>
+        <source>MEN_ERASE_ALL</source>
+        <translation>Hide All</translation>
+    </message>
+    <message>
+        <source>MEN_EXPLODE</source>
+        <translation>Explode</translation>
+    </message>
+    <message>
+        <source>MEN_EXPLODE_BLOCKS</source>
+        <translation>Explode on Blocks</translation>
+    </message>
+    <message>
+        <source>MEN_EXPORT</source>
+        <translation>Export...</translation>
+    </message>
+    <message>
+        <source>MEN_EXTRUSION</source>
+        <translation>Extrusion</translation>
+    </message>
+    <message>
+        <source>MEN_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>MEN_FACE_SEL_ONLY</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>MEN_FILE</source>
+        <translation>File</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET</source>
+        <translation>Fillet 3D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET_1D</source>
+        <translation>Fillet 1D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET_2D</source>
+        <translation>Fillet 2D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLING</source>
+        <translation>Filling</translation>
+    </message>
+    <message>
+        <source>MEN_FUSE</source>
+        <translation>Fuse</translation>
+    </message>
+    <message>
+        <source>MEN_GENERATION</source>
+        <translation>Generation</translation>
+    </message>
+    <message>
+        <source>MEN_GLUE_FACES</source>
+        <translation>Glue Faces</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP</source>
+        <translation>Group</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP_CREATE</source>
+        <translation>Create</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP_EDIT</source>
+        <translation>Edit</translation>
+    </message>
+    <message>
+        <source>MEN_RELOAD_IMPORTED</source>
+        <translation>Reload From Disk</translation>
+    </message>
+    <message>
+        <source>MEN_HEX_SOLID</source>
+        <translation>Hexahedral Solid</translation>
+    </message>
+    <message>
+        <source>MEN_IMPORT</source>
+        <translation>Import...</translation>
+    </message>
+    <message>
+        <source>MEN_INERTIA</source>
+        <translation>Inertia</translation>
+    </message>
+    <message>
+        <source>MEN_ISOS</source>
+        <translation>Isos</translation>
+    </message>
+    <message>
+        <source>MEN_LIMIT_TOLERANCE</source>
+        <translation>Limit tolerance</translation>
+    </message>
+    <message>
+        <source>MEN_LINE</source>
+        <translation>Line</translation>
+    </message>
+    <message>
+        <source>MEN_LOCAL_CS</source>
+        <translation>Local Coordinate System</translation>
+    </message>
+    <message>
+        <source>MEN_MASS_CENTER</source>
+        <translation>Center of Mass</translation>
+    </message>
+    <message>
+        <source>MEN_MEASURES</source>
+        <translation>Measures</translation>
+    </message>
+    <message>
+        <source>MEN_MIN_DIST</source>
+        <translation>Min Distance</translation>
+    </message>
+    <message>
+        <source>MEN_MIRROR</source>
+        <translation>Mirror Image</translation>
+    </message>
+    <message>
+        <source>MEN_MODIFY_LOCATION</source>
+        <translation>Modify Location</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_ROTATION</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_TRANSFORM</source>
+        <translation>Multi-Transformation</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_TRANSLATION</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>MEN_NEW_ENTITY</source>
+        <translation>New Entity</translation>
+    </message>
+    <message>
+        <source>MEN_OFFSET</source>
+        <translation>Offset Surface</translation>
+    </message>
+    <message>
+        <source>MEN_OPERATIONS</source>
+        <translation>Operations</translation>
+    </message>
+    <message>
+        <source>MEN_ORIGIN_AND_VECTORS</source>
+        <translation>Origin and Base Vectors</translation>
+    </message>
+    <message>
+        <source>MEN_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>MEN_PIPE</source>
+        <translation>Extrusion Along Path</translation>
+    </message>
+    <message>
+        <source>MEN_PLANE</source>
+        <translation>Plane</translation>
+    </message>
+    <message>
+        <source>MEN_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>MEN_POINT_COORDS</source>
+        <translation>Point Coordinates</translation>
+    </message>
+    <message>
+        <source>MEN_POINT_ON_EDGE</source>
+        <translation>Add Point on Edge</translation>
+    </message>
+    <message>
+        <source>MEN_POP_COLOR</source>
+        <translation>Color</translation>
+    </message>
+    <message>
+        <source>MEN_POP_CREATE_GROUP</source>
+        <translation>Create Group</translation>
+    </message>
+    <message>
+        <source>MEN_POP_SHOW_CHILDREN</source>
+        <translation>Show Children</translation>
+    </message>
+    <message>
+        <source>MEN_POP_HIDE_CHILDREN</source>
+        <translation>Hide Children</translation>
+    </message>
+    <message>
+        <source>MEN_POP_ISOS</source>
+        <translation>Isos</translation>
+    </message>
+    <message>
+        <source>MEN_POP_DEFLECTION</source>
+        <translation>Deflection Coefficient</translation>
+    </message>
+    <message>
+        <source>MEN_POP_RENAME</source>
+        <translation>Rename</translation>
+    </message>
+    <message>
+        <source>MEN_POP_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>MEN_POP_TRANSPARENCY</source>
+        <translation>Transparency</translation>
+    </message>
+    <message>
+        <source>MEN_POP_WIREFRAME</source>
+        <translation>Wireframe</translation>
+    </message>
+    <message>
+        <source>MEN_POP_VECTORS</source>
+        <translation>Show Edge Direction</translation>
+    </message>
+    <message>
+        <source>MEN_PREFERENCES</source>
+        <translation>Preferences</translation>
+    </message>
+    <message>
+        <source>MEN_PREFERENCES_GEOM</source>
+        <translation>Geometry</translation>
+    </message>
+    <message>
+        <source>MEN_PRIMITIVES</source>
+        <translation>Primitives</translation>
+    </message>
+    <message>
+        <source>MEN_ADVANCED</source>
+        <translation>Advanced</translation>
+    </message>
+    <message>
+        <source>MEN_PROPAGATE</source>
+        <translation>Propagate</translation>
+    </message>
+    <message>
+        <source>MEN_Q_FACE</source>
+        <translation>Quadrangle Face</translation>
+    </message>
+    <message>
+        <source>MEN_REPAIR</source>
+        <translation>Repair</translation>
+    </message>
+    <message>
+        <source>MEN_REVOLUTION</source>
+        <translation>Revolution</translation>
+    </message>
+    <message>
+        <source>MEN_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>MEN_SCALE</source>
+        <translation>Scale Transform</translation>
+    </message>
+    <message>
+        <source>MEN_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>MEN_SELECT_ONLY</source>
+        <translation>Select Only</translation>
+    </message>
+    <message>
+        <source>MEN_SEWING</source>
+        <translation>Sewing</translation>
+    </message>
+    <message>
+        <source>MEN_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>MEN_SHADING_COLOR</source>
+        <translation>Shading Color</translation>
+    </message>
+    <message>
+        <source>MEN_SHAPE_PROCESS</source>
+        <translation>Shape Processing</translation>
+    </message>
+    <message>
+        <source>MEN_SHELL</source>
+        <translation>Shell</translation>
+    </message>
+    <message>
+        <source>MEN_SHELL_SEL_ONLY</source>
+        <translation>Shell</translation>
+    </message>
+    <message>
+        <source>MEN_SKETCH</source>
+        <translation>2D Sketch</translation>
+    </message>
+    <message>
+        <source>MEN_3DSKETCH</source>
+        <translation>3D Sketch</translation>
+    </message>
+    <message>
+        <source>MEN_SOLID</source>
+        <translation>Solid</translation>
+    </message>
+    <message>
+        <source>MEN_SOLID_SEL_ONLY</source>
+        <translation>Solid</translation>
+    </message>
+    <message>
+        <source>MEN_SPHERE</source>
+        <translation>Sphere</translation>
+    </message>
+    <message>
+        <source>MEN_STEP_VALUE</source>
+        <translation>Step Value</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPERSS_HOLES</source>
+        <translation>Suppress Holes</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPRESS_FACES</source>
+        <translation>Suppress Faces</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPRESS_INT_WIRES</source>
+        <translation>Suppress Internal Wires</translation>
+    </message>
+    <message>
+        <source>MEN_TOLERANCE</source>
+        <translation>Tolerance</translation>
+    </message>
+    <message>
+        <source>MEN_TOOLS</source>
+        <translation>Tools</translation>
+    </message>
+    <message>
+        <source>MEN_TORUS</source>
+        <translation>Torus</translation>
+    </message>
+    <message>
+        <source>MEN_TRANSFORMATION</source>
+        <translation>Transformation</translation>
+    </message>
+    <message>
+        <source>MEN_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR</source>
+        <translation>Vector</translation>
+    </message>
+    <message>
+        <source>MEN_VERTEX_SEL_ONLY</source>
+        <translation>Vertex</translation>
+    </message>
+    <message>
+        <source>MEN_VIEW</source>
+        <translation>View</translation>
+    </message>
+    <message>
+        <source>MEN_WHAT_IS</source>
+        <translation>What is</translation>
+    </message>
+    <message>
+        <source>MEN_WIRE</source>
+        <translation>Wire</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR_MODE_ON</source>
+        <translation>Show Edge Direction</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR_MODE_OFF</source>
+        <translation>Hide Edge Direction</translation>
+    </message>
+    <message>
+        <source>MEN_WIREFRAME</source>
+        <translation>Wireframe</translation>
+    </message>
+    <message>
+        <source>MEN_WIRE_SEL_ONLY</source>
+        <translation>Wire</translation>
+    </message>
+    <message>
+        <source>MEN_WORK_PLANE</source>
+        <translation>Working Plane</translation>
+    </message>
+    <message>
+        <source>MEN_POP_POINT_MARKER</source>
+        <translation>Point Marker</translation>
+    </message>
+    <message>
+        <source>NAME_LBL</source>
+        <translation>Name: </translation>
+    </message>
+    <message>
+        <source>NON_GEOM_OBJECTS_SELECTED</source>
+        <translation>There are objects selected which do not belong to %1 component.</translation>
+    </message>
+    <message>
+        <source>PREF_DEFLECTION</source>
+        <translation>Deflection coefficient</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_def_precision</source>
+        <translation>Default precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_length_precision</source>
+        <translation>Length precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_angle_precision</source>
+        <translation>Angular precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_len_tol_precision</source>
+        <translation>Length tolerance precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_ang_tol_precision</source>
+        <translation>Angular tolerance precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_weight_precision</source>
+        <translation>Weight precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_density_precision</source>
+        <translation>Density precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_parametric_precision</source>
+        <translation>Parametric precision</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_param_tol_precision</source>
+        <translation>Parametric tolerance precision</translation>
+    </message>
+    <message>
+        <source>PREF_AUTO_CREATE</source>
+        <translation>Auto create</translation>
+    </message>
+    <message>
+        <source>PREF_DISPLAY_MODE</source>
+        <translation>Default display mode</translation>
+    </message>
+    <message>
+        <source>PREF_FREE_BOUND_COLOR</source>
+        <translation>Color of free boundaries</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_ORIGIN_AND_BASE_VECTORS</source>
+        <translation>Origin and base vectors</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_GENERAL</source>
+        <translation>General</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_OCCVIEWER</source>
+        <translation>OCC Viewer 3d</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_GROUP_PRECISION</source>
+        <translation>Input fields precision</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_VERTEX</source>
+        <translation>Marker of Points</translation>
+    </message>
+    <message>
+        <source>PREF_ISOS_COLOR</source>
+        <translation>Color of isolines</translation>
+    </message>
+    <message>
+        <source>PREF_LINE_COLOR</source>
+        <translation>Color of edges, vectors, wires</translation>
+    </message>
+    <message>
+        <source>PREF_MARKER_SCALE</source>
+        <translation>Size</translation>
+    </message>
+    <message>
+        <source>PREF_POINT_COLOR</source>
+        <translation>Color of points</translation>
+    </message>
+    <message>
+        <source>PREF_SHADING_COLOR</source>
+        <translation>Default shading color</translation>
+    </message>
+    <message>
+        <source>PREF_STEP_VALUE</source>
+        <translation>Step value for spin boxes</translation>
+    </message>
+    <message>
+        <source>PREF_TAB_SETTINGS</source>
+        <translation>Settings</translation>
+    </message>
+    <message>
+        <source>PREF_TYPE_OF_MARKER</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <source>PREF_BASE_VECTORS_LENGTH</source>
+        <translation>Length of base vectors</translation>
+    </message>
+    <message>
+        <source>PREF_WIREFRAME_COLOR</source>
+        <translation>Default wireframe color</translation>
+    </message>
+    <message>
+        <source>PROCESS_SHAPE_NEW_OBJ_NAME</source>
+        <translation>ProcessShape</translation>
+    </message>
+    <message>
+        <source>REMOVE_HOLES_NEW_OBJ_NAME</source>
+        <translation>SupressHoles</translation>
+    </message>
+    <message>
+        <source>REMOVE_INT_WIRES_NEW_OBJ_NAME</source>
+        <translation>RemoveIntWires</translation>
+    </message>
+    <message>
+        <source>SEWING_NEW_OBJ_NAME</source>
+        <translation>Sewing</translation>
+    </message>
+    <message>
+        <source>STB_ALL_SEL_ONLY</source>
+        <translation>Select all Objects</translation>
+    </message>
+    <message>
+        <source>STB_ARC</source>
+        <translation>Create an arc</translation>
+    </message>
+    <message>
+        <source>STB_ARCHIMEDE</source>
+        <translation>Archimede operation</translation>
+    </message>
+    <message>
+        <source>STB_BASIC_PROPS</source>
+        <translation>Show basic properties of the shape</translation>
+    </message>
+    <message>
+        <source>STB_BND_BOX</source>
+        <translation>Compute bounding box of the shape</translation>
+    </message>
+    <message>
+        <source>STB_BOX</source>
+        <translation>Create a box</translation>
+    </message>
+    <message>
+        <source>STB_CHAMFER</source>
+        <translation>Create a chamfer</translation>
+    </message>
+    <message>
+        <source>STB_CHANGE_ORIENTATION</source>
+        <translation>Change orientation</translation>
+    </message>
+    <message>
+        <source>STB_CHECK</source>
+        <translation>Check shape validity</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_COMPOUND</source>
+        <translation>Check compound of blocks</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_FREE_BNDS</source>
+        <translation>Check free boundaries</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_FREE_FACES</source>
+        <translation>Check free faces</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_GEOMETRY</source>
+        <translation>Check Geometry</translation>
+    </message>
+    <message>
+        <source>STB_CIRCLE</source>
+        <translation>Create a circle</translation>
+    </message>
+    <message>
+        <source>STB_CLIPPING</source>
+        <translation>Clipping range</translation>
+    </message>
+    <message>
+        <source>STB_CLOSE_CONTOUR</source>
+        <translation>Perform close contour</translation>
+    </message>
+    <message>
+        <source>STB_COMMON</source>
+        <translation>Common</translation>
+    </message>
+    <message>
+        <source>STB_COMPOUND</source>
+        <translation>Build a compound</translation>
+    </message>
+    <message>
+        <source>STB_COMPOUND_SEL_ONLY</source>
+        <translation>Select only a Compounds</translation>
+    </message>
+    <message>
+        <source>STB_CONE</source>
+        <translation>Create a cone</translation>
+    </message>
+    <message>
+        <source>STB_CURVE</source>
+        <translation>Create a curve</translation>
+    </message>
+    <message>
+        <source>STB_CUT</source>
+        <translation>Cut</translation>
+    </message>
+    <message>
+        <source>STB_CYLINDER</source>
+        <translation>Create a cylinder</translation>
+    </message>
+    <message>
+        <source>STB_RECTANGLE</source>
+        <translation>Create rectangular face</translation>
+    </message>
+    <message>
+        <source>STB_DELETE</source>
+        <translation>Delete object</translation>
+    </message>
+    <message>
+        <source>STB_DISK</source>
+        <translation>Create a disk</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY</source>
+        <translation>Show object(s)</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY_ALL</source>
+        <translation>Show all</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY_ONLY</source>
+        <translation>Show only</translation>
+    </message>
+    <message>
+        <source>STB_EDGE</source>
+        <translation>Build an edge</translation>
+    </message>
+    <message>
+        <source>STB_EDGE_SEL_ONLY</source>
+        <translation>Select only a Edges</translation>
+    </message>
+    <message>
+        <source>STB_ELLIPSE</source>
+        <translation>Create an ellipse</translation>
+    </message>
+    <message>
+        <source>STB_ERASE</source>
+        <translation>Hide object(s)</translation>
+    </message>
+    <message>
+        <source>STB_ERASE_ALL</source>
+        <translation>Hide all</translation>
+    </message>
+    <message>
+        <source>STB_EXPLODE</source>
+        <translation>Explode</translation>
+    </message>
+    <message>
+        <source>STB_EXPLODE_BLOCKS</source>
+        <translation>Explode on Blocks</translation>
+    </message>
+    <message>
+        <source>STB_EXPORT</source>
+        <translation>Export geometry to BREP file</translation>
+    </message>
+    <message>
+        <source>STB_EXTRUSION</source>
+        <translation>Create an extrusion</translation>
+    </message>
+    <message>
+        <source>STB_FACE</source>
+        <translation>Build a face</translation>
+    </message>
+    <message>
+        <source>STB_FACE_SEL_ONLY</source>
+        <translation>Select only a Faces</translation>
+    </message>
+    <message>
+        <source>STB_FILLET</source>
+        <translation>Create 3D fillet</translation>
+    </message>
+    <message>
+        <source>STB_FILLET_1D</source>
+        <translation>Create 1D fillet</translation>
+    </message>
+    <message>
+        <source>STB_FILLET_2D</source>
+        <translation>Create 2D fillet</translation>
+    </message>
+    <message>
+        <source>STB_FILLING</source>
+        <translation>Create a filling</translation>
+    </message>
+    <message>
+        <source>STB_FUSE</source>
+        <translation>Fuse</translation>
+    </message>
+    <message>
+        <source>STB_GLUE_FACES</source>
+        <translation>Perform glue faces</translation>
+    </message>
+    <message>
+        <source>STB_GROUP_CREATE</source>
+        <translation>Create a group</translation>
+    </message>
+    <message>
+        <source>STB_GROUP_EDIT</source>
+        <translation>Edit a group</translation>
+    </message>
+    <message>
+        <source>STB_RELOAD_IMPORTED</source>
+        <translation>Reload imported shape from its original place on disk</translation>
+    </message>
+    <message>
+        <source>STB_HEX_SOLID</source>
+        <translation>Hexahedral Solid</translation>
+    </message>
+    <message>
+        <source>STB_IMPORT</source>
+        <translation>Import geometry from BREP file</translation>
+    </message>
+    <message>
+        <source>STB_INERTIA</source>
+        <translation>Compute moments of intertia of the shape</translation>
+    </message>
+    <message>
+        <source>STB_ISOS</source>
+        <translation>Set number of isolines</translation>
+    </message>
+    <message>
+        <source>STB_LINE</source>
+        <translation>Create a line</translation>
+    </message>
+    <message>
+        <source>STB_LIMIT_TOLERANCE</source>
+        <translation>Limit tolerance</translation>
+    </message>
+    <message>
+        <source>STB_LOCAL_CS</source>
+        <translation>Create a local coordinate system</translation>
+    </message>
+    <message>
+        <source>STB_MASS_CENTER</source>
+        <translation>Compute center of mass of the shape</translation>
+    </message>
+    <message>
+        <source>STB_MIN_DIST</source>
+        <translation>Compute minimum distance between two objects</translation>
+    </message>
+    <message>
+        <source>STB_MIRROR</source>
+        <translation>Mirror a shape</translation>
+    </message>
+    <message>
+        <source>STB_MODIFY_LOCATION</source>
+        <translation>Modify shape&apos;s location</translation>
+    </message>
+    <message>
+        <source>STB_MUL_ROTATION</source>
+        <translation>Perform multi-rotation</translation>
+    </message>
+    <message>
+        <source>STB_MUL_TRANSFORM</source>
+        <translation>Perform multi-transformation</translation>
+    </message>
+    <message>
+        <source>STB_MUL_TRANSLATION</source>
+        <translation>Perform multi-translation</translation>
+    </message>
+    <message>
+        <source>STB_OFFSET</source>
+        <translation>Offset surface</translation>
+    </message>
+    <message>
+        <source>STB_ORIGIN_AND_VECTORS</source>
+        <translation>Create an origin and base Vectors</translation>
+    </message>
+    <message>
+        <source>STB_PARTITION</source>
+        <translation>Make a partition</translation>
+    </message>
+    <message>
+        <source>STB_PIPE</source>
+        <translation>Create a shape by extrusion along a path</translation>
+    </message>
+    <message>
+        <source>STB_PLANE</source>
+        <translation>Create a plane</translation>
+    </message>
+    <message>
+        <source>STB_POINT</source>
+        <translation>Create a point</translation>
+    </message>
+    <message>
+        <source>STB_POINT_COORDS</source>
+        <translation>Display point coordinates</translation>
+    </message>
+    <message>
+        <source>STB_POINT_ON_EDGE</source>
+        <translation>Add point on edge</translation>
+    </message>
+    <message>
+        <source>STB_POP_COLOR</source>
+        <translation>Color</translation>
+    </message>
+    <message>
+        <source>STB_POP_CREATE_GROUP</source>
+        <translation>Create Group</translation>
+    </message>
+    <message>
+        <source>STB_POP_SHOW_CHILDREN</source>
+        <translation>Show child objects</translation>
+    </message>
+    <message>
+        <source>STB_POP_HIDE_CHILDREN</source>
+        <translation>Hide child objects</translation>
+    </message>
+    <message>
+        <source>STB_POP_ISOS</source>
+        <translation>Isolines</translation>
+    </message>
+    <message>
+        <source>STB_POP_DEFLECTION</source>
+        <translation>Deflection Coefficient</translation>
+    </message>
+    <message>
+        <source>STB_POP_RENAME</source>
+        <translation>Rename</translation>
+    </message>
+    <message>
+        <source>STB_POP_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>STB_POP_TRANSPARENCY</source>
+        <translation>Transparency</translation>
+    </message>
+    <message>
+        <source>STB_POP_WIREFRAME</source>
+        <translation>Wireframe</translation>
+    </message>
+    <message>
+        <source>STB_PROPAGATE</source>
+        <translation>Propagate</translation>
+    </message>
+    <message>
+        <source>STB_Q_FACE</source>
+        <translation>Quadrangle Face</translation>
+    </message>
+    <message>
+        <source>STB_REVOLUTION</source>
+        <translation>Create a revolution</translation>
+    </message>
+    <message>
+        <source>STB_ROTATION</source>
+        <translation>Rotate a shape</translation>
+    </message>
+    <message>
+        <source>STB_SCALE</source>
+        <translation>Scale a shape</translation>
+    </message>
+    <message>
+        <source>STB_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>STB_SEWING</source>
+        <translation>Perform sewing</translation>
+    </message>
+    <message>
+        <source>STB_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>STB_VECTOR_MODE</source>
+        <translation>Change Edge Presentation Mode</translation>
+    </message>
+    <message>
+        <source>STB_SHADING_COLOR</source>
+        <translation>Set shading color</translation>
+    </message>
+    <message>
+        <source>STB_SHAPE_PROCESS</source>
+        <translation>Perform shape processing </translation>
+    </message>
+    <message>
+        <source>STB_SHELL</source>
+        <translation>Build a shell</translation>
+    </message>
+    <message>
+        <source>STB_SHELL_SEL_ONLY</source>
+        <translation>Select only a Shells</translation>
+    </message>
+    <message>
+        <source>STB_SKETCH</source>
+        <translation>Create 2D sketch</translation>
+    </message>
+    <message>
+        <source>STB_3DSKETCH</source>
+        <translation>Create 3D sketch</translation>
+    </message>
+    <message>
+        <source>STB_SOLID</source>
+        <translation>Build a solid</translation>
+    </message>
+    <message>
+        <source>STB_SOLID_SEL_ONLY</source>
+        <translation>Select only a Solids</translation>
+    </message>
+    <message>
+        <source>STB_SPHERE</source>
+        <translation>Create a sphere</translation>
+    </message>
+    <message>
+        <source>STB_STEP_VALUE</source>
+        <translation>Set step value</translation>
+    </message>
+    <message>
+        <source>STB_SUPPERSS_HOLES</source>
+        <translation>Perform suppress holes</translation>
+    </message>
+    <message>
+        <source>STB_SUPPRESS_FACES</source>
+        <translation>Perform suppress faces</translation>
+    </message>
+    <message>
+        <source>STB_SUPPRESS_INT_WIRES</source>
+        <translation>Perform suppress internal wires</translation>
+    </message>
+    <message>
+        <source>STB_TOLERANCE</source>
+        <translation>Compute tolerance of the shape</translation>
+    </message>
+    <message>
+        <source>STB_TORUS</source>
+        <translation>Create a torus</translation>
+    </message>
+    <message>
+        <source>STB_TRANSLATION</source>
+        <translation>Translate shape</translation>
+    </message>
+    <message>
+        <source>STB_VECTOR</source>
+        <translation>Create a vector</translation>
+    </message>
+    <message>
+        <source>STB_VERTEX_SEL_ONLY</source>
+        <translation>Select only a Points</translation>
+    </message>
+    <message>
+        <source>STB_WHAT_IS</source>
+        <translation>What is</translation>
+    </message>
+    <message>
+        <source>STB_WIRE</source>
+        <translation>Build a wire</translation>
+    </message>
+    <message>
+        <source>STB_WIRE_SEL_ONLY</source>
+        <translation>Select only a Wires</translation>
+    </message>
+    <message>
+        <source>STB_WORK_PLANE</source>
+        <translation>Create a working plane</translation>
+    </message>
+    <message>
+        <source>STB_POP_POINT_MARKER</source>
+        <translation>Set Point Marker</translation>
+    </message>
+    <message>
+        <source>SUPPRESS_RESULT</source>
+        <translation>Suppress Result</translation>
+    </message>
+    <message>
+        <source>SUPRESS_FACE_NEW_OBJ_NAME</source>
+        <translation>SupressFaces</translation>
+    </message>
+    <message>
+        <source>ShHealOper_ErrorExecution_msg</source>
+        <translation>Shape Healing algorithm failed</translation>
+    </message>
+    <message>
+        <source>ShHealOper_InvalidParameters_msg</source>
+        <translation>Incorrect parameters for Shape Healing algorithm</translation>
+    </message>
+    <message>
+        <source>ShHealOper_NotError_msg</source>
+        <translation>Shape Healing algorithm has done no modification of the original shape</translation>
+    </message>
+    <message>
+        <source>TLT_RENAME</source>
+        <translation>Rename</translation>
+    </message>
+    <message>
+        <source>TOM_O</source>
+        <translation>O</translation>
+    </message>
+    <message>
+        <source>TOM_O_PLUS</source>
+        <translation>+ in O</translation>
+    </message>
+    <message>
+        <source>TOM_O_POINT</source>
+        <translation>. in O</translation>
+    </message>
+    <message>
+        <source>TOM_O_STAR</source>
+        <translation>* in O</translation>
+    </message>
+    <message>
+        <source>TOM_O_X</source>
+        <translation>X in O</translation>
+    </message>
+    <message>
+        <source>TOM_PLUS</source>
+        <translation>+</translation>
+    </message>
+    <message>
+        <source>TOM_POINT</source>
+        <translation>.</translation>
+    </message>
+    <message>
+        <source>TOM_STAR</source>
+        <translation>*</translation>
+    </message>
+    <message>
+        <source>TOM_X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>TOOL_BASIC</source>
+        <translation>Basic</translation>
+    </message>
+    <message>
+        <source>TOOL_BOOLEAN</source>
+        <translation>Boolean operations</translation>
+    </message>
+    <message>
+        <source>TOOL_GENERATION</source>
+        <translation>Generation</translation>
+    </message>
+    <message>
+        <source>TOOL_PRIMITIVES</source>
+        <translation>Primitives</translation>
+    </message>
+    <message>
+        <source>TOOL_TRANSFORMATION</source>
+        <translation>Transformation</translation>
+    </message>
+    <message>
+        <source>TOOL_BUILD</source>
+        <translation>Build</translation>
+    </message>
+    <message>
+        <source>TOOL_OPERATIONS</source>
+        <translation>Operations</translation>
+    </message>
+    <message>
+        <source>TOOL_ADVANCED</source>
+        <translation>Advanced</translation>
+    </message>
+    <message>
+        <source>TOOL_MEASURES</source>
+        <translation>Measures</translation>
+    </message>
+    <message>
+        <source>TOP_ARC</source>
+        <translation>Create an arc</translation>
+    </message>
+    <message>
+        <source>TOP_ARCHIMEDE</source>
+        <translation>Archimede</translation>
+    </message>
+    <message>
+        <source>TOP_BASIC_PROPS</source>
+        <translation>Basic properties</translation>
+    </message>
+    <message>
+        <source>TOP_BND_BOX</source>
+        <translation>Bounding box</translation>
+    </message>
+    <message>
+        <source>TOP_BOX</source>
+        <translation>Create a box</translation>
+    </message>
+    <message>
+        <source>TOP_CHAMFER</source>
+        <translation>Chamfer</translation>
+    </message>
+    <message>
+        <source>TOP_CHANGE_ORIENTATION</source>
+        <translation>Change orientation</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK</source>
+        <translation>Check shape</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_COMPOUND</source>
+        <translation>Check compound of blocks</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_FREE_BNDS</source>
+        <translation>Check free boundaries</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_FREE_FACES</source>
+        <translation>Check free faces</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_GEOMETRY</source>
+        <translation>Check Geometry</translation>
+    </message>
+    <message>
+        <source>TOP_CIRCLE</source>
+        <translation>Create a circle</translation>
+    </message>
+    <message>
+        <source>TOP_CLIPPING</source>
+        <translation>Clipping range</translation>
+    </message>
+    <message>
+        <source>TOP_CLOSE_CONTOUR</source>
+        <translation>Perform close contour</translation>
+    </message>
+    <message>
+        <source>TOP_COMMON</source>
+        <translation>Common</translation>
+    </message>
+    <message>
+        <source>TOP_COMPOUND</source>
+        <translation>Build compound</translation>
+    </message>
+    <message>
+        <source>TOP_CONE</source>
+        <translation>Create a cone</translation>
+    </message>
+    <message>
+        <source>TOP_CURVE</source>
+        <translation>Create a curve</translation>
+    </message>
+    <message>
+        <source>TOP_CUT</source>
+        <translation>Cut</translation>
+    </message>
+    <message>
+        <source>TOP_CYLINDER</source>
+        <translation>Create a cylinder</translation>
+    </message>
+    <message>
+        <source>TOP_DELETE</source>
+        <translation>Delete object</translation>
+    </message>
+    <message>
+        <source>TOP_RECTANGLE</source>
+        <translation>Create rectangular face</translation>
+    </message>
+    <message>
+        <source>TOP_DISK</source>
+        <translation>Create a disk</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY</source>
+        <translation>Show</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY_ALL</source>
+        <translation>Show all</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY_ONLY</source>
+        <translation>Show only</translation>
+    </message>
+    <message>
+        <source>TOP_EDGE</source>
+        <translation>Build edge</translation>
+    </message>
+    <message>
+        <source>TOP_ELLIPSE</source>
+        <translation>Create an ellipse</translation>
+    </message>
+    <message>
+        <source>TOP_ERASE</source>
+        <translation>Hide</translation>
+    </message>
+    <message>
+        <source>TOP_ERASE_ALL</source>
+        <translation>Hide all</translation>
+    </message>
+    <message>
+        <source>TOP_EXPLODE</source>
+        <translation>Explode</translation>
+    </message>
+    <message>
+        <source>TOP_EXPLODE_BLOCKS</source>
+        <translation>Explode on Blocks</translation>
+    </message>
+    <message>
+        <source>TOP_EXPORT</source>
+        <translation>Export geometry to BREP file</translation>
+    </message>
+    <message>
+        <source>TOP_EXTRUSION</source>
+        <translation>Create an extrusion</translation>
+    </message>
+    <message>
+        <source>TOP_FACE</source>
+        <translation>Build face</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET</source>
+        <translation>Fillet 3D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET_1D</source>
+        <translation>Fillet 1D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET_2D</source>
+        <translation>Fillet 2D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLING</source>
+        <translation>Create a filling</translation>
+    </message>
+    <message>
+        <source>TOP_FUSE</source>
+        <translation>Fuse</translation>
+    </message>
+    <message>
+        <source>TOP_GLUE_FACES</source>
+        <translation>Perform glue faces</translation>
+    </message>
+    <message>
+        <source>TOP_GROUP_CREATE</source>
+        <translation>Create a group</translation>
+    </message>
+    <message>
+        <source>TOP_GROUP_EDIT</source>
+        <translation>Edit a group</translation>
+    </message>
+    <message>
+        <source>TOP_HEX_SOLID</source>
+        <translation>Hexahedral Solid</translation>
+    </message>
+    <message>
+        <source>TOP_IMPORT</source>
+        <translation>Import geometry from BREP file</translation>
+    </message>
+    <message>
+        <source>TOP_INERTIA</source>
+        <translation>Moments of intertia</translation>
+    </message>
+    <message>
+        <source>TOP_ISOS</source>
+        <translation>Set number of isolines</translation>
+    </message>
+    <message>
+        <source>TOP_LINE</source>
+        <translation>Create a line</translation>
+    </message>
+    <message>
+        <source>TOP_LIMIT_TOLERANCE</source>
+        <translation>Limit tolerance</translation>
+    </message>
+    <message>
+        <source>TOP_LOCAL_CS</source>
+        <translation>Create a local coordinate system</translation>
+    </message>
+    <message>
+        <source>TOP_MASS_CENTER</source>
+        <translation>Center of mass</translation>
+    </message>
+    <message>
+        <source>TOP_MIN_DIST</source>
+        <translation>Minimum distance</translation>
+    </message>
+    <message>
+        <source>TOP_MIRROR</source>
+        <translation>Mirror image</translation>
+    </message>
+    <message>
+        <source>TOP_MODIFY_LOCATION</source>
+        <translation>Modify location</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_ROTATION</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_TRANSFORM</source>
+        <translation>Multi-transformation</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_TRANSLATION</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>TOP_OFFSET</source>
+        <translation>Offset surface</translation>
+    </message>
+    <message>
+        <source>TOP_ORIGIN_AND_VECTORS</source>
+        <translation>Create an origin and base Vectors</translation>
+    </message>
+    <message>
+        <source>TOP_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>TOP_PIPE</source>
+        <translation>Extrusion along path</translation>
+    </message>
+    <message>
+        <source>TOP_PLANE</source>
+        <translation>Create a plane</translation>
+    </message>
+    <message>
+        <source>TOP_POINT</source>
+        <translation>Create a point</translation>
+    </message>
+    <message>
+        <source>TOP_POINT_COORDS</source>
+        <translation>Point coordinates</translation>
+    </message>
+    <message>
+        <source>TOP_POINT_ON_EDGE</source>
+        <translation>Add point on edge</translation>
+    </message>
+    <message>
+        <source>TOP_POP_COLOR</source>
+        <translation>Color</translation>
+    </message>
+    <message>
+        <source>TOP_POP_CREATE_GROUP</source>
+        <translation>Create Group</translation>
+    </message>
+    <message>
+        <source>TOP_POP_SHOW_CHILDREN</source>
+        <translation>Show Children</translation>
+    </message>
+    <message>
+        <source>TOP_POP_HIDE_CHILDREN</source>
+        <translation>Hide Children</translation>
+    </message>
+    <message>
+        <source>TOP_POP_ISOS</source>
+        <translation>Isolines</translation>
+    </message>
+    <message>
+        <source>TOP_POP_DEFLECTION</source>
+        <translation>Deflection Coefficient</translation>
+    </message>
+    <message>
+        <source>TOP_POP_RENAME</source>
+        <translation>Rename</translation>
+    </message>
+    <message>
+        <source>TOP_POP_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>TOP_POP_TRANSPARENCY</source>
+        <translation>Transparency</translation>
+    </message>
+    <message>
+        <source>TOP_POP_WIREFRAME</source>
+        <translation>Wireframe</translation>
+    </message>
+    <message>
+        <source>TOP_PROPAGATE</source>
+        <translation>Propagate</translation>
+    </message>
+    <message>
+        <source>TOP_Q_FACE</source>
+        <translation>Quadrangle Face</translation>
+    </message>
+    <message>
+        <source>TOP_REVOLUTION</source>
+        <translation>Create a revolution</translation>
+    </message>
+    <message>
+        <source>TOP_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>TOP_SCALE</source>
+        <translation>Scale transform</translation>
+    </message>
+    <message>
+        <source>TOP_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>TOP_SEWING</source>
+        <translation>Perform sewing</translation>
+    </message>
+    <message>
+        <source>TOP_SHADING</source>
+        <translation>Shading</translation>
+    </message>
+    <message>
+        <source>TOP_SHADING_COLOR</source>
+        <translation>Set shading color</translation>
+    </message>
+    <message>
+        <source>TOP_SHAPE_PROCESS</source>
+        <translation>Perform shape processing</translation>
+    </message>
+    <message>
+        <source>TOP_SHELL</source>
+        <translation>Build shell</translation>
+    </message>
+    <message>
+        <source>TOP_SKETCH</source>
+        <translation>2D sketch</translation>
+    </message>
+    <message>
+        <source>TOP_3DSKETCH</source>
+        <translation>3D sketch</translation>
+    </message>
+    <message>
+        <source>TOP_SOLID</source>
+        <translation>Build solid</translation>
+    </message>
+    <message>
+        <source>TOP_SPHERE</source>
+        <translation>Create a sphere</translation>
+    </message>
+    <message>
+        <source>TOP_STEP_VALUE</source>
+        <translation>Set step value</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPERSS_HOLES</source>
+        <translation>Perform suppress holes</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPRESS_FACES</source>
+        <translation>Perform suppress faces</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPRESS_INT_WIRES</source>
+        <translation>Perform suppress internal wires</translation>
+    </message>
+    <message>
+        <source>TOP_TOLERANCE</source>
+        <translation>Tolerance</translation>
+    </message>
+    <message>
+        <source>TOP_TORUS</source>
+        <translation>Create a torus</translation>
+    </message>
+    <message>
+        <source>TOP_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>TOP_VECTOR</source>
+        <translation>Create a vector</translation>
+    </message>
+    <message>
+        <source>TOP_WHAT_IS</source>
+        <translation>What is</translation>
+    </message>
+    <message>
+        <source>TOP_WIRE</source>
+        <translation>Build wire</translation>
+    </message>
+    <message>
+        <source>TOP_WORK_PLANE</source>
+        <translation>Create a working plane</translation>
+    </message>
+    <message>
+        <source>TOP_POP_POINT_MARKER</source>
+        <translation>Point Marker</translation>
+    </message>
+    <message>
+        <source>WRN_NOT_IMPLEMENTED</source>
+        <translation>Sorry, this functionality is not yet implemented</translation>
+    </message>
+    <message>
+        <source>_S_</source>
+        <translation>(s)</translation>
+    </message>
+    <message>
+        <source>NOT_FOUND_ANY</source>
+        <translation>Not a single entity has been found</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_I</source>
+        <translation>Face %1</translation>
+    </message>
+    <message>
+        <source>GEOM_CONSTANT_RADIUS</source>
+        <translation>Radius :</translation>
+    </message>
+    <message>
+        <source>GEOM_R1</source>
+        <translation>R1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_R2</source>
+        <translation>R2 :</translation>
+    </message>
+    <message>
+        <source>GEOM_BOTHWAY</source>
+        <translation>Both Directions</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMALE</source>
+        <translation>Normal To A Face</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_NORMALE</source>
+        <translation>Vector_Normal</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE1</source>
+        <translation>Line 1</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE2</source>
+        <translation>Line 2</translation>
+    </message>
+    <message>
+        <source>GEOM_D</source>
+        <translation>D :</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_EDGE</source>
+        <translation>Chamfer On Selected Edges</translation>
+    </message>
+    <message>
+        <source>SELECTED_EDGE</source>
+        <translation>Selected Edges</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMALE_TITLE</source>
+        <translation>Create Normal To A Face</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_TITLE</source>
+        <translation>Angle Between Two Straight Edges/Lines/Vectors</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_OBJ</source>
+        <translation>Objects And Results</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_IS</source>
+        <translation>Angle in degrees :</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE_INTERSECTION</source>
+        <translation>Point On Lines Intersection</translation>
+    </message>
+    <message>
+        <source>GEOM_KEEP_NONLIMIT_SHAPES</source>
+        <translation>Keep shapes of lower type</translation>
+    </message>
+    <message>
+        <source>GEOM_NO_SELF_INTERSECTION</source>
+        <translation>No sub-shapes intersection (Compounds only)</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_2POINTS</source>
+        <translation>Center and two points</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_EXTRA_EDGES_TITLE</source>
+        <translation>Remove extra edges</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_EXTRA_EDGES</source>
+        <translation>Object to remove extra edges</translation>
+    </message>
+    <message>
+        <source>GEOM_RMEE_UNION_FACES</source>
+        <translation>Union faces, laying on common surface</translation>
+    </message>
+    <message>
+        <source>REMOVE_EXTRA_EDGES_NEW_OBJ_NAME</source>
+        <translation>NoExtraEdges</translation>
+    </message>
+    <message>
+        <source>TOP_REMOVE_EXTRA_EDGES</source>
+        <translation>Remove extra edges</translation>
+    </message>
+    <message>
+        <source>MEN_REMOVE_EXTRA_EDGES</source>
+        <translation>Remove Extra Edges</translation>
+    </message>
+    <message>
+        <source>STB_REMOVE_EXTRA_EDGES</source>
+        <translation>Remove extra edges</translation>
+    </message>
+    <message>
+        <source>TOP_NORMALE</source>
+        <translation>Normal to a face</translation>
+    </message>
+    <message>
+        <source>MEN_NORMALE</source>
+        <translation>Normal to a Face</translation>
+    </message>
+    <message>
+        <source>STB_NORMALE</source>
+        <translation>Compute normal to the face</translation>
+    </message>
+    <message>
+        <source>TOP_MEASURE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>MEN_MEASURE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>STB_MEASURE_ANGLE</source>
+        <translation>Compute angle between two lines or linear edges</translation>
+    </message>
+    <message>
+        <source>TOP_POP_AUTO_COLOR</source>
+        <translation>Auto color</translation>
+    </message>
+    <message>
+        <source>MEN_POP_AUTO_COLOR</source>
+        <translation>Auto Color</translation>
+    </message>
+    <message>
+        <source>STB_POP_AUTO_COLOR</source>
+        <translation>Auto color</translation>
+    </message>
+    <message>
+        <source>TOP_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Disable auto color</translation>
+    </message>
+    <message>
+        <source>MEN_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Disable Auto Color</translation>
+    </message>
+    <message>
+        <source>STB_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Disable auto color</translation>
+    </message>
+    <message>
+        <source>GEOM_RESULT_NAME_GRP</source>
+        <translation>Result name</translation>
+    </message>
+    <message>
+        <source>GEOM_RESULT_NAME_LBL</source>
+        <translation>Name</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_APPROX</source>
+        <translation>Approximation</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_METHOD</source>
+        <translation>Method</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_DEFAULT</source>
+        <translation>Default (standard behaviour)</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_USEORI</source>
+        <translation>Use edges orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_AUTO</source>
+        <translation>Auto-correct edges orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source>
+        <translation>No appropriate objects selected</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE</source>
+        <translation>Get shapes on shape</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_ESHAPE</source>
+        <translation>Shape for exploding</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_CSHAPE</source>
+        <translation>Solid for checking</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_STATE</source>
+        <translation>State</translation>
+    </message>
+    <message>
+        <source>GEOM_KIND_OF_SHAPE</source>
+        <translation>Kind of Shape :</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSED</source>
+        <translation>Closed</translation>
+    </message>
+    <message>
+        <source>GEOM_UNCLOSED</source>
+        <translation>Opened</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSEDUNCLOSED</source>
+        <translation>Not defined, Closed or Opened. Possibly, error occured.</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_CIRCLE</source>
+        <translation>Disk</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_ELLIPSE</source>
+        <translation>Elliptical face</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANAR_FACE</source>
+        <translation>Planar Face</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANAR_EDGE_WIRE</source>
+        <translation>Wire with Planar Edges</translation>
+    </message>
+    <message>
+        <source>GEOM_POLYGON</source>
+        <translation>Polygon</translation>
+    </message>
+    <message>
+        <source>GEOM_POLYHEDRON</source>
+        <translation>Polyhedron</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMAL</source>
+        <translation>Normal direction</translation>
+    </message>
+    <message>
+        <source>GEOM_DIRECTION</source>
+        <translation>Direction</translation>
+    </message>
+    <message>
+        <source>GEOM_UPARAMETER</source>
+        <translation>U-parameter :</translation>
+    </message>
+    <message>
+        <source>GEOM_VPARAMETER</source>
+        <translation>V-parameter :</translation>
+    </message>
+    <message>
+        <source>GEOM_X_I</source>
+        <translation>X%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_Y_I</source>
+        <translation>Y%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_Z_I</source>
+        <translation>Z%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_TITLE</source>
+        <translation>Get shapes on shape</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_X</source>
+        <translation>Scale Factor X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_Y</source>
+        <translation>Scale Factor Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_Z</source>
+        <translation>Scale Factor Z :</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_IN</source>
+        <translation>IN</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_OUT</source>
+        <translation>OUT</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ON</source>
+        <translation>ON</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ONIN</source>
+        <translation>ONIN</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ONOUT</source>
+        <translation>ONOUT</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_INOUT</source>
+        <translation>INOUT</translation>
+    </message>
+    <message>
+        <source>TOP_GET_SHAPES_ON_SHAPE</source>
+        <translation>Get shapes on shape</translation>
+    </message>
+    <message>
+        <source>MEN_GET_SHAPES_ON_SHAPE</source>
+        <translation>Get Shapes on Shape</translation>
+    </message>
+    <message>
+        <source>STB_GET_SHAPES_ON_SHAPE</source>
+        <translation>Get shapes on shape</translation>
+    </message>
+    <message>
+        <source>TOP_GET_SHARED_SHAPES</source>
+        <translation>Get shared shapes</translation>
+    </message>
+    <message>
+        <source>MEN_GET_SHARED_SHAPES</source>
+        <translation>Get Shared Shapes</translation>
+    </message>
+    <message>
+        <source>STB_GET_SHARED_SHAPES</source>
+        <translation>Get shared shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_PUBLISH_RESULT_GRP</source>
+        <translation>Advanced options</translation>
+    </message>
+    <message>
+        <source>GEOM_RESTORE_SUB_SHAPES</source>
+        <translation>Set presentation parameters and subshapes from arguments</translation>
+    </message>
+    <message>
+        <source>GEOM_RSS_ADD_FREFIX</source>
+        <translation>Add prefix to names of restored subshapes</translation>
+    </message>
+    <message>
+        <source>GEOM_ALL_IMPORT_FILES</source>
+        <translation>All supported formats ( %1 )</translation>
+    </message>
+    <message>
+        <source>GEOM_UNSUPPORTED_TYPE</source>
+        <translation>Unsupported format for the file</translation>
+    </message>
+    <message>
+        <source>GEOM_UNKNOWN_IMPORT_ERROR</source>
+        <translation>Unknown error</translation>
+    </message>
+    <message>
+        <source>GEOM_IMPORT_ERRORS</source>
+        <translation>Import operation has finished with errors:</translation>
+    </message>
+    <message>
+        <source>GEOM_PUBLISH_NAMED_SHAPES</source>
+        <translation>Create groups for named shapes (if there are any)?</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_DIMENSIONS</source>
+        <translation>Would you like to take into account the units?
 Otherwise the dimensions will be kept without modifications.</translation>
-        </message>
-        <message>
-            <source>GEOM_ADVANCED</source>
-            <translation>Advanced shape: type %1</translation>
-        </message>
-        <message>
-            <source>GEOM_PRECISION_HINT</source>
-            <translation>
+    </message>
+    <message>
+        <source>GEOM_ADVANCED</source>
+        <translation>Advanced shape: type %1</translation>
+    </message>
+    <message>
+        <source>GEOM_PRECISION_HINT</source>
+        <translation>
 Input value precision can be adjusted using
-'%1' parameter in Geometry module preferences.</translation>
-        </message>
-    </context>
-    <context>
-        <name>BasicGUI_CurveDlg</name>
-        <message>
-            <source>GEOM_IS_CLOSED</source>
-            <translation>Build a closed edge</translation>
-        </message>
-    </context>
-    <context>
-        <name>BasicGUI_EllipseDlg</name>
-        <message>
-            <source>GEOM_VECTOR_MAJOR</source>
-            <translation>Major Axis</translation>
-        </message>
-        <message>
-            <source>ORIGIN_DEFAULT</source>
-            <translation>Origin by default</translation>
-        </message>
-        <message>
-            <source>X_AXIS_DEFAULT</source>
-            <translation>X axis by default</translation>
-        </message>
-        <message>
-            <source>Z_AXIS_DEFAULT</source>
-            <translation>Z axis by default</translation>
-        </message>
-    </context>
-    <context>
-        <name>BasicGUI_MarkerDlg</name>
-        <message>
-            <source>CAPTION</source>
-            <translation>Local CS Construction</translation>
-        </message>
-        <message>
-            <source>DX</source>
-            <translation>Dx</translation>
-        </message>
-        <message>
-            <source>DY</source>
-            <translation>Dy</translation>
-        </message>
-        <message>
-            <source>DZ</source>
-            <translation>Dz</translation>
-        </message>
-        <message>
-            <source>LCS_NAME</source>
-            <translation>LocalCS</translation>
-        </message>
-        <message>
-            <source>LOCALCS</source>
-            <translation>Local coordinate system</translation>
-        </message>
-        <message>
-            <source>ORIGIN</source>
-            <translation>Coordinates of origin</translation>
-        </message>
-        <message>
-            <source>VEC_PARALLEL</source>
-            <translation>Coordinate system axes cannot be parallel</translation>
-        </message>
-        <message>
-            <source>XDIR</source>
-            <translation>X axis direction</translation>
-        </message>
-        <message>
-            <source>YDIR</source>
-            <translation>Y axis direction</translation>
-        </message>
-    </context>
-    <context>
-        <name>BlocksGUI_BlockDlg</name>
-        <message>
-            <source>FACE_1</source>
-            <translation>Face 1</translation>
-        </message>
-        <message>
-            <source>FACE_2</source>
-            <translation>Face 2</translation>
-        </message>
-        <message>
-            <source>FACE_3</source>
-            <translation>Face 3</translation>
-        </message>
-        <message>
-            <source>FACE_4</source>
-            <translation>Face 4</translation>
-        </message>
-        <message>
-            <source>FACE_5</source>
-            <translation>Face 5</translation>
-        </message>
-        <message>
-            <source>FACE_6</source>
-            <translation>Face 6</translation>
-        </message>
-    </context>
-    <context>
-        <name>BlocksGUI_ExplodeDlg</name>
-        <message>
-            <source>NB_FACES_MAX</source>
-            <translation>Max. nb. faces</translation>
-        </message>
-        <message>
-            <source>NB_FACES_MIN</source>
-            <translation>Min. nb. faces</translation>
-        </message>
-    </context>
-    <context>
-        <name>BlocksGUI_QuadFaceDlg</name>
-        <message>
-            <source>EDGE_1</source>
-            <translation>Edge 1</translation>
-        </message>
-        <message>
-            <source>EDGE_2</source>
-            <translation>Edge 2</translation>
-        </message>
-        <message>
-            <source>EDGE_3</source>
-            <translation>Edge 3</translation>
-        </message>
-        <message>
-            <source>EDGE_4</source>
-            <translation>Edge 4</translation>
-        </message>
-        <message>
-            <source>VERTEX_1</source>
-            <translation>Vertex 1</translation>
-        </message>
-        <message>
-            <source>VERTEX_2</source>
-            <translation>Vertex 2</translation>
-        </message>
-        <message>
-            <source>VERTEX_3</source>
-            <translation>Vertex 3</translation>
-        </message>
-        <message>
-            <source>VERTEX_4</source>
-            <translation>Vertex 4</translation>
-        </message>
-    </context>
-    <context>
-        <name>BlocksGUI_TrsfDlg</name>
-        <message>
-            <source>FACE_1</source>
-            <translation>Face 1</translation>
-        </message>
-        <message>
-            <source>FACE_1U</source>
-            <translation>Face 1 U</translation>
-        </message>
-        <message>
-            <source>FACE_1V</source>
-            <translation>Face 1 V</translation>
-        </message>
-        <message>
-            <source>FACE_2</source>
-            <translation>Face 2</translation>
-        </message>
-        <message>
-            <source>FACE_2U</source>
-            <translation>Face 2 U</translation>
-        </message>
-        <message>
-            <source>FACE_2V</source>
-            <translation>Face 2 V</translation>
-        </message>
-    </context>
-    <context>
-        <name>EntityGUI_SketcherDlg</name>
-        <message>
-            <source>CANNOT_CLOSE</source>
-            <translation>It is impossible to close sketch
+&apos;%1&apos; parameter in Geometry module preferences.</translation>
+    </message>
+    <message>
+        <source>TOP_PIPETSHAPE</source>
+        <translation>Create Pipe TShape</translation>
+    </message>
+    <message>
+        <source>MEN_PIPETSHAPE</source>
+        <translation>Pipe TShape</translation>
+    </message>
+    <message>
+        <source>STB_PIPETSHAPE</source>
+        <translation>Create new Pipe TShape object</translation>
+    </message>
+    <message>
+        <source>GEOM_ADVANCED_201</source>
+        <translation>Pipe TShape</translation>
+    </message>
+    <message>
+        <source>HALF_LENGTH_MAIN_PIPE</source>
+        <translation>Main pipe half length</translation>
+    </message>
+    <message>
+        <source>HALF_LENGTH_INCIDENT_PIPE</source>
+        <translation>Incident pipe half length</translation>
+    </message>
+    <message>
+        <source>CIRCULAR_QUARTER_PIPE</source>
+        <translation>Circular quarter of pipe</translation>
+    </message>
+    <message>
+        <source>THICKNESS</source>
+        <translation>Thickness</translation>
+    </message>
+    <message>
+        <source>FLANGE</source>
+        <translation>Flange</translation>
+    </message>
+    <message>
+        <source>CHAMFER_OR_FILLET</source>
+        <translation>Chamfer or fillet</translation>
+    </message>
+    <message>
+        <source>CHAMFER</source>
+        <translation>Chamfer</translation>
+    </message>
+    <message>
+        <source>FILLET</source>
+        <translation>Fillet</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_1</source>
+        <translation>Junction 1</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_2</source>
+        <translation>Junction 2</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_3</source>
+        <translation>Junction 3</translation>
+    </message>
+    <message>
+        <source>GEOM_PLUGINS_OTHER</source>
+        <translation>Other</translation>
+    </message>  
+</context>
+<context>
+    <name>BasicGUI_CurveDlg</name>
+    <message>
+        <source>GEOM_IS_CLOSED</source>
+        <translation>Build a closed edge</translation>
+    </message>
+</context>
+<context>
+    <name>BasicGUI_EllipseDlg</name>
+    <message>
+        <source>GEOM_VECTOR_MAJOR</source>
+        <translation>Major Axis</translation>
+    </message>
+    <message>
+        <source>ORIGIN_DEFAULT</source>
+        <translation>Origin by default</translation>
+    </message>
+    <message>
+        <source>X_AXIS_DEFAULT</source>
+        <translation>X axis by default</translation>
+    </message>
+    <message>
+        <source>Z_AXIS_DEFAULT</source>
+        <translation>Z axis by default</translation>
+    </message>
+</context>
+<context>
+    <name>BasicGUI_MarkerDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Local CS Construction</translation>
+    </message>
+    <message>
+        <source>DX</source>
+        <translation>Dx</translation>
+    </message>
+    <message>
+        <source>DY</source>
+        <translation>Dy</translation>
+    </message>
+    <message>
+        <source>DZ</source>
+        <translation>Dz</translation>
+    </message>
+    <message>
+        <source>LCS_NAME</source>
+        <translation>LocalCS</translation>
+    </message>
+    <message>
+        <source>LOCALCS</source>
+        <translation>Local coordinate system</translation>
+    </message>
+    <message>
+        <source>ORIGIN</source>
+        <translation>Coordinates of origin</translation>
+    </message>
+    <message>
+        <source>VEC_PARALLEL</source>
+        <translation>Coordinate system axes cannot be parallel</translation>
+    </message>
+    <message>
+        <source>XDIR</source>
+        <translation>X axis direction</translation>
+    </message>
+    <message>
+        <source>YDIR</source>
+        <translation>Y axis direction</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_BlockDlg</name>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>FACE_3</source>
+        <translation>Face 3</translation>
+    </message>
+    <message>
+        <source>FACE_4</source>
+        <translation>Face 4</translation>
+    </message>
+    <message>
+        <source>FACE_5</source>
+        <translation>Face 5</translation>
+    </message>
+    <message>
+        <source>FACE_6</source>
+        <translation>Face 6</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_ExplodeDlg</name>
+    <message>
+        <source>NB_FACES_MAX</source>
+        <translation>Max. nb. faces</translation>
+    </message>
+    <message>
+        <source>NB_FACES_MIN</source>
+        <translation>Min. nb. faces</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_QuadFaceDlg</name>
+    <message>
+        <source>EDGE_1</source>
+        <translation>Edge 1</translation>
+    </message>
+    <message>
+        <source>EDGE_2</source>
+        <translation>Edge 2</translation>
+    </message>
+    <message>
+        <source>EDGE_3</source>
+        <translation>Edge 3</translation>
+    </message>
+    <message>
+        <source>EDGE_4</source>
+        <translation>Edge 4</translation>
+    </message>
+    <message>
+        <source>VERTEX_1</source>
+        <translation>Vertex 1</translation>
+    </message>
+    <message>
+        <source>VERTEX_2</source>
+        <translation>Vertex 2</translation>
+    </message>
+    <message>
+        <source>VERTEX_3</source>
+        <translation>Vertex 3</translation>
+    </message>
+    <message>
+        <source>VERTEX_4</source>
+        <translation>Vertex 4</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_TrsfDlg</name>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_1U</source>
+        <translation>Face 1 U</translation>
+    </message>
+    <message>
+        <source>FACE_1V</source>
+        <translation>Face 1 V</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>FACE_2U</source>
+        <translation>Face 2 U</translation>
+    </message>
+    <message>
+        <source>FACE_2V</source>
+        <translation>Face 2 V</translation>
+    </message>
+</context>
+<context>
+    <name>EntityGUI_SketcherDlg</name>
+    <message>
+        <source>CANNOT_CLOSE</source>
+        <translation>It is impossible to close sketch
 Number of sketch points too small</translation>
-        </message>
-    </context>
-    <context>
-        <name>EntityGUI_SubShapeDlg</name>
-        <message>
-            <source>NO_SUBSHAPES_SELECTED</source>
-            <translation>Please, select one or more sub-shapes</translation>
-        </message>
-    </context>
-    <context>
-        <name>GroupGUI</name>
-        <message>
-            <source>NO_GROUP</source>
-            <translation>Please, select a group to edit</translation>
-        </message>
-    </context>
-    <context>
-        <name>GroupGUI_GroupDlg</name>
-        <message>
-            <source>ADD</source>
-            <translation>Add</translation>
-        </message>
-        <message>
-            <source>CREATE_GROUP_TITLE</source>
-            <translation>Create Group</translation>
-        </message>
-        <message>
-            <source>EDIT_GROUP_TITLE</source>
-            <translation>Edit Group</translation>
-        </message>
-        <message>
-            <source>EMPTY_LIST</source>
-            <translation>Please, select one or more sub-shapes to put into the group</translation>
-        </message>
-        <message>
-            <source>EMPTY_NAME</source>
-            <translation>Please, specify a non-empty group name</translation>
-        </message>
-        <message>
-            <source>GROUP_NAME</source>
-            <translation>Group Name</translation>
-        </message>
-        <message>
-            <source>GROUP_PREFIX</source>
-            <translation>Group</translation>
-        </message>
-        <message>
-            <source>MAIN_SHAPE</source>
-            <translation>Main Shape</translation>
-        </message>
-        <message>
-            <source>MAIN_SUB_SHAPES</source>
-            <translation>Main Shape And Sub-Shapes</translation>
-        </message>
-        <message>
-            <source>NO_GROUP</source>
-            <translation>Please, select a group to edit</translation>
-        </message>
-        <message>
-            <source>NO_MAIN_OBJ</source>
-            <translation>Please, select a main shape</translation>
-        </message>
-        <message>
-            <source>REMOVE</source>
-            <translation>Remove</translation>
-        </message>
-        <message>
-            <source>SELECT_ALL</source>
-            <translation>Select All</translation>
-        </message>
-        <message>
-            <source>SHAPE_SEL_RESTR</source>
-            <translation>Main Shape Selection restriction</translation>
-        </message>
-        <message>
-            <source>SHAPE_TYPE</source>
-            <translation>Shape Type</translation>
-        </message>
-        <message>
-            <source>NO_RESTR</source>
-            <translation>No restriction</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTS_OF_SHAPE2</source>
-            <translation>Geometrical parts of the Second Shape</translation>
-        </message>
-        <message>
-            <source>SUBSHAPES_OF_SHAPE2</source>
-            <translation>Only Sub-Shapes of the Second Shape</translation>
-        </message>
-        <message>
-            <source>SECOND_SHAPE</source>
-            <translation>Second Shape</translation>
-        </message>
-    </context>
-    <context>
-        <name>MeasureGUI_1Sel1TextView1Check_QTD</name>
-        <message>
-            <source>CHECK_SHAPE_GEOMETRY</source>
-            <translation>Check also geometry</translation>
-        </message>
-    </context>
-    <context>
-        <name>MeasureGUI_PointDlg</name>
-        <message>
-            <source>CAPTION</source>
-            <translation>Point Coordinates</translation>
-        </message>
-        <message>
-            <source>COORDINATES</source>
-            <translation>Point and its coordinates</translation>
-        </message>
-        <message>
-            <source>POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>X</source>
-            <translation>X</translation>
-        </message>
-        <message>
-            <source>Y</source>
-            <translation>Y</translation>
-        </message>
-        <message>
-            <source>Z</source>
-            <translation>Z</translation>
-        </message>
-    </context>
-    <context>
-        <name>OperationGUI_ChamferDlg</name>
-        <message>
-            <source>D</source>
-            <translation>D</translation>
-        </message>
-        <message>
-            <source>FACE_1</source>
-            <translation>Face 1</translation>
-        </message>
-        <message>
-            <source>FACE_2</source>
-            <translation>Face 2</translation>
-        </message>
-        <message>
-            <source>SELECTED_FACES</source>
-            <translation>Selected faces</translation>
-        </message>
-    </context>
-    <context>
-        <name>OperationGUI_FilletDlg</name>
-        <message>
-            <source>SELECTED_EDGES</source>
-            <translation>Selected edges</translation>
-        </message>
-        <message>
-            <source>SELECTED_FACES</source>
-            <translation>Selected faces</translation>
-        </message>
-    </context>
-    <context>
-        <name>RepairGUI_FreeBoundDlg</name>
-        <message>
-            <source>CAPTION</source>
-            <translation>Check free boundaries</translation>
-        </message>
-        <message>
-            <source>FREE_BOUND</source>
-            <translation>Free boundaries</translation>
-        </message>
-        <message>
-            <source>NUMBER_CLOSED</source>
-            <translation>Number of closed free boundaries: </translation>
-        </message>
-        <message>
-            <source>NUMBER_OPEN</source>
-            <translation>Number of open free boundaries: </translation>
-        </message>
-    </context>
-    <context>
-        <name>RepairGUI_GlueDlg</name>
-        <message>
-            <source>FACES_FOR_GLUING_ARE_DETECTED</source>
-            <translation>There are %1 face(s) that can be glued. They are coloured on the screen with red colour.
+    </message>
+</context>
+<context>
+    <name>EntityGUI_SubShapeDlg</name>
+    <message>
+        <source>NO_SUBSHAPES_SELECTED</source>
+        <translation>Please, select one or more sub-shapes</translation>
+    </message>
+</context>
+<context>
+    <name>GroupGUI</name>
+    <message>
+        <source>NO_GROUP</source>
+        <translation>Please, select a group to edit</translation>
+    </message>
+</context>
+<context>
+    <name>GroupGUI_GroupDlg</name>
+    <message>
+        <source>ADD</source>
+        <translation>Add</translation>
+    </message>
+    <message>
+        <source>CREATE_GROUP_TITLE</source>
+        <translation>Create Group</translation>
+    </message>
+    <message>
+        <source>EDIT_GROUP_TITLE</source>
+        <translation>Edit Group</translation>
+    </message>
+    <message>
+        <source>EMPTY_LIST</source>
+        <translation>Please, select one or more sub-shapes to put into the group</translation>
+    </message>
+    <message>
+        <source>EMPTY_NAME</source>
+        <translation>Please, specify a non-empty group name</translation>
+    </message>
+    <message>
+        <source>GROUP_NAME</source>
+        <translation>Group Name</translation>
+    </message>
+    <message>
+        <source>GROUP_PREFIX</source>
+        <translation>Group</translation>
+    </message>
+    <message>
+        <source>MAIN_SHAPE</source>
+        <translation>Main Shape</translation>
+    </message>
+    <message>
+        <source>MAIN_SUB_SHAPES</source>
+        <translation>Main Shape And Sub-Shapes</translation>
+    </message>
+    <message>
+        <source>NO_GROUP</source>
+        <translation>Please, select a group to edit</translation>
+    </message>
+    <message>
+        <source>NO_MAIN_OBJ</source>
+        <translation>Please, select a main shape</translation>
+    </message>
+    <message>
+        <source>REMOVE</source>
+        <translation>Remove</translation>
+    </message>
+    <message>
+        <source>SHOW_ONLY_SELECTED</source>
+        <translation>Show only selected</translation>
+    </message>
+    <message>
+        <source>HIDE_SELECTED</source>
+        <translation>Hide selected</translation>
+    </message>
+    <message>
+        <source>SHOW_ALL_SUB_SHAPES</source>
+        <translation>Show all sub-shapes</translation>
+    </message> 
+    <message>
+        <source>SELECT_ALL</source>
+        <translation>Select All</translation>
+    </message>
+    <message>
+        <source>SHAPE_SEL_RESTR</source>
+        <translation>Main Shape Selection restriction</translation>
+    </message>
+    <message>
+        <source>SHAPE_TYPE</source>
+        <translation>Shape Type</translation>
+    </message>
+    <message>
+        <source>NO_RESTR</source>
+        <translation>No restriction</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTS_OF_SHAPE2</source>
+        <translation>Geometrical parts of the Second Shape</translation>
+    </message>
+    <message>
+        <source>SUBSHAPES_OF_SHAPE2</source>
+        <translation>Only Sub-Shapes of the Second Shape</translation>
+    </message>
+    <message>
+        <source>SECOND_SHAPE</source>
+        <translation>Second Shape</translation>
+    </message>
+</context>
+<context>
+    <name>MeasureGUI_1Sel1TextView1Check_QTD</name>
+    <message>
+        <source>CHECK_SHAPE_GEOMETRY</source>
+        <translation>Check also geometry</translation>
+    </message>
+</context>
+<context>
+    <name>MeasureGUI_PointDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Point Coordinates</translation>
+    </message>
+    <message>
+        <source>COORDINATES</source>
+        <translation>Point and its coordinates</translation>
+    </message>
+    <message>
+        <source>POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <source>Z</source>
+        <translation>Z</translation>
+    </message>
+</context>
+<context>
+    <name>OperationGUI_ChamferDlg</name>
+    <message>
+        <source>D</source>
+        <translation>D</translation>
+    </message>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>SELECTED_FACES</source>
+        <translation>Selected faces</translation>
+    </message>
+</context>
+<context>
+    <name>OperationGUI_FilletDlg</name>
+    <message>
+        <source>SELECTED_EDGES</source>
+        <translation>Selected edges</translation>
+    </message>
+    <message>
+        <source>SELECTED_FACES</source>
+        <translation>Selected faces</translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_FreeBoundDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Check free boundaries</translation>
+    </message>
+    <message>
+        <source>FREE_BOUND</source>
+        <translation>Free boundaries</translation>
+    </message>
+    <message>
+        <source>NUMBER_CLOSED</source>
+        <translation>Number of closed free boundaries: </translation>
+    </message>
+    <message>
+        <source>NUMBER_OPEN</source>
+        <translation>Number of open free boundaries: </translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_GlueDlg</name>
+    <message>
+        <source>FACES_FOR_GLUING_ARE_DETECTED</source>
+        <translation>There are %1 face(s) that can be glued. They are coloured on the screen with red colour.
 Please close this message box and select faces for glueing</translation>
-        </message>
-        <message>
-            <source>GLUE_FACES</source>
-            <translation>Glue faces</translation>
-        </message>
-        <message>
-            <source>SELECT_FACES</source>
-            <translation>Select Faces</translation>
-        </message>
-        <message>
-            <source>THERE_ARE_NO_FACES_FOR_GLUING</source>
-            <translation>There are no faces for gluing</translation>
-        </message>
-    </context>
-    <context>
-        <name>RepairGUI_ShapeProcessDlg</name>
-        <message>
-            <source>ERROR_NO_OBJECTS</source>
-            <translation>Please, select a geometrical object for Shape Processing.</translation>
-        </message>
-        <message>
-            <source>ERROR_NO_OPERATORS</source>
-            <translation>Please, select at least one Shape Process operation to proceed.</translation>
-        </message>
-        <message>
-            <source>TIME_CONSUMING</source>
-            <translation>Enabling this option may result in a very time-consuming operation for some input shapes.
+    </message>
+    <message>
+        <source>GLUE_FACES</source>
+        <translation>Glue faces</translation>
+    </message>
+    <message>
+        <source>SELECT_FACES</source>
+        <translation>Select Faces</translation>
+    </message>
+    <message>
+        <source>THERE_ARE_NO_FACES_FOR_GLUING</source>
+        <translation>There are no faces for gluing</translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_ShapeProcessDlg</name>
+    <message>
+        <source>ERROR_NO_OBJECTS</source>
+        <translation>Please, select a geometrical object for Shape Processing.</translation>
+    </message>
+    <message>
+        <source>ERROR_NO_OPERATORS</source>
+        <translation>Please, select at least one Shape Process operation to proceed.</translation>
+    </message>
+    <message>
+        <source>TIME_CONSUMING</source>
+        <translation>Enabling this option may result in a very time-consuming operation for some input shapes.
 Would you like to continue?</translation>
-        </message>
-    </context>
-    <context>
-        <name>GEOMToolsGUI_DeleteDlg</name>
-        <message>
-            <source>GEOM_REALLY_DELETE</source>
-            <translation>Do you really want to delete %1 object(s)?</translation>
-        </message>
-        <message>
-            <source>GEOM_REALLY_DELETE_ALL</source>
-            <translation>Do you really want to delete all objects?</translation>
-        </message>
-        <message>
-            <source>GEOM_DELETE_OBJECTS</source>
-            <translation>Delete objects</translation>
-        </message>
-    </context>
-    <context>
-        <name>GEOMToolsGUI_DeflectionDlg</name>
-        <message>
-            <source>GEOM_DEFLECTION_TLT</source>
-            <translation>Select Deflection of Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_DEFLECTION</source>
-            <translation>Deflection :</translation>
-        </message>
-    </context>
-    <context>
-        <name>GEOMToolsGUI_MarkerDlg</name>
-        <message>
-            <source>SET_MARKER_TLT</source>
-            <translation>Set Point Marker</translation>
-        </message>
-        <message>
-            <source>STANDARD_MARKER</source>
-            <translation>Standard</translation>
-        </message>
-        <message>
-            <source>CUSTOM_MARKER</source>
-            <translation>Custom</translation>
-        </message>
-        <message>
-            <source>TYPE</source>
-            <translation>Type:</translation>
-        </message>
-        <message>
-            <source>SCALE</source>
-            <translation>Scale:</translation>
-        </message>
-        <message>
-            <source>CUSTOM</source>
-            <translation>Texture:</translation>
-        </message>
-        <message>
-            <source>BROWSE</source>
-            <translation>Browse...</translation>
-        </message>
-        <message>
-            <source>OK_BTN</source>
-            <translation>&amp;OK</translation>
-        </message>
-        <message>
-            <source>CANCEL_BTN</source>
-            <translation>&amp;Cancel</translation>
-        </message>
-        <message>
-            <source>HELP_BTN</source>
-            <translation>&amp;Help</translation>
-        </message>
-        <message>
-            <source>LOAD_TEXTURE_TLT</source>
-            <translation>Load Texture</translation>
-        </message>
-    </context>
-    <context>
-        <name>OperationGUI_GetSharedShapesDlg</name>
-        <message>
-            <source>GEOM_SHARED_SHAPES_TITLE</source>
-            <translation>Get Shared Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_GET_SHARED_SHAPES</source>
-            <translation>Shared shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SHARED_SHAPES_INPUT</source>
-            <translation>Input data</translation>
-        </message>
-        <message>
-            <source>MSG_SHARED_SHAPES_TOO_FEW_SHAPES</source>
-            <translation>To few shapes selected.</translation>
-        </message>
-        <message>
-            <source>GEOM_SHARED_SHAPE</source>
-            <translation>Shared_%1</translation>
-        </message>
-    </context>
-    <context>
-        <name>AdvancedGUI_PipeTShapeDlg</name>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_TITLE</source>
-            <translation>Pipe TShape Construction</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE</source>
-            <translation>PipeTShape</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_MPIPE</source>
-            <translation>Main pipe</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_R</source>
-            <translation>Radius</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_W</source>
-            <translation>Width</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_L</source>
-            <translation>Half-length</translation>
-           </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_IPIPE</source>
-            <translation>Incident pipe</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_CHAMFER</source>
-            <translation>Chamfer</translation>
-           </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_CHAMFER_H</source>
-            <translation>Height</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_CHAMFER_W</source>
-            <translation>Width</translation>
-        </message>
-           <message>
-            <source>GEOM_PIPE_TSHAPE_FILLET</source>
-            <translation>Fillet</translation>
-           </message>
-           <message>
-            <source>GEOM_PIPE_TSHAPE_HEX</source>
-            <translation>Prepare for hex mesh</translation>
-        </message>
-           <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION</source>
-            <translation>Set position</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION_P1</source>
-            <translation>Junction P1</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION_P2</source>
-            <translation>Junction P2</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION_P3</source>
-            <translation>Junction P3</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L1</source>
-            <translation>New L1</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L2</source>
-            <translation>New L2</translation>
-        </message>
-    </context>
-    <context>
-        <name>@default</name>
-        <message>
-            <source>TOP_PIPETSHAPE</source>
-            <translation>Create Pipe TShape</translation>
-        </message>
-        <message>
-            <source>MEN_PIPETSHAPE</source>
-            <translation>Pipe TShape</translation>
-        </message>
-        <message>
-            <source>STB_PIPETSHAPE</source>
-            <translation>Create new Pipe TShape object</translation>
-           </message>
-           <message>
-            <source>GEOM_ADVANCED_201</source>
-            <translation>Pipe TShape</translation>
-        </message>
-        <message>
-            <source>HALF_LENGTH_MAIN_PIPE</source>
-            <translation>Main pipe half length</translation>
-        </message>
-        <message>
-            <source>HALF_LENGTH_INCIDENT_PIPE</source>
-            <translation>Incident pipe half length</translation>
-        </message>
-        <message>
-            <source>CIRCULAR_QUARTER_PIPE</source>
-            <translation>Circular quarter of pipe</translation>
-        </message>
-        <message>
-            <source>THICKNESS</source>
-            <translation>Thickness</translation>
-        </message>
-        <message>
-            <source>FLANGE</source>
-            <translation>Flange</translation>
-        </message>
-        <message>
-            <source>CHAMFER_OR_FILLET</source>
-            <translation>Chamfer or fillet</translation>
-        </message>
-        <message>
-            <source>CHAMFER</source>
-            <translation>Chamfer</translation>
-        </message>
-        <message>
-            <source>FILLET</source>
-            <translation>Fillet</translation>
-        </message>
-        <message>
-            <source>JUNCTION_FACE_1</source>
-            <translation>Junction 1</translation>
-        </message>
-        <message>
-            <source>JUNCTION_FACE_2</source>
-            <translation>Junction 2</translation>
-        </message>
-        <message>
-            <source>JUNCTION_FACE_3</source>
-            <translation>Junction 3</translation>
-        </message>
-    </context>
-    <!-- @@ insert new functions before this line @@ do not remove this line @@ -->
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_DeleteDlg</name>
+    <message>
+        <source>GEOM_REALLY_DELETE</source>
+        <translation>Do you really want to delete %1 object(s)?</translation>
+    </message>
+    <message>
+        <source>GEOM_REALLY_DELETE_ALL</source>
+        <translation>Do you really want to delete all objects?</translation>
+    </message>
+    <message>
+        <source>GEOM_DELETE_OBJECTS</source>
+        <translation>Delete objects</translation>
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_DeflectionDlg</name>
+    <message>
+        <source>GEOM_DEFLECTION_TLT</source>
+        <translation>Select Deflection of Shape</translation>
+    </message>
+    <message>
+        <source>GEOM_DEFLECTION</source>
+        <translation>Deflection :</translation>
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_MarkerDlg</name>
+    <message>
+        <source>SET_MARKER_TLT</source>
+        <translation>Set Point Marker</translation>
+    </message>
+    <message>
+        <source>STANDARD_MARKER</source>
+        <translation>Standard</translation>
+    </message>
+    <message>
+        <source>CUSTOM_MARKER</source>
+        <translation>Custom</translation>
+    </message>
+    <message>
+        <source>TYPE</source>
+        <translation>Type:</translation>
+    </message>
+    <message>
+        <source>SCALE</source>
+        <translation>Scale:</translation>
+    </message>
+    <message>
+        <source>CUSTOM</source>
+        <translation>Texture:</translation>
+    </message>
+    <message>
+        <source>BROWSE</source>
+        <translation>Browse...</translation>
+    </message>
+    <message>
+        <source>OK_BTN</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <source>CANCEL_BTN</source>
+        <translation>&amp;Cancel</translation>
+    </message>
+    <message>
+        <source>HELP_BTN</source>
+        <translation>&amp;Help</translation>
+    </message>
+    <message>
+        <source>LOAD_TEXTURE_TLT</source>
+        <translation>Load Texture</translation>
+    </message>
+</context>
+<context>
+    <name>OperationGUI_GetSharedShapesDlg</name>
+    <message>
+        <source>GEOM_SHARED_SHAPES_TITLE</source>
+        <translation>Get Shared Shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_GET_SHARED_SHAPES</source>
+        <translation>Shared shapes</translation>
+    </message>
+    <message>
+        <source>GEOM_SHARED_SHAPES_INPUT</source>
+        <translation>Input data</translation>
+    </message>
+    <message>
+        <source>MSG_SHARED_SHAPES_TOO_FEW_SHAPES</source>
+        <translation>To few shapes selected.</translation>
+    </message>
+    <message>
+        <source>GEOM_SHARED_SHAPE</source>
+        <translation>Shared_%1</translation>
+    </message>
+</context>
+<context>
+    <name>AdvancedGUI_PipeTShapeDlg</name>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_TITLE</source>
+        <translation>Pipe TShape Construction</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE</source>
+        <translation>PipeTShape</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_MPIPE</source>
+        <translation>Main pipe</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_R</source>
+        <translation>Radius</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_W</source>
+        <translation>Width</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_L</source>
+        <translation>Half-length</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_IPIPE</source>
+        <translation>Incident pipe</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER</source>
+        <translation>Chamfer</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER_H</source>
+        <translation>Height</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER_W</source>
+        <translation>Width</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_FILLET</source>
+        <translation>Fillet</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_HEX</source>
+        <translation>Prepare for hex mesh</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION</source>
+        <translation>Set position</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P1</source>
+        <translation>Junction P1</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P2</source>
+        <translation>Junction P2</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P3</source>
+        <translation>Junction P3</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L1</source>
+        <translation>New L1</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L2</source>
+        <translation>New L2</translation>
+    </message>
+</context>
 </TS>
index 71587db9530a1c8c948537b2e20f862e19d480fb..3564fc070843bfa4174229f965fd9a400958beb8 100644 (file)
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE TS>
-<!--
-  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
-
-  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-
-  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
-
--->
-<TS version="1.1" >
-    <context>
-        <name>@default</name>
-        <message>
-            <source>GEOM_ANGLE</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_ARC</source>
-            <translation>Arc</translation>
-        </message>
-        <message>
-            <source>GEOM_ARCHIMEDE</source>
-            <translation>Archimde</translation>
-        </message>
-        <message>
-            <source>GEOM_ARCHIMEDE_TITLE</source>
-            <translation>Construction d'Archimde</translation>
-        </message>
-        <message>
-            <source>GEOM_ARC_TITLE</source>
-            <translation>Construction d'un Arc</translation>
-        </message>
-        <message>
-            <source>GEOM_ARGUMENTS</source>
-            <translation>Arguments</translation>
-        </message>
-        <message>
-            <source>GEOM_AXE_MIRROR</source>
-            <translation>Axe Miroir</translation>
-        </message>
-        <message>
-            <source>GEOM_AXIS</source>
-            <translation>Axe</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE</source>
-            <translation>Base</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE_OBJECT</source>
-            <translation>Objet De Base</translation>
-        </message>
-        <message>
-            <source>GEOM_BASE_POINT</source>
-            <translation>Point De Base</translation>
-        </message>
-        <message>
-            <source>GEOM_BEZIER</source>
-            <translation>Bezier</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX</source>
-            <translation>Boite Anglobante</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX_OBJDIM</source>
-            <translation>Objet and ses dimensions</translation>
-        </message>
-        <message>
-            <source>GEOM_BNDBOX_TITLE</source>
-            <translation>Boite Englobante</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX</source>
-            <translation>Boite</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX_OBJ</source>
-            <translation>Dimensions A l'Origine</translation>
-        </message>
-        <message>
-            <source>GEOM_BOX_TITLE</source>
-            <translation>Construction d'une Boite</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_APPLY</source>
-            <translation>&amp;Appliquer</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CANCEL</source>
-            <translation>&amp;Annuler</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CLOSE</source>
-            <translation>&amp;Fermer</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_CLOSE_SKETCH</source>
-            <translation>Fermer Sketch</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_END_SKETCH</source>
-            <translation>Terminer Sketch</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_EXPLODE</source>
-            <translation>&amp;Exploser</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_HELP</source>
-            <translation>&amp;Aide</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_NO</source>
-            <translation>&amp;Non</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_OK</source>
-            <translation>&amp;Ok</translation>
-        </message>
-        <message>
-            <source>GEOM_BUT_YES</source>
-            <translation>&amp;Oui</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTER</source>
-            <translation>Centre</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTER_POINT</source>
-            <translation>Point Centre</translation>
-        </message>
-        <message>
-            <source>GEOM_CENTRAL_POINT</source>
-            <translation>Point Central</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER</source>
-            <translation>Chanfrein</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_ABORT</source>
-            <translation>Le chanfrein ne peut-tre realis avec %1 et %2 </translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_ALL</source>
-            <translation>Chanfrein sur toute la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_EDGES</source>
-            <translation>Chanfrein sur Edges de la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_FACES</source>
-            <translation>Chanfrein sur Faces de la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHAMFER_TITLE</source>
-            <translation>Construction d'un Chanfrein</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND</source>
-            <translation>Check Blocks Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_ERRORS</source>
-            <translation>Errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_ERRORS</source>
-            <translation>The Compound of Blocks has errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS</source>
-            <translation>The Compound of Blocks has no errors</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES</source>
-            <translation>Incriminated Sub-Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_COMPOUND_BLOCKS_TITLE</source>
-            <translation>Check Blocks Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_INFOS</source>
-            <translation>Objet et ses Informations Topologiques</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_SHAPE</source>
-            <translation>Check Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CHECK_TITLE</source>
-            <translation>Check Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_CIRCLE</source>
-            <translation>Cercle</translation>
-        </message>
-        <message>
-            <source>GEOM_CIRCLE_TITLE</source>
-            <translation>Construction d'un Cercle</translation>
-        </message>
-        <message>
-            <source>GEOM_CMASS</source>
-            <translation>Centre de Masse</translation>
-        </message>
-        <message>
-            <source>GEOM_CMASS_TITLE</source>
-            <translation>Centre De Gravit</translation>
-        </message>
-        <message>
-            <source>GEOM_COMMON</source>
-            <translation>Joindre</translation>
-        </message>
-        <message>
-            <source>GEOM_COMMON_TITLE</source>
-            <translation>BOOLEEN : Jonction De Deux Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUND</source>
-            <translation>Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUNDSOLID</source>
-            <translation>CompSolid</translation>
-        </message>
-        <message>
-            <source>GEOM_COMPOUND_TITLE</source>
-            <translation>Cration d'un Compound</translation>
-        </message>
-        <message>
-            <source>GEOM_CONE</source>
-            <translation>Cone</translation>
-        </message>
-        <message>
-            <source>GEOM_CONE_TITLE</source>
-            <translation>Construction d'un Cone</translation>
-        </message>
-        <message>
-            <source>GEOM_CONFIRM</source>
-            <translation>Confirmer cette operation</translation>
-        </message>
-        <message>
-            <source>GEOM_CONFIRM_INFO</source>
-            <translation>L'objet contient %1 sous objets</translation>
-        </message>
-        <message>
-            <source>GEOM_COOR</source>
-            <translation>Coord. :</translation>
-        </message>
-        <message>
-            <source>GEOM_COORDINATES</source>
-            <translation>Coordonnes</translation>
-        </message>
-        <message>
-            <source>GEOM_COORDINATES_RES</source>
-            <translation>Resultats coordonnes</translation>
-        </message>
-        <message>
-            <source>GEOM_CREATE_COPY</source>
-            <translation>Create a copy</translation>
-        </message>
-        <message>
-            <source>GEOM_CREATE_SINGLE_SOLID</source>
-            <translation>Create a single solid</translation>
-        </message>
-        <message>
-            <source>GEOM_CUT</source>
-            <translation>Couper</translation>
-        </message>
-        <message>
-            <source>GEOM_CUT_TITLE</source>
-            <translation>BOOLEEN : Couper Deux Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_CYLINDER</source>
-            <translation>Cylindre</translation>
-        </message>
-        <message>
-            <source>GEOM_CYLINDER_TITLE</source>
-            <translation>Construction d'un Cylindre</translation>
-        </message>
-        <message>
-            <source>GEOM_D1</source>
-            <translation>D1 :</translation>
-        </message>
-        <message>
-            <source>GEOM_D2</source>
-            <translation>D2 :</translation>
-        </message>
-        <message>
-            <source>GEOM_DIAGONAL_POINTS</source>
-            <translation>Points Diagonaux</translation>
-        </message>
-        <message>
-            <source>GEOM_DIMENSIONS</source>
-            <translation>Dimensions</translation>
-        </message>
-        <message>
-            <source>GEOM_DISTANCE</source>
-            <translation>Distance</translation>
-        </message>
-        <message>
-            <source>GEOM_DX</source>
-            <translation>Dx :</translation>
-        </message>
-        <message>
-            <source>GEOM_DY</source>
-            <translation>Dy :</translation>
-        </message>
-        <message>
-            <source>GEOM_DZ</source>
-            <translation>Dz :</translation>
-        </message>
-        <message>
-            <source>GEOM_EDGE</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_EDGE_TITLE</source>
-            <translation>Cration d'un Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_ELLIPSE</source>
-            <translation>Ellipse</translation>
-        </message>
-        <message>
-            <source>GEOM_ELLIPSE_TITLE</source>
-            <translation>Construction d'Ellipses</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION</source>
-            <translation>Extrusion</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_BSV</source>
-            <translation>Shape de base + Vecteur</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_BSV_2P</source>
-            <translation>Shape de base + 2 Points</translation>
-        </message>
-        <message>
-            <source>GEOM_EXTRUSION_TITLE</source>
-            <translation>Extruder une Shape de base</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE</source>
-            <translation>Face</translation>
-        </message>
-        <message>
-            <source>GEOM_FACES</source>
-            <translation>Faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_FFW</source>
-            <translation>Face a partir d'un wire</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_OPT</source>
-            <translation>Cration d'une Face plane</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_SELECTION</source>
-            <translation>Selection de Face</translation>
-        </message>
-        <message>
-            <source>GEOM_FACE_TITLE</source>
-            <translation>Cration d'une Face</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET</source>
-            <translation>Conge</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_ABORT</source>
-            <translation>Le cong ne peut-tre realis avec un rayon de %1 </translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_ALL</source>
-            <translation>Cong sur toute la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_EDGES</source>
-            <translation>Cong sur Edges de la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_WIRES</source>
-            <translation>Cong sur Wires de la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_FACES</source>
-            <translation>Cong sur Faces de la Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLET_TITLE</source>
-            <translation>Construction d'un Cong</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING</source>
-            <translation>Surface Par Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_ARG</source>
-            <translation>Argument Et Parametres</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_COMPOUND</source>
-            <translation>Compound de Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_MAX_DEG</source>
-            <translation>Max. Deg</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_MIN_DEG</source>
-            <translation>Min. Deg</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_NB_ITER</source>
-            <translation>Nb. Iter</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TITLE</source>
-            <translation>Surface Par Edges</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TOL_2D</source>
-            <translation>Tol. 2D</translation>
-        </message>
-        <message>
-            <source>GEOM_FILLING_TOL_3D</source>
-            <translation>Tol. 3D</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_FACES</source>
-            <translation>Free faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FREE_FACES_TITLE</source>
-            <translation>Free faces</translation>
-        </message>
-        <message>
-            <source>GEOM_FUSE</source>
-            <translation>Fusionner</translation>
-        </message>
-        <message>
-            <source>GEOM_FUSE_TITLE</source>
-            <translation>BOOLEEN : Fusionner deux Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_HEIGHT</source>
-            <translation>Hauteur</translation>
-        </message>
-        <message>
-            <source>GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE</source>
-            <translation>Noms identiques : selectionner avec la souris !</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_CONSTR</source>
-            <translation>Matrice Et Moments d'Inertie</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_I</source>
-            <translation>%1:1</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_IXYZ</source>
-            <translation>IX &amp; IY &amp; IZ</translation>
-        </message>
-        <message>
-            <source>GEOM_INERTIA_TITLE</source>
-            <translation>Calculs d'Inertie</translation>
-        </message>
-        <message>
-            <source>GEOM_INF_LOADED</source>
-            <translation>Le fichier %1 est charg.</translation>
-        </message>
-        <message>
-            <source>GEOM_INTERPOL</source>
-            <translation>Interpolation</translation>
-        </message>
-        <message>
-            <source>GEOM_KEEP_OBJECT</source>
-            <translation>Objet garde</translation>
-        </message>
-        <message>
-            <source>GEOM_LENGTH</source>
-            <translation>Longueur :</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE</source>
-            <translation>Ligne</translation>
-        </message>
-        <message>
-            <source>GEOM_LINE_TITLE</source>
-            <translation>Construction d'une Ligne</translation>
-        </message>
-        <message>
-            <source>GEOM_MAIN_OBJECT</source>
-            <translation>Objet Principal</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_ID</source>
-            <translation>Material ID:</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_MATERIAL</source>
-            <translation>Material</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_SET</source>
-            <translation>&lt;&lt; Set</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_SHAPE</source>
-            <translation>Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_MATERIAL_TITLE</source>
-            <translation>Define materials for Dominant Fuse</translation>
-        </message>
-        <message>
-            <source>GEOM_MATRIX</source>
-            <translation>Matrice :</translation>
-        </message>
-        <message>
-            <source>GEOM_MAX</source>
-            <translation>Max :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ALL_FILES</source>
-            <translation>Tous fichiers ( * )</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ANGLE</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_COMPONENT</source>
-            <translation>Gometrie</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ENTER_ANGLE</source>
-            <translation>Saisir un angle en degrs</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_EXPORT</source>
-            <translation>Exporter</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_IMPORT</source>
-            <translation>Importer</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOS</source>
-            <translation>Choisir un nombre d'isos</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOU</source>
-            <translation>Isos u :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_ISOV</source>
-            <translation>Isos v :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_LOAD_SCRIPT</source>
-            <translation>Fichiers PYTHON ( *.py )</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_POPUP_NAME</source>
-            <translation>%1 Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SHADING</source>
-            <translation>Ombr</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SKETCHER_X</source>
-            <translation>Saisir une longueur pour fixer X</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_SKETCHER_Y</source>
-            <translation>Saisir une longueur pour fixer Y</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_STEP_LABEL</source>
-            <translation>Increment</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_TRANSPARENCY</source>
-            <translation>Transparence</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_TRANSPARENCY_LABEL</source>
-            <translation>Transparence :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_WIREFRAME</source>
-            <translation>Filaire</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_X</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_MEN_Y</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_MESHING_DEFLECTION</source>
-            <translation>Dflection Du Maillage :</translation>
-        </message>
-        <message>
-            <source>GEOM_MIN</source>
-            <translation>Min :</translation>
-        </message>
-        <message>
-            <source>GEOM_MINDIST_OBJ</source>
-            <translation>Objets Et Resultats</translation>
-        </message>
-        <message>
-            <source>GEOM_MINDIST_TITLE</source>
-            <translation>Distance Minimale entre Deux Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_MIRROR</source>
-            <translation>Miroir</translation>
-        </message>
-        <message>
-            <source>GEOM_MIRROR_TITLE</source>
-            <translation>Methode Miroir</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_DOUBLE</source>
-            <translation>Multi Rotation Double</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_SIMPLE</source>
-            <translation>Multi Rotation Simple</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTIROTATION_TITLE</source>
-            <translation>Multi-Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_DOUBLE</source>
-            <translation>Multi Translation Double</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_SIMPLE</source>
-            <translation>Multi Translation Simple</translation>
-        </message>
-        <message>
-            <source>GEOM_MULTITRANSLATION_TITLE</source>
-            <translation>Multi-Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_NAME_INCORRECT</source>
-            <translation>Le nom saisi n'existe pas</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES</source>
-            <translation>Nb. Fois :</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES_U</source>
-            <translation>Nb. Fois U :</translation>
-        </message>
-        <message>
-            <source>GEOM_NB_TIMES_V</source>
-            <translation>Nb. Fois V :</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT</source>
-            <translation>Objet</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECTS</source>
-            <translation>Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT_I</source>
-            <translation>Objet %1</translation>
-        </message>
-        <message>
-            <source>GEOM_OBJECT_RESULT</source>
-            <translation>Objet Et Rsultat</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION</source>
-            <translation>Orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION_OPT</source>
-            <translation>Renverser l'orientation avec une simulation de vecteur normal</translation>
-        </message>
-        <message>
-            <source>GEOM_ORIENTATION_TITLE</source>
-            <translation>Changer l'Orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_PARAMETER</source>
-            <translation>Paramtre :</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_ON_EDGE</source>
-            <translation>Point sur la Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_ON_FACE</source>
-            <translation>Point sur la Face</translation>
-        </message>
-        <message>
-            <source>GEOM_PARAM_VALUE</source>
-            <translation>By paramtrique</translation>
-        </message>
-        <message>
-            <source>GEOM_COORD_VALUE</source>
-            <translation>By Coordonnes</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION</source>
-            <translation>Partition</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_HALFSPACE</source>
-            <translation>Half-space partition</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_ORIENTATION</source>
-            <translation>Change l'orientation</translation>
-        </message>
-        <message>
-            <source>GEOM_PARTITION_TITLE</source>
-            <translation>Partition d'Objects Avec Outils</translation>
-        </message>
-        <message>
-            <source>GEOM_PATH_OBJECT</source>
-            <translation>Objet Chemin</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE</source>
-            <translation>Pipe</translation>
-        </message>
-        <message>
-            <source>GEOM_PIPE_TITLE</source>
-            <translation>Construction d'une Pipe</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE</source>
-            <translation>Plan</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_MIRROR</source>
-            <translation>Plan Miroir</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_PV</source>
-            <translation>Point + Vecteur</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_PVC</source>
-            <translation>Point + Vecteur Coordonnes</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_SIZE</source>
-            <translation>Taille du plan :</translation>
-        </message>
-        <message>
-            <source>GEOM_PLANE_TITLE</source>
-            <translation>Construction d'un Plan</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>GEOM_POINTS</source>
-            <translation>Points</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_I</source>
-            <translation>Point %1</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_MIRROR</source>
-            <translation>Point Miroir</translation>
-        </message>
-        <message>
-            <source>GEOM_POINT_TITLE</source>
-            <translation>Construction d'un Point</translation>
-        </message>
-        <message>
-            <source>GEOM_PRECISION</source>
-            <translation>Prcision :</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPAGATE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPAGATE_TITLE</source>
-            <translation>Propagate</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES</source>
-            <translation>Basiques Proprietes</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_CONSTR</source>
-            <translation>Objet et ses Proprietes</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_SURFACE</source>
-            <translation>Surface :</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_TITLE</source>
-            <translation>Proprietes Basiques</translation>
-        </message>
-        <message>
-            <source>GEOM_PROPERTIES_VOLUME</source>
-            <translation>Volume :</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_ABORT</source>
-            <translation>L'opration a echou</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_COMMAND</source>
-            <translation>Pas de commande associe  l'id = %1.</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_DONE</source>
-            <translation>Opration effectue</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_LOADING</source>
-            <translation>Chargement de %1 ...</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_MIN_DIST</source>
-            <translation>Min Distance non calculer</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_NOT_FOR_VTK_VIEWER</source>
-            <translation>Non permis dans viewer VTK</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_NULLSHAPE</source>
-            <translation>Erreur, objet inconsistant ou inappropri !</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_READY</source>
-            <translation>Prt...</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_EDGE</source>
-            <translation>Selectionner les edges et clicker sur Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_FACE</source>
-            <translation>Select les faces a supprimer et clicker sur Ok/Apply</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_FIRST</source>
-            <translation>Selectionner la shape principale en premier</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SELECT_SUBSHAPES</source>
-            <translation>Selection de sous objets</translation>
-        </message>
-        <message>
-            <source>GEOM_PRP_SHAPE_IN_STUDY</source>
-            <translation>La shape principale doit etre avant dans l'etude</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS</source>
-            <translation>Rayon</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_I</source>
-            <translation>Rayon %1</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_MAJOR</source>
-            <translation>Rayon max. :</translation>
-        </message>
-        <message>
-            <source>GEOM_RADIUS_MINOR</source>
-            <translation>Rayon min. :</translation>
-        </message>
-        <message>
-            <source>GEOM_REALLY_DELETE</source>
-            <translation>Voulez-vous supprimer l'object(s) ?</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT</source>
-            <translation>Limite de Reconstruction</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_EDGE</source>
-            <translation>Edge</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_FACE</source>
-            <translation>Face</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SHAPE</source>
-            <translation>Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SHELL</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_SOLID</source>
-            <translation>Solid</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_VERTEX</source>
-            <translation>Vertex</translation>
-        </message>
-        <message>
-            <source>GEOM_RECONSTRUCTION_LIMIT_WIRE</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_REMOVE_WEBS</source>
-            <translation>Remove webs</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE</source>
-            <translation>Renverser</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_U</source>
-            <translation>Renverser U</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_V</source>
-            <translation>Reverser V</translation>
-        </message>
-        <message>
-            <source>GEOM_REVERSE_VECTOR</source>
-            <translation>Renverser Le Vecteur</translation>
-        </message>
-        <message>
-            <source>GEOM_REVOLUTION</source>
-            <translation>Rvolution</translation>
-        </message>
-        <message>
-            <source>GEOM_REVOLUTION_TITLE</source>
-            <translation>Construction Par Revolution</translation>
-        </message>
-        <message>
-            <source>GEOM_ROTATION</source>
-            <translation>Rotation</translation>
-        </message>
-        <message>
-            <source>GEOM_ROTATION_TITLE</source>
-            <translation>Rotation d'un Objet</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE</source>
-            <translation>Echelle</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_FACTOR</source>
-            <translation>Facteur d'echelle</translation>
-        </message>
-        <message>
-            <source>GEOM_SCALE_TITLE</source>
-            <translation>Echelle d'un Objet</translation>
-        </message>
-        <message>
-            <source>GEOM_SECTION</source>
-            <translation>Section</translation>
-        </message>
-        <message>
-            <source>GEOM_SECTION_TITLE</source>
-            <translation>BOOLEEN : Section De Deux Objets</translation>
-        </message>
-        <message>
-            <source>GEOM_SELECTION</source>
-            <translation>Slection</translation>
-        </message>
-        <message>
-            <source>GEOM_SET_MATERIALS</source>
-            <translation>Set materials</translation>
-        </message>
-        <message>
-            <source>GEOM_SEWING</source>
-            <translation>Coudre</translation>
-        </message>
-        <message>
-            <source>GEOM_SEWING_TITLE</source>
-            <translation>Coudre des Topologies</translation>
-        </message>
-        <message>
-            <source>GEOM_SHAPE</source>
-            <translation>Shape</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELL</source>
-            <translation>Shell</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELLS</source>
-            <translation>Shells</translation>
-        </message>
-        <message>
-            <source>GEOM_SHELL_TITLE</source>
-            <translation>Construction d'une Shell</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ABS</source>
-            <translation>Absolu</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ANGLE</source>
-            <translation>Angle</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ANGLE2</source>
-            <translation>Angle :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_APPLY</source>
-            <translation>Appliquer</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_ARC</source>
-            <translation>Arc</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DEST</source>
-            <translation>Destination</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DIR</source>
-            <translation>Direction</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DX2</source>
-            <translation>DX :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_DY2</source>
-            <translation>DY :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_EL</source>
-            <translation>Type d'Element</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_LENGTH</source>
-            <translation>Longueur</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_LENGTH2</source>
-            <translation>Longueur :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_PER</source>
-            <translation>Perpendiculaire</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_POINT</source>
-            <translation>Point</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_POINT2</source>
-            <translation>Point :</translation>
-       </message>
-       <message>
-            <source>GEOM_SKETCHER_END_POINT2</source>
-            <translation>End Point :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_RADIUS2</source>
-            <translation>Radius :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_REL</source>
-            <translation>Relative</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_SEGMENT</source>
-            <translation>Sgment</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_SEL</source>
-            <translation>Slection</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TAN</source>
-            <translation>Tangent</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TITLE</source>
-            <translation>Construction de Sketch</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_TYPE</source>
-            <translation>Type</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_UNDO</source>
-            <translation>Undo</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VALUES</source>
-            <translation>Valeurs</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VX2</source>
-            <translation>VX :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VXVY</source>
-            <translation>VX-VY</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_VY2</source>
-            <translation>VY :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X</source>
-            <translation>X</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X2</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_X3</source>
-            <translation>Abs. X :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y</source>
-            <translation>Y</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y2</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_SKETCHER_Y3</source>
-            <translation>Abs. Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_SOLID</source>
-            <translation>Solide</translation>
-        </message>
-        <message>
-            <source>GEOM_SOLID_TITLE</source>
-            <translation>Construction d'un Solid</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE</source>
-            <translation>Sphre</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_CR</source>
-            <translation>Centre + rayon</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_RO</source>
-            <translation>Rayon a l'origine</translation>
-        </message>
-        <message>
-            <source>GEOM_SPHERE_TITLE</source>
-            <translation>Construction d'une Sphere</translation>
-        </message>
-        <message>
-            <source>GEOM_SPLINE</source>
-            <translation>Spline</translation>
-        </message>
-        <message>
-            <source>GEOM_SPLINE_TITLE</source>
-            <translation>Construction de Splines</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP</source>
-            <translation>Pas :</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_TITLE</source>
-            <translation>Increment par dfaut lors des constructions</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_U</source>
-            <translation>Pas U :</translation>
-        </message>
-        <message>
-            <source>GEOM_STEP_V</source>
-            <translation>Pas V :</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_SELECT</source>
-            <translation>Selectionner de Sous Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_TITLE</source>
-            <translation>Selection de Sous Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUBSHAPE_TYPE</source>
-            <translation>Type de Sous Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUB_SHAPE</source>
-            <translation>Sous Shapes</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_FACE_SHELL</source>
-            <translation>Face ou shell</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTFACE</source>
-            <translation>Selection de la face initiale</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTFACE_END</source>
-            <translation>Selection de la face terminale (si trou traversant)</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTWIRE</source>
-            <translation>Selection du contour/trou sur la face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECTWIRE_END</source>
-            <translation>Selection de contour final (si trou traversant)</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_SELECT_HOLES_ON_FACE</source>
-            <translation>Selection de trou(s) sur la face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESSHOLE_TITLE</source>
-            <translation>Suppression de trous</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT</source>
-            <translation>Supprimer le Resultat</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT_INSIDE</source>
-            <translation>Intrieur</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPPRESS_RESULT_OUTSIDE</source>
-            <translation>Extrieur</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE</source>
-            <translation>Supression de Face</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE_SELECT</source>
-            <translation>Selectionner les Faces a Supprimer</translation>
-        </message>
-        <message>
-            <source>GEOM_SUPRESSFACE_TITLE</source>
-            <translation>Supprimer des Faces dans un Objet</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFCONE</source>
-            <translation>Face Conique</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFCYLINDER</source>
-            <translation>Face Cylindrique</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFSPHERE</source>
-            <translation>Face Sphrique</translation>
-        </message>
-        <message>
-            <source>GEOM_SURFTORUS</source>
-            <translation>Face Toroique</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE</source>
-            <translation>Tolrance</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_CONSTR</source>
-            <translation>Object et ses Tolerances</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_EDGE</source>
-            <translation>Edge :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_FACE</source>
-            <translation>Face :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_TITLE</source>
-            <translation>Tolerance Maximale</translation>
-        </message>
-        <message>
-            <source>GEOM_TOLERANCE_VERTEX</source>
-            <translation>Vertex :</translation>
-        </message>
-        <message>
-            <source>GEOM_TOOL_OBJECT</source>
-            <translation>Objet Outil</translation>
-        </message>
-        <message>
-            <source>GEOM_TORUS</source>
-            <translation>Tore</translation>
-        </message>
-        <message>
-            <source>GEOM_TORUS_TITLE</source>
-            <translation>Constructiond'un Tore</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION</source>
-            <translation>Translation</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION_COOR</source>
-            <translation>Translation Avec Coordonnees</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSLATION_TITLE</source>
-            <translation>Translation d'un Objet</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_OPAQUE</source>
-            <translation>Opaque</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_TITLE</source>
-            <translation>Transparence</translation>
-        </message>
-        <message>
-            <source>GEOM_TRANSPARENCY_TRANSPARENT</source>
-            <translation>Transparent</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR</source>
-            <translation>Vecteur</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_LENGTH</source>
-            <translation>Longueur Du Vecteur :</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_TITLE</source>
-            <translation>Construction d'un Vecteur</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_U</source>
-            <translation>Vecteur U</translation>
-        </message>
-        <message>
-            <source>GEOM_VECTOR_V</source>
-            <translation>Vecteur V</translation>
-        </message>
-        <message>
-            <source>GEOM_VERTEX</source>
-            <translation>Vertex</translation>
-        </message>
-        <message>
-            <source>GEOM_WATER_DENSITY</source>
-            <translation>Densit de l'eau :</translation>
-        </message>
-        <message>
-            <source>GEOM_WEIGHT</source>
-            <translation>poids</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS</source>
-            <translation>Whatis</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS_OBJECT</source>
-            <translation>Objet et ses Informations Topologiques</translation>
-        </message>
-        <message>
-            <source>GEOM_WHATIS_TITLE</source>
-            <translation>Whatis</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE</source>
-            <translation>Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRES</source>
-            <translation>Wire(s)</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE_CONNECT</source>
-            <translation>Creation d'un Wire a partir de wires/edges connectes</translation>
-        </message>
-        <message>
-            <source>GEOM_WIRE_TITLE</source>
-            <translation>Creer un Wire</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE</source>
-            <translation>Plan de Travail</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_FACE</source>
-            <translation>Plan Ou Face plane</translation>
-        </message>
-        <message>
-            <source>GEOM_WPLANE_TITLE</source>
-            <translation>plan de travail</translation>
-        </message>
-        <message>
-            <source>GEOM_WRN_RADIUS_NULL</source>
-            <translation>Le rayon est nul</translation>
-        </message>
-        <message>
-            <source>GEOM_WRN_WARNING</source>
-            <translation>Avertissement</translation>
-        </message>
-        <message>
-            <source>GEOM_X</source>
-            <translation>X :</translation>
-        </message>
-        <message>
-            <source>GEOM_Y</source>
-            <translation>Y :</translation>
-        </message>
-        <message>
-            <source>GEOM_Z</source>
-            <translation>Z :</translation>
-        </message>
-        <message>
-            <source>SUPPRESS_RESULT</source>
-            <translation>Suppress Result</translation>
-        </message>
-    </context>
+<TS version="2.0" language="fr_FR">
+<context>
+    <name>@default</name>
+    <message>
+        <source>BRep_API: command not done</source>
+        <translation>Erreur: impossible de construire l&apos;objet</translation>
+    </message>
+    <message>
+        <source>CHANGE_ORIENTATION_NEW_OBJ_NAME</source>
+        <translation>Inverser</translation>
+    </message>
+    <message>
+        <source>CLOSE_CONTOUR_NEW_OBJ_NAME</source>
+        <translation>ContourFerme</translation>
+    </message>
+    <message>
+        <source>DEP_OBJECT</source>
+        <translation>L&apos;objet choisi a été utilisé pour créer un autre objet.
+Il n&apos;est pas possible de le supprimer </translation>
+    </message>
+    <message>
+        <source>DEVIDE_EDGE_NEW_OBJECT_NAME</source>
+        <translation>NouvelObjet</translation>
+    </message>
+    <message>
+        <source>ERROR_SHAPE_TYPE</source>
+        <translation>Le type de l&apos;objet choisi n&apos;est pas correct!
+Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
+    </message>
+    <message>
+        <source> iErr : 10</source>
+        <translation>le Classificateur est NULL</translation>
+    </message>
+    <message>
+        <source> iErr : 11</source>
+        <translation>la Forme est NULL</translation>
+    </message>
+    <message>
+        <source> iErr : 12</source>
+        <translation>Type d&apos;objet non autoriqé</translation>
+    </message>
+    <message>
+        <source> iErr : 13</source>
+        <translation>Cet état n&apos;est pas autorisé</translation>
+    </message>
+    <message>
+        <source> iErr : 15</source>
+        <translation>Ce type de surface n&apos;est pas autorisé</translation>
+    </message>
+    <message>
+        <source> iErr : 20</source>
+        <translation>Impossible de trouver la triangulation</translation>
+    </message>
+    <message>
+        <source> iErr : 30</source>
+        <translation>Impossible d&apos;obtenir la ligne à partir du lien</translation>
+    </message>
+    <message>
+        <source> iErr : 40</source>
+        <translation>Impossible de classifier le point</translation>
+    </message>
+    <message>
+        <source> iErr : 41</source>
+        <translation>Les données ne sont pas valides pour le classificateur</translation>
+    </message>
+    <message>
+        <source>GEOM_2D_CONTINUTY</source>
+        <translation>Continuité 2D </translation>
+    </message>
+    <message>
+        <source>GEOM_2D_CURVE_MODE</source>
+        <translation>Mode courbe 2D</translation>
+    </message>
+    <message>
+        <source>GEOM_2D_TOLERANCE</source>
+        <translation>Tolérance 2D</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_CONTINUTY</source>
+        <translation>Continuité 3D</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_CURVE_MODE</source>
+        <translation>Mode courbe 3D</translation>
+    </message>
+    <message>
+        <source>GEOM_3D_TOLERANCE</source>
+        <translation>Tolérance 3D</translation>
+    </message>
+    <message>
+        <source>GEOM_3_POINTS</source>
+        <translation>3 points</translation>
+    </message>
+    <message>
+        <source>GEOM_ADD_POINT</source>
+        <translation>Ajouter un point</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGLE</source>
+        <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGLE_1</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC_ELLIPSE</source>
+        <translation>Arc d&apos;ellipse</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>GEOM_ARCHIMEDE</source>
+        <translation>Archimède</translation>
+    </message>
+    <message>
+        <source>GEOM_ARCHIMEDE_TITLE</source>
+        <translation>Construction Archimède</translation>
+    </message>
+    <message>
+        <source>GEOM_ARC_TITLE</source>
+        <translation>Construction d&apos;un arc </translation>
+    </message>
+    <message>
+        <source>GEOM_ARGUMENTS</source>
+        <translation>Arguments</translation>
+    </message>
+    <message>
+        <source>GEOM_AXE_MIRROR</source>
+        <translation>Axe de symétrie</translation>
+    </message>
+    <message>
+        <source>GEOM_AXIS</source>
+        <translation>Axe</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE</source>
+        <translation>Base</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE_OBJECT</source>
+        <translation>Objet de Base</translation>
+    </message>
+    <message>
+        <source>GEOM_BASE_POINT</source>
+        <translation>Point de Base</translation>
+    </message>
+    <message>
+        <source>GEOM_BEZIER</source>
+        <translation>Bezier</translation>
+    </message>
+    <message>
+        <source>GEOM_BINORMAL</source>
+        <translation>BiNormal</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK</source>
+        <translation>Solide Hexaédrique</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCKS_COMPOUND</source>
+        <translation>AssemblageBloques</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_EXPLODE</source>
+        <translation>Sous-Bloques</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_EXPLODE_TITLE</source>
+        <translation>Sélection des Sous-bloques </translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF</source>
+        <translation>Multi-Transformation Bloques </translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_DOUBLE</source>
+        <translation>Multi-Transformation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_SIMPLE</source>
+        <translation>Multi-Transformation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_MULTITRSF_TITLE</source>
+        <translation>Multi-Transformation Bloques </translation>
+    </message>
+    <message>
+        <source>GEOM_BLOCK_TITLE</source>
+        <translation>Construction d&apos;un solide hexaédrique</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX</source>
+        <translation>Boîte Englobante</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX_OBJDIM</source>
+        <translation>Objet et ses Dimensions</translation>
+    </message>
+    <message>
+        <source>GEOM_BNDBOX_TITLE</source>
+        <translation>Boîte Englobante Information</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX</source>
+        <translation>Boite</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX_OBJ</source>
+        <translation>Dimensions à l&apos;Origine</translation>
+    </message>
+    <message>
+        <source>GEOM_BOX_TITLE</source>
+        <translation>Construction d&apos;une Boîte </translation>
+    </message>
+    <message>
+        <source>GEOM_BSplineRestriction</source>
+        <translation>BSplineLimitation</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_APPLY</source>
+        <translation>&amp;Appliquer</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CANCEL</source>
+        <translation>A&amp;nnuler</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CLOSE</source>
+        <translation>&amp;Fermer</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_CLOSE_SKETCH</source>
+        <translation>Fermer le contour et valider</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_END_SKETCH</source>
+        <translation>Valider l&apos;esquisse</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_EXPLODE</source>
+        <translation>&amp;Eclater</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_HELP</source>
+        <translation>&amp;Aide</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_NO</source>
+        <translation>&amp;Non</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_OK</source>
+        <translation>&amp;Oui</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_APPLY_AND_CLOSE</source>
+        <translation>A&amp;ppliquer et Fermer</translation>
+    </message>
+    <message>
+        <source>GEOM_BUT_YES</source>
+        <translation>&amp;Oui</translation>
+    </message>
+    <message>
+        <source>GEOM_BY_LENGTH</source>
+        <translation>Par longueur</translation>
+    </message>
+    <message>
+        <source>GEOM_BY_PARAMETER</source>
+        <translation>Par paramètre</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER</source>
+        <translation>Centre</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_DEFAULT</source>
+        <translation> (Origine par défaut)</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_POINT</source>
+        <translation>Point Central </translation>
+    </message>
+    <message>
+        <source>GEOM_CENTRAL_POINT</source>
+        <translation>Point Central</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER</source>
+        <translation>Chanfrein</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_ABORT</source>
+        <translation>Il n&apos;est pas possible de calculer un chanfrein avec %1 et %2</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_ALL</source>
+        <translation>Chanfrein sur l&apos;Objet tout entier</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_EDGES</source>
+        <translation>Chanfrein sur les arêtes d&apos;un Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_FACES</source>
+        <translation>Chanfrein sur les Faces d&apos;un Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_TITLE</source>
+        <translation>Construction d&apos;un Chanfrein</translation>
+    </message>
+    <message>
+        <source>GEOM_CHANGE_ORIENTATION</source>
+        <translation>Objets à modifier</translation>
+    </message>
+    <message>
+        <source>GEOM_CHANGE_ORIENTATION_TITLE</source>
+        <translation>Changer l&apos;orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND</source>
+        <translation>Controler un Assemblage de Blocs</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_FAILED</source>
+        <translation>La vérification n&apos;a pas abouti</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_ERRORS</source>
+        <translation>Erreurs</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_ERRORS</source>
+        <translation>L&apos;Assemblage de Blocs contient des erreurs</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS</source>
+        <translation>L&apos;Assemblage de Blocs n&apos;a pas d&apos;erreur</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES</source>
+        <translation>Sous-objets incriminés</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_INFOS</source>
+        <translation>Objet et son Information Topologique</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_SHAPE</source>
+        <translation>Contrôler un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_CHECK_TITLE</source>
+        <translation>Contrôler la validité de l&apos;objet</translation>
+    </message>
+    <message>
+        <source>GEOM_CIRCLE</source>
+        <translation>Circle</translation>
+    </message>
+    <message>
+        <source>GEOM_CIRCLE_TITLE</source>
+        <translation>Construction d&apos;un Cercle</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSECONTOUR_TITLE</source>
+        <translation>Fermer le contour</translation>
+    </message>
+    <message>
+        <source>GEOM_CMASS</source>
+        <translation>Centre de Gravité</translation>
+    </message>
+    <message>
+        <source>GEOM_CMASS_TITLE</source>
+        <translation>Construction du Centre de Gravité</translation>
+    </message>
+    <message>
+        <source>GEOM_COMMON</source>
+        <translation>Intersection</translation>
+    </message>
+    <message>
+        <source>GEOM_COMMON_TITLE</source>
+        <translation>Intersection de deux Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUND</source>
+        <translation>Assemblage</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUNDSOLID</source>
+        <translation>AssemblageSolide</translation>
+    </message>
+    <message>
+        <source>GEOM_COMPOUND_TITLE</source>
+        <translation>Créer un Assemblage</translation>
+    </message>
+    <message>
+        <source>GEOM_CONE</source>
+        <translation>Cône</translation>
+    </message>
+    <message>
+        <source>GEOM_CONE_TITLE</source>
+        <translation>Construction d&apos;un Cône </translation>
+    </message>
+    <message>
+        <source>GEOM_CONFIRM</source>
+        <translation>Confirmer l&apos;opération</translation>
+    </message>
+    <message>
+        <source>GEOM_CONFIRM_INFO</source>
+        <translation>L&apos;objet contient %1 sous-objets !</translation>
+    </message>
+    <message>
+        <source>GEOM_COOR</source>
+        <translation>Coord. :</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES</source>
+        <translation>Coordonnées</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES_RES</source>
+        <translation>Coordonnées résultantes</translation>
+    </message>
+    <message>
+        <source>GEOM_CREATE_COPY</source>
+        <translation>Créer une copie</translation>
+    </message>
+    <message>
+        <source>GEOM_CREATE_SINGLE_SOLID</source>
+        <translation>Créer un solide unique</translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE</source>
+        <translation>Courbe</translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE_CONTINUTY</source>
+        <translation>Continuité des Courbes </translation>
+    </message>
+    <message>
+        <source>GEOM_CURVE_TITLE</source>
+        <translation>Construction d&apos;une Courbe </translation>
+    </message>
+    <message>
+        <source>GEOM_CUT</source>
+        <translation>Découpe</translation>
+    </message>
+    <message>
+        <source>GEOM_CUT_TITLE</source>
+        <translation>Découpe de deux Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_CYLINDER</source>
+        <translation>Cylindre</translation>
+    </message>
+    <message>
+        <source>GEOM_CYLINDER_TITLE</source>
+        <translation>Construction d&apos;un Cylindre </translation>
+    </message>
+    <message>
+        <source>GEOM_D1</source>
+        <translation>D1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_D2</source>
+        <translation>D2 :</translation>
+    </message>
+    <message>
+        <source>GEOM_DETECT</source>
+        <translation>Détecter</translation>
+    </message>
+    <message>
+        <source>GEOM_DIAGONAL_POINTS</source>
+        <translation>Points Diagonaux </translation>
+    </message>
+    <message>
+        <source>GEOM_DISK</source>
+        <translation>Disque</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_TITLE</source>
+        <translation>Construction d&apos;un Disque </translation>
+    </message>
+    <message>
+        <source>GEOM_DIMENSIONS</source>
+        <translation>Dimensions</translation>
+    </message>
+    <message>
+        <source>GEOM_DISTANCE</source>
+        <translation>Distance</translation>
+    </message>
+    <message>
+        <source>GEOM_DIVIDE_EDGE_TITLE</source>
+        <translation>Ajouter un point</translation>
+    </message>
+    <message>
+        <source>GEOM_DX</source>
+        <translation>Dx :</translation>
+    </message>
+    <message>
+        <source>GEOM_DY</source>
+        <translation>Dy :</translation>
+    </message>
+    <message>
+        <source>GEOM_DZ</source>
+        <translation>Dz :</translation>
+    </message>
+    <message>
+        <source>GEOM_DropSmallEdges</source>
+        <translation>ArêtesMineuresOmises</translation>
+    </message>
+    <message>
+        <source>GEOM_EDGE</source>
+        <translation>Arête</translation>
+    </message>
+    <message>
+        <source>GEOM_EDGE_TITLE</source>
+        <translation>Créer une Arête</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE</source>
+        <translation>Ellipse</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE_ERROR_1</source>
+        <translation>Impossible de créer un ellipse: le demi petit axe est plus grand que le demi grand axe.</translation>
+    </message>
+    <message>
+        <source>GEOM_ELLIPSE_TITLE</source>
+        <translation>Construction d&apos;une Ellipse </translation>
+    </message>
+    <message>
+        <source>GEOM_END_LCS</source>
+        <translation>Fin SCL</translation>
+    </message>
+    <message>
+        <source>GEOM_ERROR</source>
+        <translation>Erreur</translation>
+    </message>
+    <message>
+        <source>GEOM_ERROR_STATUS</source>
+        <translation>Etat de l&apos;Opération</translation>
+    </message>
+    <message>
+        <source>GEOM_ERR_GET_ENGINE</source>
+        <translation>Il est impossible d&apos;obtenir le composant GEOM Engine. Rouvrez le module Geometry et essayez de nouveau.</translation>
+    </message>
+    <message>
+        <source>GEOM_ERR_LIB_NOT_FOUND</source>
+        <translation>Il est impossible de trouver ou d&apos;ouvrir la librairie IHM correspondante à l&apos;action de l&apos;utilisateur</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION</source>
+        <translation>Extrusion</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_BSV</source>
+        <translation>Formes de Base + Vecteur</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_BSV_2P</source>
+        <translation>Formes de Base + 2 Points</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_DXDYDZ</source>
+        <translation>Formes de Base  + Vecteur DX DY DZ</translation>
+    </message>
+    <message>
+        <source>GEOM_EXTRUSION_TITLE</source>
+        <translation>Construction par Extrusion</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>GEOM_CS</source>
+        <translation>Système de Coordonnées</translation>
+    </message>
+    <message>
+        <source>GEOM_GCS</source>
+        <translation>Système de Coordonnées Global</translation>
+    </message>
+    <message>
+        <source>GEOM_LCS</source>
+        <translation>Système de Coordonnées Local</translation>
+    </message>
+    <message>
+        <source>GEOM_FACES</source>
+        <translation>Faces</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_FFW</source>
+        <translation>Création d&apos;une Face à partir des contours et/ou arêtes</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_OPT</source>
+        <translation>Privilégier la création d&apos;une face plane</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_OR_LCS</source>
+        <translation>Face ou SCL</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_SELECTION</source>
+        <translation>Sélection d&apos;une Face </translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_TITLE</source>
+        <translation>Créer une Face</translation>
+    </message>
+    <message>
+        <source>GEOM_RECTANGLE_TITLE</source>
+        <translation>Construction d&apos;un Rectangle </translation>
+    </message>
+    <message>
+        <source>GEOM_RECTANGLE</source>
+        <translation>Rectangle</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET</source>
+        <translation>Congé</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_2D</source>
+        <translation>Congé 2D</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_1D</source>
+        <translation>Congé 1D</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_ABORT</source>
+        <translation>Il n&apos;est pas possible de calculer un congé avec le rayon %1</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_ALL</source>
+        <translation>Congé sur l&apos;Objet tout entier</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_EDGES</source>
+        <translation>Congé sur les Arêtes de l&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_WIRES</source>
+        <translation>Congé sur les Contours de l&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_FACES</source>
+        <translation>Congé sur les Faces de l&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_VERTEXES</source>
+        <translation>Congé sur les Sommets de l&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_TITLE</source>
+        <translation>Construction d&apos;un Congé</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_2D_TITLE</source>
+        <translation>Construction d&apos;un Congé 2D </translation>
+    </message>
+    <message>
+        <source>GEOM_FILLET_1D_TITLE</source>
+        <translation>Construction d&apos;un Congé 1D </translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING</source>
+        <translation>Remplissage</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_ARG</source>
+        <translation>Arguments et Paramètres</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_COMPOUND</source>
+        <translation>Assemblage d&apos;entrée</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_MAX_DEG</source>
+        <translation>Degré maximal</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_MIN_DEG</source>
+        <translation>Degré minimal</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_NB_ITER</source>
+        <translation>Nb. Itér :</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TITLE</source>
+        <translation>Remplir une Surface avec des Arêtes</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TOL_2D</source>
+        <translation>Tol. 2D :</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_TOL_3D</source>
+        <translation>Tol. 3D :</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDARIES</source>
+        <translation>Contours Libres</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_ERROR</source>
+        <translation>L&apos;objet n&apos;est pas sélectionné</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_MSG</source>
+        <translation>Contours libres trouvés: %1 (%2 fermés, %3 ouverts)</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_BOUNDS_TLT</source>
+        <translation>Trouver des Contours Libres</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_FACES</source>
+        <translation>Faces Libres</translation>
+    </message>
+    <message>
+        <source>GEOM_FREE_FACES_TITLE</source>
+        <translation>Faces Libres</translation>
+    </message>
+    <message>
+        <source>GEOM_FUSE</source>
+        <translation>Union</translation>
+    </message>
+    <message>
+        <source>GEOM_FUSE_TITLE</source>
+        <translation>Réunir deux Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_FixFaceSize</source>
+        <translation>TailleFaceRepare</translation>
+    </message>
+    <message>
+        <source>GEOM_FixShape</source>
+        <translation>ObjetRepare</translation>
+    </message>
+    <message>
+        <source>GEOM_GLUE</source>
+        <translation>Recoller</translation>
+    </message>
+    <message>
+        <source>GEOM_GLUE_TITLE</source>
+        <translation>Recollement de faces</translation>
+    </message>
+    <message>
+        <source>GEOM_LIMIT_TOLERANCE_TITLE</source>
+        <translation>Limiter la tolérance</translation>
+    </message>
+    <message>
+        <source>GEOM_HEIGHT</source>
+        <translation>Hauteur:</translation>
+    </message>
+    <message>
+        <source>GEOM_HOLES</source>
+        <translation>Trous</translation>
+    </message>
+    <message>
+        <source>GEOM_IDENTICAL_NAMES_SELECT_BY_MOUSE</source>
+        <translation>Noms Identiques : sélectionner à la souris !</translation>
+    </message>
+    <message>
+        <source>GEOM_IMPORT</source>
+        <translation>Objet_Importé</translation>
+    </message>
+    <message>
+        <source>GEOM_INCORRECT_INPUT</source>
+        <translation>Les données d&apos;entrée ne sont pas valides!</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_CONSTR</source>
+        <translation>Matrice et Moment d&apos;Inertie</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_I</source>
+        <translation>%1:1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_IXYZ</source>
+        <translation>IX &amp; IY &amp; IZ :</translation>
+    </message>
+    <message>
+        <source>GEOM_INERTIA_TITLE</source>
+        <translation>Calcul de l&apos;Inertie</translation>
+    </message>
+    <message>
+        <source>GEOM_INF_LOADED</source>
+        <translation>Le fichier %1 est ouvert.</translation>
+    </message>
+    <message>
+        <source>GEOM_INTERNAL_WIRES</source>
+        <translation>Contours internes</translation>
+    </message>
+    <message>
+        <source>GEOM_INTERPOL</source>
+        <translation>Interpolation</translation>
+    </message>
+    <message>
+        <source>GEOM_KEEP_OBJECT</source>
+        <translation>Garder l&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_LENGTH</source>
+        <translation>Longueur :</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE</source>
+        <translation>Ligne</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE_TITLE</source>
+        <translation>Construction d&apos;une Ligne </translation>
+    </message>
+    <message>
+        <source>GEOM_MAIN_OBJECT</source>
+        <translation>Objet Principal</translation>
+    </message>
+    <message>
+        <source>GEOM_MARKER</source>
+        <translation>Repère</translation>
+    </message>
+    <message>
+        <source>GEOM_MARKER_TITLE</source>
+        <translation>Créer une repère</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_ID</source>
+        <translation>ID Matériel:</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_MATERIAL</source>
+        <translation>Matériel</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_SET</source>
+        <translation>&lt;&lt; Jeu</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_SHAPE</source>
+        <translation>Formes</translation>
+    </message>
+    <message>
+        <source>GEOM_MATERIAL_TITLE</source>
+        <translation>Définir les matériaux pour la Fusion Dominante</translation>
+    </message>
+    <message>
+        <source>GEOM_MATRIX</source>
+        <translation>Matrice :</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX</source>
+        <translation>Max :</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX_3D_TOLERANCE</source>
+        <translation>Tolérance 3D Maximale</translation>
+    </message>
+    <message>
+        <source>GEOM_MAX_TOLERANCE</source>
+        <translation>Tolérance Maximale</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ALL_FILES</source>
+        <translation>Tous les Fichiers ( * )</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ANGLE</source>
+        <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_COMPONENT</source>
+        <translation>Géométrie</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ENTER_ANGLE</source>
+        <translation>Indiquez l&apos;Angle en Degrés</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_EXPORT</source>
+        <translation>Exporter</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_IMPORT</source>
+        <translation>Importer</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOS</source>
+        <translation>Choisir le nombre d&apos;Isolignes</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOU</source>
+        <translation>Isos U :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_ISOV</source>
+        <translation>Isos V :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_POPUP_NAME</source>
+        <translation>%1 Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SKETCHER_X</source>
+        <translation>Indiquez la distance selon l&apos;axe X</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_SKETCHER_Y</source>
+        <translation>Indiquez la distance selon l&apos;axe Y</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_STEP_LABEL</source>
+        <translation>Pas :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_TRANSPARENCY</source>
+        <translation>Transparence</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_TRANSPARENCY_LABEL</source>
+        <translation>Transparence :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_WIREFRAME</source>
+        <translation>Filaire</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_X</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_MEN_Y</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_MESHING_DEFLECTION</source>
+        <translation>Déflection de Maillage. :</translation>
+    </message>
+    <message>
+        <source>GEOM_MIN</source>
+        <translation>Min :</translation>
+    </message>
+    <message>
+        <source>GEOM_MINDIST_OBJ</source>
+        <translation>Objets et Résultats</translation>
+    </message>
+    <message>
+        <source>GEOM_MINDIST_TITLE</source>
+        <translation>Distance minimale entre deux Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_MIRROR</source>
+        <translation>Miroir</translation>
+    </message>
+    <message>
+        <source>GEOM_MIRROR_TITLE</source>
+        <translation>Refléter un Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_DOUBLE</source>
+        <translation>Multi Rotation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_SIMPLE</source>
+        <translation>Multi Rotation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTIROTATION_TITLE</source>
+        <translation>Multi-Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_DOUBLE</source>
+        <translation>Multi Translation Double</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_SIMPLE</source>
+        <translation>Multi Translation Simple</translation>
+    </message>
+    <message>
+        <source>GEOM_MULTITRANSLATION_TITLE</source>
+        <translation>Multi-Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_NAME_INCORRECT</source>
+        <translation>Le nom de l&apos;Objet n&apos;a pas été trouvé</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_BLOCKS_NO_OTHERS</source>
+        <translation>Il y a %1 bloques spécifiés et PAS d&apos;autres solides</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_BLOCKS_SOME_OTHERS</source>
+        <translation>Il y a %1 bloques spécifiés et d&apos;autres solides</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES</source>
+        <translation>Nb. Fois :</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES_U</source>
+        <translation>Nb. Fois U :</translation>
+    </message>
+    <message>
+        <source>GEOM_NB_TIMES_V</source>
+        <translation>Nb. Fois V :</translation>
+    </message>
+    <message>
+        <source>GEOM_NODES</source>
+        <translation>Noeuds</translation>
+    </message>
+    <message>
+        <source>GEOM_NUM_SPLIT_POINTS</source>
+        <translation>Nombre de points de découpe</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT</source>
+        <translation>Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_TYPE</source>
+        <translation> Type d&apos;Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECTS</source>
+        <translation>Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_I</source>
+        <translation>Objet %1</translation>
+    </message>
+    <message>
+        <source>GEOM_OBJECT_RESULT</source>
+        <translation>Objet et Résultat</translation>
+    </message>
+    <message>
+        <source>GEOM_OFFSET</source>
+        <translation>Décalage</translation>
+    </message>
+    <message>
+        <source>GEOM_OFFSET_TITLE</source>
+        <translation>Décaler une surface</translation>
+    </message>
+    <message>
+        <source>GEOM_OPERATIONS</source>
+        <translation>Opérations</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION</source>
+        <translation>Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION_OPT</source>
+        <translation>Inverser l&apos;Orientation et simuler les vecteurs normaux</translation>
+    </message>
+    <message>
+        <source>GEOM_ORIENTATION_TITLE</source>
+        <translation>Changer l&apos;Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAMETER</source>
+        <translation>Paramètre :</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAMETERS</source>
+        <translation>Paramètres</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_ON_EDGE</source>
+        <translation>Créer un point sur une arête</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_ON_FACE</source>
+        <translation>Créer un point sur une face</translation>
+    </message>
+    <message>
+        <source>GEOM_PARAM_VALUE</source>
+        <translation>Par paramètre</translation>
+    </message>
+    <message>
+        <source>GEOM_COORD_VALUE</source>
+        <translation>Par coordonnée</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_PARTITION_RESULT_EMPTY</source>
+        <translation>Le résultat de la partition est vide, verifiez le paramètre limite de reconstruction</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_HALFSPACE</source>
+        <translation>Partition de demi-espace</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_ORIENTATION</source>
+        <translation>Changer l&apos;Orientation</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTITION_TITLE</source>
+        <translation>Partition d&apos;un Objet avec un Outil</translation>
+    </message>
+    <message>
+        <source>GEOM_PATH_OBJECT</source>
+        <translation>Chemin</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE</source>
+        <translation>Tuyau</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TITLE</source>
+        <translation>Construction d&apos;un tuyau</translation>
+    </message>
+    <message>
+        <source>GEOM_SEGMENT</source>
+        <translation>Segment de droite</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECT_UNPUBLISHED_EDGES</source>
+        <translation>Choisir les arêtes non-publiées</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE</source>
+        <translation>Plan</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_MIRROR</source>
+        <translation>Plan Miroir</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_PV</source>
+        <translation>Point + Vecteur</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_PVC</source>
+        <translation>Point + Vecteur de Coordonnées </translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_SIZE</source>
+        <translation>Taille du plan :</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANE_TITLE</source>
+        <translation>Construction d&apos;un Plan </translation>
+    </message>
+    <message>
+        <source>GEOM_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT1</source>
+        <translation>Point 1</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT2</source>
+        <translation>Point 2</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT3</source>
+        <translation>Point 3</translation>
+    </message>
+    <message>
+        <source>GEOM_POINTS</source>
+        <translation>Points</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_I</source>
+        <translation>Point %1</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_MIRROR</source>
+        <translation>Point Miroir</translation>
+    </message>
+    <message>
+        <source>GEOM_POINT_TITLE</source>
+        <translation>Construction d&apos;un Point </translation>
+    </message>
+    <message>
+        <source>GEOM_POLYLINE</source>
+        <translation>Ligne brisée</translation>
+    </message>
+    <message>
+        <source>GEOM_POSITION</source>
+        <translation>Position</translation>
+    </message>
+    <message>
+        <source>GEOM_POSITION_TITLE</source>
+        <translation>Modifier la Position d&apos;un Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_PRECISION</source>
+        <translation>Précision :</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPAGATE</source>
+        <translation>Propager</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPAGATE_TITLE</source>
+        <translation>Propager</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES</source>
+        <translation>Propriétés de Base</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_CONSTR</source>
+        <translation>Objet et ses Propriétés</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_SURFACE</source>
+        <translation>Surface :</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_TITLE</source>
+        <translation>Propriétés de Base</translation>
+    </message>
+    <message>
+        <source>GEOM_PROPERTIES_VOLUME</source>
+        <translation>Volume :</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_ABORT</source>
+        <translation>L&apos;Opération a été annulée</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_COMMAND</source>
+        <translation>Pas de commandes associées avec cet id = %1.</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_DONE</source>
+        <translation>L&apos;Opération a abouti</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_EXPORT</source>
+        <translation>Exporter la géométrie à %1 ...</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_LOADING</source>
+        <translation>Charger %1 ...</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_MIN_DIST</source>
+        <translation>La Distance minimale n&apos;est pas calculée</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_NOT_FOR_VTK_VIEWER</source>
+        <translation>Interdit dans le visualiseur VTK</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_NULLSHAPE</source>
+        <translation>Erreur, l&apos;objet est inexistant ou incorrect!</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_READY</source>
+        <translation>Prêt</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_EDGE</source>
+        <translation>Choisissez les arêtes et cliquez sur Appliquer</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_FACE</source>
+        <translation>Choisissez les faces à supprimer et cliquez sur Oui/Appliquer</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_FIRST</source>
+        <translation>Commencez par choisir l&apos;objet principal</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SELECT_SUBSHAPES</source>
+        <translation>Choisissez les Sous-Objets</translation>
+    </message>
+    <message>
+        <source>GEOM_PRP_SHAPE_IN_STUDY</source>
+        <translation>Commencez par indiquer l&apos;objet principal</translation>
+    </message>
+    <message>
+        <source>GEOM_QUAD_FACE</source>
+        <translation>Face Quadrangulaire</translation>
+    </message>
+    <message>
+        <source>GEOM_QUAD_FACE_TITLE</source>
+        <translation>Construction d&apos;une Face Quadrangulaire</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS</source>
+        <translation>Rayon :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_I</source>
+        <translation>Rayon %1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_MAJOR</source>
+        <translation>Demi grand axe :</translation>
+    </message>
+    <message>
+        <source>GEOM_RADIUS_MINOR</source>
+        <translation>Demi petit axe :</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT</source>
+        <translation>Type Résultant </translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_EDGE</source>
+        <translation>Arête</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SHAPE</source>
+        <translation>Objet</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SHELL</source>
+        <translation>Coque</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_SOLID</source>
+        <translation>Solide</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_VERTEX</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>GEOM_RECONSTRUCTION_LIMIT_WIRE</source>
+        <translation>Contour</translation>
+    </message>
+    <message>
+        <source>GEOM_REF_POINT</source>
+        <translation>Point avec référence</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_ALL_HOLES</source>
+        <translation>Supprimer tous les trous</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_ALL_INT_WIRES</source>
+        <translation>Supprimer tous les contours internes</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_HOLES_TITLE</source>
+        <translation>Supprimer les trous</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_INTERNAL_WIRES_TITLE</source>
+        <translation>Supprimer les contours internes</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_WEBS</source>
+        <translation>Supprimer les toiles</translation>
+    </message>
+    <message>
+        <source>GEOM_REQUIRED_DEGREE</source>
+        <translation>Degré nécessaire</translation>
+    </message>
+    <message>
+        <source>GEOM_REQUIRED_NUM_SEGMENTS</source>
+        <translation>Nombre de segments requis</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE</source>
+        <translation>Inverser</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_DIRECTION</source>
+        <translation>Inverser la direction</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_PLANE</source>
+        <translation>Inverser la normale du plan</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_U</source>
+        <translation>Inverser U</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_V</source>
+        <translation>inverser V</translation>
+    </message>
+    <message>
+        <source>GEOM_REVERSE_VECTOR</source>
+        <translation>Inverser un vecteur</translation>
+    </message>
+    <message>
+        <source>GEOM_REVOLUTION</source>
+        <translation>Révolution</translation>
+    </message>
+    <message>
+        <source>GEOM_REVOLUTION_TITLE</source>
+        <translation>Construction par révolution</translation>
+    </message>
+    <message>
+        <source>GEOM_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>GEOM_ROTATION_TITLE</source>
+        <translation>Rotation d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE</source>
+        <translation>Echelle</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR</source>
+        <translation>Facteur d&apos;échelle :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_TITLE</source>
+        <translation>Redimensionner un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>GEOM_SECTION_TITLE</source>
+        <translation>Section de deux objets</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_FACE</source>
+        <translation>Face sélectionnée </translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_OBJECTS</source>
+        <translation>Objets sélectionnés</translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTED_SHAPE</source>
+        <translation>Forme sélectionnée </translation>
+    </message>
+    <message>
+        <source>GEOM_SELECTION</source>
+        <translation>Sélection</translation>
+    </message>
+    <message>
+        <source>GEOM_SET_MATERIALS</source>
+        <translation>Définir les materiaux</translation>
+    </message>
+    <message>
+        <source>GEOM_SEWING</source>
+        <translation>Couture</translation>
+    </message>
+    <message>
+        <source>GEOM_SEWING_TITLE</source>
+        <translation>Couture topologique</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPE</source>
+        <translation>Forme</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPEPROCESS_TITLE</source>
+        <translation>Traitement de formes</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES</source>
+        <translation>Formes</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELL</source>
+        <translation>Coque</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELLS</source>
+        <translation>Coques</translation>
+    </message>
+    <message>
+        <source>GEOM_SHELL_TITLE</source>
+        <translation>Construction d&apos;une coque</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ABS</source>
+        <translation>Absolu</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ANGLE2</source>
+        <translation>Angle :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_APPLY</source>
+        <translation>Appliquer</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DEST</source>
+        <translation>Destination</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DIR</source>
+        <translation>Direction</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DX2</source>
+        <translation>DX :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DY2</source>
+        <translation>DY :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_DZ2</source>
+        <translation>DZ :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_EL</source>
+        <translation>Type d&apos;élément </translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_RESTORE</source>
+        <translation>Restaurer</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_LENGTH</source>
+        <translation>Longueur</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_LENGTH2</source>
+        <translation>Longueur :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_PER</source>
+        <translation>Perpendiculaire</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_POINT2</source>
+        <translation>Point :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_END_POINT2</source>
+       <translation>End Point :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_RADIUS2</source>
+        <translation>Rayon :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_REL</source>
+        <translation>Relatif</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_SEGMENT</source>
+        <translation>Segment</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_SEL</source>
+        <translation>Sélection</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TAN</source>
+        <translation>Tangent</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TITLE</source>
+        <translation>Construction d&apos;une esquisse 2D </translation>
+    </message>
+    <message>
+        <source>GEOM_3DSKETCHER_TITLE</source>
+        <translation>Construction d&apos;une esquisse 3D </translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_TYPE</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_UNDO</source>
+        <translation>Revenir</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VALUES</source>
+        <translation>Valeurs</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VX2</source>
+        <translation>VX :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VXVY</source>
+        <translation>VX-VY</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_VY2</source>
+        <translation>VY :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X2</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_X3</source>
+        <translation>Abs. X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y2</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Y3</source>
+        <translation>Abs. Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SKETCHER_Z2</source>
+        <translation>Z :</translation>
+    </message>
+    <message>
+        <source>GEOM_3DSKETCHER</source>
+        <translation>Esquisse 3D</translation>
+    </message>
+    <message>
+        <source>GEOM_COORDINATES_TYPE</source>
+        <translation>Type de coordonnées</translation>
+    </message>
+    <message>
+        <source>GEOM_SOLID</source>
+        <translation>Solide</translation>
+    </message>
+    <message>
+        <source>GEOM_SOLID_TITLE</source>
+        <translation>Construction d&apos;un solide</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE</source>
+        <translation>Sphère</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_CR</source>
+        <translation>Centre + Rayon</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_RO</source>
+        <translation>Rayon (centre à l&apos;origine)</translation>
+    </message>
+    <message>
+        <source>GEOM_SPHERE_TITLE</source>
+        <translation>Construction d&apos;une sphère</translation>
+    </message>
+    <message>
+        <source>GEOM_SPLINE</source>
+        <translation>Spline</translation>
+    </message>
+    <message>
+        <source>GEOM_SPLINE_TITLE</source>
+        <translation>Construction d&apos;un spline</translation>
+    </message>
+    <message>
+        <source>GEOM_START_LCS</source>
+        <translation>SCL du Début</translation>
+    </message>
+    <message>
+        <source>SELECT_UNPUBLISHED_EDGES</source>
+        <translation>Choisir les arêtes non-publiées</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP</source>
+        <translation>Pas :</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_TITLE</source>
+        <translation>Valeur du pas pour les constructions d&apos;IHM</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_U</source>
+        <translation>Pas U :</translation>
+    </message>
+    <message>
+        <source>GEOM_STEP_V</source>
+        <translation>Pas V :</translation>
+    </message>
+    <message>
+        <source>GEOM_STUDY_LOCKED</source>
+        <translation>L&apos;étude en cours est fermée et il n&apos;est pas possible de la modifier</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_SELECT</source>
+        <translation>Choisir les sous-objets</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_TITLE</source>
+        <translation>Sélection des sous-objets</translation>
+    </message>
+    <message>
+        <source>GEOM_SUBSHAPE_TYPE</source>
+        <translation>Type des sous-objets:</translation>
+    </message>
+    <message>
+        <source>GEOM_SUB_SHAPE</source>
+        <translation>Sous-objets</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_FACE_SHELL</source>
+        <translation>Face ou coque</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTFACE</source>
+        <translation>Choisir la face avec un trou</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTFACE_END</source>
+        <translation>Choisir la face finale (si l&apos;on traverse le trou)</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTWIRE</source>
+        <translation>Choisir le contour d&apos;une face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECTWIRE_END</source>
+        <translation>Choisir le contour final (si l&apos;on traverse le trou)</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_SELECT_HOLES_ON_FACE</source>
+        <translation>Choisir les trous sur la face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESSHOLE_TITLE</source>
+        <translation>Supprimer les trous</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT</source>
+        <translation>Supprimer le résultat</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT_INSIDE</source>
+        <translation>A l&apos;intérieur</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPPRESS_RESULT_OUTSIDE</source>
+        <translation>A l&apos;extérieur</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE</source>
+        <translation>Supprimer une Face</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE_SELECT</source>
+        <translation>Choisissez les faces à supprimer</translation>
+    </message>
+    <message>
+        <source>GEOM_SUPRESSFACE_TITLE</source>
+        <translation>Supprimer les faces d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFACE_CONTINUTY</source>
+        <translation>Continuité des surfaces</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFACE_MODE</source>
+        <translation>Mode de Surface </translation>
+    </message>
+    <message>
+        <source>GEOM_SURFCONE</source>
+        <translation>Face conique </translation>
+    </message>
+    <message>
+        <source>GEOM_SURFCYLINDER</source>
+        <translation>Face cylindrique </translation>
+    </message>
+    <message>
+        <source>GEOM_SURFSPHERE</source>
+        <translation>Face sphérique</translation>
+    </message>
+    <message>
+        <source>GEOM_SURFTORUS</source>
+        <translation>Face toroïdale </translation>
+    </message>
+    <message>
+        <source>GEOM_SameParameter</source>
+        <translation>MêmeParamètre</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitAngle</source>
+        <translation>SéparerAngle</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitClosedFaces</source>
+        <translation>SéparerFacesFermées</translation>
+    </message>
+    <message>
+        <source>GEOM_SplitContinuity</source>
+        <translation>SéparerContinuité</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE</source>
+        <translation>Tolérance</translation>
+    </message>
+    <message>
+        <source>GEOM_LINEAR_TOLERANCE</source>
+        <translation>Tolérance linéaire</translation>
+    </message>
+    <message>
+        <source>GEOM_ANGULAR_TOLERANCE</source>
+        <translation>Tolérance angulaire</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_CONSTR</source>
+        <translation>Objet et ses tolérances</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_EDGE</source>
+        <translation>Arête :</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_FACE</source>
+        <translation>Face :</translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_TITLE</source>
+        <translation>Tolérance maximale </translation>
+    </message>
+    <message>
+        <source>GEOM_TOLERANCE_VERTEX</source>
+        <translation>Point:</translation>
+    </message>
+    <message>
+        <source>GEOM_TOOL_OBJECT</source>
+        <translation>Objet outil </translation>
+    </message>
+    <message>
+        <source>GEOM_TOOL_OBJECTS</source>
+        <translation>Objets outils </translation>
+    </message>
+    <message>
+        <source>GEOM_TORUS</source>
+        <translation>Tore</translation>
+    </message>
+    <message>
+        <source>GEOM_TORUS_TITLE</source>
+        <translation>Construction d&apos;un tore </translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION_COOR</source>
+        <translation>Translation avec coordonnées</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSLATION_TITLE</source>
+        <translation>Translation d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_OPAQUE</source>
+        <translation>Opaque</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_TITLE</source>
+        <translation>Transparence</translation>
+    </message>
+    <message>
+        <source>GEOM_TRANSPARENCY_TRANSPARENT</source>
+        <translation>Transparent</translation>
+    </message>
+    <message>
+        <source>GEOM_TRIHEDRON</source>
+        <translation>Trièdre</translation>
+    </message>
+    <message>
+        <source>GEOM_ToBezier</source>
+        <translation>VersBezier</translation>
+    </message>
+    <message>
+        <source>GEOM_VALUE</source>
+        <translation>Valeur</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR</source>
+        <translation>Vecteur</translation>
+    </message>
+    <message>
+        <source>GEOM_AXIS_DEFAULT</source>
+        <translation> (Axe Z par défaut)</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_LENGTH</source>
+        <translation>Longueur d&apos;un vecteur :</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_TITLE</source>
+        <translation>Construction d&apos;un vecteur </translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_U</source>
+        <translation>Vecteur U</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_V</source>
+        <translation>Vecteur V</translation>
+    </message>
+    <message>
+        <source>GEOM_VERTEX</source>
+        <translation>Sommet</translation>
+    </message>
+    <message>
+        <source>GEOM_VERTEXES</source>
+        <translation>Sommets</translation>
+    </message>
+    <message>
+        <source>GEOM_WATER_DENSITY</source>
+        <translation>Densité de l&apos;eau :</translation>
+    </message>
+    <message>
+        <source>GEOM_WEIGHT</source>
+        <translation>Poids :</translation>
+    </message>
+    <message>
+        <source>GEOM_WIDTH</source>
+        <translation>Largeur :</translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS</source>
+        <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS_OBJECT</source>
+        <translation>Objet et ses caractéristiques topologiques </translation>
+    </message>
+    <message>
+        <source>GEOM_WHATIS_TITLE</source>
+        <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE</source>
+        <translation>Contour</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRES</source>
+        <translation>Contour(s)</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRES_TO_REMOVE</source>
+        <translation>Contours à supprimer</translation>
+    </message>
+    <message>
+        <source>GEOM_WIREZ</source>
+        <translation>Contours</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE_CONNECT</source>
+        <translation>Création d&apos;un contour à partir de contours/arêtes connecté(e)s</translation>
+    </message>
+    <message>
+        <source>GEOM_WIRE_TITLE</source>
+        <translation>Création d&apos;un contour</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE</source>
+        <translation>Plan de travail</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_FACE</source>
+        <translation>Plan, Face plane ou SCL</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_ORIGIN</source>
+        <translation>Choisissez un plan</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OXY</source>
+        <translation>OXY</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OYZ</source>
+        <translation>OYZ</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_OZX</source>
+        <translation>OZX</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_TITLE</source>
+        <translation>Sélection du plan de travail</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VECTOR</source>
+        <translation>Choisissez 2 vecteurs</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VX</source>
+        <translation>Vecteur X</translation>
+    </message>
+    <message>
+        <source>GEOM_WPLANE_VZ</source>
+        <translation>Vecteur Z</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_RADIUS_NULL</source>
+        <translation>Le rayon est nul</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_WARNING</source>
+        <translation>Attention</translation>
+    </message>
+    <message>
+        <source>WRN_SHAPE_UNCLOSED</source>
+        <translation>Impossible de créer un solide à partir d&apos;une forme non-fermée %1</translation>
+    </message>
+    <message>
+        <source>GEOM_X</source>
+        <translation>X :</translation>
+    </message>
+    <message>
+        <source>GEOM_Y</source>
+        <translation>Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_Z</source>
+        <translation>Z :</translation>
+    </message>
+    <message>
+        <source>GLUE_NEW_OBJ_NAME</source>
+        <translation>Recollement</translation>
+    </message>
+    <message>
+        <source>LIMIT_TOLERANCE_NEW_OBJ_NAME</source>
+        <translation>Tolérance_limite</translation>
+    </message>
+    <message>
+        <source>MEN_ALL_SEL_ONLY</source>
+        <translation>Sélectionner tout</translation>
+    </message>
+    <message>
+        <source>MEN_ARC</source>
+        <translation>Arc</translation>
+    </message>
+    <message>
+        <source>MEN_ARCHIMEDE</source>
+        <translation>Archimède</translation>
+    </message>
+    <message>
+        <source>MEN_BASIC</source>
+        <translation>Objets de base</translation>
+    </message>
+    <message>
+        <source>MEN_BASIC_PROPS</source>
+        <translation>Propriétés de base </translation>
+    </message>
+    <message>
+        <source>MEN_BLOCKS</source>
+        <translation>Blocs</translation>
+    </message>
+    <message>
+        <source>MEN_BND_BOX</source>
+        <translation>Boîte englobante</translation>
+    </message>
+    <message>
+        <source>MEN_BOOLEAN</source>
+        <translation>Opérations booléennes</translation>
+    </message>
+    <message>
+        <source>MEN_BOX</source>
+        <translation>Boîte</translation>
+    </message>
+    <message>
+        <source>MEN_BUILD</source>
+        <translation>Construire</translation>
+    </message>
+    <message>
+        <source>MEN_CHAMFER</source>
+        <translation>Chanfrein</translation>
+    </message>
+    <message>
+        <source>MEN_CHANGE_ORIENTATION</source>
+        <translation>Changer l&apos;orientation</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK</source>
+        <translation>Contrôler un objet</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_COMPOUND</source>
+        <translation>Contrôler un assemblage de blocs</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_FREE_BNDS</source>
+        <translation>Contrôler les contours libres</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_FREE_FACES</source>
+        <translation>Contrôler les faces libres</translation>
+    </message>
+    <message>
+        <source>MEN_CHECK_GEOMETRY</source>
+        <translation>Contrôler la géométrie</translation>
+    </message>
+    <message>
+        <source>MEN_CIRCLE</source>
+        <translation>Cercle</translation>
+    </message>
+    <message>
+        <source>MEN_CLIPPING</source>
+        <translation>Plage de découpe</translation>
+    </message>
+    <message>
+        <source>MEN_CLOSE_CONTOUR</source>
+        <translation>Fermer le contour</translation>
+    </message>
+    <message>
+        <source>MEN_COMMON</source>
+        <translation>Intersection</translation>
+    </message>
+    <message>
+        <source>MEN_COMPOUND</source>
+        <translation>Assemblage</translation>
+    </message>
+    <message>
+        <source>MEN_COMPOUND_SEL_ONLY</source>
+        <translation>Assemblage</translation>
+    </message>
+    <message>
+        <source>MEN_CONE</source>
+        <translation>Cône</translation>
+    </message>
+    <message>
+        <source>MEN_CURVE</source>
+        <translation>Courbe</translation>
+    </message>
+    <message>
+        <source>MEN_CUT</source>
+        <translation>Découpe</translation>
+    </message>
+    <message>
+        <source>MEN_CYLINDER</source>
+        <translation>Cylindre</translation>
+    </message>
+    <message>
+        <source>MEN_RECTANGLE</source>
+        <translation>Rectangle</translation>
+    </message>
+    <message>
+        <source>MEN_DELETE</source>
+        <translation>Supprimer</translation>
+    </message>
+    <message>
+        <source>MEN_DIMENSIONS</source>
+        <translation>Dimensions</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY</source>
+        <translation>Afficher</translation>
+    </message>
+    <message>
+        <source>MEN_DISK</source>
+        <translation>Disque</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_ALL</source>
+        <translation>Afficher tout</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_MODE</source>
+        <translation>Mode de visualisation</translation>
+    </message>
+    <message>
+        <source>MEN_DISPLAY_ONLY</source>
+        <translation>Afficher uniquement</translation>
+    </message>
+    <message>
+        <source>MEN_EDGE</source>
+        <translation>Arête</translation>
+    </message>
+    <message>
+        <source>MEN_EDGE_SEL_ONLY</source>
+        <translation>Arête</translation>
+    </message>
+    <message>
+        <source>MEN_EDIT</source>
+        <translation>Edition</translation>
+    </message>
+    <message>
+        <source>MEN_ELLIPSE</source>
+        <translation>Ellipse</translation>
+    </message>
+    <message>
+        <source>MEN_ERASE</source>
+        <translation>Cacher</translation>
+    </message>
+    <message>
+        <source>MEN_ERASE_ALL</source>
+        <translation>Cacher tout</translation>
+    </message>
+    <message>
+        <source>MEN_EXPLODE</source>
+        <translation>Eclater</translation>
+    </message>
+    <message>
+        <source>MEN_EXPLODE_BLOCKS</source>
+        <translation>Eclater en blocs</translation>
+    </message>
+    <message>
+        <source>MEN_EXPORT</source>
+        <translation>Exporter...</translation>
+    </message>
+    <message>
+        <source>MEN_EXTRUSION</source>
+        <translation>Extrusion</translation>
+    </message>
+    <message>
+        <source>MEN_FACE</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>MEN_FACE_SEL_ONLY</source>
+        <translation>Face</translation>
+    </message>
+    <message>
+        <source>MEN_FILE</source>
+        <translation>Fichier</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET</source>
+        <translation>Congé 3D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET_1D</source>
+        <translation>Congé 1D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLET_2D</source>
+        <translation>Congé 2D</translation>
+    </message>
+    <message>
+        <source>MEN_FILLING</source>
+        <translation>Nappe</translation>
+    </message>
+    <message>
+        <source>MEN_FUSE</source>
+        <translation>Union</translation>
+    </message>
+    <message>
+        <source>MEN_GENERATION</source>
+        <translation>Génération</translation>
+    </message>
+    <message>
+        <source>MEN_GLUE_FACES</source>
+        <translation>Recoller les faces</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP</source>
+        <translation>Groupe</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP_CREATE</source>
+        <translation>Créer une groupe</translation>
+    </message>
+    <message>
+        <source>MEN_GROUP_EDIT</source>
+        <translation>Editer</translation>
+    </message>
+    <message>
+        <source>MEN_RELOAD_IMPORTED</source>
+        <translation>Recharger à partir du disque</translation>
+    </message>
+    <message>
+        <source>MEN_HEX_SOLID</source>
+        <translation>Solid hexaédrique</translation>
+    </message>
+    <message>
+        <source>MEN_IMPORT</source>
+        <translation>Importer...</translation>
+    </message>
+    <message>
+        <source>MEN_INERTIA</source>
+        <translation>Inertie</translation>
+    </message>
+    <message>
+        <source>MEN_ISOS</source>
+        <translation>Isos</translation>
+    </message>
+    <message>
+        <source>MEN_LIMIT_TOLERANCE</source>
+        <translation>Tolérance limite</translation>
+    </message>
+    <message>
+        <source>MEN_LINE</source>
+        <translation>Ligne</translation>
+    </message>
+    <message>
+        <source>MEN_LOCAL_CS</source>
+        <translation>Système de coordonnées local </translation>
+    </message>
+    <message>
+        <source>MEN_MASS_CENTER</source>
+        <translation>Centre de gravité</translation>
+    </message>
+    <message>
+        <source>MEN_MEASURES</source>
+        <translation>Mesures</translation>
+    </message>
+    <message>
+        <source>MEN_MIN_DIST</source>
+        <translation>Distance minimale </translation>
+    </message>
+    <message>
+        <source>MEN_MIRROR</source>
+        <translation>Symétrie</translation>
+    </message>
+    <message>
+        <source>MEN_MODIFY_LOCATION</source>
+        <translation>Modifer la position</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_ROTATION</source>
+        <translation>Multi-rotation</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_TRANSFORM</source>
+        <translation>Multi-transformation</translation>
+    </message>
+    <message>
+        <source>MEN_MUL_TRANSLATION</source>
+        <translation>Multi-translation</translation>
+    </message>
+    <message>
+        <source>MEN_NEW_ENTITY</source>
+        <translation>Nouvel objet</translation>
+    </message>
+    <message>
+        <source>MEN_OFFSET</source>
+        <translation>Décaler une surface</translation>
+    </message>
+    <message>
+        <source>MEN_OPERATIONS</source>
+        <translation>Opérations</translation>
+    </message>
+    <message>
+        <source>MEN_ORIGIN_AND_VECTORS</source>
+        <translation>Vecteurs de base et origine</translation>
+    </message>
+    <message>
+        <source>MEN_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>MEN_PIPE</source>
+        <translation>Extrusion suivant un chemin</translation>
+    </message>
+    <message>
+        <source>MEN_PLANE</source>
+        <translation>Plan</translation>
+    </message>
+    <message>
+        <source>MEN_POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>MEN_POINT_COORDS</source>
+        <translation>Coordonnées d&apos;un point </translation>
+    </message>
+    <message>
+        <source>MEN_POINT_ON_EDGE</source>
+        <translation>Ajouter un point sur l&apos;arête</translation>
+    </message>
+    <message>
+        <source>MEN_POP_COLOR</source>
+        <translation>Couleur</translation>
+    </message>
+    <message>
+        <source>MEN_POP_CREATE_GROUP</source>
+        <translation>Créer un groupe</translation>
+    </message>
+    <message>
+        <source>MEN_POP_SHOW_CHILDREN</source>
+        <translation>Montrer les enfants</translation>
+    </message>
+    <message>
+        <source>MEN_POP_HIDE_CHILDREN</source>
+        <translation>Cacher les enfants</translation>
+    </message>
+    <message>
+        <source>MEN_POP_ISOS</source>
+        <translation>Isos</translation>
+    </message>
+    <message>
+        <source>MEN_POP_DEFLECTION</source>
+        <translation>Coefficient de déformation</translation>
+    </message>
+    <message>
+        <source>MEN_POP_RENAME</source>
+        <translation>Renommer</translation>
+    </message>
+    <message>
+        <source>MEN_POP_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>MEN_POP_TRANSPARENCY</source>
+        <translation>Transparence</translation>
+    </message>
+    <message>
+        <source>MEN_POP_WIREFRAME</source>
+        <translation>Filaire</translation>
+    </message>
+    <message>
+        <source>MEN_POP_VECTORS</source>
+        <translation>Montrer l&apos;orientation de l&apos;arête</translation>
+    </message>
+    <message>
+        <source>MEN_PREFERENCES</source>
+        <translation>Préférences</translation>
+    </message>
+    <message>
+        <source>MEN_PREFERENCES_GEOM</source>
+        <translation>Géométrie</translation>
+    </message>
+    <message>
+        <source>MEN_PRIMITIVES</source>
+        <translation>Primitives</translation>
+    </message>
+    <message>
+        <source>MEN_ADVANCED</source>
+        <translation>Avancé</translation>
+    </message>
+    <message>
+        <source>MEN_PROPAGATE</source>
+        <translation>Propager</translation>
+    </message>
+    <message>
+        <source>MEN_Q_FACE</source>
+        <translation>Face quadrangulaire </translation>
+    </message>
+    <message>
+        <source>MEN_REPAIR</source>
+        <translation>Réparer</translation>
+    </message>
+    <message>
+        <source>MEN_REVOLUTION</source>
+        <translation>Révolution</translation>
+    </message>
+    <message>
+        <source>MEN_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>MEN_SCALE</source>
+        <translation>Redimensionner</translation>
+    </message>
+    <message>
+        <source>MEN_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>MEN_SELECT_ONLY</source>
+        <translation>Sélectionner uniquement</translation>
+    </message>
+    <message>
+        <source>MEN_SEWING</source>
+        <translation>Couture</translation>
+    </message>
+    <message>
+        <source>MEN_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>MEN_SHADING_COLOR</source>
+        <translation>Couleur d&apos;ombrage</translation>
+    </message>
+    <message>
+        <source>MEN_SHAPE_PROCESS</source>
+        <translation>Traitement de forme</translation>
+    </message>
+    <message>
+        <source>MEN_SHELL</source>
+        <translation>Coque</translation>
+    </message>
+    <message>
+        <source>MEN_SHELL_SEL_ONLY</source>
+        <translation>Coque</translation>
+    </message>
+    <message>
+        <source>MEN_SKETCH</source>
+        <translation>Esquisse 2D</translation>
+    </message>
+    <message>
+        <source>MEN_3DSKETCH</source>
+        <translation>Esquisse 3D</translation>
+    </message>
+    <message>
+        <source>MEN_SOLID</source>
+        <translation>Solide</translation>
+    </message>
+    <message>
+        <source>MEN_SOLID_SEL_ONLY</source>
+        <translation>Solide</translation>
+    </message>
+    <message>
+        <source>MEN_SPHERE</source>
+        <translation>Sphère</translation>
+    </message>
+    <message>
+        <source>MEN_STEP_VALUE</source>
+        <translation>Valeur du pas</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPERSS_HOLES</source>
+        <translation>Supprimer les trous</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPRESS_FACES</source>
+        <translation>Supprimer des faces</translation>
+    </message>
+    <message>
+        <source>MEN_SUPPRESS_INT_WIRES</source>
+        <translation>Supprimer des contours Internes</translation>
+    </message>
+    <message>
+        <source>MEN_TOLERANCE</source>
+        <translation>Tolérance</translation>
+    </message>
+    <message>
+        <source>MEN_TOOLS</source>
+        <translation>Outils</translation>
+    </message>
+    <message>
+        <source>MEN_TORUS</source>
+        <translation>Tore</translation>
+    </message>
+    <message>
+        <source>MEN_TRANSFORMATION</source>
+        <translation>Transformation</translation>
+    </message>
+    <message>
+        <source>MEN_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR</source>
+        <translation>Vecteur</translation>
+    </message>
+    <message>
+        <source>MEN_VERTEX_SEL_ONLY</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>MEN_VIEW</source>
+        <translation>Affichage</translation>
+    </message>
+    <message>
+        <source>MEN_WHAT_IS</source>
+        <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+    </message>
+    <message>
+        <source>MEN_WIRE</source>
+        <translation>Contour</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR_MODE_ON</source>
+        <translation>Montrer l&apos;orientation de l&apos;arête</translation>
+    </message>
+    <message>
+        <source>MEN_VECTOR_MODE_OFF</source>
+        <translation>Cacher l&apos;orientation de l&apos;arête</translation>
+    </message>
+    <message>
+        <source>MEN_WIREFRAME</source>
+        <translation>Filaire</translation>
+    </message>
+    <message>
+        <source>MEN_WIRE_SEL_ONLY</source>
+        <translation>Contour</translation>
+    </message>
+    <message>
+        <source>MEN_WORK_PLANE</source>
+        <translation>Plan de travail</translation>
+    </message>
+    <message>
+        <source>MEN_POP_POINT_MARKER</source>
+        <translation>Marqueur de point</translation>
+    </message>
+    <message>
+        <source>NAME_LBL</source>
+        <translation>Nom : </translation>
+    </message>
+    <message>
+        <source>NON_GEOM_OBJECTS_SELECTED</source>
+        <translation>Il y a des objets n&apos;appartenant pas au composant %1 dans la sélection </translation>
+    </message>
+    <message>
+        <source>PREF_DEFLECTION</source>
+        <translation>Coefficient de déformation</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_def_precision</source>
+        <translation>Précision par défaut</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_length_precision</source>
+        <translation>Précision de longueur</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_angle_precision</source>
+        <translation>Précision angulaire</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_len_tol_precision</source>
+        <translation>Tolérance de Précision de Longueur</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_ang_tol_precision</source>
+        <translation>Précision de la tolérance angulaire</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_weight_precision</source>
+        <translation>Précision de poids </translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_density_precision</source>
+        <translation>Précision de densité </translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_parametric_precision</source>
+        <translation>Précision paramétrique</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_param_tol_precision</source>
+        <translation>Tolérance de précision paramétrique</translation>
+    </message>
+    <message>
+        <source>PREF_AUTO_CREATE</source>
+        <translation>Créer automatiquement</translation>
+    </message>
+    <message>
+        <source>PREF_DISPLAY_MODE</source>
+        <translation>Mode de visualisation par défaut</translation>
+    </message>
+    <message>
+        <source>PREF_FREE_BOUND_COLOR</source>
+        <translation>Couleur des contours libres</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_ORIGIN_AND_BASE_VECTORS</source>
+        <translation>Vecteurs de base et origine</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_GENERAL</source>
+        <translation>Général</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_OCCVIEWER</source>
+        <translation>Visualiseur OCC 3d</translation>
+    </message>
+    <message>
+        <source>GEOM_PREF_GROUP_PRECISION</source>
+        <translation>Précision des champs d&apos;entrée</translation>
+    </message>
+    <message>
+        <source>PREF_GROUP_VERTEX</source>
+        <translation>Marqueurs de points</translation>
+    </message>
+    <message>
+        <source>PREF_ISOS_COLOR</source>
+        <translation>Couleur des isolignes</translation>
+    </message>
+    <message>
+        <source>PREF_LINE_COLOR</source>
+        <translation>Couleur des arêtes, vecteurs, contours</translation>
+    </message>
+    <message>
+        <source>PREF_MARKER_SCALE</source>
+        <translation>Taille</translation>
+    </message>
+    <message>
+        <source>PREF_POINT_COLOR</source>
+        <translation>Couleur des points</translation>
+    </message>
+    <message>
+        <source>PREF_SHADING_COLOR</source>
+        <translation>Couleur d&apos;ombrage par défaut</translation>
+    </message>
+    <message>
+        <source>PREF_STEP_VALUE</source>
+        <translation>Valeur du pas pour les boîtes d&apos;incrément</translation>
+    </message>
+    <message>
+        <source>PREF_TAB_SETTINGS</source>
+        <translation>Préférences</translation>
+    </message>
+    <message>
+        <source>PREF_TYPE_OF_MARKER</source>
+        <translation>Type</translation>
+    </message>
+    <message>
+        <source>PREF_BASE_VECTORS_LENGTH</source>
+        <translation>Longueur des vecteurs de base</translation>
+    </message>
+    <message>
+        <source>PREF_WIREFRAME_COLOR</source>
+        <translation>Couleur des contours par défaut</translation>
+    </message>
+    <message>
+        <source>PROCESS_SHAPE_NEW_OBJ_NAME</source>
+        <translation>FormeRetraitée</translation>
+    </message>
+    <message>
+        <source>REMOVE_HOLES_NEW_OBJ_NAME</source>
+        <translation>SupprimerTrous</translation>
+    </message>
+    <message>
+        <source>REMOVE_INT_WIRES_NEW_OBJ_NAME</source>
+        <translation>SupprimerContoursInt</translation>
+    </message>
+    <message>
+        <source>SEWING_NEW_OBJ_NAME</source>
+        <translation>Couture</translation>
+    </message>
+    <message>
+        <source>STB_ALL_SEL_ONLY</source>
+        <translation>Choisir tous les objets</translation>
+    </message>
+    <message>
+        <source>STB_ARC</source>
+        <translation>Créer un arc</translation>
+    </message>
+    <message>
+        <source>STB_ARCHIMEDE</source>
+        <translation>Opération archimède </translation>
+    </message>
+    <message>
+        <source>STB_BASIC_PROPS</source>
+        <translation>Montrer les propriétés de base de l&apos;objet</translation>
+    </message>
+    <message>
+        <source>STB_BND_BOX</source>
+        <translation>Calculer la boîte englobante de l&apos;objet</translation>
+    </message>
+    <message>
+        <source>STB_BOX</source>
+        <translation>Créer une boîte</translation>
+    </message>
+    <message>
+        <source>STB_CHAMFER</source>
+        <translation>Créer un chanfrein</translation>
+    </message>
+    <message>
+        <source>STB_CHANGE_ORIENTATION</source>
+        <translation>Changer l&apos;orientation</translation>
+    </message>
+    <message>
+        <source>STB_CHECK</source>
+        <translation>Contrôler une forme</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_COMPOUND</source>
+        <translation>Contrôler un assemlage de blocs</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_FREE_BNDS</source>
+        <translation>Vérifier les contours libres</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_FREE_FACES</source>
+        <translation>Contrôler les faces libres</translation>
+    </message>
+    <message>
+        <source>STB_CHECK_GEOMETRY</source>
+        <translation>Contrôler la géométrie</translation>
+    </message>
+    <message>
+        <source>STB_CIRCLE</source>
+        <translation>Créer un cercle</translation>
+    </message>
+    <message>
+        <source>STB_CLIPPING</source>
+        <translation>Intervalle de découpe</translation>
+    </message>
+    <message>
+        <source>STB_CLOSE_CONTOUR</source>
+        <translation>Fermer le contour</translation>
+    </message>
+    <message>
+        <source>STB_COMMON</source>
+        <translation>Intersection</translation>
+    </message>
+    <message>
+        <source>STB_COMPOUND</source>
+        <translation>Construire un assemblage</translation>
+    </message>
+    <message>
+        <source>STB_COMPOUND_SEL_ONLY</source>
+        <translation>Ne choisir que des assemblages</translation>
+    </message>
+    <message>
+        <source>STB_CONE</source>
+        <translation>Créer un cône</translation>
+    </message>
+    <message>
+        <source>STB_CURVE</source>
+        <translation>Créer une courbe</translation>
+    </message>
+    <message>
+        <source>STB_CUT</source>
+        <translation>Découpe</translation>
+    </message>
+    <message>
+        <source>STB_CYLINDER</source>
+        <translation>Créer un cylindre</translation>
+    </message>
+    <message>
+        <source>STB_RECTANGLE</source>
+        <translation>Créer une face rectangulaire </translation>
+    </message>
+    <message>
+        <source>STB_DELETE</source>
+        <translation>Supprimer un objet</translation>
+    </message>
+    <message>
+        <source>STB_DISK</source>
+        <translation>Créer un disque</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY</source>
+        <translation>Afficher les objets</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY_ALL</source>
+        <translation>Afficher tout</translation>
+    </message>
+    <message>
+        <source>STB_DISPLAY_ONLY</source>
+        <translation>Afficher uniquement</translation>
+    </message>
+    <message>
+        <source>STB_EDGE</source>
+        <translation>Créer une arête</translation>
+    </message>
+    <message>
+        <source>STB_EDGE_SEL_ONLY</source>
+        <translation>Ne choisir que des arêtes</translation>
+    </message>
+    <message>
+        <source>STB_ELLIPSE</source>
+        <translation>Créer un ellipse</translation>
+    </message>
+    <message>
+        <source>STB_ERASE</source>
+        <translation>Cacher le(s) objet(s)</translation>
+    </message>
+    <message>
+        <source>STB_ERASE_ALL</source>
+        <translation>Cacher tout</translation>
+    </message>
+    <message>
+        <source>STB_EXPLODE</source>
+        <translation>Eclater</translation>
+    </message>
+    <message>
+        <source>STB_EXPLODE_BLOCKS</source>
+        <translation>Eclater en Blocs</translation>
+    </message>
+    <message>
+        <source>STB_EXPORT</source>
+        <translation>Exporter la géométrie au fichier BREP</translation>
+    </message>
+    <message>
+        <source>STB_EXTRUSION</source>
+        <translation>Créer une extrusion</translation>
+    </message>
+    <message>
+        <source>STB_FACE</source>
+        <translation>Construire une face</translation>
+    </message>
+    <message>
+        <source>STB_FACE_SEL_ONLY</source>
+        <translation>Ne choisir que des faces</translation>
+    </message>
+    <message>
+        <source>STB_FILLET</source>
+        <translation>Créer un congé 3D</translation>
+    </message>
+    <message>
+        <source>STB_FILLET_1D</source>
+        <translation>Créer un congé 1D</translation>
+    </message>
+    <message>
+        <source>STB_FILLET_2D</source>
+        <translation>Créer un congé 2D</translation>
+    </message>
+    <message>
+        <source>STB_FILLING</source>
+        <translation>Créer une nappe</translation>
+    </message>
+    <message>
+        <source>STB_FUSE</source>
+        <translation>Union</translation>
+    </message>
+    <message>
+        <source>STB_GLUE_FACES</source>
+        <translation>Recoller les faces</translation>
+    </message>
+    <message>
+        <source>STB_GROUP_CREATE</source>
+        <translation>Créer un groupe</translation>
+    </message>
+    <message>
+        <source>STB_GROUP_EDIT</source>
+        <translation>Editer un groupe</translation>
+    </message>
+    <message>
+        <source>STB_RELOAD_IMPORTED</source>
+        <translation>Recharger l&apos;objet importé depuis le disque</translation>
+    </message>
+    <message>
+        <source>STB_HEX_SOLID</source>
+        <translation>Solide hexaédrique</translation>
+    </message>
+    <message>
+        <source>STB_IMPORT</source>
+        <translation>Importer une géométrie d&apos;un fichier BREP</translation>
+    </message>
+    <message>
+        <source>STB_INERTIA</source>
+        <translation>Calculer les moments d&apos;intertie de l&apos;objet</translation>
+    </message>
+    <message>
+        <source>STB_ISOS</source>
+        <translation>Définir le nombre d&apos;isolignes</translation>
+    </message>
+    <message>
+        <source>STB_LINE</source>
+        <translation>Créer une ligne</translation>
+    </message>
+    <message>
+        <source>STB_LIMIT_TOLERANCE</source>
+        <translation>Tolérance limite</translation>
+    </message>
+    <message>
+        <source>STB_LOCAL_CS</source>
+        <translation>Créer un système local de coordonnées</translation>
+    </message>
+    <message>
+        <source>STB_MASS_CENTER</source>
+        <translation>Calculer le centre de gravité de l&apos;objet</translation>
+    </message>
+    <message>
+        <source>STB_MIN_DIST</source>
+        <translation>Calculer la distance minimale entre deux objets</translation>
+    </message>
+    <message>
+        <source>STB_MIRROR</source>
+        <translation>Refléter un objet</translation>
+    </message>
+    <message>
+        <source>STB_MODIFY_LOCATION</source>
+        <translation>Modifier la position d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>STB_MUL_ROTATION</source>
+        <translation>Effectuer une multi-rotation</translation>
+    </message>
+    <message>
+        <source>STB_MUL_TRANSFORM</source>
+        <translation>Effectuer une multi-transformation</translation>
+    </message>
+    <message>
+        <source>STB_MUL_TRANSLATION</source>
+        <translation>Effectuer une multi-translation</translation>
+    </message>
+    <message>
+        <source>STB_OFFSET</source>
+        <translation>Décaler une surface </translation>
+    </message>
+    <message>
+        <source>STB_ORIGIN_AND_VECTORS</source>
+        <translation>Créer les vecterurs de base et l&apos;origine</translation>
+    </message>
+    <message>
+        <source>STB_PARTITION</source>
+        <translation>Effectuer une partition</translation>
+    </message>
+    <message>
+        <source>STB_PIPE</source>
+        <translation>Créer un objet par extrusion suivant un chemin</translation>
+    </message>
+    <message>
+        <source>STB_PLANE</source>
+        <translation>Créer un plan</translation>
+    </message>
+    <message>
+        <source>STB_POINT</source>
+        <translation>Créer un point</translation>
+    </message>
+    <message>
+        <source>STB_POINT_COORDS</source>
+        <translation>Montrer les coordonnées du point</translation>
+    </message>
+    <message>
+        <source>STB_POINT_ON_EDGE</source>
+        <translation>Ajouter un point sur l&apos;arête</translation>
+    </message>
+    <message>
+        <source>STB_POP_COLOR</source>
+        <translation>Couleur</translation>
+    </message>
+    <message>
+        <source>STB_POP_CREATE_GROUP</source>
+        <translation>Créer un Groupe</translation>
+    </message>
+    <message>
+        <source>STB_POP_SHOW_CHILDREN</source>
+        <translation>Monter les objets fils</translation>
+    </message>
+    <message>
+        <source>STB_POP_HIDE_CHILDREN</source>
+        <translation>Cacher les objets fils</translation>
+    </message>
+    <message>
+        <source>STB_POP_ISOS</source>
+        <translation>Isolignes</translation>
+    </message>
+    <message>
+        <source>STB_POP_DEFLECTION</source>
+        <translation>Coefficient de déformation</translation>
+    </message>
+    <message>
+        <source>STB_POP_RENAME</source>
+        <translation>Renommer</translation>
+    </message>
+    <message>
+        <source>STB_POP_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>STB_POP_TRANSPARENCY</source>
+        <translation>Transparence</translation>
+    </message>
+    <message>
+        <source>STB_POP_WIREFRAME</source>
+        <translation>Contours</translation>
+    </message>
+    <message>
+        <source>STB_PROPAGATE</source>
+        <translation>Propager</translation>
+    </message>
+    <message>
+        <source>STB_Q_FACE</source>
+        <translation>Face quadrangulaire </translation>
+    </message>
+    <message>
+        <source>STB_REVOLUTION</source>
+        <translation>Créer une révolution</translation>
+    </message>
+    <message>
+        <source>STB_ROTATION</source>
+        <translation>Tourner un objet</translation>
+    </message>
+    <message>
+        <source>STB_SCALE</source>
+        <translation>Redimensionner un objet</translation>
+    </message>
+    <message>
+        <source>STB_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>STB_SEWING</source>
+        <translation>Effectuer la couture</translation>
+    </message>
+    <message>
+        <source>STB_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>STB_VECTOR_MODE</source>
+        <translation>Changer le mode de représentation des arêtes</translation>
+    </message>
+    <message>
+        <source>STB_SHADING_COLOR</source>
+        <translation>Définir la couleur d&apos;ombrage</translation>
+    </message>
+    <message>
+        <source>STB_SHAPE_PROCESS</source>
+        <translation>Effectuer le traitement de formes</translation>
+    </message>
+    <message>
+        <source>STB_SHELL</source>
+        <translation>Construire une coque</translation>
+    </message>
+    <message>
+        <source>STB_SHELL_SEL_ONLY</source>
+        <translation>Ne choisir que des coques</translation>
+    </message>
+    <message>
+        <source>STB_SKETCH</source>
+        <translation>Créer une esquisse 2D</translation>
+    </message>
+    <message>
+        <source>STB_3DSKETCH</source>
+        <translation>Créer une esquisse 3D</translation>
+    </message>
+    <message>
+        <source>STB_SOLID</source>
+        <translation>Construire un solide</translation>
+    </message>
+    <message>
+        <source>STB_SOLID_SEL_ONLY</source>
+        <translation>Ne choisir que des solides</translation>
+    </message>
+    <message>
+        <source>STB_SPHERE</source>
+        <translation>Créer une sphère</translation>
+    </message>
+    <message>
+        <source>STB_STEP_VALUE</source>
+        <translation>Définir le valeur du pas</translation>
+    </message>
+    <message>
+        <source>STB_SUPPERSS_HOLES</source>
+        <translation>Effectuer la suppression des trous</translation>
+    </message>
+    <message>
+        <source>STB_SUPPRESS_FACES</source>
+        <translation>Effectuer la suppression des faces</translation>
+    </message>
+    <message>
+        <source>STB_SUPPRESS_INT_WIRES</source>
+        <translation>Effectuer la suppression des contours internes</translation>
+    </message>
+    <message>
+        <source>STB_TOLERANCE</source>
+        <translation>Calculer la tolérance d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>STB_TORUS</source>
+        <translation>Créer un tore</translation>
+    </message>
+    <message>
+        <source>STB_TRANSLATION</source>
+        <translation>Translater un objet</translation>
+    </message>
+    <message>
+        <source>STB_VECTOR</source>
+        <translation>Créer un vecteur</translation>
+    </message>
+    <message>
+        <source>STB_VERTEX_SEL_ONLY</source>
+        <translation>Ne choisir que des points</translation>
+    </message>
+    <message>
+        <source>STB_WHAT_IS</source>
+        <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+    </message>
+    <message>
+        <source>STB_WIRE</source>
+        <translation>Construire un contour</translation>
+    </message>
+    <message>
+        <source>STB_WIRE_SEL_ONLY</source>
+        <translation>Ne choisir que des contours</translation>
+    </message>
+    <message>
+        <source>STB_WORK_PLANE</source>
+        <translation>Créer un plan de travail</translation>
+    </message>
+    <message>
+        <source>STB_POP_POINT_MARKER</source>
+        <translation>Définir un marqueur de point</translation>
+    </message>
+    <message>
+        <source>SUPPRESS_RESULT</source>
+        <translation>Supprimer le résultat</translation>
+    </message>
+    <message>
+        <source>SUPRESS_FACE_NEW_OBJ_NAME</source>
+        <translation>FacesSupprimees</translation>
+    </message>
+    <message>
+        <source>ShHealOper_ErrorExecution_msg</source>
+        <translation>L&apos;algorithme de traitement de formes n&apos;a pas abouti</translation>
+    </message>
+    <message>
+        <source>ShHealOper_InvalidParameters_msg</source>
+        <translation>Les paramètres de l&apos;algorithme de traitement de formes sont incorrects</translation>
+    </message>
+    <message>
+        <source>ShHealOper_NotError_msg</source>
+        <translation>L&apos;algorithme de traitement de formes n&apos;a pas fait de modifications de la forme d&apos;origine</translation>
+    </message>
+    <message>
+        <source>TLT_RENAME</source>
+        <translation>Renommer</translation>
+    </message>
+    <message>
+        <source>TOM_O</source>
+        <translation>O</translation>
+    </message>
+    <message>
+        <source>TOM_O_PLUS</source>
+        <translation>+ en O</translation>
+    </message>
+    <message>
+        <source>TOM_O_POINT</source>
+        <translation>. en O</translation>
+    </message>
+    <message>
+        <source>TOM_O_STAR</source>
+        <translation>* en O</translation>
+    </message>
+    <message>
+        <source>TOM_O_X</source>
+        <translation>X en O</translation>
+    </message>
+    <message>
+        <source>TOM_PLUS</source>
+        <translation>+</translation>
+    </message>
+    <message>
+        <source>TOM_POINT</source>
+        <translation>.</translation>
+    </message>
+    <message>
+        <source>TOM_STAR</source>
+        <translation>*</translation>
+    </message>
+    <message>
+        <source>TOM_X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>TOOL_BASIC</source>
+        <translation>Objets de base</translation>
+    </message>
+    <message>
+        <source>TOOL_BOOLEAN</source>
+        <translation>Opérations booléennes </translation>
+    </message>
+    <message>
+        <source>TOOL_GENERATION</source>
+        <translation>Génération</translation>
+    </message>
+    <message>
+        <source>TOOL_PRIMITIVES</source>
+        <translation>Primitives</translation>
+    </message>
+    <message>
+        <source>TOOL_TRANSFORMATION</source>
+        <translation>Transformation</translation>
+    </message>
+    <message>
+        <source>TOOL_BUILD</source>
+        <translation>Construire</translation>
+    </message>
+    <message>
+        <source>TOOL_OPERATIONS</source>
+        <translation>Opérations</translation>
+    </message>
+    <message>
+        <source>TOOL_ADVANCED</source>
+        <translation>Avancé</translation>
+    </message>
+    <message>
+        <source>TOOL_MEASURES</source>
+        <translation>Informations</translation>
+    </message>
+    <message>
+        <source>TOP_ARC</source>
+        <translation>Créer un arc</translation>
+    </message>
+    <message>
+        <source>TOP_ARCHIMEDE</source>
+        <translation>Archimède</translation>
+    </message>
+    <message>
+        <source>TOP_BASIC_PROPS</source>
+        <translation>Propriétés de base</translation>
+    </message>
+    <message>
+        <source>TOP_BND_BOX</source>
+        <translation>Boîte englobante</translation>
+    </message>
+    <message>
+        <source>TOP_BOX</source>
+        <translation>Créer une boîte</translation>
+    </message>
+    <message>
+        <source>TOP_CHAMFER</source>
+        <translation>Chanfrein</translation>
+    </message>
+    <message>
+        <source>TOP_CHANGE_ORIENTATION</source>
+        <translation>Changer l&apos;orientation</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK</source>
+        <translation>Valider l&apos;objet</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_COMPOUND</source>
+        <translation>Valider l&apos;assemblage de blocs</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_FREE_BNDS</source>
+        <translation>Valider les contours libres</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_FREE_FACES</source>
+        <translation>Contrôler les faces libres</translation>
+    </message>
+    <message>
+        <source>TOP_CHECK_GEOMETRY</source>
+        <translation>Contrôler la géométrie</translation>
+    </message>
+    <message>
+        <source>TOP_CIRCLE</source>
+        <translation>Créer un cercle</translation>
+    </message>
+    <message>
+        <source>TOP_CLIPPING</source>
+        <translation>Intervalle de découpe</translation>
+    </message>
+    <message>
+        <source>TOP_CLOSE_CONTOUR</source>
+        <translation>Fermer le contour</translation>
+    </message>
+    <message>
+        <source>TOP_COMMON</source>
+        <translation>Intersection</translation>
+    </message>
+    <message>
+        <source>TOP_COMPOUND</source>
+        <translation>Construire un assemblage</translation>
+    </message>
+    <message>
+        <source>TOP_CONE</source>
+        <translation>Créer un cône</translation>
+    </message>
+    <message>
+        <source>TOP_CURVE</source>
+        <translation>Créer une courbe</translation>
+    </message>
+    <message>
+        <source>TOP_CUT</source>
+        <translation>Découpe</translation>
+    </message>
+    <message>
+        <source>TOP_CYLINDER</source>
+        <translation>Créer un cylindre</translation>
+    </message>
+    <message>
+        <source>TOP_DELETE</source>
+        <translation>Supprimer l&apos;objet</translation>
+    </message>
+    <message>
+        <source>TOP_RECTANGLE</source>
+        <translation>Créer une face rectangulaire</translation>
+    </message>
+    <message>
+        <source>TOP_DISK</source>
+        <translation>Créer un disque</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY</source>
+        <translation>Afficher</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY_ALL</source>
+        <translation>Afficher tout</translation>
+    </message>
+    <message>
+        <source>TOP_DISPLAY_ONLY</source>
+        <translation>Afficher uniquement</translation>
+    </message>
+    <message>
+        <source>TOP_EDGE</source>
+        <translation>Construire une arête</translation>
+    </message>
+    <message>
+        <source>TOP_ELLIPSE</source>
+        <translation>Créer un ellipse</translation>
+    </message>
+    <message>
+        <source>TOP_ERASE</source>
+        <translation>Cacher</translation>
+    </message>
+    <message>
+        <source>TOP_ERASE_ALL</source>
+        <translation>Cacher tout</translation>
+    </message>
+    <message>
+        <source>TOP_EXPLODE</source>
+        <translation>Eclater</translation>
+    </message>
+    <message>
+        <source>TOP_EXPLODE_BLOCKS</source>
+        <translation>Eclater en blocs</translation>
+    </message>
+    <message>
+        <source>TOP_EXPORT</source>
+        <translation>Exporter une géométrie au format BREP</translation>
+    </message>
+    <message>
+        <source>TOP_EXTRUSION</source>
+        <translation>Créer une extrusion</translation>
+    </message>
+    <message>
+        <source>TOP_FACE</source>
+        <translation>Construire une face</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET</source>
+        <translation>Congé 3D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET_1D</source>
+        <translation>Congé 1D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLET_2D</source>
+        <translation>Congé 2D</translation>
+    </message>
+    <message>
+        <source>TOP_FILLING</source>
+        <translation>Créer une nappe</translation>
+    </message>
+    <message>
+        <source>TOP_FUSE</source>
+        <translation>Union</translation>
+    </message>
+    <message>
+        <source>TOP_GLUE_FACES</source>
+        <translation>Recoller les faces</translation>
+    </message>
+    <message>
+        <source>TOP_GROUP_CREATE</source>
+        <translation>Créer un groupe</translation>
+    </message>
+    <message>
+        <source>TOP_GROUP_EDIT</source>
+        <translation>Editer un groupe</translation>
+    </message>
+    <message>
+        <source>TOP_HEX_SOLID</source>
+        <translation>Solide hexaédrique</translation>
+    </message>
+    <message>
+        <source>TOP_IMPORT</source>
+        <translation>Importer une géométrie d&apos;un fichier BREP</translation>
+    </message>
+    <message>
+        <source>TOP_INERTIA</source>
+        <translation>Moments d&apos;inertie</translation>
+    </message>
+    <message>
+        <source>TOP_ISOS</source>
+        <translation>Définir le nombre d&apos;isolignes</translation>
+    </message>
+    <message>
+        <source>TOP_LINE</source>
+        <translation>Créer une ligne</translation>
+    </message>
+    <message>
+        <source>TOP_LIMIT_TOLERANCE</source>
+        <translation>Tolérance limite</translation>
+    </message>
+    <message>
+        <source>TOP_LOCAL_CS</source>
+        <translation>Créer un système local de coordonnées</translation>
+    </message>
+    <message>
+        <source>TOP_MASS_CENTER</source>
+        <translation>Centre de gravité</translation>
+    </message>
+    <message>
+        <source>TOP_MIN_DIST</source>
+        <translation>Distance minimale</translation>
+    </message>
+    <message>
+        <source>TOP_MIRROR</source>
+        <translation>Symétrie</translation>
+    </message>
+    <message>
+        <source>TOP_MODIFY_LOCATION</source>
+        <translation>Modifer la position</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_ROTATION</source>
+        <translation>Multi-rotation</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_TRANSFORM</source>
+        <translation>Multi-transformation</translation>
+    </message>
+    <message>
+        <source>TOP_MUL_TRANSLATION</source>
+        <translation>Multi-translation</translation>
+    </message>
+    <message>
+        <source>TOP_OFFSET</source>
+        <translation>Décaler une surface </translation>
+    </message>
+    <message>
+        <source>TOP_ORIGIN_AND_VECTORS</source>
+        <translation>Créer l&apos;origine et les vecteurs de base</translation>
+    </message>
+    <message>
+        <source>TOP_PARTITION</source>
+        <translation>Partition</translation>
+    </message>
+    <message>
+        <source>TOP_PIPE</source>
+        <translation>Extrusion suivant un chemin</translation>
+    </message>
+    <message>
+        <source>TOP_PLANE</source>
+        <translation>Créer un plan</translation>
+    </message>
+    <message>
+        <source>TOP_POINT</source>
+        <translation>Créer un point</translation>
+    </message>
+    <message>
+        <source>TOP_POINT_COORDS</source>
+        <translation>Coordonnées d&apos;un point</translation>
+    </message>
+    <message>
+        <source>TOP_POINT_ON_EDGE</source>
+        <translation>Ajouter un point sur l&apos;arête</translation>
+    </message>
+    <message>
+        <source>TOP_POP_COLOR</source>
+        <translation>Couleur</translation>
+    </message>
+    <message>
+        <source>TOP_POP_CREATE_GROUP</source>
+        <translation>Créer un groupe</translation>
+    </message>
+    <message>
+        <source>TOP_POP_SHOW_CHILDREN</source>
+        <translation>Montrer les enfants</translation>
+    </message>
+    <message>
+        <source>TOP_POP_HIDE_CHILDREN</source>
+        <translation>Cacher les enfants</translation>
+    </message>
+    <message>
+        <source>TOP_POP_ISOS</source>
+        <translation>Isolignes</translation>
+    </message>
+    <message>
+        <source>TOP_POP_DEFLECTION</source>
+        <translation>Coefficient de déformation </translation>
+    </message>
+    <message>
+        <source>TOP_POP_RENAME</source>
+        <translation>Renommer</translation>
+    </message>
+    <message>
+        <source>TOP_POP_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>TOP_POP_TRANSPARENCY</source>
+        <translation>Transparence</translation>
+    </message>
+    <message>
+        <source>TOP_POP_WIREFRAME</source>
+        <translation>Contours</translation>
+    </message>
+    <message>
+        <source>TOP_PROPAGATE</source>
+        <translation>Propager</translation>
+    </message>
+    <message>
+        <source>TOP_Q_FACE</source>
+        <translation>Face quadrangulaire </translation>
+    </message>
+    <message>
+        <source>TOP_REVOLUTION</source>
+        <translation>Créer une révolution</translation>
+    </message>
+    <message>
+        <source>TOP_ROTATION</source>
+        <translation>Rotation</translation>
+    </message>
+    <message>
+        <source>TOP_SCALE</source>
+        <translation>Redimensionner</translation>
+    </message>
+    <message>
+        <source>TOP_SECTION</source>
+        <translation>Section</translation>
+    </message>
+    <message>
+        <source>TOP_SEWING</source>
+        <translation>Effecture une couture</translation>
+    </message>
+    <message>
+        <source>TOP_SHADING</source>
+        <translation>Ombrage</translation>
+    </message>
+    <message>
+        <source>TOP_SHADING_COLOR</source>
+        <translation>Définir la couleur d&apos;ombrage</translation>
+    </message>
+    <message>
+        <source>TOP_SHAPE_PROCESS</source>
+        <translation>Effectuer le traitement de forme</translation>
+    </message>
+    <message>
+        <source>TOP_SHELL</source>
+        <translation>Construire une coque</translation>
+    </message>
+    <message>
+        <source>TOP_SKETCH</source>
+        <translation>Esquisse 2D</translation>
+    </message>
+    <message>
+        <source>TOP_3DSKETCH</source>
+        <translation>Esquisse 3D</translation>
+    </message>
+    <message>
+        <source>TOP_SOLID</source>
+        <translation>Créer un solide</translation>
+    </message>
+    <message>
+        <source>TOP_SPHERE</source>
+        <translation>Créer une sphère</translation>
+    </message>
+    <message>
+        <source>TOP_STEP_VALUE</source>
+        <translation>Définir la valeur du pas</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPERSS_HOLES</source>
+        <translation>Supprimer les trous</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPRESS_FACES</source>
+        <translation>Supprimer les faces</translation>
+    </message>
+    <message>
+        <source>TOP_SUPPRESS_INT_WIRES</source>
+        <translation>Supprimer les contours internes</translation>
+    </message>
+    <message>
+        <source>TOP_TOLERANCE</source>
+        <translation>Tolérance</translation>
+    </message>
+    <message>
+        <source>TOP_TORUS</source>
+        <translation>Créer un tore</translation>
+    </message>
+    <message>
+        <source>TOP_TRANSLATION</source>
+        <translation>Translation</translation>
+    </message>
+    <message>
+        <source>TOP_VECTOR</source>
+        <translation>Créer un vecteur</translation>
+    </message>
+    <message>
+        <source>TOP_WHAT_IS</source>
+        <translation>Qu&apos;est-ce que c&apos;est ?</translation>
+    </message>
+    <message>
+        <source>TOP_WIRE</source>
+        <translation>Construire un contour</translation>
+    </message>
+    <message>
+        <source>TOP_WORK_PLANE</source>
+        <translation>Créer un plan de travail</translation>
+    </message>
+    <message>
+        <source>TOP_POP_POINT_MARKER</source>
+        <translation>Marqueur de point</translation>
+    </message>
+    <message>
+        <source>WRN_NOT_IMPLEMENTED</source>
+        <translation>Désolé, cette fonctionnalité n&apos;est pas encore implémentée</translation>
+    </message>
+    <message>
+        <source>_S_</source>
+        <translation>(s)</translation>
+    </message>
+    <message>
+        <source>NOT_FOUND_ANY</source>
+        <translation>Aucune entité n&apos;a été trouvée</translation>
+    </message>
+    <message>
+        <source>GEOM_FACE_I</source>
+        <translation>Face %1</translation>
+    </message>
+    <message>
+        <source>GEOM_CONSTANT_RADIUS</source>
+        <translation>Rayon :</translation>
+    </message>
+    <message>
+        <source>GEOM_R1</source>
+        <translation>R1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_R2</source>
+        <translation>R2 :</translation>
+    </message>
+    <message>
+        <source>GEOM_BOTHWAY</source>
+        <translation>Dans les deux directions</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMALE</source>
+        <translation>Normale à une face</translation>
+    </message>
+    <message>
+        <source>GEOM_VECTOR_NORMALE</source>
+        <translation>Vecteur_Normal</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE1</source>
+        <translation>Ligne 1</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE2</source>
+        <translation>Ligne 2</translation>
+    </message>
+    <message>
+        <source>GEOM_D</source>
+        <translation>D :</translation>
+    </message>
+    <message>
+        <source>GEOM_CHAMFER_EDGE</source>
+        <translation>Chanfrein sur les arêtes choisies</translation>
+    </message>
+    <message>
+        <source>SELECTED_EDGE</source>
+        <translation>Arêtes choisies</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMALE_TITLE</source>
+        <translation>Créer un vecteur normal à une face</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_TITLE</source>
+        <translation>Angle entre deux arêtes/lignes/vecteurs droits</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_OBJ</source>
+        <translation>Objets et résultats</translation>
+    </message>
+    <message>
+        <source>GEOM_MEASURE_ANGLE_IS</source>
+        <translation>Angle en degrés :</translation>
+    </message>
+    <message>
+        <source>GEOM_LINE_INTERSECTION</source>
+        <translation>Point à l&apos;Intersection de deux lignes</translation>
+    </message>
+    <message>
+        <source>GEOM_KEEP_NONLIMIT_SHAPES</source>
+        <translation>Préserver les formes inférieures</translation>
+    </message>
+    <message>
+        <source>GEOM_NO_SELF_INTERSECTION</source>
+        <translation>Pas d&apos;intersection des sous-formes (assemblages seuls)</translation>
+    </message>
+    <message>
+        <source>GEOM_CENTER_2POINTS</source>
+        <translation>Centre et deux points</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_EXTRA_EDGES_TITLE</source>
+        <translation>Supprimer les arêtes inutiles</translation>
+    </message>
+    <message>
+        <source>GEOM_REMOVE_EXTRA_EDGES</source>
+        <translation>Objet dont on suppime les arêtes inutiles</translation>
+    </message>
+    <message>
+        <source>GEOM_RMEE_UNION_FACES</source>
+        <translation>Union des faces, qui appartiennent à la même surface</translation>
+    </message>
+    <message>
+        <source>REMOVE_EXTRA_EDGES_NEW_OBJ_NAME</source>
+        <translation>PasdAretesSupplementaires</translation>
+    </message>
+    <message>
+        <source>TOP_REMOVE_EXTRA_EDGES</source>
+        <translation>Suppimer les arêtes inutiles</translation>
+    </message>
+    <message>
+        <source>MEN_REMOVE_EXTRA_EDGES</source>
+        <translation>Suppimer les arêtes inutiles</translation>
+    </message>
+    <message>
+        <source>STB_REMOVE_EXTRA_EDGES</source>
+        <translation>Suppimer les arêtes inutiles</translation>
+    </message>
+    <message>
+        <source>TOP_NORMALE</source>
+        <translation>Vecteur normal à une face</translation>
+    </message>
+    <message>
+        <source>MEN_NORMALE</source>
+        <translation>Vecteur normal à une face</translation>
+    </message>
+    <message>
+        <source>STB_NORMALE</source>
+        <translation>Vecteur normal à une face</translation>
+    </message>
+    <message>
+        <source>TOP_MEASURE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>MEN_MEASURE_ANGLE</source>
+        <translation>Angle</translation>
+    </message>
+    <message>
+        <source>STB_MEASURE_ANGLE</source>
+        <translation>Calculer l&apos;angle entre deux lignes ou arêtes linéaires</translation>
+    </message>
+    <message>
+        <source>TOP_POP_AUTO_COLOR</source>
+        <translation>Couleur Automatique</translation>
+    </message>
+    <message>
+        <source>MEN_POP_AUTO_COLOR</source>
+        <translation>Couleur Automatique</translation>
+    </message>
+    <message>
+        <source>STB_POP_AUTO_COLOR</source>
+        <translation>Couleur Automatique</translation>
+    </message>
+    <message>
+        <source>TOP_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Désactiver le couleur automatique</translation>
+    </message>
+    <message>
+        <source>MEN_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Désactiver le couleur automatique</translation>
+    </message>
+    <message>
+        <source>STB_POP_DISABLE_AUTO_COLOR</source>
+        <translation>Désactiver le couleur automatique</translation>
+    </message>
+    <message>
+        <source>GEOM_RESULT_NAME_GRP</source>
+        <translation>Nom du résultat</translation>
+    </message>
+    <message>
+        <source>GEOM_RESULT_NAME_LBL</source>
+        <translation>Nom</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_APPROX</source>
+        <translation>Approximation</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_METHOD</source>
+        <translation>Méthode</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_DEFAULT</source>
+        <translation>Défaut (comportement standardisé)</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_USEORI</source>
+        <translation>Utiliser l&apos;orientation des arêtes</translation>
+    </message>
+    <message>
+        <source>GEOM_FILLING_AUTO</source>
+        <translation>Auto-corriger l&apos;orientation des arêtes</translation>
+    </message>
+    <message>
+        <source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source>
+        <translation>Pas d&apos;objets appropriés choisis</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE</source>
+        <translation>Trouver les éléments d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_ESHAPE</source>
+        <translation>L&apos;objet à éclater</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_CSHAPE</source>
+        <translation>Le solide de contrôle</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_STATE</source>
+        <translation>Etat</translation>
+    </message>
+    <message>
+        <source>GEOM_KIND_OF_SHAPE</source>
+        <translation>Type d&apos;objet :</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSED</source>
+        <translation>Fermé</translation>
+    </message>
+    <message>
+        <source>GEOM_UNCLOSED</source>
+        <translation>Ouvert</translation>
+    </message>
+    <message>
+        <source>GEOM_CLOSEDUNCLOSED</source>
+        <translation>Il n&apos;est pas défini, si l&apos;objet est fermé ou ouvert. , il y a potentiellement une erreur.</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_CIRCLE</source>
+        <translation>Disque</translation>
+    </message>
+    <message>
+        <source>GEOM_DISK_ELLIPSE</source>
+        <translation>Face elliptique </translation>
+    </message>
+    <message>
+        <source>GEOM_PLANAR_FACE</source>
+        <translation>Face plane</translation>
+    </message>
+    <message>
+        <source>GEOM_PLANAR_EDGE_WIRE</source>
+        <translation>Contour avec des arêtes planes</translation>
+    </message>
+    <message>
+        <source>GEOM_POLYGON</source>
+        <translation>Polygone</translation>
+    </message>
+    <message>
+        <source>GEOM_POLYHEDRON</source>
+        <translation>Polyèdre</translation>
+    </message>
+    <message>
+        <source>GEOM_NORMAL</source>
+        <translation>Direction normale</translation>
+    </message>
+    <message>
+        <source>GEOM_DIRECTION</source>
+        <translation>Direction</translation>
+    </message>
+    <message>
+        <source>GEOM_UPARAMETER</source>
+        <translation>Paramètre-U :</translation>
+    </message>
+    <message>
+        <source>GEOM_VPARAMETER</source>
+        <translation>Paramètre-V :</translation>
+    </message>
+    <message>
+        <source>GEOM_X_I</source>
+        <translation>X%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_Y_I</source>
+        <translation>Y%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_Z_I</source>
+        <translation>Z%1 :</translation>
+    </message>
+    <message>
+        <source>GEOM_SHAPES_ON_SHAPE_TITLE</source>
+        <translation>Trouver les éléments d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_X</source>
+        <translation>Facteur de redimensionnnement suivant X :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_Y</source>
+        <translation>Facteur de redimensionnnement suivant Y :</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_FACTOR_Z</source>
+        <translation>Facteur de redimensionnnement suivant Z :</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_IN</source>
+        <translation>IN</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_OUT</source>
+        <translation>OUT</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ON</source>
+        <translation>ON</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ONIN</source>
+        <translation>ONIN</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_ONOUT</source>
+        <translation>ONOUT</translation>
+    </message>
+    <message>
+        <source>GEOM_STATE_INOUT</source>
+        <translation>INOUT</translation>
+    </message>
+    <message>
+        <source>TOP_GET_SHAPES_ON_SHAPES</source>
+        <translation>Trouver les éléments d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>MEN_GET_SHAPES_ON_SHAPES</source>
+        <translation>Trouver les éléments d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>STB_GET_SHAPES_ON_SHAPES</source>
+        <translation>Trouver les éléments d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_PUBLISH_RESULT_GRP</source>
+        <translation>Options avancées</translation>
+    </message>
+    <message>
+        <source>GEOM_RESTORE_SUB_SHAPES</source>
+        <translation>Importer les paramètres de la présentation et les sous-objets</translation>
+    </message>
+    <message>
+        <source>GEOM_RSS_ADD_FREFIX</source>
+        <translation>Ajouter un préfixe aux noms des sous-objets restaurés</translation>
+    </message>
+    <message>
+        <source>GEOM_ALL_IMPORT_FILES</source>
+        <translation>Tous les formats supportés ( %1 )</translation>
+    </message>
+    <message>
+        <source>GEOM_UNSUPPORTED_TYPE</source>
+        <translation>Le format de ficher n&apos;est pas supporté</translation>
+    </message>
+    <message>
+        <source>GEOM_UNKNOWN_IMPORT_ERROR</source>
+        <translation>Erreur inconnue</translation>
+    </message>
+    <message>
+        <source>GEOM_IMPORT_ERRORS</source>
+        <translation>L&apos;import s&apos;est fini avec des erreurs:</translation>
+    </message>
+    <message>
+        <source>GEOM_PUBLISH_NAMED_SHAPES</source>
+        <translation>Créer des groupes pour les objets indiqués (s&apos;ils existent)?</translation>
+    </message>
+    <message>
+        <source>GEOM_SCALE_DIMENSIONS</source>
+        <translation>Voulez-vous prendre les unités en considération?
+Sinon les dimensions seront préservées sans modifications.</translation>
+    </message>
+    <message>
+        <source>GEOM_ADVANCED</source>
+        <translation>Objet géométrique avancé : type %1</translation>
+    </message>
+    <message>
+        <source>GEOM_PRECISION_HINT</source>
+        <translation>Il est possible d&apos;ajuster la précision de la valeur d&apos;entrée avec 
+le paramètre &apos;%1&apos; aux préférences du module Géométrie.</translation>
+    </message>
+    <message>
+        <source>TOP_PIPETSHAPE</source>
+        <translation>Créer un tuyau en T</translation>
+    </message>
+    <message>
+        <source>MEN_PIPETSHAPE</source>
+        <translation>Tuyau en T</translation>
+    </message>
+    <message>
+        <source>STB_PIPETSHAPE</source>
+        <translation>Créer un nouveau tuyau en T</translation>
+    </message>
+    <message>
+        <source>GEOM_ADVANCED_201</source>
+        <translation>Tuyau en T</translation>
+    </message>
+    <message>
+        <source>HALF_LENGTH_MAIN_PIPE</source>
+        <translation>Demi-longueur du tuyau principal </translation>
+    </message>
+    <message>
+        <source>HALF_LENGTH_INCIDENT_PIPE</source>
+        <translation>Demi-longueur du tuyau incident</translation>
+    </message>
+    <message>
+        <source>CIRCULAR_QUARTER_PIPE</source>
+        <translation>Un quart circulaire du tuyau</translation>
+    </message>
+    <message>
+        <source>THICKNESS</source>
+        <translation>Epaisseur</translation>
+    </message>
+    <message>
+        <source>FLANGE</source>
+        <translation>Collerette</translation>
+    </message>
+    <message>
+        <source>CHAMFER_OR_FILLET</source>
+        <translation>Chanfrein ou congé</translation>
+    </message>
+    <message>
+        <source>CHAMFER</source>
+        <translation>Chanfrein</translation>
+    </message>
+    <message>
+        <source>FILLET</source>
+        <translation>Congé</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_1</source>
+        <translation>Jonction 1</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_2</source>
+        <translation>Jonction 2</translation>
+    </message>
+    <message>
+        <source>JUNCTION_FACE_3</source>
+        <translation>Jonction 3</translation>
+    </message>
+    <message>
+        <source>GEOM_PLUGINS_OTHER</source>
+        <translation>Autre</translation>
+    </message>
+</context>
+<context>
+    <name>BasicGUI_CurveDlg</name>
+    <message>
+        <source>GEOM_IS_CLOSED</source>
+        <translation>Construire une arête fermée</translation>
+    </message>
+</context>
+<context>
+    <name>BasicGUI_EllipseDlg</name>
+    <message>
+        <source>GEOM_VECTOR_MAJOR</source>
+        <translation>Grand Axe</translation>
+    </message>
+    <message>
+        <source>ORIGIN_DEFAULT</source>
+        <translation>Origine par défaut</translation>
+    </message>
+    <message>
+        <source>X_AXIS_DEFAULT</source>
+        <translation>Axe X par défaut</translation>
+    </message>
+    <message>
+        <source>Z_AXIS_DEFAULT</source>
+        <translation>Axe Z par défaut</translation>
+    </message>
+</context>
+<context>
+    <name>BasicGUI_MarkerDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Construction d&apos;un S.C. local</translation>
+    </message>
+    <message>
+        <source>DX</source>
+        <translation>Dx</translation>
+    </message>
+    <message>
+        <source>DY</source>
+        <translation>Dy</translation>
+    </message>
+    <message>
+        <source>DZ</source>
+        <translation>Dz</translation>
+    </message>
+    <message>
+        <source>LCS_NAME</source>
+        <translation>SCLocal</translation>
+    </message>
+    <message>
+        <source>LOCALCS</source>
+        <translation>Système de coordonnées local</translation>
+    </message>
+    <message>
+        <source>ORIGIN</source>
+        <translation>Coordonnées de l&apos;origine</translation>
+    </message>
+    <message>
+        <source>VEC_PARALLEL</source>
+        <translation>Il n&apos;est pas possible que les axes du système de coordonnées soient parallels</translation>
+    </message>
+    <message>
+        <source>XDIR</source>
+        <translation>Direction de l&apos;axe X </translation>
+    </message>
+    <message>
+        <source>YDIR</source>
+        <translation>Direction de l&apos;axe Y</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_BlockDlg</name>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>FACE_3</source>
+        <translation>Face 3</translation>
+    </message>
+    <message>
+        <source>FACE_4</source>
+        <translation>Face 4</translation>
+    </message>
+    <message>
+        <source>FACE_5</source>
+        <translation>Face 5</translation>
+    </message>
+    <message>
+        <source>FACE_6</source>
+        <translation>Face 6</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_ExplodeDlg</name>
+    <message>
+        <source>NB_FACES_MAX</source>
+        <translation>Nombre de faces maximal</translation>
+    </message>
+    <message>
+        <source>NB_FACES_MIN</source>
+        <translation>Nombre de faces maximal</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_QuadFaceDlg</name>
+    <message>
+        <source>EDGE_1</source>
+        <translation>Arête 1</translation>
+    </message>
+    <message>
+        <source>EDGE_2</source>
+        <translation>Arête 2</translation>
+    </message>
+    <message>
+        <source>EDGE_3</source>
+        <translation>Arête 3</translation>
+    </message>
+    <message>
+        <source>EDGE_4</source>
+        <translation>Arête 4</translation>
+    </message>
+    <message>
+        <source>VERTEX_1</source>
+        <translation>Sommet 1</translation>
+    </message>
+    <message>
+        <source>VERTEX_2</source>
+        <translation>Sommet 2</translation>
+    </message>
+    <message>
+        <source>VERTEX_3</source>
+        <translation>Sommet 3</translation>
+    </message>
+    <message>
+        <source>VERTEX_4</source>
+        <translation>Sommet 4</translation>
+    </message>
+</context>
+<context>
+    <name>BlocksGUI_TrsfDlg</name>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_1U</source>
+        <translation>Face 1 U</translation>
+    </message>
+    <message>
+        <source>FACE_1V</source>
+        <translation>Face 1 V</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>FACE_2U</source>
+        <translation>Face 2 U</translation>
+    </message>
+    <message>
+        <source>FACE_2V</source>
+        <translation>Face 2 V</translation>
+    </message>
+</context>
+<context>
+    <name>EntityGUI_SketcherDlg</name>
+    <message>
+        <source>CANNOT_CLOSE</source>
+        <translation>Il est impossible de fermer le contour
+Le nombre de points n&apos;est pas suffisant</translation>
+    </message>
+</context>
+<context>
+    <name>EntityGUI_SubShapeDlg</name>
+    <message>
+        <source>NO_SUBSHAPES_SELECTED</source>
+        <translation>Choisissez un ou plusieurs sous-objets</translation>
+    </message>
+</context>
+<context>
+    <name>GroupGUI</name>
+    <message>
+        <source>NO_GROUP</source>
+        <translation>Choisissez un groupe à éditer</translation>
+    </message>
+</context>
+<context>
+    <name>GroupGUI_GroupDlg</name>
+    <message>
+        <source>ADD</source>
+        <translation>Ajouter</translation>
+    </message>
+    <message>
+        <source>CREATE_GROUP_TITLE</source>
+        <translation>Créer un Groupe</translation>
+    </message>
+    <message>
+        <source>EDIT_GROUP_TITLE</source>
+        <translation>Editer un Groupe</translation>
+    </message>
+    <message>
+        <source>EMPTY_LIST</source>
+        <translation>Choisissez un ou plusieurs sous-objets à placer dans le groupe</translation>
+    </message>
+    <message>
+        <source>EMPTY_NAME</source>
+        <translation>Le nom de groupe est vide. Indiquez un nom valide</translation>
+    </message>
+    <message>
+        <source>GROUP_NAME</source>
+        <translation>Nom du Groupe</translation>
+    </message>
+    <message>
+        <source>GROUP_PREFIX</source>
+        <translation>Groupe</translation>
+    </message>
+    <message>
+        <source>MAIN_SHAPE</source>
+        <translation>Objet Principal </translation>
+    </message>
+    <message>
+        <source>MAIN_SUB_SHAPES</source>
+        <translation>Objet principal et objets secondaires</translation>
+    </message>
+    <message>
+        <source>NO_GROUP</source>
+        <translation>Choisissez un groupe à éditer</translation>
+    </message>
+    <message>
+        <source>NO_MAIN_OBJ</source>
+        <translation>Choisissez un objet principal</translation>
+    </message>
+    <message>
+        <source>REMOVE</source>
+        <translation>Supprimer</translation>
+    </message>
+    <message>
+        <source>SHOW_ONLY_SELECTED</source>
+        <translation>Afficher uniquement la sélection</translation>
+    </message>
+    <message>
+        <source>HIDE_SELECTED</source>
+        <translation>Cacher la sélection</translation>
+    </message>
+    <message>
+        <source>SHOW_ALL_SUB_SHAPES</source>
+        <translation>Afficher tous les sous-objets</translation>
+    </message>
+    <message>
+        <source>SELECT_ALL</source>
+        <translation>Tout sélectionner</translation>
+    </message>
+    <message>
+        <source>SHAPE_SEL_RESTR</source>
+        <translation>Restriction de la sélection</translation>
+    </message>
+    <message>
+        <source>SHAPE_TYPE</source>
+        <translation>Type d&apos;objet</translation>
+    </message>
+    <message>
+        <source>NO_RESTR</source>
+        <translation>Pas de restriction</translation>
+    </message>
+    <message>
+        <source>GEOM_PARTS_OF_SHAPE2</source>
+        <translation>Parties Géométriques de l&apos;Objet Secondaire </translation>
+    </message>
+    <message>
+        <source>SUBSHAPES_OF_SHAPE2</source>
+        <translation>Sous-Objets de l&apos;Objet Secondaire Uniquement</translation>
+    </message>
+    <message>
+        <source>SECOND_SHAPE</source>
+        <translation>Objet secondaire</translation>
+    </message>
+</context>
+<context>
+    <name>MeasureGUI_1Sel1TextView1Check_QTD</name>
+    <message>
+        <source>CHECK_SHAPE_GEOMETRY</source>
+        <translation>Vérifier la géométrie</translation>
+    </message>
+</context>
+<context>
+    <name>MeasureGUI_PointDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Coordonnées d&apos;un Point</translation>
+    </message>
+    <message>
+        <source>COORDINATES</source>
+        <translation>Le Point et ses coordonnées</translation>
+    </message>
+    <message>
+        <source>POINT</source>
+        <translation>Point</translation>
+    </message>
+    <message>
+        <source>X</source>
+        <translation>X</translation>
+    </message>
+    <message>
+        <source>Y</source>
+        <translation>Y</translation>
+    </message>
+    <message>
+        <source>Z</source>
+        <translation>Z</translation>
+    </message>
+</context>
+<context>
+    <name>OperationGUI_ChamferDlg</name>
+    <message>
+        <source>D</source>
+        <translation>D</translation>
+    </message>
+    <message>
+        <source>FACE_1</source>
+        <translation>Face 1</translation>
+    </message>
+    <message>
+        <source>FACE_2</source>
+        <translation>Face 2</translation>
+    </message>
+    <message>
+        <source>SELECTED_FACES</source>
+        <translation>Faces sélectionnées</translation>
+    </message>
+</context>
+<context>
+    <name>OperationGUI_FilletDlg</name>
+    <message>
+        <source>SELECTED_EDGES</source>
+        <translation>Arêtes sélectionnées</translation>
+    </message>
+    <message>
+        <source>SELECTED_FACES</source>
+        <translation>Faces sélectionnées</translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_FreeBoundDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Vérifier les contours libres</translation>
+    </message>
+    <message>
+        <source>FREE_BOUND</source>
+        <translation>Contours Libres</translation>
+    </message>
+    <message>
+        <source>NUMBER_CLOSED</source>
+        <translation>Nombre de contours libres fermés</translation>
+    </message>
+    <message>
+        <source>NUMBER_OPEN</source>
+        <translation>Nombre de contours libres ouverts</translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_GlueDlg</name>
+    <message>
+        <source>FACES_FOR_GLUING_ARE_DETECTED</source>
+        <translation>Il y a %1 face(s) à recoller surlignées en couleur rouge.
+Fermez cette boîte d&apos;alerte et choisissez les faces à recoller</translation>
+    </message>
+    <message>
+        <source>GLUE_FACES</source>
+        <translation>Recollement de faces</translation>
+    </message>
+    <message>
+        <source>SELECT_FACES</source>
+        <translation>Choisir les Faces</translation>
+    </message>
+    <message>
+        <source>THERE_ARE_NO_FACES_FOR_GLUING</source>
+        <translation>Il n&apos;y a pas de faces à coller</translation>
+    </message>
+</context>
+<context>
+    <name>RepairGUI_ShapeProcessDlg</name>
+    <message>
+        <source>ERROR_NO_OBJECTS</source>
+        <translation>Choisissez un objet géométrique pour le traitement de forme.</translation>
+    </message>
+    <message>
+        <source>ERROR_NO_OPERATORS</source>
+        <translation>Choisissez au moins une opération de traitement de forme pour donner suite à l&apos;opération</translation>
+    </message>
+    <message>
+        <source>TIME_CONSUMING</source>
+        <translation>L&apos;activation de cette option peut résulter en une perte de temps sur certains objets.
+Voulez-vous continuer?</translation>
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_DeleteDlg</name>
+    <message>
+        <source>GEOM_REALLY_DELETE</source>
+        <translation>Voulez-vous vraiment supprimer %1 objet(s)?</translation>
+    </message>
+    <message>
+        <source>GEOM_REALLY_DELETE_ALL</source>
+        <translation>Voulez-vous vraiment supprimer tous les objets?</translation>
+    </message>
+    <message>
+        <source>GEOM_DELETE_OBJECTS</source>
+        <translation>Supprimer les objets</translation>
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_DeflectionDlg</name>
+    <message>
+        <source>GEOM_DEFLECTION_TLT</source>
+        <translation>Choisir le degré de déformation d&apos;un objet</translation>
+    </message>
+    <message>
+        <source>GEOM_DEFLECTION</source>
+        <translation>Déformation :</translation>
+    </message>
+</context>
+<context>
+    <name>GEOMToolsGUI_MarkerDlg</name>
+    <message>
+        <source>SET_MARKER_TLT</source>
+        <translation>Définir le Marqueur de Point</translation>
+    </message>
+    <message>
+        <source>STANDARD_MARKER</source>
+        <translation>Standard</translation>
+    </message>
+    <message>
+        <source>CUSTOM_MARKER</source>
+        <translation>Personnalisé</translation>
+    </message>
+    <message>
+        <source>TYPE</source>
+        <translation>Type:</translation>
+    </message>
+    <message>
+        <source>SCALE</source>
+        <translation>Echelle:</translation>
+    </message>
+    <message>
+        <source>CUSTOM</source>
+        <translation>Texture:</translation>
+    </message>
+    <message>
+        <source>BROWSE</source>
+        <translation>Naviguer...</translation>
+    </message>
+    <message>
+        <source>OK_BTN</source>
+        <translation>&amp;OK</translation>
+    </message>
+    <message>
+        <source>CANCEL_BTN</source>
+        <translation>A&amp;nnuler</translation>
+    </message>
+    <message>
+        <source>HELP_BTN</source>
+        <translation>&amp;Aide</translation>
+    </message>
+    <message>
+        <source>LOAD_TEXTURE_TLT</source>
+        <translation>Ouvrir une Texture</translation>
+    </message>
+</context>
+<context>
+    <name>AdvancedGUI_PipeTShapeDlg</name>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_TITLE</source>
+        <translation>Construction d&apos;un Tuyau en T</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE</source>
+        <translation>Tuyau en T</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_MPIPE</source>
+        <translation>Tuyau principal</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_R</source>
+        <translation>Rayon</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_W</source>
+        <translation>Largeur</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_L</source>
+        <translation>Demi-longueur</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_IPIPE</source>
+        <translation>Tuyau incident</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER</source>
+        <translation>Chanfrein</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER_H</source>
+        <translation>Hauteur</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_CHAMFER_W</source>
+        <translation>Largeur</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_FILLET</source>
+        <translation>Congé</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_HEX</source>
+        <translation>Préparer pour un maillage hexaédrique</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION</source>
+        <translation>Définir la position</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P1</source>
+        <translation>Jonction P1</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P2</source>
+        <translation>Jonction P2</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_P3</source>
+        <translation>Jonction P3</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L1</source>
+        <translation>Nouvelle L1</translation>
+    </message>
+    <message>
+        <source>GEOM_PIPE_TSHAPE_POSITION_LBL_L2</source>
+        <translation>Nouvelle L2</translation>
+    </message>
+</context>
 </TS>
index 29b73920917965e8505f65c1acb1dad263540233..63fb01bf44a90dca3a463cbadd1104a104d39340 100644 (file)
@@ -19,9 +19,9 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-// GEOM GEOMGUI : GUI for Geometry component
-// File   : GeometryGUI.cxx
-// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
+//  GEOM GEOMGUI : GUI for Geometry component
+//  File   : GeometryGUI.cxx
+//  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
 
 #include <Standard_math.hxx>  // E.A. must be included before Python.h to fix compilation on windows
 #include "Python.h"
@@ -151,6 +151,17 @@ SALOMEDS::Study_var GeometryGUI::ClientStudyToStudy (_PTR(Study) theStudy)
   return aDSStudy._retn();
 }
 
+void GeometryGUI::Modified( bool theIsUpdateActions )
+{
+  if( SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() ) ) {
+    if( SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() ) ) {
+      appStudy->Modified();
+      if( theIsUpdateActions )
+        app->updateActions();
+    }
+  }
+}
+
 //=======================================================================
 // function : GeometryGUI::GeometryGUI()
 // purpose  : Constructor
@@ -359,6 +370,9 @@ void GeometryGUI::OnGUIEvent( int id )
   QString libName;
   // find corresponding GUI library
   switch ( id ) {
+  case GEOMOp::OpOriginAndVectors: // MENU BASIC - ORIGIN AND BASE VECTORS
+    createOriginAndBaseVectors(); // internal operation
+    return;
   case GEOMOp::OpImport:           // MENU FILE - IMPORT
   case GEOMOp::OpExport:           // MENU FILE - EXPORT
   case GEOMOp::OpSelectVertex:     // POPUP MENU - SELECT ONLY - VERTEX
@@ -374,7 +388,11 @@ void GeometryGUI::OnGUIEvent( int id )
   case GEOMOp::OpDeflection:       // POPUP MENU - DEFLECTION COEFFICIENT
   case GEOMOp::OpColor:            // POPUP MENU - COLOR
   case GEOMOp::OpTransparency:     // POPUP MENU - TRANSPARENCY
+  case GEOMOp::OpIncrTransparency: // SHORTCUT   - INCREASE TRANSPARENCY
+  case GEOMOp::OpDecrTransparency: // SHORTCUT   - DECREASE TRANSPARENCY
   case GEOMOp::OpIsos:             // POPUP MENU - ISOS
+  case GEOMOp::OpIncrNbIsos:       // SHORTCUT   - INCREASE NB ISOS
+  case GEOMOp::OpDecrNbIsos:       // SHORTCUT   - DECREASE NB ISOS
   case GEOMOp::OpAutoColor:        // POPUP MENU - AUTO COLOR
   case GEOMOp::OpNoAutoColor:      // POPUP MENU - DISABLE AUTO COLOR
   case GEOMOp::OpShowChildren:     // POPUP MENU - SHOW CHILDREN
@@ -403,7 +421,7 @@ void GeometryGUI::OnGUIEvent( int id )
   case GEOMOp::OpVector:           // MENU BASIC - VECTOR
   case GEOMOp::OpPlane:            // MENU BASIC - PLANE
   case GEOMOp::OpCurve:            // MENU BASIC - CURVE
-  case GEOMOp::OpLCS:              // MENU BASIC - REPAIR
+  case GEOMOp::OpLCS:              // MENU BASIC - LOCAL COORDINATE SYSTEM
     libName = "BasicGUI";
     break;
   case GEOMOp::OpBox:              // MENU PRIMITIVE - BOX
@@ -473,6 +491,7 @@ void GeometryGUI::OnGUIEvent( int id )
   case GEOMOp::OpFreeFaces:        // MENU MEASURE - FREE FACES
   case GEOMOp::OpOrientation:      // MENU REPAIR - CHANGE ORIENTATION
   case GEOMOp::OpGlueFaces:        // MENU REPAIR - GLUE FACES
+  case GEOMOp::OpLimitTolerance:   // MENU REPAIR - LIMIT TOLERANCE
   case GEOMOp::OpRemoveExtraEdges: // MENU REPAIR - REMOVE EXTRA EDGES
     libName = "RepairGUI";
     break;
@@ -569,23 +588,54 @@ void GeometryGUI::OnMousePress( SUIT_ViewWindow* w, QMouseEvent* e )
 // function : createGeomAction
 // purpose  :
 //=======================================================================
-void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel, const int accel, const bool toggle  )
+void GeometryGUI::createGeomAction( const int id, const QString& label, const QString& icolabel, 
+                                   const int accel, const bool toggle, const QString& shortcutAction )
 {
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
   QPixmap icon = icolabel.isEmpty() ? resMgr->loadPixmap( "GEOM", tr( (QString( "ICO_" )+label).toLatin1().constData() ), false )
                                     : resMgr->loadPixmap( "GEOM", tr( icolabel.toLatin1().constData() ) );
   createAction( id,
-                tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
-                icon,
-                tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
-                tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
-                accel,
-                application()->desktop(),
-                toggle,
-                this, SLOT( OnGUIEvent() )  );
+               tr( QString( "TOP_%1" ).arg( label ).toLatin1().constData() ),
+               icon,
+               tr( QString( "MEN_%1" ).arg( label ).toLatin1().constData() ),
+               tr( QString( "STB_%1" ).arg( label ).toLatin1().constData() ),
+               accel,
+               application()->desktop(),
+               toggle,
+               this, SLOT( OnGUIEvent() ),
+               shortcutAction );
 }
 
-
+//=======================================================================
+// function : createOriginAndBaseVectors
+// purpose  :
+//=======================================================================
+void GeometryGUI::createOriginAndBaseVectors()
+{
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
+  if( appStudy ) {
+    _PTR(Study) studyDS = appStudy->studyDS();
+    if( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
+      GEOM::GEOM_IBasicOperations_var aBasicOperations = GetGeomGen()->GetIBasicOperations( studyDS->StudyId() );
+      if( !aBasicOperations->_is_nil() ) {
+        SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
+        double aLength = aResourceMgr->doubleValue( "Geometry", "base_vectors_length", 1.0 );
+        GEOM::GEOM_Object_var anOrigin = aBasicOperations->MakePointXYZ( 0.0, 0.0, 0.0 );
+        GEOM::GEOM_Object_var anOX = aBasicOperations->MakeVectorDXDYDZ( aLength, 0.0, 0.0 );
+        GEOM::GEOM_Object_var anOY = aBasicOperations->MakeVectorDXDYDZ( 0.0, aLength, 0.0 );
+        GEOM::GEOM_Object_var anOZ = aBasicOperations->MakeVectorDXDYDZ( 0.0, 0.0, aLength );
+
+        SALOMEDS::Study_var aDSStudy = ClientStudyToStudy( studyDS );
+        GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOrigin, "O" );
+        GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOX, "OX" );
+        GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOY, "OY" );
+        GetGeomGen()->PublishInStudy( aDSStudy, SALOMEDS::SObject::_nil(), anOZ, "OZ" );
+
+        getApp()->updateObjectBrowser( false );
+      }
+    }
+  }
+}
 
 //=======================================================================
 // function : GeometryGUI::initialize()
@@ -611,6 +661,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( GEOMOp::OpVector,     "VECTOR" );
   createGeomAction( GEOMOp::OpPlane,      "PLANE" );
   createGeomAction( GEOMOp::OpLCS,        "LOCAL_CS" );
+  createGeomAction( GEOMOp::OpOriginAndVectors, "ORIGIN_AND_VECTORS" );
 
   createGeomAction( GEOMOp::OpBox,        "BOX" );
   createGeomAction( GEOMOp::OpCylinder,   "CYLINDER" );
@@ -674,6 +725,7 @@ void GeometryGUI::initialize( CAM_Application* app )
 
   createGeomAction( GEOMOp::OpSewing,           "SEWING" );
   createGeomAction( GEOMOp::OpGlueFaces,        "GLUE_FACES" );
+  createGeomAction( GEOMOp::OpLimitTolerance,   "LIMIT_TOLERANCE" );
   createGeomAction( GEOMOp::OpSuppressFaces,    "SUPPRESS_FACES" );
   createGeomAction( GEOMOp::OpSuppressHoles,    "SUPPERSS_HOLES" );
   createGeomAction( GEOMOp::OpShapeProcess,     "SHAPE_PROCESS" );
@@ -735,6 +787,19 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( GEOMOp::OpPointMarker,      "POP_POINT_MARKER" );
 
   createGeomAction( GEOMOp::OpPipeTShape, "PIPETSHAPE" );
+  
+  // Create actions for increase/decrease transparency shortcuts
+  createGeomAction( GEOMOp::OpIncrTransparency, "", "", 0, false, 
+                   "Geometry:Increase transparency");
+  createGeomAction( GEOMOp::OpDecrTransparency, "", "", 0, false, 
+                   "Geometry:Decrease transparency");
+
+  // Create actions for increase/decrease number of isolines
+  createGeomAction( GEOMOp::OpIncrNbIsos, "", "", 0, false, 
+                   "Geometry:Increase number of isolines");
+  createGeomAction( GEOMOp::OpDecrNbIsos, "", "", 0, false, 
+                   "Geometry:Decrease number of isolines");
+
 //   createGeomAction( GEOMOp::OpPipeTShapeGroups, "PIPETSHAPEGROUPS" );
   //@@ insert new functions before this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@ do not remove this line @@//
 
@@ -762,6 +827,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( GEOMOp::OpVector,  basicId, -1 );
   createMenu( GEOMOp::OpPlane,   basicId, -1 );
   createMenu( GEOMOp::OpLCS,     basicId, -1 );
+  createMenu( GEOMOp::OpOriginAndVectors, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
   createMenu( GEOMOp::OpBox,       primId, -1 );
@@ -859,6 +925,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( GEOMOp::OpSuppressHoles,   repairId, -1 );
   createMenu( GEOMOp::OpSewing,          repairId, -1 );
   createMenu( GEOMOp::OpGlueFaces,       repairId, -1 );
+  createMenu( GEOMOp::OpLimitTolerance,  repairId, -1 );
   createMenu( GEOMOp::OpAddPointOnEdge,  repairId, -1 );
   //createMenu( GEOMOp::OpFreeBoundaries,  repairId, -1 );
   //createMenu( GEOMOp::OpFreeFaces,       repairId, -1 );
@@ -930,6 +997,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createTool( GEOMOp::OpVector,  basicTbId );
   createTool( GEOMOp::OpPlane,   basicTbId );
   createTool( GEOMOp::OpLCS,     basicTbId );
+  createTool( GEOMOp::OpOriginAndVectors, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
   createTool( GEOMOp::OpBox,       primTbId );
@@ -1056,7 +1124,8 @@ void GeometryGUI::initialize( CAM_Application* app )
   mgr->insert( action(  GEOMOp::OpDeflection ), -1, -1 ); // deflection
   mgr->setRule( action( GEOMOp::OpDeflection ), "selcount>0 and isVisible and client='OCCViewer'", QtxPopupMgr::VisibleRule );
   mgr->insert( action(  GEOMOp::OpPointMarker ), -1, -1 ); // point marker
-  mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg( GEOM_POINT ), QtxPopupMgr::VisibleRule );
+  //mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and $typeid in {%1}" ).arg(GEOM_POINT ), QtxPopupMgr::VisibleRule );
+  mgr->setRule( action( GEOMOp::OpPointMarker ), QString( "selcount>0 and ( $typeid in {%1} or compoundOfVertices=true ) " ).arg(GEOM::VERTEX).arg(GEOM::COMPOUND), QtxPopupMgr::VisibleRule );
   mgr->insert( separator(), -1, -1 );     // -----------
   mgr->insert( action(  GEOMOp::OpAutoColor ), -1, -1 ); // auto color
   mgr->setRule( action( GEOMOp::OpAutoColor ), autoColorPrefix + " and isAutoColor=false", QtxPopupMgr::VisibleRule );
@@ -1137,7 +1206,7 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
     PyErr_Print();
   else
     {
-      PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom","New Entity","Other");
+      PyObject* result=PyObject_CallMethod( pluginsmanager, (char*)"initialize", (char*)"isss",1,"geom",tr("MEN_NEW_ENTITY").toStdString().c_str(),tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
       if(result==NULL)
         PyErr_Print();
       Py_XDECREF(result);
@@ -1198,6 +1267,20 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
   if ( viewMenu )
     connect( viewMenu, SIGNAL( aboutToShow() ), this, SLOT( onViewAboutToShow() ) );
 
+  // 0020836 (Basic vectors and origin)
+  SUIT_ResourceMgr* aResourceMgr = SUIT_Session::session()->resourceMgr();
+  if( aResourceMgr->booleanValue( "Geometry", "auto_create_base_objects", false ) ) {
+    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
+    if( appStudy ) {
+      _PTR(Study) studyDS = appStudy->studyDS();
+      if( studyDS ) {
+        _PTR(SComponent) aSComponent = studyDS->FindComponent("GEOM");
+        if( !aSComponent ) // create objects automatically only if there is no GEOM component
+          createOriginAndBaseVectors();
+      }
+    }
+  }
+
   return true;
 }
 
@@ -1460,21 +1543,21 @@ void GeometryGUI::createPreferences()
   const int nbQuantities = 8;
   int prec[nbQuantities], ii = 0;
   prec[ii++] = addPreference( tr( "GEOM_PREF_length_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
+                             LightApp_Preferences::IntSpin, "Geometry", "length_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_angle_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
+                              LightApp_Preferences::IntSpin, "Geometry", "angle_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_len_tol_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
+                              LightApp_Preferences::IntSpin, "Geometry", "len_tol_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_ang_tol_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
+                              LightApp_Preferences::IntSpin, "Geometry", "ang_tol_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_weight_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
+                              LightApp_Preferences::IntSpin, "Geometry", "weight_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_density_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
+                             LightApp_Preferences::IntSpin, "Geometry", "density_precision" );
   prec[ii++] = addPreference( tr( "GEOM_PREF_parametric_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
+                              LightApp_Preferences::IntSpin, "Geometry", "parametric_precision" );
   prec[ii  ] = addPreference( tr( "GEOM_PREF_param_tol_precision" ), precGroup,
-                            LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
+                             LightApp_Preferences::IntSpin, "Geometry", "param_tol_precision" );
 
   // Set property for precision value for spinboxes
   for ( ii = 0; ii < nbQuantities; ii++ ){
@@ -1541,6 +1624,18 @@ void GeometryGUI::createPreferences()
 
   setPreferenceProperty( markerScale, "strings", aMarkerScaleValuesList );
   setPreferenceProperty( markerScale, "indexes", aMarkerScaleIndicesList );
+
+  int originGroup = addPreference( tr( "PREF_GROUP_ORIGIN_AND_BASE_VECTORS" ), tabId );
+  setPreferenceProperty( originGroup, "columns", 2 );
+
+  int baseVectorsLength = addPreference( tr( "PREF_BASE_VECTORS_LENGTH" ), originGroup,
+                                         LightApp_Preferences::DblSpin, "Geometry", "base_vectors_length" );
+  setPreferenceProperty( baseVectorsLength, "min", 0.01 );
+  setPreferenceProperty( baseVectorsLength, "max", 1000 );
+
+  addPreference( tr( "PREF_AUTO_CREATE" ), originGroup,
+                 LightApp_Preferences::Bool, "Geometry", "auto_create_base_objects" );
+
 }
 
 void GeometryGUI::preferencesChanged( const QString& section, const QString& param )
index 87e0086b6671655261bbf6c97f9309149196f91e..4e4dd392155b0a3b366671f115c8b5c7abf717d6 100644 (file)
@@ -87,6 +87,8 @@ public:
   static CORBA::Object_var    ClientSObjectToObject (_PTR(SObject) theSObject);
   static SALOMEDS::Study_var  ClientStudyToStudy (_PTR(Study) theStudy);
 
+  static void                 Modified( bool = true );
+
   GEOM_Client&                GetShapeReader()    { return myShapeReader; }
 
   // Get active dialog box
@@ -147,12 +149,15 @@ private:
   GEOMGUI*                    getLibrary( const QString& libraryName );
   void                        createGeomAction( const int id, const QString& po_id,
                                                 const QString& icon_id = QString(""),
-                                                const int key = 0, const bool toggle = false );
+                                                const int key = 0, const bool toggle = false,
+                                               const QString& shortcutAction = QString() );
   void                        createPopupItem( const int, const QString& clients, const QString& types,
                                                const bool isSingle = false, const int isVisible = -1,
                                                const bool isExpandAll = false, const bool isOCC = false,
                                                const int parentId = -1 );
 
+  void                        createOriginAndBaseVectors();
+
 public:
   static GEOM::GEOM_Gen_var   myComponentGeom;   // GEOM engine!!!
 
index 9c10e1f407a07378b6e7b6e6fb885b0ae158ea63..ce4f9edbd3ca98adf9784049bb73eca2b3c3946d 100644 (file)
@@ -40,10 +40,14 @@ namespace GEOMOp {
     OpDeflection        = 1200,   // POPUP MENU - DEFLECTION COEFFICIENT
     OpColor             = 1201,   // POPUP MENU - COLOR
     OpTransparency      = 1202,   // POPUP MENU - TRANSPARENCY
-    OpIsos              = 1203,   // POPUP MENU - ISOS
-    OpAutoColor         = 1204,   // POPUP MENU - AUTO COLOR
-    OpNoAutoColor       = 1205,   // POPUP MENU - DISABLE AUTO COLOR
-    OpPointMarker       = 1206,   // POPUP MENU - POINT MARKER
+    OpIncrTransparency  = 1203,   // SHORTCUT   - INCREASE TRANSPARENCY
+    OpDecrTransparency  = 1204,   // SHORTCUT   - DECREASE TRANSPARENCY
+    OpIsos              = 1205,   // POPUP MENU - ISOS
+    OpIncrNbIsos        = 1206,   // SHORTCUT   - INCREASE NB ISOS
+    OpDecrNbIsos        = 1207,   // SHORTCUT   - DECREASE NB ISOS
+    OpAutoColor         = 1208,   // POPUP MENU - AUTO COLOR
+    OpNoAutoColor       = 1209,   // POPUP MENU - DISABLE AUTO COLOR
+    OpPointMarker       = 1210,   // POPUP MENU - POINT MARKER
     OpShowChildren      = 1250,   // POPUP MENU - SHOW CHILDREN
     OpHideChildren      = 1251,   // POPUP MENU - HIDE CHILDREN
     OpRename            = 1252,   // POPUP MENU - RENAME
@@ -68,6 +72,7 @@ namespace GEOMOp {
     OpPlane             = 3006,   // MENU NEW ENTITY - BASIC - PLANE
     OpCurve             = 3007,   // MENU NEW ENTITY - BASIC - CURVE
     OpLCS               = 3008,   // MENU NEW ENTITY - BASIC - LOCAL COORDINATE SYSTEM
+    OpOriginAndVectors  = 3009,   // MENU NEW ENTITY - BASIC - ORIGIN AND BASE VECTORS
     // PrimitiveGUI --------------//--------------------------------
     OpBox               = 3100,   // MENU NEW ENTITY - PRIMITIVES - BOX
     OpCylinder          = 3101,   // MENU NEW ENTITY - PRIMITIVES - CYLINDER
@@ -130,6 +135,7 @@ namespace GEOMOp {
     OpOrientation       = 4009,   // MENU REPAIR - CHANGE ORIENTATION
     OpGlueFaces         = 4010,   // MENU REPAIR - GLUE FACES
     OpRemoveExtraEdges  = 4011,   // MENU REPAIR - REMOVE EXTRA EDGES
+    OpLimitTolerance    = 4012,   // MENU REPAIR - LIMIT TOLERANCE
     // MeasureGUI ----------------//--------------------------------
     OpProperties        = 5000,   // MENU MEASURES - PROPERTIES
     OpCenterMass        = 5001,   // MENU MEASURES - CENTRE OF MASS
@@ -159,6 +165,6 @@ namespace GEOMOp {
 //     OpPipeTShapeGroups  = 10002,  // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
     //@@ insert new functions before this line @@ do not remove this line @@//
   };
-} 
+}
 
 #endif // GEOMETRYGUI_OPERATIONS_H
index f33fa29b9cd2578ed87815834cbd27a021a122bc..6f0adcf50bb8e4615d87ac8c349ccc274a2e89d5 100755 (executable)
@@ -69,24 +69,31 @@ Standard_Integer GEOMImpl_3DSketcherDriver::Execute(TFunction_Logbook& log) cons
   TopoDS_Shape aShape;
 
   Handle(TColStd_HArray1OfReal) aCoordsArray = aCI.GetCoordinates();
-
-  BRepBuilderAPI_MakePolygon aMakePoly;
   int anArrayLength = aCoordsArray->Length();
-  double x, y, z;
-  gp_Pnt aPnt;
-  for (int i = 0; i <=(anArrayLength - 3); i+=3) {
-    x = aCoordsArray->Value(i+1);
-    y = aCoordsArray->Value(i+2);
-    z = aCoordsArray->Value(i+3);
-    aPnt = gp_Pnt(x, y, z);
-    aMakePoly.Add(aPnt);
+
+  std::list<gp_Pnt> points;
+  
+  for (int i = 0; i <= (anArrayLength-3); i += 3) {
+    gp_Pnt aPnt = gp_Pnt(aCoordsArray->Value(i+1), aCoordsArray->Value(i+2), aCoordsArray->Value(i+3));
+    if (points.empty() || aPnt.Distance(points.back()) > gp::Resolution())
+      points.push_back(aPnt);
   }
-  if ( anArrayLength == 3) { // Only Start Point
-    BRepBuilderAPI_MakeVertex mkVertex (aPnt);
+
+  if ( points.size() == 1) { // Only Start Point
+    BRepBuilderAPI_MakeVertex mkVertex (points.back());
     aShape = mkVertex.Shape();
   }
-  else { // Make Wire
-    if (aCoordsArray->Value(1) == x && aCoordsArray->Value(2) == y && aCoordsArray->Value(3) == z)
+  else if ( points.size() > 1) { // Make Wire
+    BRepBuilderAPI_MakePolygon aMakePoly;
+    std::list<gp_Pnt>::iterator it;
+    for (it = points.begin(); it != points.end(); ++it) {
+      aMakePoly.Add(*it);
+    }
+
+    if (points.size() > 2 && 
+       points.back().X() == points.front().X() && 
+       points.back().Y() == points.front().Y() && 
+       points.back().Z() == points.front().Z())
       aMakePoly.Close();
     
     if (aMakePoly.IsDone())
index 6c0a67f7f24f36d2219b14524818f103648c9e07..24123d0b7106c3b98a1a999441a0a49acc1c92ac 100644 (file)
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-//  File   : GEOMImpl_Fillet1d.cxx
-//  Module : GEOMImpl
-//
-#include "GEOMImpl_Fillet1d.hxx"
-
-#include <BRep_Tool.hxx>
-#include <BRepAdaptor_Curve.hxx>
-#include <BRepBuilderAPI_MakeEdge.hxx>
-#include <ElCLib.hxx>
-#include <ElSLib.hxx>
-#include <gp_Circ.hxx>
-#include <Geom2d_Line.hxx>
-#include <Geom2dAPI_ProjectPointOnCurve.hxx>
-#include <Geom2dAPI_InterCurveCurve.hxx>
-#include <GeomAPI_ProjectPointOnCurve.hxx>
-#include <GeomProjLib.hxx>
-#include <Geom_Circle.hxx>
-#include <Precision.hxx>
-#include <TColStd_ListIteratorOfListOfReal.hxx>
-
-/**
- * class GEOMImpl_Fillet1d
- */
-
-
-//=======================================================================
-//function : Constructor
-//purpose  : 
-//=======================================================================
-GEOMImpl_Fillet1d::GEOMImpl_Fillet1d(const TopoDS_Edge& theEdge1,
-                                     const TopoDS_Edge& theEdge2,
-                                     const gp_Pln& thePlane)
-: myEdgesExchnged( Standard_False )
-{
-  myPlane = new Geom_Plane(thePlane);
-
-  BRepAdaptor_Curve aBAC1(theEdge1);
-  BRepAdaptor_Curve aBAC2(theEdge2);
-  if (aBAC1.GetType() < aBAC2.GetType()) 
-  { // first curve must be more complicated
-    myEdge1 = theEdge2;
-    myEdge2 = theEdge1;
-    myEdgesExchnged = Standard_True;
-  }   
-  else
-  {
-    myEdge1 = theEdge1;
-    myEdge2 = theEdge2;
-  }
-
-  Handle(Geom_Curve) aCurve1 = BRep_Tool::Curve(myEdge1, myStart1, myEnd1);
-  Handle(Geom_Curve) aCurve2 = BRep_Tool::Curve(myEdge2, myStart2, myEnd2);
-
-  myCurve1 = GeomProjLib::Curve2d(aCurve1, myStart1, myEnd1, myPlane);
-  myCurve2 = GeomProjLib::Curve2d(aCurve2, myStart2, myEnd2, myPlane);
-
-  while (myCurve1->IsPeriodic() && myStart1 >= myEnd1)
-    myEnd1 += myCurve1->Period();
-  while (myCurve2->IsPeriodic() && myStart2 >= myEnd2)
-    myEnd2 += myCurve2->Period();
-  if (aBAC1.GetType() == aBAC2.GetType()) 
-  {
-    if (myEnd2 - myStart2 < myEnd1 - myStart1) 
-    { // first curve must be parametrically shorter
-      TopoDS_Edge anEdge = myEdge1;
-      myEdge1 = myEdge2;
-      myEdge2 = anEdge;
-      Handle(Geom2d_Curve) aCurve = myCurve1;
-      myCurve1 = myCurve2;
-      myCurve2 = aCurve;
-      Standard_Real a = myStart1;
-      myStart1 = myStart2;
-      myStart2 = a;
-      a = myEnd1;
-      myEnd1 = myEnd2;
-      myEnd2 = a;
-      myEdgesExchnged = Standard_True;
-    }
-  }
-}
-
-//=======================================================================
-//function : isRadiusIntersected
-//purpose  : local function
-//=======================================================================
-static Standard_Boolean isRadiusIntersected(const Handle(Geom2d_Curve)& theCurve,
-                                            const gp_Pnt2d theStart,
-                                            const gp_Pnt2d theEnd,
-                                            const Standard_Boolean theStartConnected) 
-{
-  const Standard_Real aTol = Precision::Confusion();
-  const Standard_Real anAngTol = Precision::Angular();
-  Geom2dAPI_InterCurveCurve anInter(theCurve, new Geom2d_Line(theStart,
-    gp_Dir2d(gp_Vec2d(theStart, theEnd))), aTol);
-  Standard_Integer a;
-  gp_Pnt2d aPoint;
-  for(a = anInter.NbPoints(); a > 0; a--) 
-  {
-    aPoint = anInter.Point(a);
-    if ( aPoint.Distance(theStart) < aTol && !theStartConnected )
-      return Standard_True;
-    if (aPoint.Distance(theEnd) < aTol * 200)
-      return Standard_True;
-    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) 
-      return Standard_True;
-  }
-  Handle(Geom2d_Curve) aCurve;
-  for(a = anInter.NbSegments(); a > 0; a--) 
-  {
-    anInter.Segment(a, aCurve);
-    aPoint = aCurve->Value(aCurve->FirstParameter());
-    if (aPoint.Distance(theStart) < aTol) 
-      if (!theStartConnected) 
-        return Standard_True;
-    if (aPoint.Distance(theEnd) < aTol) 
-      return Standard_True;
-    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) 
-      return Standard_True;
-    aPoint = aCurve->Value(aCurve->LastParameter());
-    if (aPoint.Distance(theStart) < aTol) 
-      if (!theStartConnected) 
-        return Standard_True;
-    if (aPoint.Distance(theEnd) < aTol) 
-      return Standard_True;
-    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) 
-      return Standard_True;
-  }
-  return Standard_False;
-}
-
-
-//=======================================================================
-//function : fillPoint
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1d::fillPoint(GEOMImpl_Fillet1dPoint* thePoint) 
-{
-  gp_Pnt2d aPoint;
-  gp_Vec2d aVec;
-  const Standard_Real aTol = Precision::Confusion();
-  myCurve1->D1(thePoint->GetParam(), aPoint, aVec);
-  if (aVec.SquareMagnitude() < aTol) 
-    return;
-  
-  gp_Vec2d aPerp(((myStartSide)?-1:1) * aVec.Y(), ((myStartSide)?1:-1) * aVec.X());
-  aPerp.Normalize();
-  aPerp.Multiply(myRadius);
-  gp_Pnt2d aCenter = aPoint.Translated(aPerp);
-  thePoint->SetCenter(aCenter);
-
-  // on the intersection point
-  Standard_Boolean aValid = Standard_True;
-  Geom2dAPI_ProjectPointOnCurve aProjInt(aPoint, myCurve2);
-  if (aProjInt.NbPoints() && aPoint.Distance(aProjInt.NearestPoint()) < aTol) 
-    aValid = Standard_False;
-  else 
-    aValid = !isRadiusIntersected(myCurve2, aPoint, aCenter, Standard_True);
-  
-  Geom2dAPI_ProjectPointOnCurve aProj(aCenter, myCurve2);
-  Standard_Integer a, aNB = aProj.NbPoints();
-  for(a = aNB; a > 0; a--) 
-  {
-    if (aPoint.Distance(aProj.Point(a)) < aTol) 
-      continue;
-    
-    Standard_Boolean aValid2 = aValid;
-    if (aValid2) 
-      aValid2 = !isRadiusIntersected(myCurve1, aCenter, aProj.Point(a), Standard_False);
-
-    // checking the right parameter
-    Standard_Real aParam = aProj.Parameter(a);
-    while(myCurve2->IsPeriodic() && aParam < myStart2)
-      aParam += myCurve2->Period();
-
-    thePoint->AddValue(aProj.Distance(a) * aProj.Distance(a) - myRadius * myRadius,
-                       (aParam >= myStart2 && aParam <= myEnd2 && aValid2));
-    if (fabs(fabs(aProj.Distance(a)) - myRadius) < aTol)
-      thePoint->SetParam2(aParam);
-  }
-}
-
-//=======================================================================
-//function : fillDiff
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1d::fillDiff(GEOMImpl_Fillet1dPoint* thePoint, Standard_Real theDiffStep, Standard_Boolean theFront) 
-{
-  GEOMImpl_Fillet1dPoint* aDiff =
-    new GEOMImpl_Fillet1dPoint(thePoint->GetParam() + (theFront?(theDiffStep):(-theDiffStep)));
-  fillPoint(aDiff);
-  if (!thePoint->ComputeDifference(aDiff))
-  {
-    aDiff->SetParam(thePoint->GetParam() + (theFront?(-theDiffStep):(theDiffStep)));
-    fillPoint(aDiff);
-    thePoint->ComputeDifference(aDiff);
-  }
-  delete aDiff;
-}
-
-//=======================================================================
-//function : Perform
-//purpose  : 
-//=======================================================================
-Standard_Boolean GEOMImpl_Fillet1d::Perform(const Standard_Real theRadius) 
-{
-  myResultParams.Clear();
-  myResultOrientation.Clear();
-
-  Standard_Real aNBSteps = 100;
-  Geom2dAdaptor_Curve aGAC(myCurve1);
-  switch (aGAC.GetType()) 
-  {
-    case GeomAbs_Line:
-      aNBSteps = 2;
-      break;
-    case GeomAbs_Circle:
-      aNBSteps = 4;
-      break;
-    case GeomAbs_Ellipse:
-      aNBSteps = 5;
-      break;
-    case GeomAbs_BezierCurve:
-    case GeomAbs_BSplineCurve:
-      aNBSteps = 2 + aGAC.Degree() * aGAC.NbPoles();
-      break;
-    default: // unknown: maximum
-      aNBSteps = 100;
-  }
-
-  myRadius = theRadius;
-  Standard_Real aParam, aStep, aDStep;
-  aStep = (myEnd1 - myStart1) / aNBSteps;
-  aDStep = aStep/1000.;
-
-  Standard_Integer aCycle;
-  for(aCycle = 2, myStartSide = Standard_False; aCycle; myStartSide = !myStartSide, aCycle--) 
-  {
-    GEOMImpl_Fillet1dPoint *aLeft = NULL, *aRight = NULL;
-    
-    for(aParam = myStart1 + aStep; aParam < myEnd1 || fabs(myEnd1 - aParam) < Precision::Confusion(); aParam += aStep) 
-    {
-      if (!aLeft) 
-      {
-        aLeft = new GEOMImpl_Fillet1dPoint(aParam - aStep);
-        fillPoint(aLeft);
-        fillDiff(aLeft, aDStep, Standard_True);
-      }
-      
-      aRight = new GEOMImpl_Fillet1dPoint(aParam);
-      fillPoint(aRight);
-      fillDiff(aRight, aDStep, Standard_False);
-      
-      aLeft->FilterPoints(aRight);
-      performNewton(aLeft, aRight);
-      
-      delete aLeft;
-      aLeft = aRight;
-    }
-    delete aLeft;
-  }
-
-  if (myResultParams.Extent()) 
-    return Standard_True;
-  
-  return Standard_False;
-}
-
-//=======================================================================
-//function : processPoint
-//purpose  : 
-//=======================================================================
-Standard_Boolean GEOMImpl_Fillet1d::processPoint(GEOMImpl_Fillet1dPoint* theLeft,
-                                                 GEOMImpl_Fillet1dPoint* theRight,
-                                                 Standard_Real           theParameter) 
-{
-  if (theParameter >= theLeft->GetParam() && theParameter < theRight->GetParam()) 
-  {
-    Standard_Real aDX = theRight->GetParam() - theLeft->GetParam();
-    if (theParameter - theLeft->GetParam() < aDX / 100.) 
-    {
-      theParameter = theLeft->GetParam() + aDX / 100.;
-    }
-    if (theRight->GetParam() - theParameter < aDX / 100.)
-    {
-      theParameter = theRight->GetParam() - aDX / 100.;
-    }
-
-    GEOMImpl_Fillet1dPoint* aPoint1 = theLeft->Copy();
-    GEOMImpl_Fillet1dPoint* aPoint2 = new GEOMImpl_Fillet1dPoint(theParameter);
-    fillPoint(aPoint2);
-    fillDiff(aPoint2, aDX / 1000., Standard_True);
-    
-    aPoint1->FilterPoints(aPoint2);
-    performNewton(aPoint1, aPoint2);
-    aPoint2->FilterPoints(theRight);
-    performNewton(aPoint2, theRight);
-
-    delete aPoint1;
-    delete aPoint2;
-    return Standard_True;
-  }
-
-  return Standard_False;
-}
-
-//=======================================================================
-//function : performNewton
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1d::performNewton(GEOMImpl_Fillet1dPoint* theLeft,
-                                      GEOMImpl_Fillet1dPoint* theRight)
-{
-  Standard_Integer a;
-  // check the left: if this is solution store it and remove it from the list of researching points of theLeft
-  a = theLeft->HasSolution(myRadius);
-  if (a) 
-  {
-    if (theLeft->IsValid(a)) 
-    {
-      myResultParams.Append(theLeft->GetParam());
-      myResultOrientation.Append(myStartSide);
-    }
-    return;
-  }
-
-  Standard_Real aDX = theRight->GetParam() - theLeft->GetParam();
-  if ( aDX < Precision::Confusion() / 1000000.) 
-  {
-    a = theRight->HasSolution(myRadius);
-    if (a)
-      if (theRight->IsValid(a)) 
-      {
-        myResultParams.Append(theRight->GetParam());
-        myResultOrientation.Append(myStartSide);
-      }
-    return;
-  }
-
-  for(a = 1; a <= theLeft->GetNBValues(); a++) 
-  {
-    Standard_Integer aNear = theLeft->GetNear(a);
-    
-    Standard_Real aA = (theRight->GetDiff(aNear) - theLeft->GetDiff(a)) / aDX;
-    Standard_Real aB = theLeft->GetDiff(a) - aA * theLeft->GetParam();
-    Standard_Real aC = theLeft->GetValue(a) - theLeft->GetDiff(a) * theLeft->GetParam() + 
-                       aA * theLeft->GetParam() * theLeft->GetParam() / 2.0;
-    Standard_Real aDet = aB * aB - 2.0 * aA * aC;
-
-    if ( fabs(aDet) < gp::Resolution() )
-      continue;
-    
-    if (fabs(aA) < Precision::Confusion()) 
-    { // linear case
-      if (fabs(aB) > 10e-20) 
-      {
-        Standard_Real aX0 = - aC / aB; // use extremum
-        if (aX0 > theLeft->GetParam() && aX0 < theRight->GetParam())
-          processPoint(theLeft, theRight, aX0);
-      }
-      else 
-      {
-        processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise
-      }
-    } 
-    else
-    {
-      if (fabs(aB) > fabs(aDet * 1000000.)) 
-      {  // possible floating point operations accurancy errors
-        processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise
-      } 
-      else
-      {
-        if (aDet > 0) 
-        { // two solutions
-          aDet = sqrt(aDet);
-          Standard_Boolean aRes = processPoint(theLeft, theRight, (- aB + aDet) / aA);
-          if (!aRes) 
-            aRes = processPoint(theLeft, theRight, (- aB - aDet) / aA);
-          if (!aRes) 
-            processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise
-        } 
-        else 
-        {
-          Standard_Real aX0 = - aB / aA; // use extremum
-          if (aX0 > theLeft->GetParam() && aX0 < theRight->GetParam())
-            processPoint(theLeft, theRight, aX0);
-          else 
-            processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise
-        }
-      }
-    }
-  }
-}
-
-//=======================================================================
-//function : Result
-//purpose  : 
-//=======================================================================
-TopoDS_Edge GEOMImpl_Fillet1d::Result(const gp_Pnt& thePoint,
-                                      TopoDS_Edge& theEdge1,
-                                      TopoDS_Edge& theEdge2) 
-{
-  TopoDS_Edge aResult;
-  gp_Pnt2d aTargetPoint2d;
-  Standard_Real aX, aY;
-  ElSLib::PlaneParameters(myPlane->Pln().Position(), thePoint, aX, aY);
-  aTargetPoint2d.SetCoord(aX, aY);
-   
-  // choose the nearest circle
-  Standard_Real aDistance, aP;
-  GEOMImpl_Fillet1dPoint *aNearest;
-  Standard_Integer a;
-  TColStd_ListIteratorOfListOfReal anIter(myResultParams);
-  for(aNearest = NULL, a = 1; anIter.More(); anIter.Next(), a++) 
-  {
-    myStartSide = (myResultOrientation.Value(a)) ? Standard_True : Standard_False;
-    GEOMImpl_Fillet1dPoint *aPoint = new GEOMImpl_Fillet1dPoint(anIter.Value());
-    fillPoint(aPoint);
-    if (!aPoint->HasSolution(myRadius)) 
-      continue;
-    aP = fabs(aPoint->GetCenter().Distance(aTargetPoint2d) - myRadius);
-    if (!aNearest || aP < aDistance) 
-    {
-      aNearest = aPoint;
-      aDistance = aP;
-    } 
-    else 
-    {
-      delete aPoint;
-    }
-   }
-   
-  if (!aNearest) 
-     return aResult;
-   
-  // create circle edge
-  gp_Pnt aCenter = ElSLib::PlaneValue(aNearest->GetCenter().X(),
-                                      aNearest->GetCenter().Y(),
-                                      myPlane->Pln().Position());
-  Handle(Geom_Circle) aCircle =
-    new Geom_Circle(gp_Ax2(aCenter, myPlane->Pln().Axis().Direction()), myRadius);
-  gp_Pnt2d aPoint2d1, aPoint2d2;
-  myCurve1->D0(aNearest->GetParam(), aPoint2d1);
-  myCurve2->D0(aNearest->GetParam2(), aPoint2d2);
-  gp_Pnt aPoint1 = ElSLib::PlaneValue(aPoint2d1.X(), aPoint2d1.Y(), myPlane->Pln().Position());
-  gp_Pnt aPoint2 = ElSLib::PlaneValue(aPoint2d2.X(), aPoint2d2.Y(), myPlane->Pln().Position());
-
-  GeomAPI_ProjectPointOnCurve aProj(thePoint, aCircle);
-  Standard_Real aTarGetParam = aProj.LowerDistanceParameter();
-  gp_Pnt aPointOnCircle = aProj.NearestPoint();
-
-  // Check extrema point manually, because there is a bug in Open CASCADE
-  //  in calculation of nearest point to a circle near the parameter 0.0
-  gp_Pnt p0 = ElCLib::Value(0.0, aCircle->Circ());
-  if (p0.Distance(thePoint) < aPointOnCircle.Distance(thePoint))
-  {
-     aTarGetParam = 0.0;
-     aPointOnCircle = p0;
-  }
-
-  aProj.Perform(aPoint1);
-  Standard_Real aParam1 = aProj.LowerDistanceParameter();
-    aProj.Perform(aPoint2);
-  Standard_Real aParam2 = aProj.LowerDistanceParameter();
-  Standard_Boolean aIsOut = ((aParam1 < aTarGetParam && aParam2 < aTarGetParam) || 
-                             (aParam1 > aTarGetParam && aParam2 > aTarGetParam));
-  if (aParam1 > aParam2) 
-    aIsOut = !aIsOut;
-  BRepBuilderAPI_MakeEdge aBuilder(aCircle->Circ(),
-                                   aIsOut ? aParam2 : aParam1,
-                                   aIsOut? aParam1 : aParam2);
-  aResult = aBuilder.Edge();
-
-  // divide edges
-  Standard_Real aStart, anEnd;
-  Handle(Geom_Curve) aCurve = BRep_Tool::Curve(myEdge1, aStart, anEnd);
-  gp_Vec aDir;
-  aCurve->D1(aNearest->GetParam(), aPoint1, aDir);
-
-  gp_Vec aCircleDir;
-  aCircle->D1(aParam1, aPoint1, aCircleDir);
-  if ((aCircleDir.Angle(aDir) > PI / 2.0) ^ aIsOut)
-    aStart = aNearest->GetParam();
-  else
-    anEnd = aNearest->GetParam();
-
-  //Check the case when start and end are identical. This happens
-  //when the edge decreases to size 0. Old ww5 allows such
-  //cases. So we are again bug compatible
-  if (fabs(aStart - anEnd) < Precision::PConfusion()/*gp::Resolution()*/)
-    anEnd = 0.01;
-  //Divide edge
-  BRepBuilderAPI_MakeEdge aDivider1(aCurve, aStart, anEnd);
-  if (myEdgesExchnged) 
-    theEdge2 = aDivider1.Edge();
-  else 
-    theEdge1 = aDivider1.Edge();
-
-
-  aCurve = BRep_Tool::Curve(myEdge2, aStart, anEnd);
-  aCurve->D1(aNearest->GetParam2(), aPoint2, aDir);
-   
-  aCircle->D1(aParam2, aPoint2, aCircleDir);
-  if ((aCircleDir.Angle(aDir) > PI / 2.0) ^ (!aIsOut))
-    aStart = aNearest->GetParam2();
-  else
-    anEnd = aNearest->GetParam2();
-
-  //Check the case when start and end are identical. This happens
-  //when the edge decreases to size 0. Old ww5 allows such
-  //cases. So we are again bug compatible
-  if (fabs(aStart - anEnd) < Precision::PConfusion()/*gp::Resolution()*/)
-    anEnd = 0.01;
-  BRepBuilderAPI_MakeEdge aDivider2(aCurve, aStart, anEnd);
-  if (myEdgesExchnged) 
-    theEdge1 = aDivider2.Edge();
-  else 
-    theEdge2 = aDivider2.Edge();
-
-  delete aNearest;
-  return aResult;
-}
-
-//=======================================================================
-//function : AddValue
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1dPoint::AddValue(Standard_Real theValue, Standard_Boolean theValid) 
-{
-  Standard_Integer a;
-  for(a = 1; a <= myV.Length(); a++) 
-  {
-    if (theValue < myV.Value(a)) 
-    {
-      myV.InsertBefore(a, theValue);
-      myValid.InsertBefore(a, (Standard_Integer)theValid);
-      return;
-    }
-  }
-  myV.Append(theValue);
-  myValid.Append((Standard_Integer)theValid);
-}
-
-//=======================================================================
-//function : ComputeDifference
-//purpose  : 
-//=======================================================================
-Standard_Boolean GEOMImpl_Fillet1dPoint::ComputeDifference(GEOMImpl_Fillet1dPoint* thePoint) 
-{
-  Standard_Integer a;
-  Standard_Boolean aDiffsSet = (myD.Length() != 0);
-  Standard_Real aDX = thePoint->GetParam() - myParam, aDY;
-  if (thePoint->myV.Length() == myV.Length()) 
-  { // absolutely the same points
-    for(a = 1; a <= myV.Length(); a++) 
-    {
-      aDY = thePoint->myV.Value(a) - myV.Value(a);
-      if ( aDiffsSet ) 
-        myD.SetValue(a, fabs(aDX) > gp::Resolution() ? (aDY/aDX) : 0);
-      else
-        myD.Append( fabs(aDX) > gp::Resolution() ? (aDY/aDX) : 0);
-    }
-    return Standard_True;
-  }
-  // between the diffeerent points searching for nearest analogs
-  Standard_Integer b;
-  for(a = 1; a <= myV.Length(); a++) 
-  {
-    for(b = 1; b <= thePoint->myV.Length(); b++) 
-    {
-      if (b == 1 || fabs(thePoint->myV.Value(b) - myV.Value(a)) < fabs(aDY))
-        aDY = thePoint->myV.Value(b) - myV.Value(a);
-    }
-    if (aDiffsSet) 
-    {
-      if ( fabs(aDX) > gp::Resolution() && fabs(aDY / aDX) < fabs(myD.Value(a)))
-        myD.SetValue(a, aDY / aDX);
-      else
-        myD.SetValue(a, 0);
-    } 
-    else 
-    {
-      myD.Append( fabs(aDX) > gp::Resolution() ? aDY/aDX : 0);
-    }
-  }
-  
-  return Standard_False;
-}
-
-//=======================================================================
-//function : FilterPoints
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1dPoint::FilterPoints(GEOMImpl_Fillet1dPoint* thePoint) 
-{
-  Standard_Integer a, b;
-  TColStd_SequenceOfReal aDiffs;
-  Standard_Real aY, aY2, aDX = thePoint->GetParam() - myParam;
-  for(a = 1; a <= myV.Length(); a++) 
-  {
-    // searching for near point from thePoint
-    Standard_Integer aNear = 0;
-    Standard_Real aDiff = aDX * 10000.;
-    aY = myV.Value(a) + myD.Value(a) * aDX;
-    for(b = 1; b <= thePoint->myV.Length(); b++) 
-    {
-      // calculate hypothesis value of the Y2 with the constant first and second derivative
-      aY2 = aY + aDX * (thePoint->myD.Value(b) - myD.Value(a)) / 2.0;
-      if (aNear == 0 || fabs(aY2 - thePoint->myV.Value(b)) < fabs(aDiff)) 
-      {
-        aNear = b;
-        aDiff = aY2 - thePoint->myV.Value(b);
-      }
-    }//for b...
-
-    if (aNear) 
-    {
-      if (myV.Value(a) * thePoint->myV.Value(aNear) > 0) 
-      {// the same sign at the same sides of the interval
-        if (myV.Value(a) * myD.Value(a) > 0) 
-        {
-          if (fabs(myD.Value(a)) > Precision::Confusion()) 
-            aNear = 0;
-        } 
-        else 
-        {
-          if (fabs(myV.Value(a)) > fabs(thePoint->myV.Value(aNear)))
-            if (thePoint->myV.Value(aNear) * thePoint->myD.Value(aNear) < 0 &&
-                fabs(thePoint->myD.Value(aNear)) > Precision::Confusion())
-            {
-              aNear = 0;
-            }
-        }
-      }
-    }
-
-    if (aNear) 
-    {
-      if (myV.Value(a) * thePoint->myV.Value(aNear) > 0) 
-      {
-        if ((myV.Value(a) + myD.Value(a) * aDX) * myV.Value(a) > Precision::Confusion() &&
-        (thePoint->myV.Value(aNear) + thePoint->myD.Value(aNear) * aDX) * thePoint->myV.Value(aNear) > Precision::Confusion())
-        {
-          aNear = 0;
-        }
-      }
-    }
-    
-    if (aNear)
-    {
-      if (  fabs(aDX) < gp::Resolution() || fabs(aDiff / aDX) > 1.e+7) 
-      {
-        aNear = 0;
-      }
-    }
-
-    if (aNear == 0) 
-    {  // there is no near: remove it from the list
-      myV.Remove(a);
-      myD.Remove(a);
-      myValid.Remove(a);
-      a--;
-    } 
-    else 
-    {
-      Standard_Boolean aFound = Standard_False;
-      for(b = 1; b <= myNear.Length(); b++) 
-      {
-        if (myNear.Value(b) == aNear) 
-        {
-          if (fabs(aDiffs.Value(b)) < fabs(aDiff)) 
-          { // return this 'near'
-            aFound = Standard_True;
-            myV.Remove(a);
-            myD.Remove(a);
-            myValid.Remove(a);
-            a--;
-            break;
-          } 
-          else 
-          { // remove the old 'near'
-            myV.Remove(b);
-            myD.Remove(b);
-            myValid.Remove(b);
-            myNear.Remove(b);
-            aDiffs.Remove(b);
-            a--;
-            break;
-          }
-        }
-      }//for b...
-      if (!aFound) 
-      {
-        myNear.Append(aNear);
-        aDiffs.Append(aDiff);
-      }
-    }
-  }//for a...
-}
-
-//=======================================================================
-//function : Copy
-//purpose  : 
-//=======================================================================
-GEOMImpl_Fillet1dPoint* GEOMImpl_Fillet1dPoint::Copy() 
-{
-  GEOMImpl_Fillet1dPoint* aCopy = new GEOMImpl_Fillet1dPoint(myParam);
-  Standard_Integer a;
-  for(a = 1; a <= myV.Length(); a++) 
-  {
-    aCopy->myV.Append(myV.Value(a));
-    aCopy->myD.Append(myD.Value(a));
-    aCopy->myValid.Append(myValid.Value(a));
-  }
-  return aCopy;
-}
-
-//=======================================================================
-//function : HasSolution
-//purpose  : 
-//=======================================================================
-Standard_Integer GEOMImpl_Fillet1dPoint::HasSolution(const Standard_Real theRadius) 
-{
-  Standard_Integer a;
-  for(a = 1; a <= myV.Length(); a++) 
-  {
-    if (fabs(sqrt(fabs(fabs(myV.Value(a)) + theRadius * theRadius)) - theRadius) < Precision::Confusion() / 10.) 
-      return a;
-  }
-  return 0;
-}
-
-//=======================================================================
-//function : RemoveSolution
-//purpose  : 
-//=======================================================================
-void GEOMImpl_Fillet1dPoint::RemoveSolution(Standard_Integer theIndex)
-{
-  myV.Remove(theIndex);
-  myD.Remove(theIndex);
-  myValid.Remove(theIndex);
-  myNear.Remove(theIndex);
-}
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE\r
+//\r
+//  This library is free software; you can redistribute it and/or\r
+//  modify it under the terms of the GNU Lesser General Public\r
+//  License as published by the Free Software Foundation; either\r
+//  version 2.1 of the License.\r
+//\r
+//  This library is distributed in the hope that it will be useful,\r
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+//  Lesser General Public License for more details.\r
+//\r
+//  You should have received a copy of the GNU Lesser General Public\r
+//  License along with this library; if not, write to the Free Software\r
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
+//\r
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
+//\r
+\r
+//  File   : GEOMImpl_Fillet1d.cxx\r
+//  Module : GEOMImpl\r
+//\r
+#include "GEOMImpl_Fillet1d.hxx"\r
+\r
+#include <BRep_Tool.hxx>\r
+#include <BRepAdaptor_Curve.hxx>\r
+#include <BRepBuilderAPI_MakeEdge.hxx>\r
+#include <ElCLib.hxx>\r
+#include <ElSLib.hxx>\r
+#include <gp_Circ.hxx>\r
+#include <Geom2d_Line.hxx>\r
+#include <Geom2dAPI_ProjectPointOnCurve.hxx>\r
+#include <Geom2dAPI_InterCurveCurve.hxx>\r
+#include <GeomAPI_ProjectPointOnCurve.hxx>\r
+#include <GeomProjLib.hxx>\r
+#include <Geom_Circle.hxx>\r
+#include <Precision.hxx>\r
+#include <TColStd_ListIteratorOfListOfReal.hxx>\r
+\r
+/**\r
+ * class GEOMImpl_Fillet1d\r
+ */\r
+\r
+\r
+//=======================================================================\r
+//function : Constructor\r
+//purpose  : \r
+//=======================================================================\r
+GEOMImpl_Fillet1d::GEOMImpl_Fillet1d(const TopoDS_Edge& theEdge1,\r
+                                     const TopoDS_Edge& theEdge2,\r
+                                     const gp_Pln& thePlane)\r
+: myEdgesExchnged( Standard_False )\r
+{\r
+  myPlane = new Geom_Plane(thePlane);\r
+\r
+  BRepAdaptor_Curve aBAC1(theEdge1);\r
+  BRepAdaptor_Curve aBAC2(theEdge2);\r
+  if (aBAC1.GetType() < aBAC2.GetType()) \r
+  { // first curve must be more complicated\r
+    myEdge1 = theEdge2;\r
+    myEdge2 = theEdge1;\r
+    myEdgesExchnged = Standard_True;\r
+  }   \r
+  else\r
+  {\r
+    myEdge1 = theEdge1;\r
+    myEdge2 = theEdge2;\r
+  }\r
+\r
+  Handle(Geom_Curve) aCurve1 = BRep_Tool::Curve(myEdge1, myStart1, myEnd1);\r
+  Handle(Geom_Curve) aCurve2 = BRep_Tool::Curve(myEdge2, myStart2, myEnd2);\r
+\r
+  myCurve1 = GeomProjLib::Curve2d(aCurve1, myStart1, myEnd1, myPlane);\r
+  myCurve2 = GeomProjLib::Curve2d(aCurve2, myStart2, myEnd2, myPlane);\r
+\r
+  while (myCurve1->IsPeriodic() && myStart1 >= myEnd1)\r
+    myEnd1 += myCurve1->Period();\r
+  while (myCurve2->IsPeriodic() && myStart2 >= myEnd2)\r
+    myEnd2 += myCurve2->Period();\r
\r
+  if (aBAC1.GetType() == aBAC2.GetType()) \r
+  {\r
+    if (myEnd2 - myStart2 < myEnd1 - myStart1) \r
+    { // first curve must be parametrically shorter\r
+      TopoDS_Edge anEdge = myEdge1;\r
+      myEdge1 = myEdge2;\r
+      myEdge2 = anEdge;\r
+      Handle(Geom2d_Curve) aCurve = myCurve1;\r
+      myCurve1 = myCurve2;\r
+      myCurve2 = aCurve;\r
+      Standard_Real a = myStart1;\r
+      myStart1 = myStart2;\r
+      myStart2 = a;\r
+      a = myEnd1;\r
+      myEnd1 = myEnd2;\r
+      myEnd2 = a;\r
+      myEdgesExchnged = Standard_True;\r
+    }\r
+  }\r
+}\r
+\r
+//=======================================================================\r
+//function : isRadiusIntersected\r
+//purpose  : local function\r
+//=======================================================================\r
+static Standard_Boolean isRadiusIntersected(const Handle(Geom2d_Curve)& theCurve,\r
+                                            const gp_Pnt2d theStart,\r
+                                            const gp_Pnt2d theEnd,\r
+                                            const Standard_Boolean theStartConnected) \r
+{\r
+  const Standard_Real aTol = Precision::Confusion();\r
+  const Standard_Real anAngTol = Precision::Angular();\r
+  Geom2dAPI_InterCurveCurve anInter(theCurve, new Geom2d_Line(theStart,\r
+    gp_Dir2d(gp_Vec2d(theStart, theEnd))), aTol);\r
+  Standard_Integer a;\r
+  gp_Pnt2d aPoint;\r
+  for(a = anInter.NbPoints(); a > 0; a--) \r
+  {\r
+    aPoint = anInter.Point(a);\r
+    if ( aPoint.Distance(theStart) < aTol && !theStartConnected )\r
+      return Standard_True;\r
+    if (aPoint.Distance(theEnd) < aTol * 200)\r
+      return Standard_True;\r
+    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) \r
+      return Standard_True;\r
+  }\r
+  Handle(Geom2d_Curve) aCurve;\r
+  for(a = anInter.NbSegments(); a > 0; a--) \r
+  {\r
+    anInter.Segment(a, aCurve);\r
+    aPoint = aCurve->Value(aCurve->FirstParameter());\r
+    if (aPoint.Distance(theStart) < aTol) \r
+      if (!theStartConnected) \r
+        return Standard_True;\r
+    if (aPoint.Distance(theEnd) < aTol) \r
+      return Standard_True;\r
+    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) \r
+      return Standard_True;\r
+    aPoint = aCurve->Value(aCurve->LastParameter());\r
+    if (aPoint.Distance(theStart) < aTol) \r
+      if (!theStartConnected) \r
+        return Standard_True;\r
+    if (aPoint.Distance(theEnd) < aTol) \r
+      return Standard_True;\r
+    if (gp_Vec2d(aPoint, theStart).IsOpposite(gp_Vec2d(aPoint, theEnd), anAngTol)) \r
+      return Standard_True;\r
+  }\r
+  return Standard_False;\r
+}\r
+\r
+\r
+//=======================================================================\r
+//function : fillPoint\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1d::fillPoint(GEOMImpl_Fillet1dPoint* thePoint) \r
+{\r
+  gp_Pnt2d aPoint;\r
+  gp_Vec2d aVec;\r
+  const Standard_Real aTol = Precision::Confusion();\r
+  myCurve1->D1(thePoint->GetParam(), aPoint, aVec);\r
+  if (aVec.SquareMagnitude() < aTol) \r
+    return;\r
+  \r
+  gp_Vec2d aPerp(((myStartSide)?-1:1) * aVec.Y(), ((myStartSide)?1:-1) * aVec.X());\r
+  aPerp.Normalize();\r
+  aPerp.Multiply(myRadius);\r
+  gp_Pnt2d aCenter = aPoint.Translated(aPerp);\r
+  thePoint->SetCenter(aCenter);\r
+\r
+  // on the intersection point\r
+  Standard_Boolean aValid = Standard_True;\r
+  Geom2dAPI_ProjectPointOnCurve aProjInt(aPoint, myCurve2);\r
+  if (aProjInt.NbPoints() && aPoint.Distance(aProjInt.NearestPoint()) < aTol) \r
+    aValid = Standard_False;\r
+  else \r
+    aValid = !isRadiusIntersected(myCurve2, aPoint, aCenter, Standard_True);\r
+  \r
+  Geom2dAPI_ProjectPointOnCurve aProj(aCenter, myCurve2);\r
+  Standard_Integer a, aNB = aProj.NbPoints();\r
+  for(a = aNB; a > 0; a--) \r
+  {\r
+    if (aPoint.Distance(aProj.Point(a)) < aTol) \r
+      continue;\r
+    \r
+    Standard_Boolean aValid2 = aValid;\r
+    if (aValid2) \r
+      aValid2 = !isRadiusIntersected(myCurve1, aCenter, aProj.Point(a), Standard_False);\r
+\r
+    // checking the right parameter\r
+    Standard_Real aParam = aProj.Parameter(a);\r
+    while(myCurve2->IsPeriodic() && aParam < myStart2)\r
+      aParam += myCurve2->Period();\r
+\r
+    thePoint->AddValue(aProj.Distance(a) * aProj.Distance(a) - myRadius * myRadius,\r
+                       (aParam >= myStart2 && aParam <= myEnd2 && aValid2));\r
+    if (fabs(fabs(aProj.Distance(a)) - myRadius) < aTol)\r
+      thePoint->SetParam2(aParam);\r
+  }\r
+}\r
+\r
+//=======================================================================\r
+//function : fillDiff\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1d::fillDiff(GEOMImpl_Fillet1dPoint* thePoint, Standard_Real theDiffStep, Standard_Boolean theFront) \r
+{\r
+  GEOMImpl_Fillet1dPoint* aDiff =\r
+    new GEOMImpl_Fillet1dPoint(thePoint->GetParam() + (theFront?(theDiffStep):(-theDiffStep)));\r
+  fillPoint(aDiff);\r
+  if (!thePoint->ComputeDifference(aDiff))\r
+  {\r
+    aDiff->SetParam(thePoint->GetParam() + (theFront?(-theDiffStep):(theDiffStep)));\r
+    fillPoint(aDiff);\r
+    thePoint->ComputeDifference(aDiff);\r
+  }\r
+  delete aDiff;\r
+}\r
+\r
+//=======================================================================\r
+//function : Perform\r
+//purpose  : \r
+//=======================================================================\r
+Standard_Boolean GEOMImpl_Fillet1d::Perform(const Standard_Real theRadius) \r
+{\r
+  myDegreeOfRecursion = 0;\r
+  myResultParams.Clear();\r
+  myResultOrientation.Clear();\r
+\r
+  Standard_Real aNBSteps = 100;\r
+  Geom2dAdaptor_Curve aGAC(myCurve1);\r
+  switch (aGAC.GetType()) \r
+  {\r
+    case GeomAbs_Line:\r
+      aNBSteps = 2;\r
+      break;\r
+    case GeomAbs_Circle:\r
+      aNBSteps = 4;\r
+      break;\r
+    case GeomAbs_Ellipse:\r
+      aNBSteps = 5;\r
+      break;\r
+    case GeomAbs_BezierCurve:\r
+    case GeomAbs_BSplineCurve:\r
+      aNBSteps = 2 + aGAC.Degree() * aGAC.NbPoles();\r
+      break;\r
+    default: // unknown: maximum\r
+      aNBSteps = 100;\r
+  }\r
+\r
+  myRadius = theRadius;\r
+  Standard_Real aParam, aStep, aDStep;\r
+  aStep = (myEnd1 - myStart1) / aNBSteps;\r
+  aDStep = aStep/1000.;\r
+\r
+  Standard_Integer aCycle;\r
+  for(aCycle = 2, myStartSide = Standard_False; aCycle; myStartSide = !myStartSide, aCycle--) \r
+  {\r
+    GEOMImpl_Fillet1dPoint *aLeft = NULL, *aRight = NULL;\r
+    \r
+    for(aParam = myStart1 + aStep; aParam < myEnd1 || fabs(myEnd1 - aParam) < Precision::Confusion(); aParam += aStep) \r
+    {\r
+      if (!aLeft) \r
+      {\r
+        aLeft = new GEOMImpl_Fillet1dPoint(aParam - aStep);\r
+        fillPoint(aLeft);\r
+        fillDiff(aLeft, aDStep, Standard_True);\r
+      }\r
+      \r
+      aRight = new GEOMImpl_Fillet1dPoint(aParam);\r
+      fillPoint(aRight);\r
+      fillDiff(aRight, aDStep, Standard_False);\r
+      \r
+      aLeft->FilterPoints(aRight);\r
+      performNewton(aLeft, aRight);\r
+      \r
+      delete aLeft;\r
+      aLeft = aRight;\r
+    }\r
+    delete aLeft;\r
+  }\r
+\r
+  if (myResultParams.Extent()) \r
+    return Standard_True;\r
+  \r
+  return Standard_False;\r
+}\r
+\r
+//=======================================================================\r
+//function : processPoint\r
+//purpose  : \r
+//=======================================================================\r
+Standard_Boolean GEOMImpl_Fillet1d::processPoint(GEOMImpl_Fillet1dPoint* theLeft,\r
+                                                 GEOMImpl_Fillet1dPoint* theRight,\r
+                                                 Standard_Real           theParameter) \r
+{\r
+  if (theParameter >= theLeft->GetParam() && theParameter < theRight->GetParam()) \r
+  {\r
+    Standard_Real aDX = theRight->GetParam() - theLeft->GetParam();\r
+    if (theParameter - theLeft->GetParam() < aDX / 100.) \r
+    {\r
+      theParameter = theLeft->GetParam() + aDX / 100.;\r
+    }\r
+    if (theRight->GetParam() - theParameter < aDX / 100.)\r
+    {\r
+      theParameter = theRight->GetParam() - aDX / 100.;\r
+    }\r
+\r
+    // Protection on infinite loop.\r
+    myDegreeOfRecursion++;\r
+    Standard_Real diffx = 0.001 * aDX;\r
+    if (myDegreeOfRecursion > 1000)\r
+    {\r
+        diffx *= 10.0;\r
+        if (myDegreeOfRecursion > 10000)\r
+        {\r
+            diffx *= 10.0;\r
+            if (myDegreeOfRecursion > 100000)\r
+            {\r
+                return Standard_True;\r
+            }\r
+        }\r
+    }\r
+\r
+    GEOMImpl_Fillet1dPoint* aPoint1 = theLeft->Copy();\r
+    GEOMImpl_Fillet1dPoint* aPoint2 = new GEOMImpl_Fillet1dPoint(theParameter);\r
+    fillPoint(aPoint2);\r
+    fillDiff(aPoint2, diffx, Standard_True);\r
+    \r
+    aPoint1->FilterPoints(aPoint2);\r
+    performNewton(aPoint1, aPoint2);\r
+    aPoint2->FilterPoints(theRight);\r
+    performNewton(aPoint2, theRight);\r
+\r
+    delete aPoint1;\r
+    delete aPoint2;\r
+    return Standard_True;\r
+  }\r
+\r
+  return Standard_False;\r
+}\r
+\r
+//=======================================================================\r
+//function : performNewton\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1d::performNewton(GEOMImpl_Fillet1dPoint* theLeft,\r
+                                      GEOMImpl_Fillet1dPoint* theRight)\r
+{\r
+  Standard_Integer a;\r
+  // check the left: if this is solution store it and remove it from the list of researching points of theLeft\r
+  a = theLeft->HasSolution(myRadius);\r
+  if (a) \r
+  {\r
+    if (theLeft->IsValid(a)) \r
+    {\r
+      myResultParams.Append(theLeft->GetParam());\r
+      myResultOrientation.Append(myStartSide);\r
+    }\r
+    return;\r
+  }\r
+\r
+  Standard_Real aDX = theRight->GetParam() - theLeft->GetParam();\r
+  if ( aDX < Precision::Confusion() / 1000000.) \r
+  {\r
+    a = theRight->HasSolution(myRadius);\r
+    if (a)\r
+      if (theRight->IsValid(a)) \r
+      {\r
+        myResultParams.Append(theRight->GetParam());\r
+        myResultOrientation.Append(myStartSide);\r
+      }\r
+    return;\r
+  }\r
+\r
+  for(a = 1; a <= theLeft->GetNBValues(); a++) \r
+  {\r
+    Standard_Integer aNear = theLeft->GetNear(a);\r
+    \r
+    Standard_Real aA = (theRight->GetDiff(aNear) - theLeft->GetDiff(a)) / aDX;\r
+    Standard_Real aB = theLeft->GetDiff(a) - aA * theLeft->GetParam();\r
+    Standard_Real aC = theLeft->GetValue(a) - theLeft->GetDiff(a) * theLeft->GetParam() + \r
+                       aA * theLeft->GetParam() * theLeft->GetParam() / 2.0;\r
+    Standard_Real aDet = aB * aB - 2.0 * aA * aC;\r
+\r
+    if ( fabs(aDet) < gp::Resolution() )\r
+      continue;\r
+    \r
+    if (fabs(aA) < Precision::Confusion()) \r
+    { // linear case\r
+      if (fabs(aB) > 10e-20) \r
+      {\r
+        Standard_Real aX0 = - aC / aB; // use extremum\r
+        if (aX0 > theLeft->GetParam() && aX0 < theRight->GetParam())\r
+          processPoint(theLeft, theRight, aX0);\r
+      }\r
+      else \r
+      {\r
+        processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise\r
+      }\r
+    } \r
+    else\r
+    {\r
+      if (fabs(aB) > fabs(aDet * 1000000.)) \r
+      {  // possible floating point operations accurancy errors\r
+        processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise\r
+      } \r
+      else\r
+      {\r
+        if (aDet > 0) \r
+        { // two solutions\r
+          aDet = sqrt(aDet);\r
+          Standard_Boolean aRes = processPoint(theLeft, theRight, (- aB + aDet) / aA);\r
+          if (!aRes) \r
+            aRes = processPoint(theLeft, theRight, (- aB - aDet) / aA);\r
+          if (!aRes) \r
+            processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise\r
+        } \r
+        else \r
+        {\r
+          Standard_Real aX0 = - aB / aA; // use extremum\r
+          if (aX0 > theLeft->GetParam() && aX0 < theRight->GetParam())\r
+            processPoint(theLeft, theRight, aX0);\r
+          else \r
+            processPoint(theLeft, theRight, theLeft->GetParam() + aDX / 2.0); // linear division otherwise\r
+        }\r
+      }\r
+    }\r
+  }\r
+}\r
+\r
+//=======================================================================\r
+//function : Result\r
+//purpose  : \r
+//=======================================================================\r
+TopoDS_Edge GEOMImpl_Fillet1d::Result(const gp_Pnt& thePoint,\r
+                                      TopoDS_Edge& theEdge1,\r
+                                      TopoDS_Edge& theEdge2) \r
+{\r
+  TopoDS_Edge aResult;\r
+  gp_Pnt2d aTargetPoint2d;\r
+  Standard_Real aX, aY;\r
+  ElSLib::PlaneParameters(myPlane->Pln().Position(), thePoint, aX, aY);\r
+  aTargetPoint2d.SetCoord(aX, aY);\r
+   \r
+  // choose the nearest circle\r
+  Standard_Real aDistance, aP;\r
+  GEOMImpl_Fillet1dPoint *aNearest;\r
+  Standard_Integer a;\r
+  TColStd_ListIteratorOfListOfReal anIter(myResultParams);\r
+  for(aNearest = NULL, a = 1; anIter.More(); anIter.Next(), a++) \r
+  {\r
+    myStartSide = (myResultOrientation.Value(a)) ? Standard_True : Standard_False;\r
+    GEOMImpl_Fillet1dPoint *aPoint = new GEOMImpl_Fillet1dPoint(anIter.Value());\r
+    fillPoint(aPoint);\r
+    if (!aPoint->HasSolution(myRadius)) \r
+      continue;\r
+    aP = fabs(aPoint->GetCenter().Distance(aTargetPoint2d) - myRadius);\r
+    if (!aNearest || aP < aDistance) \r
+    {\r
+      aNearest = aPoint;\r
+      aDistance = aP;\r
+    } \r
+    else \r
+    {\r
+      delete aPoint;\r
+    }\r
+   }\r
+   \r
+  if (!aNearest) \r
+     return aResult;\r
+   \r
+  // create circle edge\r
+  gp_Pnt aCenter = ElSLib::PlaneValue(aNearest->GetCenter().X(),\r
+                                      aNearest->GetCenter().Y(),\r
+                                      myPlane->Pln().Position());\r
+  Handle(Geom_Circle) aCircle =\r
+    new Geom_Circle(gp_Ax2(aCenter, myPlane->Pln().Axis().Direction()), myRadius);\r
+  gp_Pnt2d aPoint2d1, aPoint2d2;\r
+  myCurve1->D0(aNearest->GetParam(), aPoint2d1);\r
+  myCurve2->D0(aNearest->GetParam2(), aPoint2d2);\r
+  gp_Pnt aPoint1 = ElSLib::PlaneValue(aPoint2d1.X(), aPoint2d1.Y(), myPlane->Pln().Position());\r
+  gp_Pnt aPoint2 = ElSLib::PlaneValue(aPoint2d2.X(), aPoint2d2.Y(), myPlane->Pln().Position());\r
+\r
+  GeomAPI_ProjectPointOnCurve aProj(thePoint, aCircle);\r
+  Standard_Real aTarGetParam = aProj.LowerDistanceParameter();\r
+  gp_Pnt aPointOnCircle = aProj.NearestPoint();\r
+\r
+  // Check extrema point manually, because there is a bug in Open CASCADE\r
+  //  in calculation of nearest point to a circle near the parameter 0.0\r
+  gp_Pnt p0 = ElCLib::Value(0.0, aCircle->Circ());\r
+  if (p0.Distance(thePoint) < aPointOnCircle.Distance(thePoint))\r
+  {\r
+     aTarGetParam = 0.0;\r
+     aPointOnCircle = p0;\r
+  }\r
+\r
+  aProj.Perform(aPoint1);\r
+  Standard_Real aParam1 = aProj.LowerDistanceParameter();\r
+    aProj.Perform(aPoint2);\r
+  Standard_Real aParam2 = aProj.LowerDistanceParameter();\r
+  Standard_Boolean aIsOut = ((aParam1 < aTarGetParam && aParam2 < aTarGetParam) || \r
+                             (aParam1 > aTarGetParam && aParam2 > aTarGetParam));\r
+  if (aParam1 > aParam2) \r
+    aIsOut = !aIsOut;\r
+  BRepBuilderAPI_MakeEdge aBuilder(aCircle->Circ(),\r
+                                   aIsOut ? aParam2 : aParam1,\r
+                                   aIsOut? aParam1 : aParam2);\r
+  aResult = aBuilder.Edge();\r
+\r
+  // divide edges\r
+  Standard_Real aStart, anEnd;\r
+  Handle(Geom_Curve) aCurve = BRep_Tool::Curve(myEdge1, aStart, anEnd);\r
+  gp_Vec aDir;\r
+  aCurve->D1(aNearest->GetParam(), aPoint1, aDir);\r
+\r
+  gp_Vec aCircleDir;\r
+  aCircle->D1(aParam1, aPoint1, aCircleDir);\r
+  if ((aCircleDir.Angle(aDir) > PI / 2.0) ^ aIsOut)\r
+    aStart = aNearest->GetParam();\r
+  else\r
+    anEnd = aNearest->GetParam();\r
+\r
+  if (fabs(aStart - anEnd) > Precision::Confusion())\r
+  {\r
+      //Divide edge\r
+      BRepBuilderAPI_MakeEdge aDivider1(aCurve, aStart, anEnd);\r
+      if (myEdgesExchnged) \r
+        theEdge2 = aDivider1.Edge();\r
+      else \r
+        theEdge1 = aDivider1.Edge();\r
+  }\r
+\r
+  aCurve = BRep_Tool::Curve(myEdge2, aStart, anEnd);\r
+  aCurve->D1(aNearest->GetParam2(), aPoint2, aDir);\r
+   \r
+  aCircle->D1(aParam2, aPoint2, aCircleDir);\r
+  if ((aCircleDir.Angle(aDir) > PI / 2.0) ^ (!aIsOut))\r
+    aStart = aNearest->GetParam2();\r
+  else\r
+    anEnd = aNearest->GetParam2();\r
+\r
+  if (fabs(aStart - anEnd) > Precision::Confusion())\r
+  {\r
+      BRepBuilderAPI_MakeEdge aDivider2(aCurve, aStart, anEnd);\r
+      if (myEdgesExchnged) \r
+        theEdge1 = aDivider2.Edge();\r
+      else \r
+        theEdge2 = aDivider2.Edge();\r
+  }\r
+\r
+  delete aNearest;\r
+  return aResult;\r
+}\r
+\r
+//=======================================================================\r
+//function : AddValue\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1dPoint::AddValue(Standard_Real theValue, Standard_Boolean theValid) \r
+{\r
+  Standard_Integer a;\r
+  for(a = 1; a <= myV.Length(); a++) \r
+  {\r
+    if (theValue < myV.Value(a)) \r
+    {\r
+      myV.InsertBefore(a, theValue);\r
+      myValid.InsertBefore(a, (Standard_Integer)theValid);\r
+      return;\r
+    }\r
+  }\r
+  myV.Append(theValue);\r
+  myValid.Append((Standard_Integer)theValid);\r
+}\r
+\r
+//=======================================================================\r
+//function : ComputeDifference\r
+//purpose  : \r
+//=======================================================================\r
+Standard_Boolean GEOMImpl_Fillet1dPoint::ComputeDifference(GEOMImpl_Fillet1dPoint* thePoint) \r
+{\r
+  Standard_Integer a;\r
+  Standard_Boolean aDiffsSet = (myD.Length() != 0);\r
+  Standard_Real aDX = thePoint->GetParam() - myParam, aDY;\r
+  if (thePoint->myV.Length() == myV.Length()) \r
+  { // absolutely the same points\r
+    for(a = 1; a <= myV.Length(); a++) \r
+    {\r
+      aDY = thePoint->myV.Value(a) - myV.Value(a);\r
+      if ( aDiffsSet ) \r
+        myD.SetValue(a, fabs(aDX) > gp::Resolution() ? (aDY/aDX) : 0);\r
+      else\r
+        myD.Append( fabs(aDX) > gp::Resolution() ? (aDY/aDX) : 0);\r
+    }\r
+    return Standard_True;\r
+  }\r
+  // between the diffeerent points searching for nearest analogs\r
+  Standard_Integer b;\r
+  for(a = 1; a <= myV.Length(); a++) \r
+  {\r
+    for(b = 1; b <= thePoint->myV.Length(); b++) \r
+    {\r
+      if (b == 1 || fabs(thePoint->myV.Value(b) - myV.Value(a)) < fabs(aDY))\r
+        aDY = thePoint->myV.Value(b) - myV.Value(a);\r
+    }\r
+    if (aDiffsSet) \r
+    {\r
+      if ( fabs(aDX) > gp::Resolution() && fabs(aDY / aDX) < fabs(myD.Value(a)))\r
+        myD.SetValue(a, aDY / aDX);\r
+      else\r
+        myD.SetValue(a, 0);\r
+    } \r
+    else \r
+    {\r
+      myD.Append( fabs(aDX) > gp::Resolution() ? aDY/aDX : 0);\r
+    }\r
+  }\r
+  \r
+  return Standard_False;\r
+}\r
+\r
+//=======================================================================\r
+//function : FilterPoints\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1dPoint::FilterPoints(GEOMImpl_Fillet1dPoint* thePoint) \r
+{\r
+  Standard_Integer a, b;\r
+  TColStd_SequenceOfReal aDiffs;\r
+  Standard_Real aY, aY2, aDX = thePoint->GetParam() - myParam;\r
+  for(a = 1; a <= myV.Length(); a++) \r
+  {\r
+    // searching for near point from thePoint\r
+    Standard_Integer aNear = 0;\r
+    Standard_Real aDiff = aDX * 10000.;\r
+    aY = myV.Value(a) + myD.Value(a) * aDX;\r
+    for(b = 1; b <= thePoint->myV.Length(); b++) \r
+    {\r
+      // calculate hypothesis value of the Y2 with the constant first and second derivative\r
+      aY2 = aY + aDX * (thePoint->myD.Value(b) - myD.Value(a)) / 2.0;\r
+      if (aNear == 0 || fabs(aY2 - thePoint->myV.Value(b)) < fabs(aDiff)) \r
+      {\r
+        aNear = b;\r
+        aDiff = aY2 - thePoint->myV.Value(b);\r
+      }\r
+    }//for b...\r
+\r
+    if (aNear) \r
+    {\r
+      if (myV.Value(a) * thePoint->myV.Value(aNear) > 0) \r
+      {// the same sign at the same sides of the interval\r
+        if (myV.Value(a) * myD.Value(a) > 0) \r
+        {\r
+          if (fabs(myD.Value(a)) > Precision::Confusion()) \r
+            aNear = 0;\r
+        } \r
+        else \r
+        {\r
+          if (fabs(myV.Value(a)) > fabs(thePoint->myV.Value(aNear)))\r
+            if (thePoint->myV.Value(aNear) * thePoint->myD.Value(aNear) < 0 &&\r
+                fabs(thePoint->myD.Value(aNear)) > Precision::Confusion())\r
+            {\r
+              aNear = 0;\r
+            }\r
+        }\r
+      }\r
+    }\r
+\r
+    if (aNear) \r
+    {\r
+      if (myV.Value(a) * thePoint->myV.Value(aNear) > 0) \r
+      {\r
+        if ((myV.Value(a) + myD.Value(a) * aDX) * myV.Value(a) > Precision::Confusion() &&\r
+        (thePoint->myV.Value(aNear) + thePoint->myD.Value(aNear) * aDX) * thePoint->myV.Value(aNear) > Precision::Confusion())\r
+        {\r
+          aNear = 0;\r
+        }\r
+      }\r
+    }\r
+    \r
+    if (aNear)\r
+    {\r
+      if (  fabs(aDX) < gp::Resolution() || fabs(aDiff / aDX) > 1.e+7) \r
+      {\r
+        aNear = 0;\r
+      }\r
+    }\r
+\r
+    if (aNear == 0) \r
+    {  // there is no near: remove it from the list\r
+      myV.Remove(a);\r
+      myD.Remove(a);\r
+      myValid.Remove(a);\r
+      a--;\r
+    } \r
+    else \r
+    {\r
+      Standard_Boolean aFound = Standard_False;\r
+      for(b = 1; b <= myNear.Length(); b++) \r
+      {\r
+        if (myNear.Value(b) == aNear) \r
+        {\r
+          if (fabs(aDiffs.Value(b)) < fabs(aDiff)) \r
+          { // return this 'near'\r
+            aFound = Standard_True;\r
+            myV.Remove(a);\r
+            myD.Remove(a);\r
+            myValid.Remove(a);\r
+            a--;\r
+            break;\r
+          } \r
+          else \r
+          { // remove the old 'near'\r
+            myV.Remove(b);\r
+            myD.Remove(b);\r
+            myValid.Remove(b);\r
+            myNear.Remove(b);\r
+            aDiffs.Remove(b);\r
+            a--;\r
+            break;\r
+          }\r
+        }\r
+      }//for b...\r
+      if (!aFound) \r
+      {\r
+        myNear.Append(aNear);\r
+        aDiffs.Append(aDiff);\r
+      }\r
+    }\r
+  }//for a...\r
+}\r
+\r
+//=======================================================================\r
+//function : Copy\r
+//purpose  : \r
+//=======================================================================\r
+GEOMImpl_Fillet1dPoint* GEOMImpl_Fillet1dPoint::Copy() \r
+{\r
+  GEOMImpl_Fillet1dPoint* aCopy = new GEOMImpl_Fillet1dPoint(myParam);\r
+  Standard_Integer a;\r
+  for(a = 1; a <= myV.Length(); a++) \r
+  {\r
+    aCopy->myV.Append(myV.Value(a));\r
+    aCopy->myD.Append(myD.Value(a));\r
+    aCopy->myValid.Append(myValid.Value(a));\r
+  }\r
+  return aCopy;\r
+}\r
+\r
+//=======================================================================\r
+//function : HasSolution\r
+//purpose  : \r
+//=======================================================================\r
+Standard_Integer GEOMImpl_Fillet1dPoint::HasSolution(const Standard_Real theRadius) \r
+{\r
+  Standard_Integer a;\r
+  for(a = 1; a <= myV.Length(); a++) \r
+  {\r
+    if (fabs(sqrt(fabs(fabs(myV.Value(a)) + theRadius * theRadius)) - theRadius) < Precision::Confusion() / 10.) \r
+      return a;\r
+  }\r
+  return 0;\r
+}\r
+\r
+//=======================================================================\r
+//function : RemoveSolution\r
+//purpose  : \r
+//=======================================================================\r
+void GEOMImpl_Fillet1dPoint::RemoveSolution(Standard_Integer theIndex)\r
+{\r
+  myV.Remove(theIndex);\r
+  myD.Remove(theIndex);\r
+  myValid.Remove(theIndex);\r
+  myNear.Remove(theIndex);\r
+}\r
index 80df11a1edb4e98bddf0c1da5ecd5ac40aff71dd..c12ee156781761ddaa28ae3b616211807f8a2d0d 100644 (file)
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-//  File   : GEOMImpl_Fillet1d.hxx
-//  Module : GEOMImpl
-//
-#ifndef _GEOMImpl_Fillet1d_HeaderFile
-#define _GEOMImpl_Fillet1d_HeaderFile
-
-#include <gp_Pnt.hxx>
-#include <Geom_Plane.hxx>
-#include <Geom2d_Curve.hxx>
-
-#include <TopoDS_Edge.hxx>
-#include <TColStd_ListOfReal.hxx>
-#include <TColStd_SequenceOfReal.hxx>
-#include <TColStd_SequenceOfInteger.hxx>
-
-class GEOMImpl_Fillet1dPoint;
-
-/**
-* GEOMImpl_Fillet1d is 1D fillet algorithm on two planar edges with given radius
-*/
-
-class GEOMImpl_Fillet1d 
-{
-public:
-  //! Constructor
-  //! The fillet 1D algorithm initialise by two edges and plane
-  Standard_EXPORT GEOMImpl_Fillet1d(const TopoDS_Edge& theEdge1,
-                                    const TopoDS_Edge& theEdge2,
-                                    const gp_Pln&      thePlane);
-  //! Makes fillet with given radius
-  //! @returns Standard_True, if at least one result computed
-  Standard_EXPORT Standard_Boolean Perform(const Standard_Real theRadius);
-  //! Returns result fillet edge and modified edges as out parameters
-  Standard_EXPORT TopoDS_Edge Result(const gp_Pnt& thePoint, TopoDS_Edge& theEdge1, TopoDS_Edge& theEdge2);
-
-private:
-  //! private methods
-  void fillPoint(GEOMImpl_Fillet1dPoint*);
-  void fillDiff(GEOMImpl_Fillet1dPoint*, Standard_Real, Standard_Boolean);
-  void performNewton(GEOMImpl_Fillet1dPoint*, GEOMImpl_Fillet1dPoint*);
-  Standard_Boolean processPoint(GEOMImpl_Fillet1dPoint*, GEOMImpl_Fillet1dPoint*, Standard_Real);
-
-
-private:
-  //! private fields
-  TopoDS_Edge myEdge1, myEdge2;
-  Handle(Geom_Plane) myPlane;
-  Handle(Geom2d_Curve) myCurve1, myCurve2;
-  Standard_Real myStart1, myEnd1, myStart2, myEnd2, myRadius;
-  TColStd_ListOfReal myResultParams;
-  TColStd_SequenceOfInteger myResultOrientation;
-  Standard_Boolean myStartSide, myEdgesExchnged;
-};
-
-
-/**
-* GEOMImpl_Fillet1dPoint is an internal class for 1D fillet algorithm
-*   to store and compare computed solutions on edges
-*/
-
-class GEOMImpl_Fillet1dPoint
-{
-public:
-  //! Puiblic methods
-
-  //! Constructor
-  Standard_EXPORT GEOMImpl_Fillet1dPoint(Standard_Real theParam)
-  {myParam = theParam;}
-  
-  //! Make copy of point
-  //!WARNING: Copies only field values: myParam, myV, myD, myValid
-  Standard_EXPORT GEOMImpl_Fillet1dPoint* Copy(); // warning: this is not the full copy! 
-
-  //! Set/Get parameter
-  Standard_EXPORT inline void SetParam(Standard_Real theParam)
-    {myParam = theParam;}
-  Standard_EXPORT inline Standard_Real GetParam() const
-    {return myParam;}
-  Standard_EXPORT inline void SetParam2(const Standard_Real theParam2)
-    {myParam2 = theParam2;}
-  Standard_EXPORT inline Standard_Real GetParam2()
-    { return myParam2 ; }
-
-  //! Returns validity  
-  Standard_EXPORT inline Standard_Boolean IsValid(int theIndex)
-    {return (Standard_Boolean)myValid.Value(theIndex);}
-
-  //! Get values
-  Standard_EXPORT inline Standard_Integer GetNBValues() {return myV.Length();}
-  Standard_EXPORT inline Standard_Real GetValue(Standard_Integer theIndex)
-    {return myV.Value(theIndex);}
-  Standard_EXPORT inline Standard_Real GetDiff(Standard_Integer theIndex)
-    {return myD.Value(theIndex);}
-  Standard_EXPORT inline Standard_Integer GetNear(Standard_Integer theIndex)
-    {return myNear.Value(theIndex);}
-
-  //! Set/Get center point
-  Standard_EXPORT inline void SetCenter(const gp_Pnt2d thePoint)
-    {myCenter = thePoint;}
-  Standard_EXPORT inline const gp_Pnt2d GetCenter()
-    {return myCenter;}
-
-  Standard_EXPORT void AddValue(Standard_Real theValue, Standard_Boolean theIsValid);
-
-  //! compute difference between this and given point
-  Standard_EXPORT Standard_Boolean ComputeDifference(GEOMImpl_Fillet1dPoint*);
-  Standard_EXPORT void FilterPoints(GEOMImpl_Fillet1dPoint*);
-  
-  //! Check is point contains solution and  returns the index of them if any
-  Standard_EXPORT Standard_Integer HasSolution(Standard_Real theRadius); 
-  //! Remove solution by index
-  void RemoveSolution(Standard_Integer theIndex);
-
-private:
-  //! Private fields
-  gp_Pnt2d myCenter;
-  Standard_Real myParam, myParam2;
-  TColStd_SequenceOfReal myV, myD;
-  TColStd_SequenceOfInteger myValid, myNear;
-};
-
-#endif
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE\r
+//\r
+//  This library is free software; you can redistribute it and/or\r
+//  modify it under the terms of the GNU Lesser General Public\r
+//  License as published by the Free Software Foundation; either\r
+//  version 2.1 of the License.\r
+//\r
+//  This library is distributed in the hope that it will be useful,\r
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+//  Lesser General Public License for more details.\r
+//\r
+//  You should have received a copy of the GNU Lesser General Public\r
+//  License along with this library; if not, write to the Free Software\r
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
+//\r
+//  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
+//\r
+\r
+//  File   : GEOMImpl_Fillet1d.hxx\r
+//  Module : GEOMImpl\r
+//\r
+#ifndef _GEOMImpl_Fillet1d_HeaderFile\r
+#define _GEOMImpl_Fillet1d_HeaderFile\r
+\r
+#include <gp_Pnt.hxx>\r
+#include <Geom_Plane.hxx>\r
+#include <Geom2d_Curve.hxx>\r
+\r
+#include <TopoDS_Edge.hxx>\r
+#include <TColStd_ListOfReal.hxx>\r
+#include <TColStd_SequenceOfReal.hxx>\r
+#include <TColStd_SequenceOfInteger.hxx>\r
+\r
+class GEOMImpl_Fillet1dPoint;\r
+\r
+/**\r
+* GEOMImpl_Fillet1d is 1D fillet algorithm on two planar edges with given radius\r
+*/\r
+\r
+class GEOMImpl_Fillet1d \r
+{\r
+public:\r
+  //! Constructor\r
+  //! The fillet 1D algorithm initialise by two edges and plane\r
+  Standard_EXPORT GEOMImpl_Fillet1d(const TopoDS_Edge& theEdge1,\r
+                                    const TopoDS_Edge& theEdge2,\r
+                                    const gp_Pln&      thePlane);\r
+  //! Makes fillet with given radius\r
+  //! @returns Standard_True, if at least one result computed\r
+  Standard_EXPORT Standard_Boolean Perform(const Standard_Real theRadius);\r
+  //! Returns result fillet edge and modified edges as out parameters\r
+  Standard_EXPORT TopoDS_Edge Result(const gp_Pnt& thePoint, TopoDS_Edge& theEdge1, TopoDS_Edge& theEdge2);\r
+\r
+private:\r
+  //! private methods\r
+  void fillPoint(GEOMImpl_Fillet1dPoint*);\r
+  void fillDiff(GEOMImpl_Fillet1dPoint*, Standard_Real, Standard_Boolean);\r
+  void performNewton(GEOMImpl_Fillet1dPoint*, GEOMImpl_Fillet1dPoint*);\r
+  Standard_Boolean processPoint(GEOMImpl_Fillet1dPoint*, GEOMImpl_Fillet1dPoint*, Standard_Real);\r
+\r
+\r
+private:\r
+  //! private fields\r
+  TopoDS_Edge myEdge1, myEdge2;\r
+  Handle(Geom_Plane) myPlane;\r
+  Handle(Geom2d_Curve) myCurve1, myCurve2;\r
+  Standard_Real myStart1, myEnd1, myStart2, myEnd2, myRadius;\r
+  TColStd_ListOfReal myResultParams;\r
+  TColStd_SequenceOfInteger myResultOrientation;\r
+  Standard_Boolean myStartSide, myEdgesExchnged;\r
+  Standard_Integer myDegreeOfRecursion;\r
+};\r
+\r
+\r
+/**\r
+* GEOMImpl_Fillet1dPoint is an internal class for 1D fillet algorithm\r
+*   to store and compare computed solutions on edges\r
+*/\r
+\r
+class GEOMImpl_Fillet1dPoint\r
+{\r
+public:\r
+  //! Puiblic methods\r
+\r
+  //! Constructor\r
+  Standard_EXPORT GEOMImpl_Fillet1dPoint(Standard_Real theParam)\r
+  {myParam = theParam;}\r
+  \r
+  //! Make copy of point\r
+  //!WARNING: Copies only field values: myParam, myV, myD, myValid\r
+  Standard_EXPORT GEOMImpl_Fillet1dPoint* Copy(); // warning: this is not the full copy! \r
+\r
+  //! Set/Get parameter\r
+  Standard_EXPORT inline void SetParam(Standard_Real theParam)\r
+    {myParam = theParam;}\r
+  Standard_EXPORT inline Standard_Real GetParam() const\r
+    {return myParam;}\r
+  Standard_EXPORT inline void SetParam2(const Standard_Real theParam2)\r
+    {myParam2 = theParam2;}\r
+  Standard_EXPORT inline Standard_Real GetParam2()\r
+    { return myParam2 ; }\r
+\r
+  //! Returns validity  \r
+  Standard_EXPORT inline Standard_Boolean IsValid(int theIndex)\r
+    {return (Standard_Boolean)myValid.Value(theIndex);}\r
+\r
+  //! Get values\r
+  Standard_EXPORT inline Standard_Integer GetNBValues() {return myV.Length();}\r
+  Standard_EXPORT inline Standard_Real GetValue(Standard_Integer theIndex)\r
+    {return myV.Value(theIndex);}\r
+  Standard_EXPORT inline Standard_Real GetDiff(Standard_Integer theIndex)\r
+    {return myD.Value(theIndex);}\r
+  Standard_EXPORT inline Standard_Integer GetNear(Standard_Integer theIndex)\r
+    {return myNear.Value(theIndex);}\r
+\r
+  //! Set/Get center point\r
+  Standard_EXPORT inline void SetCenter(const gp_Pnt2d thePoint)\r
+    {myCenter = thePoint;}\r
+  Standard_EXPORT inline const gp_Pnt2d GetCenter()\r
+    {return myCenter;}\r
+\r
+  Standard_EXPORT void AddValue(Standard_Real theValue, Standard_Boolean theIsValid);\r
+\r
+  //! compute difference between this and given point\r
+  Standard_EXPORT Standard_Boolean ComputeDifference(GEOMImpl_Fillet1dPoint*);\r
+  Standard_EXPORT void FilterPoints(GEOMImpl_Fillet1dPoint*);\r
+  \r
+  //! Check is point contains solution and  returns the index of them if any\r
+  Standard_EXPORT Standard_Integer HasSolution(Standard_Real theRadius); \r
+  //! Remove solution by index\r
+  void RemoveSolution(Standard_Integer theIndex);\r
+\r
+private:\r
+  //! Private fields\r
+  gp_Pnt2d myCenter;\r
+  Standard_Real myParam, myParam2;\r
+  TColStd_SequenceOfReal myV, myD;\r
+  TColStd_SequenceOfInteger myValid, myNear;\r
+};\r
+\r
+#endif\r
index 1056f0108e418c9c3bf6514abd67edf6d13bf71e..d173fba61a057e80af79b55e0c12bd60e4c82059 100644 (file)
@@ -235,9 +235,9 @@ Standard_Integer GEOMImpl_Fillet1dDriver::Execute(TFunction_Logbook& log) const
     
     // check if face edges modified,
     // if yes, than map to original edges (from vertex-edges list), because edges can be modified before
-    if (!aModifE1.IsNull() && !aModifE1.IsSame( anEdge1 ))
+    if (aModifE1.IsNull() || !anEdge1.IsSame( aModifE1 ))
       addEdgeRelation( anEdgeToEdgeMap, TopoDS::Edge(aVertexEdges.First()), aModifE1 );
-    if (!aModifE2.IsNull() && !aModifE2.IsSame( anEdge2 ))
+    if (aModifE2.IsNull() || !anEdge2.IsSame( aModifE2 ))
       addEdgeRelation( anEdgeToEdgeMap, TopoDS::Edge(aVertexEdges.Last()), aModifE2 );
   }
 
@@ -251,7 +251,7 @@ Standard_Integer GEOMImpl_Fillet1dDriver::Execute(TFunction_Logbook& log) const
     TopoDS_Shape anEdge = anExp.Current(); 
     if ( !anEdgeToEdgeMap.IsBound( anEdge ) )
       aListOfNewEdge.Append( anEdge );
-    else
+    else if (!anEdgeToEdgeMap.Find( anEdge ).IsNull())
       aListOfNewEdge.Append( anEdgeToEdgeMap.Find( anEdge ) );
   }
 
index 521589d5ba761e3269659521dce143641aa9d1ad..c70a3b04f4483c3a9f20f24d25f9217c06965aef 100644 (file)
@@ -31,6 +31,7 @@
 #include <BRepAlgo.hxx>
 #include <BRepBuilderAPI_MakeFace.hxx>
 #include <BRep_Builder.hxx>
+#include <BRepBuilderAPI_Copy.hxx>
 
 #include <TopAbs.hxx>
 #include <TopoDS.hxx>
@@ -102,7 +103,12 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
   GEOMImpl_IFilling IF (aFunction);
   Handle(GEOM_Function) aShapeFunction = IF.GetShape();
   if (aShapeFunction.IsNull()) return 0;
-  TopoDS_Shape aShape = aShapeFunction->GetValue();
+  TopoDS_Shape aShape;
+
+  BRepBuilderAPI_Copy Copy(aShapeFunction->GetValue());
+  if( Copy.IsDone() )
+    aShape = Copy.Shape();
+
   if (aShape.IsNull() || aShape.ShapeType() != TopAbs_COMPOUND) return 0;
 
   Standard_Integer mindeg = IF.GetMinDeg();
index 5670d099b6c17b7bcebc21ebf5878a5ad80b1542..d59b07203200ee6c6cfedf9b1e1bc73dafe86378 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
 #include <TopoDS_Iterator.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
+#include <TColStd_IndexedDataMapOfTransientTransient.hxx>
+#include <TNaming_CopyShape.hxx>
+#include <ShapeFix_ShapeTolerance.hxx>
+#include <ShapeFix_Shape.hxx>
+#include <BRepCheck_Analyzer.hxx>
+
 #include <Precision.hxx>
 
 #include <StdFail_NotDone.hxx>
@@ -126,6 +131,9 @@ Standard_Integer GEOMImpl_HealingDriver::Execute(TFunction_Logbook& log) const
   case CHANGE_ORIENTATION:
     ChangeOrientation(&HI, anOriginalShape, aShape);
     break;
+  case LIMIT_TOLERANCE:
+    LimitTolerance(&HI, anOriginalShape, aShape);
+    break;
   default:
     return 0;
   }
@@ -465,6 +473,36 @@ Standard_Boolean GEOMImpl_HealingDriver::ChangeOrientation (GEOMImpl_IHealing* t
   return aResult;
 }
 
+//=======================================================================
+//function : LimitTolerance
+//purpose  :
+//=======================================================================
+void GEOMImpl_HealingDriver::LimitTolerance (GEOMImpl_IHealing* theHI,
+                                             const TopoDS_Shape& theOriginalShape,
+                                             TopoDS_Shape& theOutShape) const
+{
+  Standard_Real aTol = theHI->GetTolerance();
+  if (aTol < Precision::Confusion())
+    aTol = Precision::Confusion();
+
+  // 1. Make a copy to prevent the original shape changes.
+  TopoDS_Shape aShapeCopy;
+  TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
+  TNaming_CopyShape::CopyTool(theOriginalShape, aMapTShapes, aShapeCopy);
+
+  // 2. Limit tolerance.
+  ShapeFix_ShapeTolerance aSFT;
+  aSFT.LimitTolerance(aShapeCopy, aTol, aTol, TopAbs_SHAPE);
+
+  // 3. Fix obtained shape.
+  Handle(ShapeFix_Shape) aSfs = new ShapeFix_Shape (aShapeCopy);
+  aSfs->Perform();
+  theOutShape = aSfs->Shape();
+
+  BRepCheck_Analyzer ana (theOutShape, Standard_True);
+  if (!ana.IsValid())
+    StdFail_NotDone::Raise("Non valid shape result");
+}
 
 //=======================================================================
 //function :  GEOMImpl_HealingDriver_Type_
index 344cf770c6972ede94fed26b50ca3696eb6f3880..4e4b44b4999b0f6d1f8165806439f45f3f3b0d49 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 //  File   : GEOMImpl_HealingDriver.hxx
 //  Module : GEOMImpl
-//
+
 #ifndef _GEOMImpl_HealingDriver_HeaderFile
 #define _GEOMImpl_HealingDriver_HeaderFile
 
@@ -156,7 +155,7 @@ Standard_EXPORT ~GEOMImpl_HealingDriver() {};
  //
 Standard_EXPORT friend Handle_Standard_Type& GEOMImpl_HealingDriver_Type_();
 Standard_EXPORT const Handle(Standard_Type)& DynamicType() const  { return STANDARD_TYPE(GEOMImpl_HealingDriver) ; }
-Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const { return (STANDARD_TYPE(GEOMImpl_HealingDriver) == AType || TFunction_Driver::IsKind(AType)); } 
+Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const { return (STANDARD_TYPE(GEOMImpl_HealingDriver) == AType || TFunction_Driver::IsKind(AType)); }
 
 private:
 Standard_Boolean ShapeProcess  ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const;
@@ -167,7 +166,7 @@ Standard_Boolean RemoveHoles   ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS
 Standard_Boolean Sew           ( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const;
 Standard_Boolean AddPointOnEdge( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const;
 Standard_Boolean ChangeOrientation( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const;
-
+void             LimitTolerance( GEOMImpl_IHealing*, const TopoDS_Shape&, TopoDS_Shape& ) const;
 
 };
 
index e1ecb47bdbcd1ded39affa5a95b8432658245d3c..9a86c59fe1eb4e5b44d9ef32831932ad031b5f59 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 //  File   : GEOMImpl_IAdvancedOperations.cxx
 //  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
-//
 
 #include <Standard_Stream.hxx>
 #include "GEOMImpl_Types.hxx"
@@ -31,6 +29,7 @@
 #include "GEOMImpl_IBlocksOperations.hxx"
 #include "GEOMImpl_I3DPrimOperations.hxx"
 #include "GEOMImpl_ILocalOperations.hxx"
+#include "GEOMImpl_IHealingOperations.hxx"
 
 #include "GEOMImpl_Gen.hxx"
 
@@ -81,7 +80,7 @@
  */
 //=============================================================================
 GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngine, int theDocID) :
-  GEOM_IOperations(theEngine, theDocID) 
+  GEOM_IOperations(theEngine, theDocID)
 {
   MESSAGE("GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations");
   myBasicOperations     = new GEOMImpl_IBasicOperations(GetEngine(), GetDocID());
@@ -91,6 +90,7 @@ GEOMImpl_IAdvancedOperations::GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngin
   myBlocksOperations    = new GEOMImpl_IBlocksOperations(GetEngine(), GetDocID());
   my3DPrimOperations    = new GEOMImpl_I3DPrimOperations(GetEngine(), GetDocID());
   myLocalOperations     = new GEOMImpl_ILocalOperations(GetEngine(), GetDocID());
+  myHealingOperations   = new GEOMImpl_IHealingOperations(GetEngine(), GetDocID());
 }
 
 //=============================================================================
@@ -108,6 +108,7 @@ GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations()
   delete myBlocksOperations;
   delete my3DPrimOperations;
   delete myLocalOperations;
+  delete myHealingOperations;
 }
 
 //=============================================================================
@@ -116,9 +117,9 @@ GEOMImpl_IAdvancedOperations::~GEOMImpl_IAdvancedOperations()
  */
 //=============================================================================
 gp_Trsf GEOMImpl_IAdvancedOperations::GetPositionTrsf(double theL1, double theL2,
-                                                     Handle(GEOM_Object) theP1,
-                                                     Handle(GEOM_Object) theP2,
-                                                     Handle(GEOM_Object) theP3)
+                                                      Handle(GEOM_Object) theP1,
+                                                      Handle(GEOM_Object) theP2,
+                                                      Handle(GEOM_Object) theP3)
 {
   // Old Local Coordinates System oldLCS
   gp_Pnt P0(0, 0, 0);
@@ -157,10 +158,10 @@ gp_Trsf GEOMImpl_IAdvancedOperations::GetPositionTrsf(double theL1, double theL2
  */
 //=============================================================================
 bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double& theL2,
-                                                          Handle(GEOM_Object) theP1,
-                                                          Handle(GEOM_Object) theP2,
-                                                          Handle(GEOM_Object) theP3,
-                                                          double theTolerance)
+                                                           Handle(GEOM_Object) theP1,
+                                                           Handle(GEOM_Object) theP2,
+                                                           Handle(GEOM_Object) theP3,
+                                                           double theTolerance)
 {
   SetErrorCode(KO);
   gp_Pnt P1 = BRep_Tool::Pnt(TopoDS::Vertex(theP1->GetValue()));
@@ -193,7 +194,7 @@ bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double
   //
   if (fabs(newL1 - theL1) > Precision::Approximation()) {
     if ( (newL1 * (1 - theTolerance) -theL1 <= Precision::Approximation()) &&
-        (newL1 * (1 + theTolerance) -theL1 >= Precision::Approximation()) ) {
+         (newL1 * (1 + theTolerance) -theL1 >= Precision::Approximation()) ) {
       //            std::cerr << "theL1 = newL1" << std::endl;
       theL1 = newL1;
     } else {
@@ -208,7 +209,7 @@ bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double
   //
   if (fabs(newL2 - theL2) > Precision::Approximation()) {
     if ( (newL2 * (1 - theTolerance) -theL2 <= Precision::Approximation()) &&
-        (newL2 * (1 + theTolerance) -theL2 >= Precision::Approximation()) ) {
+         (newL2 * (1 + theTolerance) -theL2 >= Precision::Approximation()) ) {
       theL2 = newL2;
     } else {
       theL2 = -1;
@@ -228,10 +229,10 @@ bool GEOMImpl_IAdvancedOperations::CheckCompatiblePosition(double& theL1, double
  */
 //=============================================================================
 bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int shapeType,
-                                             double theR1, double theW1, double theL1,
-                                             double theR2, double theW2, double theL2, 
-                                             Handle(TColStd_HSequenceOfTransient) theSeq,
-                                             gp_Trsf aTrsf)
+                                              double theR1, double theW1, double theL1,
+                                              double theR2, double theW2, double theL2,
+                                              Handle(TColStd_HSequenceOfTransient) theSeq,
+                                              gp_Trsf aTrsf)
 {
   SetErrorCode(KO);
 
@@ -244,7 +245,7 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   }
 
   gp_Trsf aTrsfInv = aTrsf.Inverted();
-    
+
   int expectedGroups = 0;
   if (shapeType == TSHAPE_BASIC)
     if (Abs(theR2+theW2-theR1-theW1) <= Precision::Approximation())
@@ -253,10 +254,10 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
       expectedGroups = 11;
   else if (shapeType == TSHAPE_CHAMFER || shapeType == TSHAPE_FILLET)
     expectedGroups = 12;
-    
+
   double aR1Ext = theR1 + theW1;
   double aR2Ext = theR2 + theW2;
-    
+
   /////////////////////////
   //// Groups of Faces ////
   /////////////////////////
@@ -274,26 +275,32 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   BRepBuilderAPI_Transform aTransformationBox(aBox->GetValue(), aTrsf, Standard_False);
   TopoDS_Shape aBoxShapeTrsf = aTransformationBox.Shape();
   aBox->GetLastFunction()->SetValue(aBoxShapeTrsf);
-    
+
   // Get the shell of the box
-  Handle(GEOM_Object) aShell = Handle(GEOM_Object)::DownCast(myShapesOperations->MakeExplode(aBox, TopAbs_SHELL, true)->Value(1));
+  Handle(GEOM_Object) aShell = Handle(GEOM_Object)::DownCast
+    (myShapesOperations->MakeExplode(aBox, TopAbs_SHELL, true)->Value(1));
   aBox->GetLastFunction()->SetDescription("");
   aShell->GetLastFunction()->SetDescription("");
   // Get the common shapes between shell and shape
   Handle(GEOM_Object) aCommonCompound = myBooleanOperations->MakeBoolean (theShape, aShell, 1); // MakeCommon
+  if (aCommonCompound.IsNull()) {
+    SetErrorCode(myBooleanOperations->GetErrorCode());
+    return false;
+  }
   aCommonCompound->GetLastFunction()->SetDescription("");
   // Explode the faces of common shapes => 3 faces
-  Handle(TColStd_HSequenceOfTransient) aCommonFaces = myShapesOperations->MakeExplode(aCommonCompound, TopAbs_FACE, true);
+  Handle(TColStd_HSequenceOfTransient) aCommonFaces =
+    myShapesOperations->MakeExplode(aCommonCompound, TopAbs_FACE, true);
   aCommonCompound->GetLastFunction()->SetDescription("");
   std::list<Handle(GEOM_Object)> aCompoundOfFacesList;
-    
+
   for (int i=0 ; i<= aCommonFaces->Length()-4 ; i+=4) {
     std::list<Handle(GEOM_Object)> aFacesList;
     for (int j = 1 ; j <= 4 ; j++) {
       Handle(GEOM_Object) aFace = Handle(GEOM_Object)::DownCast(aCommonFaces->Value(i+j)); // Junction faces
       if (!aFace.IsNull()) {
-       aFace->GetLastFunction()->SetDescription("");
-       aFacesList.push_back(aFace);
+        aFace->GetLastFunction()->SetDescription("");
+        aFacesList.push_back(aFace);
       }
     }
     Handle(GEOM_Object) aCompoundOfFaces = myShapesOperations->MakeCompound(aFacesList);
@@ -312,44 +319,45 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
     aCompoundOfFacesList.pop_front();
     // == END
     //
-    
-    
+
+
     //     Uncomment the following lines when GetInPlace bug is solved
     //     == BEGIN
-    //         Handle(GEOM_Object) aP1 = myBasicOperations->MakePointXYZ(-theL1, 0, 0);
-    //         Handle(GEOM_Object) aP2 = myBasicOperations->MakePointXYZ(-0, 0, theL2);
-    //         Handle(GEOM_Object) aP3 = myBasicOperations->MakePointXYZ(theL1, 0, 0);
-    //         aP1->GetLastFunction()->SetDescription("");
-    //         aP2->GetLastFunction()->SetDescription("");
-    //         aP3->GetLastFunction()->SetDescription("");
-    //         Handle(GEOM_Object) aV1 = myBasicOperations->MakeVectorDXDYDZ(-1, 0, 0);
-    //         Handle(GEOM_Object) aV2 = myBasicOperations->MakeVectorDXDYDZ(0, 0, 1);
-    //         Handle(GEOM_Object) aV3 = myBasicOperations->MakeVectorDXDYDZ(1, 0, 0);
-    //         aV1->GetLastFunction()->SetDescription("");
-    //         aV2->GetLastFunction()->SetDescription("");
-    //         aV3->GetLastFunction()->SetDescription("");
-    //         Handle(GEOM_Object) aPln1 = myBasicOperations->MakePlanePntVec(aP1, aV1, 2*(theR1+theW1+theL2));
-    //         Handle(GEOM_Object) aPln2 = myBasicOperations->MakePlanePntVec(aP2, aV2, 2*(theR2+theW2));
-    //         Handle(GEOM_Object) aPln3 = myBasicOperations->MakePlanePntVec(aP3, aV3, 2*(theR1+theW1+theL2));
-    //         aPln1->GetLastFunction()->SetDescription("");
-    //         aPln2->GetLastFunction()->SetDescription("");
-    //         aPln3->GetLastFunction()->SetDescription("");
-
-    //         BRepBuilderAPI_Transform aTransformation1(aPln1->GetValue(), aTrsf, Standard_False);
-    //         TopoDS_Shape aTrsf_Shape1 = aTransformation1.Shape();
-    //         aPln1->GetLastFunction()->SetValue(aTrsf_Shape1);
-    //         BRepBuilderAPI_Transform aTransformation2(aPln2->GetValue(), aTrsf, Standard_False);
-    //         TopoDS_Shape aTrsf_Shape2 = aTransformation2.Shape();
-    //         aPln2->GetLastFunction()->SetValue(aTrsf_Shape2);
-    //         BRepBuilderAPI_Transform aTransformation3(aPln3->GetValue(), aTrsf, Standard_False);
-    //         TopoDS_Shape aTrsf_Shape3 = aTransformation3.Shape();
-    //         aPln3->GetLastFunction()->SetValue(aTrsf_Shape3);
+//     Handle(GEOM_Object) aP1 = myBasicOperations->MakePointXYZ(-theL1, 0, 0);
+//     Handle(GEOM_Object) aP2 = myBasicOperations->MakePointXYZ(-0, 0, theL2);
+//     Handle(GEOM_Object) aP3 = myBasicOperations->MakePointXYZ(theL1, 0, 0);
+//     aP1->GetLastFunction()->SetDescription("");
+//     aP2->GetLastFunction()->SetDescription("");
+//     aP3->GetLastFunction()->SetDescription("");
+//     Handle(GEOM_Object) aV1 = myBasicOperations->MakeVectorDXDYDZ(-1, 0, 0);
+//     Handle(GEOM_Object) aV2 = myBasicOperations->MakeVectorDXDYDZ(0, 0, 1);
+//     Handle(GEOM_Object) aV3 = myBasicOperations->MakeVectorDXDYDZ(1, 0, 0);
+//     aV1->GetLastFunction()->SetDescription("");
+//     aV2->GetLastFunction()->SetDescription("");
+//     aV3->GetLastFunction()->SetDescription("");
+//     Handle(GEOM_Object) aPln1 = myBasicOperations->MakePlanePntVec(aP1, aV1, 2*(aR1Ext+theL2));
+//     Handle(GEOM_Object) aPln2 = myBasicOperations->MakePlanePntVec(aP2, aV2, 2*(aR2Ext));
+//     Handle(GEOM_Object) aPln3 = myBasicOperations->MakePlanePntVec(aP3, aV3, 2*(aR1Ext+theL2));
+//     aPln1->GetLastFunction()->SetDescription("");
+//     aPln2->GetLastFunction()->SetDescription("");
+//     aPln3->GetLastFunction()->SetDescription("");
+//
+//     BRepBuilderAPI_Transform aTransformation1(aPln1->GetValue(), aTrsf, Standard_False);
+//     TopoDS_Shape aTrsf_Shape1 = aTransformation1.Shape();
+//     aPln1->GetLastFunction()->SetValue(aTrsf_Shape1);
+//     BRepBuilderAPI_Transform aTransformation2(aPln2->GetValue(), aTrsf, Standard_False);
+//     TopoDS_Shape aTrsf_Shape2 = aTransformation2.Shape();
+//     aPln2->GetLastFunction()->SetValue(aTrsf_Shape2);
+//     BRepBuilderAPI_Transform aTransformation3(aPln3->GetValue(), aTrsf, Standard_False);
+//     TopoDS_Shape aTrsf_Shape3 = aTransformation3.Shape();
+//     aPln3->GetLastFunction()->SetValue(aTrsf_Shape3);
     //     == END
     //
-    
+
     Handle(GEOM_Object) junctionFaces1 = myShapesOperations->GetInPlace(theShape, aPln1);
     if (junctionFaces1.IsNull())
-      junctionFaces1 = myShapesOperations->GetShapesOnShapeAsCompound(aPln1, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
+      junctionFaces1 = myShapesOperations->GetShapesOnShapeAsCompound
+        (aPln1, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
     if (!junctionFaces1.IsNull()) {
       junctionFaces1->GetLastFunction()->SetDescription("");
       junctionFaces1->SetName("JUNCTION_FACE_1");
@@ -362,7 +370,8 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
     }
     Handle(GEOM_Object) junctionFaces2 = myShapesOperations->GetInPlace(theShape, aPln2);
     if (junctionFaces2.IsNull())
-      junctionFaces2 = myShapesOperations->GetShapesOnShapeAsCompound(aPln2, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
+      junctionFaces2 = myShapesOperations->GetShapesOnShapeAsCompound
+        (aPln2, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
     if (!junctionFaces2.IsNull()) {
       junctionFaces2->GetLastFunction()->SetDescription("");
       junctionFaces2->SetName("JUNCTION_FACE_2");
@@ -375,7 +384,8 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
     }
     Handle(GEOM_Object) junctionFaces3 = myShapesOperations->GetInPlace(theShape, aPln3);
     if (junctionFaces3.IsNull())
-      junctionFaces3 = myShapesOperations->GetShapesOnShapeAsCompound(aPln3, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
+      junctionFaces3 = myShapesOperations->GetShapesOnShapeAsCompound
+        (aPln3, theShape, TopAbs_FACE,  GEOMAlgo_ST_ONIN);
     if (!junctionFaces3.IsNull()) {
       junctionFaces3->GetLastFunction()->SetDescription("");
       junctionFaces3->SetName("JUNCTION_FACE_3");
@@ -386,14 +396,17 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
       //        theSeq->Append(aPln3);
       //        return false;
     }
+  // Comment the following lines when GetInPlace bug is solved
+  // == BEGIN
   }
+  //     == END
   /////////////////////////
   //// Groups of Edges ////
   /////////////////////////
   // Result of propagate
 
   Handle(GEOM_Function) aFunction = theShape->GetLastFunction();
-    
+
   TCollection_AsciiString theDesc = aFunction->GetDescription();
   Handle(TColStd_HSequenceOfTransient) aSeqPropagate = myBlocksOperations->Propagate(theShape);
   if (aSeqPropagate.IsNull() || aSeqPropagate->Length() == 0) {
@@ -403,7 +416,7 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   Standard_Integer nbEdges, aNbGroups = aSeqPropagate->Length();
   // Recover previous description to get rid of Propagate dump
   aFunction->SetDescription(theDesc);
-    
+
   bool addGroup;
   bool circularFoundAndAdded = false;
   bool incidentPipeFound = false;
@@ -413,162 +426,161 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   bool flangeFound = false;
   bool flangeFoundAndAdded = false;
   bool chamferOrFilletFound = false;
-    
+
   for (int i=1 ; i<= aNbGroups; i++) {
     addGroup = false;
-    
+
     Handle(GEOM_Object) aGroup = Handle(GEOM_Object)::DownCast(aSeqPropagate->Value(i));
     if(aGroup.IsNull())
       continue;
-      
+
     TopoDS_Shape aGroupShape = aGroup->GetValue();
     BRepBuilderAPI_Transform aTransformationShapeInv(aGroupShape, aTrsfInv, Standard_False);
     TopoDS_Shape aGroupShapeTrsfInv = aTransformationShapeInv.Shape();
-      
+
     TopTools_IndexedMapOfShape anEdgesMap;
     TopExp::MapShapes(aGroupShapeTrsfInv,TopAbs_EDGE, anEdgesMap);
     nbEdges = anEdgesMap.Extent();
 
     if (shapeType == TSHAPE_BASIC) {
       if ((nbEdges == 21) || /*R1Ext = R2Ext*/(nbEdges == 17)){
-       addGroup = true;
-       aGroup->SetName("THICKNESS");
+        addGroup = true;
+        aGroup->SetName("THICKNESS");
       }
       else if (nbEdges == 6) {
-       if (!circularFoundAndAdded) {
-         circularFoundAndAdded = true;
-         addGroup = true;
-         aGroup->SetName("CIRCULAR_QUARTER_PIPE");
-       }
+        if (!circularFoundAndAdded) {
+          circularFoundAndAdded = true;
+          addGroup = true;
+          aGroup->SetName("CIRCULAR_QUARTER_PIPE");
+        }
       }
       else if (nbEdges == 8) {
-       incidentPipeFound = true;
-       mainPipeFound = false;
-       radialFound =false;
-       flangeFound = false;
-          
-       TopExp_Explorer Ex(aGroupShapeTrsfInv,TopAbs_VERTEX);
-       while (Ex.More()) {
-         gp_Pnt aP =  BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
-         double x=aP.X(), y=aP.Y(), z=aP.Z();
-            
-            
-         if ((Abs(x) > aR2Ext + Precision::Confusion()) ||
-             (Abs(y) > aR2Ext + Precision::Confusion())) {
-           incidentPipeFound = false;
-         }
-            
-         if ( z < -Precision::Confusion()) {
-           // length of main pipe
-           mainPipeFound = true;
-           if (!mainPipeFoundAndAdded) {
-             mainPipeFoundAndAdded = true;
-             addGroup = true;
-             aGroup->SetName("HALF_LENGTH_MAIN_PIPE");
-           }
-         }
-            
-         else if (Abs(x) > (theL1-Precision::Confusion())) {
-           // discretisation circulaire
-           radialFound = true;
-           if (!circularFoundAndAdded) {
-             circularFoundAndAdded = true;
-             addGroup = true;
-             aGroup->SetName("CIRCULAR_QUARTER_PIPE");
-           }
-         }
+        incidentPipeFound = true;
+        mainPipeFound = false;
+        radialFound =false;
+        flangeFound = false;
+
+        TopExp_Explorer Ex(aGroupShapeTrsfInv,TopAbs_VERTEX);
+        while (Ex.More()) {
+          gp_Pnt aP =  BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
+          double x=aP.X(), y=aP.Y(), z=aP.Z();
+
+
+          if ((Abs(x) > aR2Ext + Precision::Confusion()) ||
+              (Abs(y) > aR2Ext + Precision::Confusion())) {
+            incidentPipeFound = false;
+          }
+
+          if ( z < -Precision::Confusion()) {
+            // length of main pipe
+            mainPipeFound = true;
+            if (!mainPipeFoundAndAdded) {
+              mainPipeFoundAndAdded = true;
+              addGroup = true;
+              aGroup->SetName("HALF_LENGTH_MAIN_PIPE");
+            }
+          }
+
+          else if (Abs(x) > (theL1-Precision::Confusion())) {
+            // discretisation circulaire
+            radialFound = true;
+            if (!circularFoundAndAdded) {
+              circularFoundAndAdded = true;
+              addGroup = true;
+              aGroup->SetName("CIRCULAR_QUARTER_PIPE");
+            }
+          }
           Ex.Next();
-       }
-       if (incidentPipeFound) {
-         addGroup = true;
-         aGroup->SetName("HALF_LENGTH_INCIDENT_PIPE");
-       }
-       if (!addGroup && (!incidentPipeFound &&
-                         !radialFound &&
-                         !mainPipeFound &&
-                         !flangeFound)) {
-         // Flange (collerette)
-         flangeFound = true;
-         addGroup = true;
-         aGroup->SetName("FLANGE");
-       }
+        }
+        if (incidentPipeFound) {
+          addGroup = true;
+          aGroup->SetName("HALF_LENGTH_INCIDENT_PIPE");
+        }
+        if (!addGroup && (!incidentPipeFound &&
+                          !radialFound &&
+                          !mainPipeFound &&
+                          !flangeFound)) {
+          // Flange (collerette)
+          flangeFound = true;
+          addGroup = true;
+          aGroup->SetName("FLANGE");
+        }
       }
       else
-       continue;
+        continue;
     }
     else if (shapeType == TSHAPE_CHAMFER || shapeType == TSHAPE_FILLET) {
       if (nbEdges == 25) {
-       addGroup = true;
-       aGroup->SetName("THICKNESS");
+        addGroup = true;
+        aGroup->SetName("THICKNESS");
       }
       else if ((nbEdges == 10) || (nbEdges == 6)) {
-       if (!circularFoundAndAdded) {
-         addGroup = true;
-         circularFoundAndAdded = true;
-         aGroup->SetName("CIRCULAR_QUARTER_PIPE");
-       }
+        if (!circularFoundAndAdded) {
+          addGroup = true;
+          circularFoundAndAdded = true;
+          aGroup->SetName("CIRCULAR_QUARTER_PIPE");
+        }
       }
       else if (nbEdges == 8) {
-       incidentPipeFound = true;
-       mainPipeFound = false;
-       flangeFound = false;
-          
-       TopExp_Explorer Ex(aGroupShapeTrsfInv,TopAbs_VERTEX);
-       while (Ex.More()) {
-         gp_Pnt aP =  BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
-         double x=aP.X(), y=aP.Y(), z=aP.Z();
-            
-         // tuy_princ_long_avant & tuy_princ_long_apres
-         bool isMain = (((z < Precision::Confusion()) || (x < Precision::Confusion())) &&
-                        ((y <= aR1Ext + Precision::Confusion()) ||
-                         (y <= -(aR1Ext + Precision::Confusion())) ||
-                         (y <= theR1 + Precision::Confusion()) ||
-                         (y == -(theR1 + Precision::Confusion()))));
-            
-            
-         if (!isMain) {
-           mainPipeFound = false;
-         }
-            
-         // collerette
-         if (z < Precision::Confusion()) {
-           flangeFound = true;
-           if (!flangeFoundAndAdded) {
-             flangeFoundAndAdded = true;
-             addGroup = true;
-             aGroup->SetName("FLANGE");
-           }
-         }
-            
-         // tuyau incident
-         if ((Abs(x) > aR2Ext + Precision::Confusion()) || 
-             (Abs(y) > aR2Ext + Precision::Confusion())) {
-           incidentPipeFound = false;
-         }
-         Ex.Next();
-       }
-       if (mainPipeFound) {
-         addGroup = true;
-         aGroup->SetName("HALF_LENGTH_MAIN_PIPE");
-       }
-       if (incidentPipeFound) {
-         addGroup = true;
-         aGroup->SetName("HALF_LENGTH_INCIDENT_PIPE");
-       }
-       if (!addGroup && (!incidentPipeFound &&
-                         !mainPipeFound &&
-                         !flangeFound &&
-                         !chamferOrFilletFound)) {
-         addGroup = true;
-         chamferOrFilletFound = true;
-         if (shapeType == TSHAPE_CHAMFER)
-           aGroup->SetName("CHAMFER");
-         else
-           aGroup->SetName("FILLET");
-       }
+        incidentPipeFound = true;
+        mainPipeFound = true;
+        flangeFound = false;
+
+        TopExp_Explorer Ex(aGroupShapeTrsfInv,TopAbs_VERTEX);
+        while (Ex.More()) {
+          gp_Pnt aP =  BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
+          double x=aP.X(), y=aP.Y(), z=aP.Z();
+
+          // tuy_princ_long_avant & tuy_princ_long_apres
+          bool isMain = (((z < Precision::Confusion()) || (x < Precision::Confusion())) &&
+                         ((y <= aR1Ext + Precision::Confusion()) ||
+                          (y <= -(aR1Ext + Precision::Confusion())) ||
+                          (y <= theR1 + Precision::Confusion()) ||
+                          (y == -(theR1 + Precision::Confusion()))));
+
+          if (!isMain) {
+            mainPipeFound = false;
+          }
+
+          // collerette
+          if (z < Precision::Confusion()) {
+            flangeFound = true;
+            if (!flangeFoundAndAdded) {
+              flangeFoundAndAdded = true;
+              addGroup = true;
+              aGroup->SetName("FLANGE");
+            }
+          }
+
+          // tuyau incident
+          if ((Abs(x) > aR2Ext + Precision::Confusion()) ||
+              (Abs(y) > aR2Ext + Precision::Confusion())) {
+            incidentPipeFound = false;
+          }
+          Ex.Next();
+        }
+        if (mainPipeFound) {
+          addGroup = true;
+          aGroup->SetName("HALF_LENGTH_MAIN_PIPE");
+        }
+        if (incidentPipeFound) {
+          addGroup = true;
+          aGroup->SetName("HALF_LENGTH_INCIDENT_PIPE");
+        }
+        if (!addGroup && (!incidentPipeFound &&
+                          !mainPipeFound &&
+                          !flangeFound &&
+                          !chamferOrFilletFound)) {
+          addGroup = true;
+          chamferOrFilletFound = true;
+          if (shapeType == TSHAPE_CHAMFER)
+            aGroup->SetName("CHAMFER");
+          else
+            aGroup->SetName("FILLET");
+        }
       }
       else
-       continue;
+        continue;
     }
     // Add group to the list
     if (addGroup)
@@ -579,11 +591,11 @@ bool GEOMImpl_IAdvancedOperations::MakeGroups(Handle(GEOM_Object) theShape, int
   return true;
 }
 
-bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape, 
-                                                          double theR1, double theW1, double theL1,
-                                                          double theR2, double theW2, double theL2,
-                                                          double theH, double theW,
-                                                          double theRF, bool isNormal)
+bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) theShape,
+                                                           double theR1, double theW1, double theL1,
+                                                           double theR2, double theW2, double theL2,
+                                                           double theH, double theW,
+                                                           double theRF, bool isNormal)
 {
   SetErrorCode(KO);
 
@@ -610,10 +622,11 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
   box_i->GetLastFunction()->SetDescription("");
   box_i = myTransformOperations->TranslateDXDYDZ(box_i, -theR2, -theR2, 0);
   box_i->GetLastFunction()->SetDescription("");
-    
+
   Handle(GEOM_Function) aFunction = theShape->GetLastFunction();
   TCollection_AsciiString theDesc = aFunction->GetDescription();
-  Handle(TColStd_HSequenceOfTransient) edges_i = myShapesOperations->GetShapesOnBox(box_i, theShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+  Handle(TColStd_HSequenceOfTransient) edges_i =
+    myShapesOperations->GetShapesOnBox(box_i, theShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
   // Recover previous description to get rid of Propagate dump
   aFunction->SetDescription(theDesc);
   if (edges_i.IsNull() || edges_i->Length() == 0) {
@@ -629,7 +642,8 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
   // search for vertices located on both internal pipes
   aFunction = theShape->GetLastFunction();
   theDesc = aFunction->GetDescription();
-  Handle(TColStd_HSequenceOfTransient) vertices_i = myShapesOperations->GetShapesOnBox(box_i, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
+  Handle(TColStd_HSequenceOfTransient) vertices_i =
+    myShapesOperations->GetShapesOnBox(box_i, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
   // Recover previous description to get rid of Propagate dump
   aFunction->SetDescription(theDesc);
   if (vertices_i.IsNull() || vertices_i->Length() == 0) {
@@ -644,15 +658,15 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     gp_Pnt aP = BRep_Tool::Pnt(aVertex);
     if (Abs(aP.X()) <= Precision::Confusion()) {
       if (Abs(aP.Y()) - theR2 <= Precision::Confusion())
-       vi1 = v;
+        vi1 = v;
     } else if (Abs(aP.Y()) <= Precision::Confusion()) {
       if (Abs(aP.X()) - theR1 <= Precision::Confusion())
-       vi2 = v;
+        vi2 = v;
     }
   }
 
   std::list<Handle(GEOM_Object)> theShapes;
-            
+
   if (isNormal) {
     Handle(GEOM_Object) ve1, ve2;
 
@@ -663,7 +677,8 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     // Common edges on external cylinder
     aFunction = theShape->GetLastFunction();
     theDesc = aFunction->GetDescription();
-    Handle(TColStd_HSequenceOfTransient) edges_e = myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+    Handle(TColStd_HSequenceOfTransient) edges_e =
+      myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
     // Recover previous description to get rid of Propagate dump
     aFunction->SetDescription(theDesc);
     if (edges_e.IsNull() || edges_e->Length() == 0) {
@@ -678,7 +693,8 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     // search for vertices located on both external pipes
     aFunction = theShape->GetLastFunction();
     theDesc = aFunction->GetDescription();
-    Handle(TColStd_HSequenceOfTransient) vertices_e = myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
+    Handle(TColStd_HSequenceOfTransient) vertices_e =
+      myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
     // Recover previous description to get rid of Propagate dump
     aFunction->SetDescription(theDesc);
     if (vertices_e.IsNull() || vertices_e->Length() == 0) {
@@ -692,11 +708,11 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       TopoDS_Vertex aVertex = TopoDS::Vertex(v->GetValue());
       gp_Pnt aP = BRep_Tool::Pnt(aVertex);
       if (Abs(aP.X()) <= Precision::Confusion()) {
-       if (Abs(aP.Y()) - theR2 > Precision::Confusion())
-         ve1 = v;
+        if (Abs(aP.Y()) - theR2 > Precision::Confusion())
+          ve1 = v;
       } else if (Abs(aP.Y()) <= Precision::Confusion()) {
-       if (Abs(aP.X()) - theR2 > Precision::Confusion())
-         ve2 = v;
+        if (Abs(aP.X()) - theR2 > Precision::Confusion())
+          ve2 = v;
       }
     }
     Handle(GEOM_Object) edge_e1, edge_e2;
@@ -706,8 +722,8 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
 #endif
       edge_e1 = myBasicOperations->MakeLineTwoPnt(ve1, vi1);
       if (edge_e1.IsNull()) {
-       SetErrorCode("Edge 1 could not be built");
-       return false;
+        SetErrorCode("Edge 1 could not be built");
+        return false;
       }
     } catch (Standard_Failure) {
       Handle(Standard_Failure) aFail = Standard_Failure::Caught();
@@ -721,15 +737,15 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
 #endif
       edge_e2 = myBasicOperations->MakeLineTwoPnt(ve2, vi2);
       if (edge_e2.IsNull()) {
-       SetErrorCode("Edge 2 could not be built");
-       return false;
+        SetErrorCode("Edge 2 could not be built");
+        return false;
       }
     } catch (Standard_Failure) {
       Handle(Standard_Failure) aFail = Standard_Failure::Caught();
       SetErrorCode(aFail->GetMessageString());
       return false;
     }
-        
+
     edge_e1->GetLastFunction()->SetDescription("");
     edge_e2->GetLastFunction()->SetDescription("");
 
@@ -758,25 +774,28 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     double ZX=0, ZY=0;
     std::vector<int> LX;
     std::vector<int> LY;
-    Handle(GEOM_Object) box_e = my3DPrimOperations->MakeBoxDXDYDZ(theVertCylinderRadius, theVertCylinderRadius, theHoriCylinderRadius);
+    Handle(GEOM_Object) box_e = my3DPrimOperations->MakeBoxDXDYDZ
+      (theVertCylinderRadius, theVertCylinderRadius, theHoriCylinderRadius);
     box_e->GetLastFunction()->SetDescription("");
-    box_e = myTransformOperations->TranslateDXDYDZ(box_e, -theVertCylinderRadius, -theVertCylinderRadius, 0);
+    box_e = myTransformOperations->TranslateDXDYDZ
+      (box_e, -theVertCylinderRadius, -theVertCylinderRadius, 0);
     box_e->GetLastFunction()->SetDescription("");
 
     aFunction = theShape->GetLastFunction();
     theDesc = aFunction->GetDescription();
-    Handle(TColStd_HSequenceOfTransient) extremVertices = myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
+    Handle(TColStd_HSequenceOfTransient) extremVertices =
+      myShapesOperations->GetShapesOnBox(box_e, theShape, TopAbs_VERTEX, GEOMAlgo_ST_ONIN);
     // Recover previous description to get rid of Propagate dump
     aFunction->SetDescription(theDesc);
-        
+
     if (extremVertices.IsNull() || extremVertices->Length() == 0) {
       if (theRF == 0)
-       SetErrorCode("Vertices on chamfer not found");
+        SetErrorCode("Vertices on chamfer not found");
       else
-       SetErrorCode("Vertices on fillet not found");
+        SetErrorCode("Vertices on fillet not found");
       return false;
     }
-        
+
     theShapes.push_back(theShape);
     theShapes.push_back(box_e);
     if (extremVertices->Length() != 6) {
@@ -789,29 +808,29 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       SetErrorCode("Bad number of vertices on chamfer found");
       return false;
     }
-        
+
     for (int i=1; i<=extremVertices->Length(); i++){
       Handle(GEOM_Object) aV = Handle(GEOM_Object)::DownCast(extremVertices->Value(i));
       aV->GetLastFunction()->SetDescription("");
       gp_Pnt aP = BRep_Tool::Pnt(TopoDS::Vertex(aV->GetValue()));
 
       if (Abs(aP.X()) <= Precision::Confusion()) {
-       if (Abs(aP.Y()) - theR2 > Precision::Confusion()) {
-         LX.push_back(i);
-         if  (aP.Z()-ZX > Precision::Confusion()) {
-           ZX = aP.Z();
-           PZX = i;
-         }
-       }
+        if (Abs(aP.Y()) - theR2 > Precision::Confusion()) {
+          LX.push_back(i);
+          if  (aP.Z()-ZX > Precision::Confusion()) {
+            ZX = aP.Z();
+            PZX = i;
+          }
+        }
       }
       else {
-       if (Abs(aP.X()) - theR2 > Precision::Confusion()) {
-         LY.push_back(i);
-         if (aP.Z() - ZY > Precision::Confusion()) {
-           ZY = aP.Z();
-           PZY = i;
-         }
-       }
+        if (Abs(aP.X()) - theR2 > Precision::Confusion()) {
+          LY.push_back(i);
+          if (aP.Z() - ZY > Precision::Confusion()) {
+            ZY = aP.Z();
+            PZY = i;
+          }
+        }
       }
     }
 
@@ -835,7 +854,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       return false;
     }
     Cote_1->GetLastFunction()->SetDescription("");
-        
+
     Handle(GEOM_Object) Cote_2 = myBasicOperations->MakeLineTwoPnt(vi2, P3);
     if (Cote_2.IsNull()) {
       SetErrorCode("Impossible to build edge in thickness");
@@ -852,7 +871,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       return false;
     }
     edge_chan_princ->GetLastFunction()->SetDescription("");
-        
+
     Handle(GEOM_Object) edge_chan_inc = myBlocksOperations->GetEdge(theShape, P2, P4);
     if (edge_chan_inc.IsNull()) {
       SetErrorCode("Impossible to find edge on incident pipe");
@@ -865,7 +884,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     edgeList1.push_back(Cote_1);
     edgeList1.push_back(arete_intersect_int);
     edgeList1.push_back(Cote_2);
-        
+
     //         std::cerr << "Creating wire 1" << std::endl;
     wire_t = myShapesOperations->MakeWire(edgeList1, 1e-7);
     if (wire_t.IsNull()) {
@@ -873,7 +892,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       return false;
     }
     wire_t->GetLastFunction()->SetDescription("");
-        
+
     //         std::cerr << "Creating face 1" << std::endl;
     face_t = myShapesOperations->MakeFace(wire_t, false);
     if (face_t.IsNull()) {
@@ -882,7 +901,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     }
     face_t->GetLastFunction()->SetDescription("");
     theShapes.push_back(face_t);
-          
+
     gp_Pnt aP2 = BRep_Tool::Pnt(TopoDS::Vertex(P2->GetValue()));
     gp_Pnt aP5 = BRep_Tool::Pnt(TopoDS::Vertex(vi1->GetValue()));
     double deltaZ = aP2.Z() - aP5.Z();
@@ -912,7 +931,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       return false;
     }
     Cote_3->GetLastFunction()->SetDescription("");
-        
+
     //         std::cerr << "Creating new line 2 from 2 previous points" << std::endl;
     Handle(GEOM_Object) Cote_4 = myBasicOperations->MakeLineTwoPnt(P6bis, P4);
     if (Cote_4.IsNull()) {
@@ -920,7 +939,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
       return false;
     }
     Cote_4->GetLastFunction()->SetDescription("");
-        
+
     //         std::cerr << "Creating new line 3 from 2 previous points" << std::endl;
     Handle(GEOM_Object) Cote_5 = myBasicOperations->MakeLineTwoPnt(P5bis, P6bis);
     if (Cote_4.IsNull()) {
@@ -929,20 +948,21 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
     }
     Cote_5->GetLastFunction()->SetDescription("");
 
-    std::list<Handle(GEOM_Object)> edgeList2;
-    edgeList2.push_back(edge_chan_inc);
-    edgeList2.push_back(Cote_3);
-    edgeList2.push_back(Cote_5);
-    edgeList2.push_back(Cote_4);
+    //std::list<Handle(GEOM_Object)> edgeList2;
+    //edgeList2.push_back(edge_chan_inc);
+    //edgeList2.push_back(Cote_3);
+    //edgeList2.push_back(Cote_5);
+    //edgeList2.push_back(Cote_4);
     //         std::cerr << "Creating wire 2" << std::endl;
-    wire_t2 = myShapesOperations->MakeWire(edgeList2, 1e-7);
-    if (wire_t2.IsNull()) {
-      SetErrorCode("Impossible to build wire");
-      return false;
-    }
-    wire_t2->GetLastFunction()->SetDescription("");
+    //wire_t2 = myShapesOperations->MakeWire(edgeList2, 1e-7);
+    //if (wire_t2.IsNull()) {
+    //  SetErrorCode("Impossible to build wire");
+    //  return false;
+    //}
+    //wire_t2->GetLastFunction()->SetDescription("");
     //         std::cerr << "Creating face 2" << std::endl;
-    face_t2 = myShapesOperations->MakeFace(wire_t2, false);
+    //face_t2 = myShapesOperations->MakeFace(wire_t2, false);
+    face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, Cote_4, - 2.0*theR2);
     if (face_t2.IsNull()) {
       SetErrorCode("Impossible to build face");
       return false;
@@ -965,7 +985,7 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
   theShapes.push_back(aPlnOZ);
   theShapes.push_back(aPlnOXZ);
 
-
+  // Partition
   Handle(TColStd_HSequenceOfTransient) partitionShapes = new TColStd_HSequenceOfTransient;
   Handle(TColStd_HSequenceOfTransient) theTools = new TColStd_HSequenceOfTransient;
   Handle(TColStd_HSequenceOfTransient) theKeepInside = new TColStd_HSequenceOfTransient;
@@ -979,7 +999,9 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
   if (!isNormal)
     theTools->Append(face_t2);
 
-  Handle(GEOM_Object) Te3 = myBooleanOperations->MakePartition(partitionShapes, theTools, theKeepInside, theRemoveInside, TopAbs_SOLID, false, theMaterials, 0, false);
+  Handle(GEOM_Object) Te3 = myBooleanOperations->MakePartition
+    (partitionShapes, theTools, theKeepInside, theRemoveInside,
+     TopAbs_SOLID, false, theMaterials, 0, false);
   if (Te3.IsNull()) {
     SetErrorCode("Impossible to build partition of TShape");
     //         Handle(GEOM_Object) aCompound = myShapesOperations->MakeCompound(theShapes);
@@ -989,21 +1011,26 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapePartition(Handle(GEOM_Object) t
   }
   Te3->GetLastFunction()->SetDescription("");
 
-
+  // Last verification: result should be a block
+  std::list<GEOMImpl_IBlocksOperations::BCError> errList;
+  if (!myBlocksOperations->CheckCompoundOfBlocks(Te3,errList)) {
+    SetErrorCode("TShape is not a block");
+    return false;
+  }
   TopoDS_Shape aShape = Te3->GetValue();
   theShape->GetLastFunction()->SetValue(aShape);
-    
+
   SetErrorCode(OK);
   return true;
 }
 
 // Mirror and glue faces
-bool GEOMImpl_IAdvancedOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Object) theShape, 
-                                                              double theR1, double theW1, double theL1,
-                                                              double theR2, double theW2, double theL2)
+bool GEOMImpl_IAdvancedOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Object) theShape,
+                                                               double theR1, double theW1, double theL1,
+                                                               double theR2, double theW2, double theL2)
 {
   SetErrorCode(KO);
-    
+
   // Useful values
   double aSize = 2*(theL1 + theL2);
   double aR1Ext = theR1 + theW1;
@@ -1087,8 +1114,8 @@ bool GEOMImpl_IAdvancedOperations::MakePipeTShapeMirrorAndGlue(Handle(GEOM_Objec
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double theL1,
-                                            double theR2, double theW2, double theL2,
-                                            bool theHexMesh)
+                                             double theR2, double theW2, double theL2,
+                                             bool theHexMesh)
 {
   MESSAGE("GEOMImpl_IAdvancedOperations::MakePipeTShape");
   SetErrorCode(KO);
@@ -1126,7 +1153,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double
     SetErrorCode(aFail->GetMessageString());
     return NULL;
   }
-    
+
   if (theHexMesh) {
     if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2))
       return NULL;
@@ -1141,8 +1168,15 @@ GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double
     /*
      * Get the groups: BEGIN
      */
-    if (!MakeGroups(aShape, TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+    try {
+      if (!MakeGroups(aShape, TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+        return NULL;
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
+    }
 
     TCollection_AsciiString aListRes, anEntry;
     // Iterate over the sequence aSeq
@@ -1161,17 +1195,19 @@ GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString() << "] = geompy.MakePipeTShape("
-                                << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", "
-                                << theHexMesh << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString() << "] = geompy.MakePipeTShape("
+      << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", "
+      << theHexMesh << ")";
   }
   /*
    * Get the groups: END
    */
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShape(" << theR1 << ", " << theW1 << ", "
-                                << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theHexMesh << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShape(" << theR1 << ", " << theW1 << ", "
+      << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theHexMesh << ")";
   }
 
   SetErrorCode(OK);
@@ -1201,11 +1237,11 @@ GEOMImpl_IAdvancedOperations::MakePipeTShape(double theR1, double theW1, double
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double theW1, double theL1,
-                                                        double theR2, double theW2, double theL2,
-                                                        bool theHexMesh,
-                                                        Handle(GEOM_Object) theP1,
-                                                        Handle(GEOM_Object) theP2,
-                                                        Handle(GEOM_Object) theP3)
+                                                         double theR2, double theW2, double theL2,
+                                                         bool theHexMesh,
+                                                         Handle(GEOM_Object) theP1,
+                                                         Handle(GEOM_Object) theP2,
+                                                         Handle(GEOM_Object) theP3)
 {
   SetErrorCode(KO);
   //Add a new object
@@ -1249,7 +1285,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double th
     SetErrorCode(aFail->GetMessageString());
     return NULL;
   }
-    
+
   if (theHexMesh) {
     if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2))
       return NULL;
@@ -1271,7 +1307,14 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double th
     //
     // Get the groups: BEGIN
     //
-    if (!MakeGroups(aShape,TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf)) {
+    try {
+      if (!MakeGroups(aShape,TSHAPE_BASIC, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf)) {
+        return NULL;
+      }
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
     }
 
@@ -1292,9 +1335,10 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double th
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString() << "] = geompy.MakePipeTShape("
-                                << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", "
-                                << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString() << "] = geompy.MakePipeTShape("
+      << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", "
+      << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
   }
   //
   // Get the groups: END
@@ -1302,9 +1346,10 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double th
 
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShape(" << theR1 << ", " << theW1 << ", "
-                                << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theHexMesh << ", " << theP1
-                                << ", " << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShape(" << theR1 << ", " << theW1 << ", "
+      << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theHexMesh << ", " << theP1
+      << ", " << theP2 << ", " << theP3 << ")";
   }
 
   SetErrorCode(OK);
@@ -1333,9 +1378,9 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeWithPosition(double theR1, double th
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1, double theL1,
-                                                   double theR2, double theW2, double theL2,
-                                                   double theH, double theW,
-                                                   bool theHexMesh)
+                                                    double theR2, double theW2, double theL2,
+                                                    double theH, double theW,
+                                                    bool theHexMesh)
 {
   SetErrorCode(KO);
   //Add a new object
@@ -1389,8 +1434,9 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
   box_e->GetLastFunction()->SetDescription("");
   box_e = myTransformOperations->TranslateDXDYDZ(box_e, -(theR2+theW2), -(theR2+theW2), 0);
   box_e->GetLastFunction()->SetDescription("");
-    
-  Handle(TColStd_HSequenceOfInteger) edges_e = myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+
+  Handle(TColStd_HSequenceOfInteger) edges_e =
+    myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
   box_e->GetLastFunction()->SetDescription("");
 
   if (edges_e.IsNull() || edges_e->Length() == 0) {
@@ -1408,8 +1454,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
       iv ++;
       gp_Pnt aPt = BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
       if (Abs(aPt.Z() - (theR1+theW1)) <= Precision::Confusion()) {
-       nbEdgesInChamfer ++;
-       theEdges.push_back(edgeID);
+        nbEdgesInChamfer ++;
+        theEdges.push_back(edgeID);
       }
       Ex.Next();
     }
@@ -1430,7 +1476,7 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
     return NULL;
   }
   aChamfer->GetLastFunction()->SetDescription("");
-    
+
   TopoDS_Shape aChamferShape = aChamfer->GetValue();
   aFunction->SetValue(aChamferShape);
   // END of chamfer
@@ -1458,15 +1504,23 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
     //
     //         Get the groups: BEGIN
     //
-    //        if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf())) {
-    //            //Make a Python command
-    //            GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
-    //                    << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
-    //                    << ", " << theHexMesh << ")";
-    //        }
-    //        else {
-    if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+    //if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf())) {
+    //  //Make a Python command
+    //  GEOM::TPythonDump(aFunction)
+    //    << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
+    //    << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
+    //    << ", " << theHexMesh << ")";
+    //}
+    //else {
+    try {
+      if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+        return NULL;
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
+    }
 
     TCollection_AsciiString aListRes, anEntry;
     // Iterate over the sequence aSeq
@@ -1485,19 +1539,21 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString()
-                                << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
-                                << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW << ", " << theHexMesh << ")";
-    //        }
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString()
+      << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
+      << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW << ", " << theHexMesh << ")";
+    //}
   }
   //
   //     Get the groups: END
   //
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
-                                << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
-                                << ", " << theHexMesh << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
+      << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
+      << ", " << theHexMesh << ")";
   }
 
   SetErrorCode(OK);
@@ -1530,12 +1586,12 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamfer(double theR1, double theW1,
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, double theW1, double theL1,
-                                                               double theR2, double theW2, double theL2,
-                                                               double theH, double theW,
-                                                               bool theHexMesh,
-                                                               Handle(GEOM_Object) theP1,
-                                                               Handle(GEOM_Object) theP2,
-                                                               Handle(GEOM_Object) theP3)
+                                                                double theR2, double theW2, double theL2,
+                                                                double theH, double theW,
+                                                                bool theHexMesh,
+                                                                Handle(GEOM_Object) theP1,
+                                                                Handle(GEOM_Object) theP2,
+                                                                Handle(GEOM_Object) theP3)
 {
   SetErrorCode(KO);
   //Add a new object
@@ -1594,8 +1650,9 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
   box_e->GetLastFunction()->SetDescription("");
   box_e = myTransformOperations->TranslateDXDYDZ(box_e, -(theR2+theW2), -(theR2+theW2), 0);
   box_e->GetLastFunction()->SetDescription("");
-    
-  Handle(TColStd_HSequenceOfInteger) edges_e = myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+
+  Handle(TColStd_HSequenceOfInteger) edges_e =
+    myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
   box_e->GetLastFunction()->SetDescription("");
 
   if (edges_e.IsNull() || edges_e->Length() == 0) {
@@ -1611,8 +1668,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
     while (Ex.More()) {
       gp_Pnt aPt = BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
       if (Abs(aPt.Z() - (theR1+theW1)) <= Precision::Confusion()) {
-       nbEdgesInChamfer ++;
-       theEdges.push_back(edgeID);
+        nbEdgesInChamfer ++;
+        theEdges.push_back(edgeID);
       }
       Ex.Next();
     }
@@ -1633,11 +1690,11 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
     return NULL;
   }
   aChamfer->GetLastFunction()->SetDescription("");
-    
+
   TopoDS_Shape aChamferShape = aChamfer->GetValue();
   aFunction->SetValue(aChamferShape);
   // END of chamfer
-    
+
   if (theHexMesh) {
     if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, 0, false))
       return NULL;
@@ -1658,8 +1715,15 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
     /*
      * Get the groups: BEGIN
      */
-    if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf))
+    try {
+      if (!MakeGroups(aShape, TSHAPE_CHAMFER, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf))
+        return NULL;
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
+    }
 
     TCollection_AsciiString aListRes, anEntry;
     // Iterate over the sequence aSeq
@@ -1678,19 +1742,21 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString()
-                                << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
-                                << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW << ", " << theHexMesh << ", "
-                                << theP1 << ", " << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString()
+      << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
+      << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW << ", " << theHexMesh << ", "
+      << theP1 << ", " << theP2 << ", " << theP3 << ")";
   }
   /*
    * Get the groups: END
    */
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
-                                << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
-                                << ", " << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShapeChamfer(" << theR1 << ", " << theW1
+      << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theH << ", " << theW
+      << ", " << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
   }
 
   SetErrorCode(OK);
@@ -1718,8 +1784,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeChamferWithPosition(double theR1, do
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, double theL1,
-                                                  double theR2, double theW2, double theL2,
-                                                  double theRF, bool theHexMesh)
+                                                   double theR2, double theW2, double theL2,
+                                                   double theRF, bool theHexMesh)
 {
   SetErrorCode(KO);
   //Add a new object
@@ -1772,8 +1838,9 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
   box_e->GetLastFunction()->SetDescription("");
   box_e = myTransformOperations->TranslateDXDYDZ(box_e, -(theR2+theW2), -(theR2+theW2), 0);
   box_e->GetLastFunction()->SetDescription("");
-    
-  Handle(TColStd_HSequenceOfInteger) edges_e = myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+
+  Handle(TColStd_HSequenceOfInteger) edges_e =
+    myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
   box_e->GetLastFunction()->SetDescription("");
 
   if (edges_e.IsNull() || edges_e->Length() == 0) {
@@ -1789,8 +1856,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
     while (Ex.More()) {
       gp_Pnt aPt = BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
       if (Abs(aPt.Z() - (theR1+theW1)) <= Precision::Confusion()) {
-       nbEdgesInFillet ++;
-       theEdges.push_back(edgeID);
+        nbEdgesInFillet ++;
+        theEdges.push_back(edgeID);
       }
       Ex.Next();
     }
@@ -1808,15 +1875,23 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
     return NULL;
   }
   if (aFillet.IsNull()) {
-    SetErrorCode("Fillet can not be computed on the given shape with the given parameters");
+    //SetErrorCode("Fillet can not be computed on the given shape with the given parameters");
+    SetErrorCode(myLocalOperations->GetErrorCode());
     return NULL;
   }
   aFillet->GetLastFunction()->SetDescription("");
-    
+
   TopoDS_Shape aFilletShape = aFillet->GetValue();
   aFunction->SetValue(aFilletShape);
   // END of fillet
 
+  // BEGIN: Limit tolerances (debug)
+  Handle(GEOM_Object) aCorr1 = myHealingOperations->LimitTolerance(aShape, 1e-07);
+  TopoDS_Shape aCorr1Shape = aCorr1->GetValue();
+  aShape->GetLastFunction()->SetValue(aCorr1Shape);
+  aCorr1->GetLastFunction()->SetDescription("");
+  // END: Limit tolerances (debug)
+
   if (theHexMesh) {
     if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2, 0, 0, theRF, false))
       return NULL;
@@ -1830,8 +1905,15 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
     /*
      * Get the groups: BEGIN
      */
-    if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+    try {
+      if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, gp_Trsf()))
+        return NULL;
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
+    }
 
     TCollection_AsciiString aListRes, anEntry;
     // Iterate over the sequence aSeq
@@ -1850,25 +1932,25 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString()
-                                << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
-                                << ", " << theW2 << ", " << theL2 << ", " << theRF << ", " << theHexMesh << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString()
+      << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
+      << ", " << theW2 << ", " << theL2 << ", " << theRF << ", " << theHexMesh << ")";
   }
   /*
    * Get the groups: END
    */
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1
-                                << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theRF << ", "
-                                << theHexMesh << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1
+      << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theRF << ", "
+      << theHexMesh << ")";
   }
 
-
   SetErrorCode(OK);
 
   return aSeq;
-
 }
 
 //=============================================================================
@@ -1895,11 +1977,11 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFillet(double theR1, double theW1, d
 //=============================================================================
 Handle(TColStd_HSequenceOfTransient)
 GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, double theW1, double theL1,
-                                                              double theR2, double theW2, double theL2,
-                                                              double theRF, bool theHexMesh,
-                                                              Handle(GEOM_Object) theP1,
-                                                              Handle(GEOM_Object) theP2,
-                                                              Handle(GEOM_Object) theP3)
+                                                               double theR2, double theW2, double theL2,
+                                                               double theRF, bool theHexMesh,
+                                                               Handle(GEOM_Object) theP1,
+                                                               Handle(GEOM_Object) theP2,
+                                                               Handle(GEOM_Object) theP3)
 {
   SetErrorCode(KO);
   //Add a new object
@@ -1957,8 +2039,9 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
   box_e->GetLastFunction()->SetDescription("");
   box_e = myTransformOperations->TranslateDXDYDZ(box_e, -(theR2+theW2), -(theR2+theW2), 0);
   box_e->GetLastFunction()->SetDescription("");
-    
-  Handle(TColStd_HSequenceOfInteger) edges_e = myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
+
+  Handle(TColStd_HSequenceOfInteger) edges_e =
+    myShapesOperations->GetShapesOnBoxIDs(box_e, aShape, TopAbs_EDGE, GEOMAlgo_ST_IN);
   box_e->GetLastFunction()->SetDescription("");
 
   if (edges_e.IsNull() || edges_e->Length() == 0) {
@@ -1974,8 +2057,8 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
     while (Ex.More()) {
       gp_Pnt aPt = BRep_Tool::Pnt(TopoDS::Vertex(Ex.Current()));
       if (Abs(aPt.Z() - (theR1+theW1)) <= Precision::Confusion()) {
-       nbEdgesInFillet ++;
-       theEdges.push_back(edgeID);
+        nbEdgesInFillet ++;
+        theEdges.push_back(edgeID);
       }
       Ex.Next();
     }
@@ -1997,11 +2080,18 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
     return NULL;
   }
   aFillet->GetLastFunction()->SetDescription("");
-    
+
   TopoDS_Shape aFilletShape = aFillet->GetValue();
   aFunction->SetValue(aFilletShape);
   // END of fillet
 
+  // BEGIN: Limit tolerances (debug)
+  Handle(GEOM_Object) aCorr1 = myHealingOperations->LimitTolerance(aShape, 1e-07);
+  TopoDS_Shape aCorr1Shape = aCorr1->GetValue();
+  aShape->GetLastFunction()->SetValue(aCorr1Shape);
+  aCorr1->GetLastFunction()->SetDescription("");
+  // END: Limit tolerances (debug)
+
   if (theHexMesh) {
     if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2, 0, 0, theRF, false))
       return NULL;
@@ -2022,8 +2112,15 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
     /*
      * Get the groups: BEGIN
      */
-    if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf))
+    try {
+      if (!MakeGroups(aShape, TSHAPE_FILLET, theR1, theW1, theL1, theR2, theW2, theL2, aSeq, aTrsf))
+        return NULL;
+    }
+    catch (Standard_Failure) {
+      Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+      SetErrorCode(aFail->GetMessageString());
       return NULL;
+    }
 
     TCollection_AsciiString aListRes, anEntry;
     // Iterate over the sequence aSeq
@@ -2042,19 +2139,21 @@ GEOMImpl_IAdvancedOperations::MakePipeTShapeFilletWithPosition(double theR1, dou
     aListRes.Trunc(aListRes.Length() - 2);
 
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << ", " << aListRes.ToCString()
-                                << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
-                                << ", " << theW2 << ", " << theL2 << ", " << theRF << ", " << theHexMesh << ", " << theP1 << ", "
-                                << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << ", " << aListRes.ToCString()
+      << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1 << ", " << theL1 << ", " << theR2
+      << ", " << theW2 << ", " << theL2 << ", " << theRF << ", " << theHexMesh << ", " << theP1 << ", "
+      << theP2 << ", " << theP3 << ")";
   }
   /*
    * Get the groups: END
    */
   else {
     //Make a Python command
-    GEOM::TPythonDump(aFunction) << "[" << aShape << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1
-                                << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theRF << ", "
-                                << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
+    GEOM::TPythonDump(aFunction)
+      << "[" << aShape << "] = geompy.MakePipeTShapeFillet(" << theR1 << ", " << theW1
+      << ", " << theL1 << ", " << theR2 << ", " << theW2 << ", " << theL2 << ", " << theRF << ", "
+      << theHexMesh << ", " << theP1 << ", " << theP2 << ", " << theP3 << ")";
   }
 
   SetErrorCode(OK);
index 2b7b91892d446d83d6fb315784fcd9a6a4438030..ee5e5347df274d72de5f8cfb9ef2545c71c6dfc6 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-
 //  File   : GEOMImpl_IAdvancedOperations.hxx
 //  Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
-//
+
 #ifndef _GEOMImpl_IAdvancedOperations_HXX_
 #define _GEOMImpl_IAdvancedOperations_HXX_
 
@@ -35,31 +34,32 @@ class GEOMImpl_ITransformOperations;
 class GEOMImpl_IBlocksOperations;
 class GEOMImpl_I3DPrimOperations;
 class GEOMImpl_ILocalOperations;
+class GEOMImpl_IHealingOperations;
 
 class GEOMImpl_IAdvancedOperations: public GEOM_IOperations {
 private:
   bool MakePipeTShapePartition(Handle(GEOM_Object) theShape,
-                              double theR1, double theW1, double theL1,
-                              double theR2, double theW2, double theL2,
-                              double theH = 0, double theW = 0,
-                              double theRF = 0, bool isNormal = true);
+                               double theR1, double theW1, double theL1,
+                               double theR2, double theW2, double theL2,
+                               double theH = 0, double theW = 0,
+                               double theRF = 0, bool isNormal = true);
   bool MakePipeTShapeMirrorAndGlue(Handle(GEOM_Object) theShape,
-                                  double theR1, double theW1, double theL1,
-                                  double theR2, double theW2, double theL2);
+                                   double theR1, double theW1, double theL1,
+                                   double theR2, double theW2, double theL2);
   bool MakeGroups(Handle(GEOM_Object) theShape, int shapType,
-                 double theR1, double theW1, double theL1,
-                 double theR2, double theW2, double theL2,
-                 Handle(TColStd_HSequenceOfTransient) theSeq,
-                 gp_Trsf aTrsf);
+                  double theR1, double theW1, double theL1,
+                  double theR2, double theW2, double theL2,
+                  Handle(TColStd_HSequenceOfTransient) theSeq,
+                  gp_Trsf aTrsf);
   gp_Trsf GetPositionTrsf(double theL1, double theL2,
-                         Handle(GEOM_Object) P1 = 0,
-                         Handle(GEOM_Object) P2 = 0,
-                         Handle(GEOM_Object) P3 = 0);
+                          Handle(GEOM_Object) P1 = 0,
+                          Handle(GEOM_Object) P2 = 0,
+                          Handle(GEOM_Object) P3 = 0);
   bool CheckCompatiblePosition(double& theL1, double& theL2, 
-                              Handle(GEOM_Object) theP1, 
-                              Handle(GEOM_Object) theP2,
-                              Handle(GEOM_Object) theP3,
-                              double theTolerance);
+                               Handle(GEOM_Object) theP1, 
+                               Handle(GEOM_Object) theP2,
+                               Handle(GEOM_Object) theP3,
+                               double theTolerance);
 private:
   GEOMImpl_IBasicOperations*     myBasicOperations;
   GEOMImpl_IBooleanOperations*   myBooleanOperations;
@@ -68,6 +68,7 @@ private:
   GEOMImpl_IBlocksOperations*    myBlocksOperations;
   GEOMImpl_I3DPrimOperations*    my3DPrimOperations;
   GEOMImpl_ILocalOperations*     myLocalOperations;
+  GEOMImpl_IHealingOperations*   myHealingOperations;
 
 public:
   Standard_EXPORT GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngine, int theDocID);
@@ -75,39 +76,39 @@ public:
 
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) 
                   MakePipeTShape(double theR1, double theW1, double theL1,
-                                double theR2, double theW2, double theL2,
-                                bool theHexMesh = true);
+                                 double theR2, double theW2, double theL2,
+                                 bool theHexMesh = true);
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient)
                   MakePipeTShapeWithPosition(double theR1, double theW1, double theL1,
-                                            double theR2, double theW2, double theL2,
-                                            bool theHexMesh = true,
-                                            Handle(GEOM_Object) P1 = 0,
-                                            Handle(GEOM_Object) P2 = 0,
-                                            Handle(GEOM_Object) P3 = 0);
+                                             double theR2, double theW2, double theL2,
+                                             bool theHexMesh = true,
+                                             Handle(GEOM_Object) P1 = 0,
+                                             Handle(GEOM_Object) P2 = 0,
+                                             Handle(GEOM_Object) P3 = 0);
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient)
                   MakePipeTShapeChamfer(double theR1, double theW1, double theL1,
-                                       double theR2, double theW2, double theL2,
-                                       double theH,  double theW, 
-                                       bool theHexMesh = true);
+                                        double theR2, double theW2, double theL2,
+                                        double theH,  double theW, 
+                                        bool theHexMesh = true);
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient)
                   MakePipeTShapeChamferWithPosition(double theR1, double theW1, double theL1,
-                                                   double theR2, double theW2, double theL2,
-                                                   double theH, double theW,
-                                                   bool theHexMesh = true,
-                                                   Handle(GEOM_Object) P1 = 0,
-                                                   Handle(GEOM_Object) P2 = 0,
-                                                   Handle(GEOM_Object) P3 = 0);
+                                                    double theR2, double theW2, double theL2,
+                                                    double theH, double theW,
+                                                    bool theHexMesh = true,
+                                                    Handle(GEOM_Object) P1 = 0,
+                                                    Handle(GEOM_Object) P2 = 0,
+                                                    Handle(GEOM_Object) P3 = 0);
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient)
                   MakePipeTShapeFillet(double theR1, double theW1, double theL1,
-                                      double theR2, double theW2, double theL2,
-                                      double theRF, bool theHexMesh = true);
+                                       double theR2, double theW2, double theL2,
+                                       double theRF, bool theHexMesh = true);
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient)
                   MakePipeTShapeFilletWithPosition(double theR1, double theW1, double theL1,
-                                                  double theR2, double theW2, double theL2,
-                                                  double theRF, bool theHexMesh = true,
-                                                  Handle(GEOM_Object) P1 = 0,
-                                                  Handle(GEOM_Object) P2 = 0,
-                                                  Handle(GEOM_Object) P3 = 0);
+                                                   double theR2, double theW2, double theL2,
+                                                   double theRF, bool theHexMesh = true,
+                                                   Handle(GEOM_Object) P1 = 0,
+                                                   Handle(GEOM_Object) P2 = 0,
+                                                   Handle(GEOM_Object) P3 = 0);
   /*@@ insert new functions before this line @@ do not remove this line @@*/
 };
 #endif
index 3aeca30083d730350ee13eda680200259a087b26..b4c4ebd77966e4ed495a393afc717d14135a605a 100644 (file)
@@ -569,6 +569,81 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetPoint
   return aResult;
 }
 
+//=============================================================================
+/*!
+ *  GetVertexNearPoint
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetVertexNearPoint
+                                               (Handle(GEOM_Object) theShape,
+                                                Handle(GEOM_Object) thePoint)
+{
+  SetErrorCode(KO);
+
+  // New Point object
+  Handle(GEOM_Object) aResult;
+
+  // Arguments
+  if (theShape.IsNull() || thePoint.IsNull()) return NULL;
+
+  TopoDS_Shape aBlockOrComp = theShape->GetValue();
+  TopoDS_Shape aPoint       = thePoint->GetValue();
+  if (aBlockOrComp.IsNull() || aPoint.IsNull()) {
+    SetErrorCode("Given shape is null");
+    return NULL;
+  }
+
+  if (aPoint.ShapeType() != TopAbs_VERTEX) {
+    SetErrorCode("Element for vertex identification is not a vertex");
+    return NULL;
+  }
+
+  TopoDS_Vertex aVert = TopoDS::Vertex(aPoint);
+  gp_Pnt aP = BRep_Tool::Pnt(aVert);
+
+  // Compute the Vertex value
+  TopoDS_Shape V;
+  bool isFound = false;
+  Standard_Real aDist = RealLast();
+  TopTools_MapOfShape mapShape;
+
+  TopExp_Explorer exp (aBlockOrComp, TopAbs_VERTEX);
+  for (; exp.More(); exp.Next()) {
+    if (mapShape.Add(exp.Current())) {
+      TopoDS_Vertex aVi = TopoDS::Vertex(exp.Current());
+      gp_Pnt aPi = BRep_Tool::Pnt(aVi);
+      Standard_Real aDisti = aPi.Distance(aP);
+      if (aDisti < aDist) {
+        V = aVi;
+        aDist = aDisti;
+        isFound = true;
+      }
+    }
+  }
+
+  if (!isFound) {
+    SetErrorCode("Vertex has not been found");
+    return NULL;
+  }
+
+  TopTools_IndexedMapOfShape anIndices;
+  TopExp::MapShapes(aBlockOrComp, anIndices);
+  Handle(TColStd_HArray1OfInteger) anArray = new TColStd_HArray1OfInteger(1,1);
+  anArray->SetValue(1, anIndices.FindIndex(V));
+  aResult = GetEngine()->AddSubShape(theShape, anArray);
+
+  // The GetPoint() doesn't change object so no new function is required.
+  Handle(GEOM_Function) aFunction = theShape->GetLastFunction();
+
+  // Make a Python command
+  GEOM::TPythonDump(aFunction, /*append=*/true)
+    << aResult << " = geompy.GetVertexNearPoint("
+    << theShape << ", " << thePoint << ")";
+
+  SetErrorCode(OK);
+  return aResult;
+}
+
 //=============================================================================
 /*!
  *  GetEdge
@@ -1458,6 +1533,136 @@ Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetFaceByNormale
   return aResult;
 }
 
+//=============================================================================
+/*!
+ *  GetShapesNearPoint
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetShapesNearPoint
+                                         (Handle(GEOM_Object)    theShape,
+                                          Handle(GEOM_Object)    thePoint,
+                                          const Standard_Integer theShapeType,
+                                          const Standard_Real    theTolerance)
+{
+  SetErrorCode(KO);
+
+  // New object
+  Handle(GEOM_Object) aResult;
+
+  // Arguments
+  if (theShape.IsNull() || thePoint.IsNull()) return NULL;
+
+  TopoDS_Shape aBlockOrComp = theShape->GetValue();
+  if (aBlockOrComp.IsNull()) {
+    SetErrorCode("Block or compound is null");
+    return NULL;
+  }
+
+  TopoDS_Shape anArg = thePoint->GetValue();
+  if (anArg.IsNull()) {
+    SetErrorCode("Null shape is given as argument");
+    return NULL;
+  }
+  if (anArg.ShapeType() != TopAbs_VERTEX) {
+    SetErrorCode("Element for face identification is not a vertex");
+    return NULL;
+  }
+
+  if (theShapeType < TopAbs_SOLID || TopAbs_VERTEX < theShapeType) {
+    SetErrorCode("Invalid type of result is requested");
+    return NULL;
+  }
+
+  if (theTolerance < Precision::Confusion()) {
+    theTolerance == Precision::Confusion();
+  }
+
+  // Compute the result
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    TopoDS_Vertex aVert = TopoDS::Vertex(anArg);
+
+    TopTools_MapOfShape mapShape;
+    Standard_Integer nbEdges = 0;
+    TopExp_Explorer exp (aBlockOrComp, TopAbs_ShapeEnum(theShapeType));
+    for (; exp.More(); exp.Next()) {
+      if (mapShape.Add(exp.Current())) {
+        nbEdges++;
+      }
+    }
+
+    if (nbEdges == 0) {
+      SetErrorCode("Given shape contains no subshapes of requested type");
+      return NULL;
+    }
+
+    // Calculate distances and find min
+    mapShape.Clear();
+    Standard_Integer ind = 1;
+    Standard_Real aMinDist = RealLast();
+    TopTools_Array1OfShape anEdges (1, nbEdges);
+    TColStd_Array1OfReal aDistances (1, nbEdges);
+    for (exp.Init(aBlockOrComp, TopAbs_ShapeEnum(theShapeType)); exp.More(); exp.Next()) {
+      if (mapShape.Add(exp.Current())) {
+        TopoDS_Shape anEdge = exp.Current();
+        anEdges(ind) = anEdge;
+
+        BRepExtrema_DistShapeShape aDistTool (aVert, anEdges(ind));
+        if (!aDistTool.IsDone()) {
+          SetErrorCode("Can not find a distance from the given point to one of subshapes");
+          return NULL;
+        }
+        aDistances(ind) = aDistTool.Value();
+        if (aDistances(ind) < aMinDist) {
+          aMinDist = aDistances(ind);
+        }
+        ind++;
+      }
+    }
+
+    if (aMinDist < RealLast()) {
+      // Collect subshapes with distance < (aMinDist + theTolerance)
+      int nbSubShapes = 0;
+      TopTools_Array1OfShape aNearShapes (1, nbEdges);
+      for (ind = 1; ind <= nbEdges; ind++) {
+        if (aDistances(ind) < aMinDist + theTolerance) {
+          nbSubShapes++;
+          aNearShapes(nbSubShapes) = anEdges(ind);
+        }
+      }
+
+      // Add subshape
+      TopTools_IndexedMapOfShape anIndices;
+      TopExp::MapShapes(aBlockOrComp, anIndices);
+      Handle(TColStd_HArray1OfInteger) anArray = new TColStd_HArray1OfInteger (1, nbSubShapes);
+      for (ind = 1; ind <= nbSubShapes; ind++) {
+        anArray->SetValue(ind, anIndices.FindIndex(aNearShapes(ind)));
+      }
+      aResult = GetEngine()->AddSubShape(theShape, anArray);
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  if (aResult.IsNull())
+    return NULL;
+
+  Handle(GEOM_Function) aFunction = aResult->GetLastFunction();
+
+  //Make a Python command
+  GEOM::TPythonDump(aFunction)
+    << aResult << " = geompy.GetShapesNearPoint(" << theShape << ", " << thePoint
+    << ", " << TopAbs_ShapeEnum(theShapeType) << ", " << theTolerance << ")";
+
+  SetErrorCode(OK);
+  return aResult;
+}
+
 //=============================================================================
 /*!
  *  IsCompoundOfBlocks
index c5ce211517d37a515691e05a1461e5209b0e42f2..43caa588349f8dbe3390b25869fd74fbec5fcd87 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifndef _GEOMImpl_IBlocksOperations_HXX_
 #define _GEOMImpl_IBlocksOperations_HXX_
@@ -41,68 +40,76 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
 
   // Creation of blocks and block faces
   Standard_EXPORT Handle(GEOM_Object) MakeQuad (Handle(GEOM_Object) theEdge1,
-                                Handle(GEOM_Object) theEdge2,
-                                Handle(GEOM_Object) theEdge3,
-                                Handle(GEOM_Object) theEdge4);
+                                                Handle(GEOM_Object) theEdge2,
+                                                Handle(GEOM_Object) theEdge3,
+                                                Handle(GEOM_Object) theEdge4);
 
   Standard_EXPORT Handle(GEOM_Object) MakeQuad2Edges (Handle(GEOM_Object) theEdge1,
-                                      Handle(GEOM_Object) theEdge2);
+                                                      Handle(GEOM_Object) theEdge2);
 
   Standard_EXPORT Handle(GEOM_Object) MakeQuad4Vertices (Handle(GEOM_Object) thePoint1,
-                                         Handle(GEOM_Object) thePoint2,
-                                         Handle(GEOM_Object) thePoint3,
-                                         Handle(GEOM_Object) thePoint4);
+                                                         Handle(GEOM_Object) thePoint2,
+                                                         Handle(GEOM_Object) thePoint3,
+                                                         Handle(GEOM_Object) thePoint4);
 
   Standard_EXPORT Handle(GEOM_Object) MakeHexa (Handle(GEOM_Object) theFace1,
-                                Handle(GEOM_Object) theFace2,
-                                Handle(GEOM_Object) theFace3,
-                                Handle(GEOM_Object) theFace4,
-                                Handle(GEOM_Object) theFace5,
-                                Handle(GEOM_Object) theFace6);
+                                                Handle(GEOM_Object) theFace2,
+                                                Handle(GEOM_Object) theFace3,
+                                                Handle(GEOM_Object) theFace4,
+                                                Handle(GEOM_Object) theFace5,
+                                                Handle(GEOM_Object) theFace6);
 
   Standard_EXPORT Handle(GEOM_Object) MakeHexa2Faces (Handle(GEOM_Object) theFace1,
-                                      Handle(GEOM_Object) theFace2);
+                                                      Handle(GEOM_Object) theFace2);
 
   Standard_EXPORT Handle(GEOM_Object) MakeBlockCompound (Handle(GEOM_Object) theCompound);
 
   // Extract elements of blocks and blocks compounds
   Standard_EXPORT Handle(GEOM_Object) GetPoint (Handle(GEOM_Object) theShape,
-                                const Standard_Real theX,
-                                const Standard_Real theY,
-                                const Standard_Real theZ,
-                                const Standard_Real theEpsilon);
+                                                const Standard_Real theX,
+                                                const Standard_Real theY,
+                                                const Standard_Real theZ,
+                                                const Standard_Real theEpsilon);
+
+  Standard_EXPORT Handle(GEOM_Object) GetVertexNearPoint (Handle(GEOM_Object) theShape,
+                                                          Handle(GEOM_Object) thePoint);
 
   Standard_EXPORT Handle(GEOM_Object) GetEdge (Handle(GEOM_Object) theShape,
-                               Handle(GEOM_Object) thePoint1,
-                               Handle(GEOM_Object) thePoint2);
+                                               Handle(GEOM_Object) thePoint1,
+                                               Handle(GEOM_Object) thePoint2);
 
   Standard_EXPORT Handle(GEOM_Object) GetEdgeNearPoint (Handle(GEOM_Object) theBlock,
-                                        Handle(GEOM_Object) thePoint);
+                                                        Handle(GEOM_Object) thePoint);
 
   Standard_EXPORT Handle(GEOM_Object) GetFaceByPoints (Handle(GEOM_Object) theShape,
-                                       Handle(GEOM_Object) thePoint1,
-                                       Handle(GEOM_Object) thePoint2,
-                                       Handle(GEOM_Object) thePoint3,
-                                       Handle(GEOM_Object) thePoint4);
+                                                       Handle(GEOM_Object) thePoint1,
+                                                       Handle(GEOM_Object) thePoint2,
+                                                       Handle(GEOM_Object) thePoint3,
+                                                       Handle(GEOM_Object) thePoint4);
 
   Standard_EXPORT Handle(GEOM_Object) GetFaceByEdges (Handle(GEOM_Object) theShape,
-                                      Handle(GEOM_Object) theEdge1,
-                                      Handle(GEOM_Object) theEdge2);
+                                                      Handle(GEOM_Object) theEdge1,
+                                                      Handle(GEOM_Object) theEdge2);
 
   Standard_EXPORT Handle(GEOM_Object) GetOppositeFace (Handle(GEOM_Object) theBlock,
-                                       Handle(GEOM_Object) theFace);
+                                                       Handle(GEOM_Object) theFace);
 
   Standard_EXPORT Handle(GEOM_Object) GetFaceNearPoint (Handle(GEOM_Object) theBlock,
-                                        Handle(GEOM_Object) thePoint);
+                                                        Handle(GEOM_Object) thePoint);
 
   Standard_EXPORT Handle(GEOM_Object) GetFaceByNormale (Handle(GEOM_Object) theBlock,
-                                        Handle(GEOM_Object) theVector);
+                                                        Handle(GEOM_Object) theVector);
+
+  Standard_EXPORT Handle(GEOM_Object) GetShapesNearPoint (Handle(GEOM_Object)    theShape,
+                                                          Handle(GEOM_Object)    thePoint,
+                                                          const Standard_Integer theShapeType,
+                                                          const Standard_Real    theTolerance);
 
   // Check blocks compounds
   Standard_EXPORT Standard_Boolean IsCompoundOfBlocks (Handle(GEOM_Object)    theCompound,
-                                       const Standard_Integer theMinNbFaces,
-                                       const Standard_Integer theMaxNbFaces,
-                                       Standard_Integer&      theNbBlocks);
+                                                       const Standard_Integer theMinNbFaces,
+                                                       const Standard_Integer theMaxNbFaces,
+                                                       Standard_Integer&      theNbBlocks);
 
   enum BCErrorType {
     NOT_BLOCK,
@@ -118,13 +125,13 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
   };
 
   Standard_EXPORT Standard_Boolean CheckCompoundOfBlocksOld (Handle(GEOM_Object) theCompound,
-                                             std::list<BCError>&      theErrors);
+                                                             std::list<BCError>&      theErrors);
 
   Standard_EXPORT Standard_Boolean CheckCompoundOfBlocks (Handle(GEOM_Object) theCompound,
-                                          std::list<BCError>&      theErrors);
+                                                          std::list<BCError>&      theErrors);
 
   Standard_EXPORT TCollection_AsciiString PrintBCErrors (Handle(GEOM_Object)  theCompound,
-                                         const std::list<BCError>& theErrors);
+                                                         const std::list<BCError>& theErrors);
 
   Standard_EXPORT Handle(GEOM_Object) RemoveExtraEdges (Handle(GEOM_Object) theShape,
                                                         const Standard_Integer theOptimumNbFaces = 6);
@@ -132,9 +139,9 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) CheckAndImprove (Handle(GEOM_Object) theCompound);
 
   Standard_EXPORT static void AddBlocksFrom (const TopoDS_Shape&   theShape,
-                             TopTools_ListOfShape& BLO,
-                             TopTools_ListOfShape& NOT,
-                             TopTools_ListOfShape& EXT);
+                                             TopTools_ListOfShape& BLO,
+                                             TopTools_ListOfShape& NOT,
+                                             TopTools_ListOfShape& EXT);
 
   // Extract blocks from blocks compounds
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) ExplodeCompoundOfBlocks
@@ -143,7 +150,7 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
                                        const Standard_Integer theMaxNbFaces);
 
   Standard_EXPORT Handle(GEOM_Object) GetBlockNearPoint (Handle(GEOM_Object) theCompound,
-                                         Handle(GEOM_Object) thePoint);
+                                                         Handle(GEOM_Object) thePoint);
 
   Standard_EXPORT Handle(GEOM_Object) GetBlockByParts
                      (Handle(GEOM_Object)                         theCompound,
@@ -155,17 +162,17 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
 
   // Operations on blocks with gluing of result
   Standard_EXPORT Handle(GEOM_Object) MakeMultiTransformation1D (Handle(GEOM_Object)    theBlock,
-                                                 const Standard_Integer theDirFace1,
-                                                 const Standard_Integer theDirFace2,
-                                                 const Standard_Integer theNbTimes);
+                                                                 const Standard_Integer theDirFace1,
+                                                                 const Standard_Integer theDirFace2,
+                                                                 const Standard_Integer theNbTimes);
 
   Standard_EXPORT Handle(GEOM_Object) MakeMultiTransformation2D (Handle(GEOM_Object)    theBlock,
-                                                 const Standard_Integer theDirFace1U,
-                                                 const Standard_Integer theDirFace2U,
-                                                 const Standard_Integer theNbTimesU,
-                                                 const Standard_Integer theDirFace1V,
-                                                 const Standard_Integer theDirFace2V,
-                                                 const Standard_Integer theNbTimesV);
+                                                                 const Standard_Integer theDirFace1U,
+                                                                 const Standard_Integer theDirFace2U,
+                                                                 const Standard_Integer theNbTimesU,
+                                                                 const Standard_Integer theDirFace1V,
+                                                                 const Standard_Integer theDirFace2V,
+                                                                 const Standard_Integer theNbTimesV);
 
   // Build groups for Propagation of 1D hypotheses
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) Propagate (Handle(GEOM_Object) theShape);
index 0d7ce44353e22eac4837cbe4bfa8ee6a0175524e..cf81ed23c84d85a8e4b2e4748f05b2f233549665 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
index 07252ac76e7ccc3166401ee730885e5376f4e18a..5a9d264555a9974bb866633439d50e4f96fbf4c7 100755 (executable)
@@ -19,9 +19,8 @@
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  NOTE: This is an intreface to a function for the Healing creation.
 
-//NOTE: This is an intreface to a function for the Healing creation.
-//
 #include "GEOM_Function.hxx"
 
 #include <TColStd_HArray1OfInteger.hxx>
@@ -76,7 +75,7 @@ public:
 
   void SetIndex( Standard_Integer val ) { _func->SetInteger(ARG_SUBSHAPE_INDEX, val); }
   Standard_Integer GetIndex() { return _func->GetInteger(ARG_SUBSHAPE_INDEX); }
-            
+
 private:
-  Handle(GEOM_Function) _func;  
+  Handle(GEOM_Function) _func;
 };
index d78c82d4ee5ccaa0da22bf5068504fd483b1f54e..e19acd19ad31bbda170483c3548876f657cfa6be 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifdef WNT
 #pragma warning( disable:4786 )
@@ -864,7 +863,6 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientation (Handle(GEOM_
   return theObject;
 }
 
-
 //=============================================================================
 /*!
  *  ChangeOrientationCopy
@@ -921,3 +919,62 @@ Handle(GEOM_Object) GEOMImpl_IHealingOperations::ChangeOrientationCopy (Handle(G
   SetErrorCode(OK);
   return aNewObject;
 }
+
+//=============================================================================
+/*!
+ *  LimitTolerance
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IHealingOperations::LimitTolerance (Handle(GEOM_Object) theObject,
+                                                                 double theTolerance)
+{
+  // Set error code, check parameters
+  SetErrorCode(KO);
+
+  if (theObject.IsNull())
+    return NULL;
+
+  Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
+  if (aLastFunction.IsNull())
+    return NULL; // There is no function which creates an object to be processed
+
+  // Add a new object
+  Handle(GEOM_Object) aNewObject = GetEngine()->AddObject(GetDocID(), theObject->GetType());
+
+  // Add the function
+  aFunction = aNewObject->AddFunction(GEOMImpl_HealingDriver::GetID(), LIMIT_TOLERANCE);
+
+  if (aFunction.IsNull())
+    return NULL;
+
+  // Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_HealingDriver::GetID()) return NULL;
+
+  // Prepare "data container" class IHealing
+  GEOMImpl_IHealing HI (aFunction);
+  HI.SetOriginal(aLastFunction);
+  HI.SetTolerance(theTolerance);
+
+  // Compute
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Healing driver failed");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  // Make a Python command
+  GEOM::TPythonDump(aFunction) << aNewObject << " = geompy.LimitTolerance("
+                               << theObject << ", " << theTolerance << ")";
+
+  SetErrorCode(OK);
+  return aNewObject;
+}
index aafa9687dd6641d98df7fdaac1252227e8ca5ad8..064194fdd8c1c5869605ebfc09511b948632f585 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifndef _GEOMImpl_IHealingOperations_HXX_
 #define _GEOMImpl_IHealingOperations_HXX_
@@ -39,9 +38,9 @@ class GEOMImpl_IHealingOperations : public GEOM_IOperations {
 
   // Apply Shape Processing to the selected Object
   Standard_EXPORT Handle(GEOM_Object) ShapeProcess( Handle(GEOM_Object) theObject,
-                                    const Handle(TColStd_HArray1OfExtendedString)& theOperations,
-                                    const Handle(TColStd_HArray1OfExtendedString)& theParams,
-                                    const Handle(TColStd_HArray1OfExtendedString)& theValues );
+                            const Handle(TColStd_HArray1OfExtendedString)& theOperations,
+                            const Handle(TColStd_HArray1OfExtendedString)& theParams,
+                            const Handle(TColStd_HArray1OfExtendedString)& theValues );
 
   // Retrieve default Shape Process parameters (from resource file)
   Standard_EXPORT void GetShapeProcessParameters( std::list<std::string>& theOperations,
@@ -49,12 +48,13 @@ class GEOMImpl_IHealingOperations : public GEOM_IOperations {
                                                   std::list<std::string>& theValues );
 
   // Retrieve default Shape Process parameters for given operator
-  Standard_EXPORT bool GetOperatorParameters( const std::string theOperation, 
+  Standard_EXPORT bool GetOperatorParameters( const std::string theOperation,
                                               std::list<std::string>& theParams,
                                               std::list<std::string>& theValues );
 
   // returns all parameters that are valid for the given operation (Shape Process operator)
-  Standard_EXPORT static bool GetParameters( const std::string theOperation, std::list<std::string>& theParams );
+  Standard_EXPORT static bool GetParameters( const std::string theOperation,
+                                             std::list<std::string>& theParams );
 
   Standard_EXPORT Handle(GEOM_Object) SuppressFaces( Handle(GEOM_Object) theObject,
                                      const Handle(TColStd_HArray1OfInteger)& theFaces);
@@ -68,25 +68,28 @@ class GEOMImpl_IHealingOperations : public GEOM_IOperations {
 
   Standard_EXPORT Handle(GEOM_Object) FillHoles( Handle(GEOM_Object) theObject,
                                  const Handle(TColStd_HArray1OfInteger)& theWires);
-                                      
+
   Standard_EXPORT Handle(GEOM_Object) Sew( Handle(GEOM_Object) theObject,
                            double theTolerance );
 
   Standard_EXPORT Handle(GEOM_Object) DivideEdge( Handle(GEOM_Object) theObject,
-                                  int theIndex,  
-                                  double theValue,
-                                  bool isByParameter );
+                                                  int theIndex,
+                                                  double theValue,
+                                                  bool isByParameter );
 
   // this function does not use Function-Driver mechanism, it just computes the free
   // boundary edges and returns them in the sequence.  It is called just for information reasons
   // and it's not intended for history/undo/redo/etc..
-  Standard_EXPORT bool GetFreeBoundary ( Handle(GEOM_Object) theObject, 
-                         Handle(TColStd_HSequenceOfTransient)& theOutClosedWires, 
+  Standard_EXPORT bool GetFreeBoundary ( Handle(GEOM_Object) theObject,
+                         Handle(TColStd_HSequenceOfTransient)& theOutClosedWires,
                          Handle(TColStd_HSequenceOfTransient)& theOutOpenWires );
 
   Standard_EXPORT Handle(GEOM_Object) ChangeOrientation( Handle(GEOM_Object) theObject);
   Standard_EXPORT Handle(GEOM_Object) ChangeOrientationCopy( Handle(GEOM_Object) theObject);
 
+  Standard_EXPORT Handle(GEOM_Object) LimitTolerance( Handle(GEOM_Object) theObject,
+                                                      double theTolerance );
+
 };
 
 #endif
index c62f4ac26d172c6401bc690ed89bd25844db4d56..d0ac43e7cd89e8b5f78151ae3c2bde92a23e3ae5 100644 (file)
@@ -1479,7 +1479,8 @@ static double CheckSingularCase(const TopoDS_Shape& aSh1,
       if( sh.ShapeType()==TopAbs_SHELL || sh.ShapeType()==TopAbs_FACE ) {
         // non solid case
         double U1,U2,V1,V2;
-        S->Bounds(U1,U2,V1,V2);
+        //S->Bounds(U1,U2,V1,V2);
+        ShapeAnalysis::GetFaceUVBounds(TopoDS::Face(tmpSh2),U1,U2,V1,V2);
         Handle(Geom_RectangularTrimmedSurface) TrS1 = 
           new Geom_RectangularTrimmedSurface(S,U1,(U1+U2)/2.,V1,V2);
         Handle(Geom_RectangularTrimmedSurface) TrS2 = 
index cd8dbe705a2bd498c3d2d37e0a2975e44eba96e3..dcdb5926588a428947fd6c89c5b12ea3a7640d80 100644 (file)
@@ -38,7 +38,8 @@ class GEOMImpl_IShapes
     SHAPE_ARG_PLANAR    = 3, // for Face
     SHAPE_ARG_SUBTYPE   = 4, // for Sub-shape
     SHAPE_ARG_INDICES   = 5, // for Sub-shape
-    SHAPE_ARG_TOLERANCE = 6  // for Wire
+    SHAPE_ARG_TOLERANCE = 6, // linear tolerance (for Wire, Edge)
+    SHAPE_ARG_ANGLE_TOL = 7, // angular tolerance (for Edge)
   };
 
   GEOMImpl_IShapes(Handle(GEOM_Function) theFunction): _func(theFunction) {}
@@ -75,6 +76,11 @@ class GEOMImpl_IShapes
 
   Standard_Real GetTolerance() { return _func->GetReal(SHAPE_ARG_TOLERANCE); }
 
+  void SetAngularTolerance(const Standard_Real theValue)
+  { _func->SetReal(SHAPE_ARG_ANGLE_TOL, theValue); }
+
+  Standard_Real GetAngularTolerance() { return _func->GetReal(SHAPE_ARG_ANGLE_TOL); }
+
  private:
 
   Handle(GEOM_Function) _func;
index 2c5abaecb3a48eb70a5bc539dfe4f668ebcd0736..6e34f80a03e7f0960a68f971965cd597d3112cac 100644 (file)
@@ -65,6 +65,7 @@
 #include <TFunction_Logbook.hxx>
 #include <TDataStd_Integer.hxx>
 #include <TDataStd_IntegerArray.hxx>
+#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
 #include <TDF_Tool.hxx>
 
 #include <BRepExtrema_ExtCF.hxx>
@@ -209,6 +210,77 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdge
   return anEdge;
 }
 
+//=============================================================================
+/*!
+ *  MakeEdgeWire
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeEdgeWire
+                    (Handle(GEOM_Object) theWire,
+                     const Standard_Real theLinearTolerance,
+                     const Standard_Real theAngularTolerance)
+{
+  SetErrorCode(KO);
+
+  if (theWire.IsNull()) return NULL;
+
+  //Add a new Edge object
+  Handle(GEOM_Object) anEdge = GetEngine()->AddObject(GetDocID(), GEOM_EDGE);
+
+  //Add a new Vector function
+  Handle(GEOM_Function) aFunction =
+    anEdge->AddFunction(GEOMImpl_ShapeDriver::GetID(), EDGE_WIRE);
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) return NULL;
+
+  GEOMImpl_IShapes aCI (aFunction);
+
+  Handle(GEOM_Function) aWire = theWire->GetLastFunction();
+
+  if (aWire.IsNull()) return NULL;
+
+  aCI.SetBase(aWire);
+  aCI.SetTolerance(theLinearTolerance);
+  aCI.SetAngularTolerance(theAngularTolerance);
+
+  //Compute the Edge value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Shape driver failed");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  const double DEF_LIN_TOL = Precision::Confusion();
+  const double DEF_ANG_TOL = Precision::Angular();
+  //Make a Python command
+  if ( theAngularTolerance == DEF_ANG_TOL ) {
+    if ( theLinearTolerance == DEF_LIN_TOL )
+      GEOM::TPythonDump(aFunction) << anEdge  << " = geompy.MakeEdgeWire("
+                                   << theWire << ")";
+    else 
+      GEOM::TPythonDump(aFunction) << anEdge  << " = geompy.MakeEdgeWire("
+                                   << theWire << ", " << theLinearTolerance << ")";
+  }
+  else {
+    GEOM::TPythonDump(aFunction) << anEdge  << " = geompy.MakeEdgeWire("
+                                 << theWire << ", " << theLinearTolerance << ", "
+                                 << theAngularTolerance << ")";
+  }
+
+  SetErrorCode(OK);
+  return anEdge;
+}
+
 //=============================================================================
 /*!
  *  MakeWire
@@ -434,60 +506,6 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSolidShells
   return MakeShape(theShapes, GEOM_SOLID, SOLID_SHELLS, "MakeSolid");
 }
 
-//=============================================================================
-/*!
- *  MakeSolidShell
- */
-//=============================================================================
-Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeSolidShell (Handle(GEOM_Object) theShell)
-{
-  SetErrorCode(KO);
-
-  if (theShell.IsNull()) return NULL;
-
-  //Add a new Solid object
-  Handle(GEOM_Object) aSolid = GetEngine()->AddObject(GetDocID(), GEOM_SOLID);
-
-  //Add a new Solid function for creation of a solid from a shell
-  Handle(GEOM_Function) aFunction =
-    aSolid->AddFunction(GEOMImpl_ShapeDriver::GetID(), SOLID_SHELL);
-  if (aFunction.IsNull()) return NULL;
-
-  //Check if the function is set correctly
-  if (aFunction->GetDriverGUID() != GEOMImpl_ShapeDriver::GetID()) return NULL;
-
-  GEOMImpl_IShapes aCI (aFunction);
-
-  Handle(GEOM_Function) aRefShell = theShell->GetLastFunction();
-
-  if (aRefShell.IsNull()) return NULL;
-
-  aCI.SetBase(aRefShell);
-
-  //Compute the Solid value
-  try {
-#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
-    OCC_CATCH_SIGNALS;
-#endif
-    if (!GetSolver()->ComputeFunction(aFunction)) {
-      SetErrorCode("Solid driver failed");
-      return NULL;
-    }
-  }
-  catch (Standard_Failure) {
-    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
-    SetErrorCode(aFail->GetMessageString());
-    return NULL;
-  }
-
-  //Make a Python command
-  GEOM::TPythonDump(aFunction) << aSolid
-    << " = geompy.MakeSolid(" << theShell << ")";
-
-  SetErrorCode(OK);
-  return aSolid;
-}
-
 //=============================================================================
 /*!
  *  MakeCompound
@@ -802,6 +820,70 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::MakeGlueFacesByList
   return aGlued;
 }
 
+//=============================================================================
+/*!
+ *  GetExistingSubObjects
+ */
+//=============================================================================
+Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::GetExistingSubObjects
+                                          (Handle(GEOM_Object)    theShape,
+                                           const Standard_Boolean theGroupsOnly)
+{
+  SetErrorCode(KO);
+
+  if (theShape.IsNull()) return NULL;
+
+  Handle(GEOM_Function) aMainShape = theShape->GetLastFunction();
+  if (aMainShape.IsNull()) return NULL;
+
+  Handle(TColStd_HSequenceOfTransient) aSeq = new TColStd_HSequenceOfTransient;
+  SetErrorCode(NOT_FOUND_ANY);
+
+  if (!aMainShape->HasSubShapeReferences()) return aSeq;
+  const TDataStd_ListOfExtendedString& aListEntries = aMainShape->GetSubShapeReferences();
+  if (aListEntries.IsEmpty()) return aSeq;
+
+  SetErrorCode(KO);
+
+  TCollection_AsciiString anAsciiList;
+
+  TDataStd_ListIteratorOfListOfExtendedString anIt (aListEntries);
+  for (; anIt.More(); anIt.Next()) {
+    TCollection_ExtendedString anEntry = anIt.Value();
+    Standard_Integer aStrLen = anEntry.LengthOfCString();
+    char* anEntryStr = new char[aStrLen];
+    anEntry.ToUTF8CString(anEntryStr);
+    Handle(GEOM_Object) anObj = GetEngine()->GetObject(GetDocID(), anEntryStr, false);
+    if (!anObj.IsNull()) {
+      if (!theGroupsOnly || anObj->GetType() == GEOM_GROUP) {
+        aSeq->Append(anObj);
+
+        // for python command
+        anAsciiList += anEntryStr;
+        anAsciiList += ",";
+      }
+    }
+    delete [] anEntryStr;
+  }
+
+  if (aSeq->Length() == 0) {
+    SetErrorCode(NOT_FOUND_ANY);
+    return aSeq;
+  }
+
+  //Make a Python command
+  anAsciiList.Trunc(anAsciiList.Length() - 1);
+
+  GEOM::TPythonDump pd (aMainShape, /*append=*/true);
+  pd << "[" << anAsciiList.ToCString();
+  pd << "] = geompy.GetExistingSubObjects(";
+  pd << theShape << ", " << (int)theGroupsOnly << ")";
+
+  SetErrorCode(OK);
+
+  return aSeq;
+}
+
 //=============================================================================
 /*!
  *  MakeExplode
@@ -839,7 +921,9 @@ Handle(TColStd_HSequenceOfTransient) GEOMImpl_IShapesOperations::MakeExplode
         }
       }
     }
-  } else {
+  }
+  else if ( aShape.ShapeType() != theShapeType ) // issue 0021079, prevent from returning aShape
+  {
     TopExp_Explorer exp (aShape, TopAbs_ShapeEnum(theShapeType));
     for (; exp.More(); exp.Next())
       if (mapShape.Add(exp.Current()))
@@ -944,7 +1028,8 @@ Handle(TColStd_HSequenceOfInteger) GEOMImpl_IShapesOperations::SubShapeAllIDs
         }
       }
     }
-  } else {
+  } else  if ( aShape.ShapeType() != theShapeType ) // issue 0021079, prevent from returning aShape
+  {
     TopExp_Explorer exp (aShape, TopAbs_ShapeEnum(theShapeType));
     for (; exp.More(); exp.Next())
       if (mapShape.Add(exp.Current()))
@@ -2054,9 +2139,31 @@ Handle(TColStd_HSequenceOfInteger)
     return aSeqOfIDs;
   }
 
+  // BEGIN: Mantis issue 0020961: Error on a pipe T-Shape
+  // Compute tolerance
+  Standard_Real T, VertMax = -RealLast();
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    for (TopExp_Explorer ExV (theShape, TopAbs_VERTEX); ExV.More(); ExV.Next()) {
+      TopoDS_Vertex Vertex = TopoDS::Vertex(ExV.Current());
+      T = BRep_Tool::Tolerance(Vertex);
+      if (T > VertMax)
+        VertMax = T;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return aSeqOfIDs;
+  }
+  // END: Mantis issue 0020961
+
   // Call algo
   GEOMAlgo_FinderShapeOn1 aFinder;
-  Standard_Real aTol = 0.0001; // default value
+  //Standard_Real aTol = 0.0001; // default value
+  Standard_Real aTol = VertMax; // Mantis issue 0020961
 
   aFinder.SetShape(theShape);
   aFinder.SetTolerance(aTol);
@@ -3239,7 +3346,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
   bool isFound = false;
   Standard_Integer iType = TopAbs_SOLID;
   Standard_Integer compType = TopAbs_SOLID;
-  Standard_Real    aWhat_Mass = 0., aWhere_Mass = 0.;
+  //Standard_Real    aWhat_Mass = 0., aWhere_Mass = 0.;
   Standard_Real    tab_aWhat[4],    tab_aWhere[4];
   Standard_Real    dl_l = 1e-3;
   Standard_Real    min_l, Tol_0D, Tol_1D, Tol_2D, Tol_3D, Tol_Mass;
@@ -3282,6 +3389,11 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
   if( min_l < fabs(aYmax - aYmin) ) min_l = fabs(aYmax - aYmin);
   if( min_l < fabs(aZmax - aZmin) ) min_l = fabs(aZmax - aZmin);
   min_l /= dl_l;
+  // Mantis issue 0020908 BEGIN
+  if (!Exp_Edge.More()) {
+    min_l = Precision::Confusion();
+  }
+  // Mantis issue 0020908 END
   for ( Standard_Integer nbEdge = 0; Exp_Edge.More(); Exp_Edge.Next(), nbEdge++ ) {
     TopExp_Explorer Exp_Vertex( Exp_Edge.Current(), TopAbs_VERTEX);
     for ( Standard_Integer nbVertex = 0; Exp_Vertex.More(); Exp_Vertex.Next(), nbVertex++ ) {
@@ -3315,6 +3427,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
   else if ( iType == TopAbs_FACE ) Tol_Mass = Tol_2D;
 
   // Compute the ShapeWhat Mass
+  /*
   for ( ; Exp_aWhat.More(); Exp_aWhat.Next() ) {
     if ( iType == TopAbs_VERTEX ) {
       aWhat_Mass += 1;
@@ -3325,6 +3438,7 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
     else                             BRepGProp::VolumeProperties(Exp_aWhat.Current(),  aProps);
     aWhat_Mass += aProps.Mass();
   }
+  */
 
   // Searching for the sub-shapes inside the ShapeWhere shape
   TopTools_MapOfShape map_aWhere;
@@ -3366,12 +3480,13 @@ Handle(GEOM_Object) GEOMImpl_IShapesOperations::GetInPlace (Handle(GEOM_Object)
       if ( isFound ) {
         aWhereIndex = aWhereIndices.FindIndex(Exp_aWhere.Current());
         aModifiedList.Append(aWhereIndex);
-        aWhere_Mass += tab_aWhere[3];
+        //aWhere_Mass += tab_aWhere[3];
         isFound = false;
         break;
       }
     }
-    if ( fabs( aWhat_Mass - aWhere_Mass ) <= Tol_Mass ) break;
+    //if ( fabs( aWhat_Mass - aWhere_Mass ) <= Tol_Mass )
+      //break;
   }
 
   if (aModifiedList.Extent() == 0) { // Not found any Results
index 1bb38448634701dab3be59a62ed30dc53eb35408..8f3132a932eb8871586af0f1ea78276e7feaea9d 100644 (file)
@@ -54,7 +54,10 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
   Standard_EXPORT ~GEOMImpl_IShapesOperations();
 
   Standard_EXPORT Handle(GEOM_Object) MakeEdge (Handle(GEOM_Object) thePoint1,
-                                                Handle(GEOM_Object) thePoint2);
+                                               Handle(GEOM_Object) thePoint2);
+  Standard_EXPORT Handle(GEOM_Object) MakeEdgeWire (Handle(GEOM_Object) theWire,
+                                                   const Standard_Real theLinearTolerance,
+                                                   const Standard_Real theAngularTolerance);
 
   Standard_EXPORT Handle(GEOM_Object) MakeWire (std::list<Handle(GEOM_Object)> theEdgesAndWires,
                                                 const Standard_Real            theTolerance);
@@ -66,8 +69,6 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
 
   Standard_EXPORT Handle(GEOM_Object) MakeShell (std::list<Handle(GEOM_Object)> theShapes);
 
-  Standard_EXPORT Handle(GEOM_Object) MakeSolidShell (Handle(GEOM_Object) theShell);
-
   Standard_EXPORT Handle(GEOM_Object) MakeSolidShells (std::list<Handle(GEOM_Object)> theShells);
 
   Standard_EXPORT Handle(GEOM_Object) MakeCompound (std::list<Handle(GEOM_Object)> theShapes);
@@ -84,6 +85,10 @@ class GEOMImpl_IShapesOperations : public GEOM_IOperations
                                                            std::list<Handle(GEOM_Object)> theFaces,
                                                            const Standard_Boolean doKeepNonSolids);
 
+  Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetExistingSubObjects
+    (Handle(GEOM_Object)    theShape,
+     const Standard_Boolean theGroupsOnly);
+  
   Standard_EXPORT Handle(TColStd_HSequenceOfTransient) MakeExplode
     (Handle(GEOM_Object)    theShape,
      const Standard_Integer theShapeType,
index 744bdc20005147727b9e3a45d90087701c44e813..42ab3f44fd3d07f68be91a2b5279a34f585cab95 100644 (file)
@@ -1252,7 +1252,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::PositionShape
   aTI.SetShape(anOriginal);
   aTI.SetEndLCS(theEndLCS->GetLastFunction());
   if (!theStartLCS.IsNull())
-    aTI.SetStartLCS(theStartLCS->GetLastFunction());
+    aTI.SetStartLCS(theObject == theStartLCS ? anOriginal : theStartLCS->GetLastFunction());
 
   //Compute the Position
   try {
index a4b0300f44d851bd948e3cbfc9e5bccf14fee137..f28f5ea9d37b380eefbf871ba495e8ba800c7b53 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
@@ -109,7 +108,7 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const
 
   // perform the import
   TCollection_AsciiString anError;
-  TopoDS_Shape aShape = fp( aFileName, aFormatName, anError, aFunction->GetEntry() );
+  TopoDS_Shape aShape = fp(aFileName, aFormatName, anError, aFunction->GetNamingEntry());
 
   // unload plugin library
   // commented by enk:
@@ -159,7 +158,8 @@ Standard_EXPORT Handle_Standard_Type& GEOMImpl_ImportDriver_Type_()
 //function : DownCast
 //purpose  :
 //=======================================================================
-const Handle(GEOMImpl_ImportDriver) Handle(GEOMImpl_ImportDriver)::DownCast(const Handle(Standard_Transient)& AnObject)
+const Handle(GEOMImpl_ImportDriver) Handle(GEOMImpl_ImportDriver)::DownCast
+                               (const Handle(Standard_Transient)& AnObject)
 {
   Handle(GEOMImpl_ImportDriver) _anOtherObject;
 
@@ -169,5 +169,5 @@ const Handle(GEOMImpl_ImportDriver) Handle(GEOMImpl_ImportDriver)::DownCast(cons
      }
   }
 
-  return _anOtherObject ;
+  return _anOtherObject;
 }
index 70a0fb545911ceec6943582553dfd38f87e66bc8..c3b9cd0ca273bf8c9eb11df46c53146047ade569 100644 (file)
@@ -216,6 +216,17 @@ Standard_Integer GEOMImpl_MeasureDriver::Execute(TFunction_Logbook& log) const
     gp_Vec Vec1,Vec2;
     BRepAdaptor_Surface SF (aFace);
     SF.D1(pUV.X(), pUV.Y(), p1, Vec1, Vec2);
+    if (Vec1.Magnitude() < Precision::Confusion()) {
+      gp_Vec tmpV;
+      gp_Pnt tmpP;
+      SF.D1(pUV.X(), pUV.Y()-0.1, tmpP, Vec1, tmpV);
+    }
+    else if (Vec2.Magnitude() < Precision::Confusion()) {
+      gp_Vec tmpV;
+      gp_Pnt tmpP;
+      SF.D1(pUV.X()-0.1, pUV.Y(), tmpP, tmpV, Vec2);
+    }
+
     gp_Vec V = Vec1.Crossed(Vec2);
     Standard_Real mod = V.Magnitude();
     if (mod < Precision::Confusion())
index e6ff34fea83afac55a7c23b58041841e046fdd71..f6421fa4076329bf6aa0a69ce51b388f681fc8bd 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
 #include <GEOM_Object.hxx>
 #include <GEOM_Function.hxx>
 
-//#include <NMTAlgo_Splitter1.hxx>
 #include <GEOMAlgo_Splitter.hxx>
-#include <TopTools_IndexedMapOfShape.hxx>
 
 #include <TDataStd_IntegerArray.hxx>
+#include <TNaming_CopyShape.hxx>
 
+//#include <BRepBuilderAPI_Copy.hxx>
 #include <BRep_Tool.hxx>
 #include <BRepAlgo.hxx>
 
 #include <TopoDS_Wire.hxx>
 #include <TopoDS_Iterator.hxx>
 #include <TopTools_MapOfShape.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
+#include <TopTools_DataMapOfShapeShape.hxx>
 
 #include <ShapeFix_ShapeTolerance.hxx>
 #include <ShapeFix_Shape.hxx>
 
+#include <TColStd_IndexedDataMapOfTransientTransient.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <Standard_NullObject.hxx>
@@ -117,6 +119,9 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
   //sklNMTAlgo_Splitter1 PS;
   GEOMAlgo_Splitter PS;
 
+  TopTools_DataMapOfShapeShape aCopyMap;
+  TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
+
   if (aType == PARTITION_PARTITION || aType == PARTITION_NO_SELF_INTERSECTIONS)
   {
     Handle(TColStd_HSequenceOfTransient) aShapes  = aCI.GetShapes();
@@ -141,8 +146,27 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
         Standard_NullObject::Raise("In Partition a shape is null");
       }
       //
+      //BRepBuilderAPI_Copy aCopyTool (aShape_i);
+      TopoDS_Shape aShape_i_copy;
+      TNaming_CopyShape::CopyTool(aShape_i, aMapTShapes, aShape_i_copy);
+      //if (aCopyTool.IsDone())
+      //  aShape_i_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aShape_i_inds;
+      TopTools_IndexedMapOfShape aShape_i_copy_inds;
+      TopExp::MapShapes(aShape_i, aShape_i_inds);
+      TopExp::MapShapes(aShape_i_copy, aShape_i_copy_inds);
+      Standard_Integer nbInds = aShape_i_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aShape_i_inds.FindKey(ie), aShape_i_copy_inds.FindKey(ie));
+      }
+      //
       TopTools_ListOfShape aSimpleShapes;
-      PrepareShapes(aShape_i, aType, aSimpleShapes);
+      //PrepareShapes(aShape_i, aType, aSimpleShapes);
+      PrepareShapes(aShape_i_copy, aType, aSimpleShapes);
       TopTools_ListIteratorOfListOfShape aSimpleIter (aSimpleShapes);
       for (; aSimpleIter.More(); aSimpleIter.Next()) {
         const TopoDS_Shape& aSimpleSh = aSimpleIter.Value();
@@ -164,8 +188,27 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
         Standard_NullObject::Raise("In Partition a tool shape is null");
       }
       //
+      //BRepBuilderAPI_Copy aCopyTool (aShape_i);
+      TopoDS_Shape aShape_i_copy;
+      TNaming_CopyShape::CopyTool(aShape_i, aMapTShapes, aShape_i_copy);
+      //if (aCopyTool.IsDone())
+      //  aShape_i_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aShape_i_inds;
+      TopTools_IndexedMapOfShape aShape_i_copy_inds;
+      TopExp::MapShapes(aShape_i, aShape_i_inds);
+      TopExp::MapShapes(aShape_i_copy, aShape_i_copy_inds);
+      Standard_Integer nbInds = aShape_i_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aShape_i_inds.FindKey(ie), aShape_i_copy_inds.FindKey(ie));
+      }
+      //
       TopTools_ListOfShape aSimpleShapes;
-      PrepareShapes(aShape_i, aType, aSimpleShapes);
+      //PrepareShapes(aShape_i, aType, aSimpleShapes);
+      PrepareShapes(aShape_i_copy, aType, aSimpleShapes);
       TopTools_ListIteratorOfListOfShape aSimpleIter (aSimpleShapes);
       for (; aSimpleIter.More(); aSimpleIter.Next()) {
         const TopoDS_Shape& aSimpleSh = aSimpleIter.Value();
@@ -183,8 +226,27 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
         Standard_NullObject::Raise("In Partition a Keep Inside shape is null");
       }
       //
+      //BRepBuilderAPI_Copy aCopyTool (aShape_i);
+      TopoDS_Shape aShape_i_copy;
+      TNaming_CopyShape::CopyTool(aShape_i, aMapTShapes, aShape_i_copy);
+      //if (aCopyTool.IsDone())
+      //  aShape_i_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aShape_i_inds;
+      TopTools_IndexedMapOfShape aShape_i_copy_inds;
+      TopExp::MapShapes(aShape_i, aShape_i_inds);
+      TopExp::MapShapes(aShape_i_copy, aShape_i_copy_inds);
+      Standard_Integer nbInds = aShape_i_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aShape_i_inds.FindKey(ie), aShape_i_copy_inds.FindKey(ie));
+      }
+      //
       TopTools_ListOfShape aSimpleShapes;
-      PrepareShapes(aShape_i, aType, aSimpleShapes);
+      //PrepareShapes(aShape_i, aType, aSimpleShapes);
+      PrepareShapes(aShape_i_copy, aType, aSimpleShapes);
       TopTools_ListIteratorOfListOfShape aSimpleIter (aSimpleShapes);
       for (; aSimpleIter.More(); aSimpleIter.Next()) {
         const TopoDS_Shape& aSimpleSh = aSimpleIter.Value();
@@ -201,8 +263,27 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
         Standard_NullObject::Raise("In Partition a Remove Inside shape is null");
       }
       //
+      //BRepBuilderAPI_Copy aCopyTool (aShape_i);
+      TopoDS_Shape aShape_i_copy;
+      TNaming_CopyShape::CopyTool(aShape_i, aMapTShapes, aShape_i_copy);
+      //if (aCopyTool.IsDone())
+      //  aShape_i_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aShape_i_inds;
+      TopTools_IndexedMapOfShape aShape_i_copy_inds;
+      TopExp::MapShapes(aShape_i, aShape_i_inds);
+      TopExp::MapShapes(aShape_i_copy, aShape_i_copy_inds);
+      Standard_Integer nbInds = aShape_i_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aShape_i_inds.FindKey(ie), aShape_i_copy_inds.FindKey(ie));
+      }
+      //
       TopTools_ListOfShape aSimpleShapes;
-      PrepareShapes(aShape_i, aType, aSimpleShapes);
+      //PrepareShapes(aShape_i, aType, aSimpleShapes);
+      PrepareShapes(aShape_i_copy, aType, aSimpleShapes);
       TopTools_ListIteratorOfListOfShape aSimpleIter (aSimpleShapes);
       for (; aSimpleIter.More(); aSimpleIter.Next()) {
         const TopoDS_Shape& aSimpleSh = aSimpleIter.Value();
@@ -212,7 +293,7 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
     }
 
     PS.SetLimitMode(aCI.GetKeepNonlimitShapes());
-    PS.SetLimit( (TopAbs_ShapeEnum)aCI.GetLimit() );
+    PS.SetLimit((TopAbs_ShapeEnum)aCI.GetLimit());
     PS.Perform();
 
     //skl PS.Compute();
@@ -245,11 +326,52 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
       Standard_NullObject::Raise("In Half Partition a shape or a plane is null");
     }
 
+    TopoDS_Shape aShapeArg_copy;
+    TopoDS_Shape aPlaneArg_copy;
+    {
+      TNaming_CopyShape::CopyTool(aShapeArg, aMapTShapes, aShapeArg_copy);
+      //BRepBuilderAPI_Copy aCopyTool (aShapeArg);
+      //if (aCopyTool.IsDone())
+      //  aShapeArg_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aShapeArg_inds;
+      TopTools_IndexedMapOfShape aShapeArg_copy_inds;
+      TopExp::MapShapes(aShapeArg, aShapeArg_inds);
+      TopExp::MapShapes(aShapeArg_copy, aShapeArg_copy_inds);
+      Standard_Integer nbInds = aShapeArg_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aShapeArg_inds.FindKey(ie), aShapeArg_copy_inds.FindKey(ie));
+      }
+    }
+    {
+      TNaming_CopyShape::CopyTool(aPlaneArg, aMapTShapes, aPlaneArg_copy);
+      //BRepBuilderAPI_Copy aCopyTool (aPlaneArg);
+      //if (aCopyTool.IsDone())
+      //  aPlaneArg_copy = aCopyTool.Shape();
+      //else
+      //  Standard_NullObject::Raise("Bad shape detected");
+      //
+      // fill aCopyMap for history
+      TopTools_IndexedMapOfShape aPlaneArg_inds;
+      TopTools_IndexedMapOfShape aPlaneArg_copy_inds;
+      TopExp::MapShapes(aPlaneArg, aPlaneArg_inds);
+      TopExp::MapShapes(aPlaneArg_copy, aPlaneArg_copy_inds);
+      Standard_Integer nbInds = aPlaneArg_inds.Extent();
+      for (Standard_Integer ie = 1; ie <= nbInds; ie++) {
+        aCopyMap.Bind(aPlaneArg_inds.FindKey(ie), aPlaneArg_copy_inds.FindKey(ie));
+      }
+    }
+
     // add object shapes that are in ListShapes;
-    PS.AddShape(aShapeArg);
+    PS.AddShape(aShapeArg_copy);
+    //PS.AddShape(aShapeArg);
 
     // add tool shapes that are in ListTools and not in ListShapes;
-    PS.AddTool(aPlaneArg);
+    PS.AddTool(aPlaneArg_copy);
+    //PS.AddTool(aPlaneArg);
 
     //skl PS.Compute();
     PS.Perform();
@@ -293,6 +415,7 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
   const TopTools_IndexedDataMapOfShapeListOfShape& aMR = PS.ImagesResult();
 
   // history for all argument shapes
+  // be sure to use aCopyMap
   TDF_LabelSequence aLabelSeq;
   aFunction->GetDependency(aLabelSeq);
   Standard_Integer nbArg = aLabelSeq.Length();
@@ -314,6 +437,10 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
 
     for (Standard_Integer ie = 1; ie <= nbArgumentEntities; ie++) {
       TopoDS_Shape anEntity = anArgumentIndices.FindKey(ie);
+      // be sure to use aCopyMap here
+      if (aCopyMap.IsBound(anEntity))
+        anEntity = aCopyMap.Find(anEntity);
+      //
       if (!aMR.Contains(anEntity)) continue;
 
       const TopTools_ListOfShape& aModified = aMR.FindFromKey(anEntity);
@@ -346,21 +473,17 @@ Standard_Integer GEOMImpl_PartitionDriver::Execute(TFunction_Logbook& log) const
 //=======================================================================
 Standard_EXPORT Handle_Standard_Type& GEOMImpl_PartitionDriver_Type_()
 {
-
   static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver);
-  if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver);
+  if (aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver);
   static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared);
-  if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared);
+  if (aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared);
   static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient);
-  if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient);
-
+  if (aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient);
 
-  static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
-  static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_PartitionDriver",
-                                                         sizeof(GEOMImpl_PartitionDriver),
-                                                         1,
-                                                         (Standard_Address)_Ancestors,
-                                                         (Standard_Address)NULL);
+  static Handle_Standard_Transient _Ancestors[] = {aType1,aType2,aType3,NULL};
+  static Handle_Standard_Type _aType =
+    new Standard_Type ("GEOMImpl_PartitionDriver", sizeof(GEOMImpl_PartitionDriver),
+                       1, (Standard_Address)_Ancestors, (Standard_Address)NULL);
 
   return _aType;
 }
@@ -379,5 +502,5 @@ const Handle(GEOMImpl_PartitionDriver) Handle(GEOMImpl_PartitionDriver)::DownCas
      }
   }
 
-  return _anOtherObject ;
+  return _anOtherObject;
 }
index 6990682cf2e64ff254eb37f746b35def5c212ec1..334bfbc0963c9b006a8272c07a8bbba5e2ebdf5d 100644 (file)
@@ -31,6 +31,7 @@
 // OCCT Includes
 #include <ShapeFix_Wire.hxx>
 #include <ShapeFix_Edge.hxx>
+#include <ShapeFix_Shape.hxx>
 
 #include <BRep_Tool.hxx>
 #include <BRep_Builder.hxx>
 #include <BRepClass3d_SolidClassifier.hxx>
 #include <BRepBuilderAPI_MakeWire.hxx>
 #include <BRepBuilderAPI_Sewing.hxx>
+#include <BRepLib.hxx>
+#include <BRepLib_MakeEdge.hxx>
+#include <BRepTools_WireExplorer.hxx>
+#include <BRepAdaptor_Curve.hxx>
 
 #include <ShapeAnalysis_FreeBounds.hxx>
+#include <ElCLib.hxx>
 
 #include <TopAbs.hxx>
 #include <TopoDS.hxx>
 #include <TopTools_MapOfShape.hxx>
 #include <TopTools_HSequenceOfShape.hxx>
 
+#include <TColStd_SequenceOfReal.hxx>
 #include <TColStd_HSequenceOfTransient.hxx>
+#include <TColStd_Array1OfReal.hxx>
+#include <TColGeom_SequenceOfCurve.hxx>
+#include <TColGeom_Array1OfBSplineCurve.hxx>
+#include <TColGeom_HArray1OfBSplineCurve.hxx>
+
+#include <GeomAbs_CurveType.hxx>
+#include <Geom_TrimmedCurve.hxx>
+#include <GeomConvert_CompCurveToBSplineCurve.hxx>
+#include <GeomConvert.hxx>
+#include <GeomLProp.hxx>
 
 #include <Precision.hxx>
 #include <Standard_NullObject.hxx>
@@ -441,6 +458,342 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
       aShape = tds;
     }
   }
+  else if (aType == EDGE_WIRE) {
+    Handle(GEOM_Function) aRefBase = aCI.GetBase();
+    TopoDS_Shape aWire = aRefBase->GetValue();
+    Standard_Real LinTol = aCI.GetTolerance();
+    Standard_Real AngTol = aCI.GetAngularTolerance();
+    if (aWire.IsNull()) Standard_NullObject::Raise("Argument Wire is null");
+
+    TopoDS_Edge ResEdge;
+
+    BRepLib::BuildCurves3d(aWire);
+    Handle(ShapeFix_Shape) Fixer = new ShapeFix_Shape(aWire);
+    Fixer->SetPrecision(LinTol);
+    Fixer->SetMaxTolerance(LinTol);
+    Fixer->Perform();
+    TopoDS_Wire theWire = TopoDS::Wire(Fixer->Shape());
+
+    TColGeom_SequenceOfCurve CurveSeq;
+    TopTools_SequenceOfShape LocSeq;
+    TColStd_SequenceOfReal FparSeq;
+    TColStd_SequenceOfReal LparSeq;
+    TColStd_SequenceOfReal TolSeq;
+    GeomAbs_CurveType CurType;
+    TopoDS_Vertex FirstVertex, LastVertex;
+
+    BRepTools_WireExplorer wexp(theWire) ;
+    for (; wexp.More(); wexp.Next())
+    {
+      TopoDS_Edge anEdge = wexp.Current();
+      Standard_Real fpar, lpar;
+      TopLoc_Location aLoc;
+      Handle(Geom_Curve) aCurve = BRep_Tool::Curve(anEdge, aLoc, fpar, lpar);
+      if (aCurve.IsNull())
+        continue;
+
+      BRepAdaptor_Curve BAcurve(anEdge);
+      GeomAbs_CurveType aType = BAcurve.GetType();
+
+      Handle(Geom_Curve) aBasisCurve = BAcurve.Curve().Curve();
+
+      if (aBasisCurve->IsPeriodic())
+        ElCLib::AdjustPeriodic(aBasisCurve->FirstParameter(), aBasisCurve->LastParameter(),
+                               Precision::PConfusion(), fpar, lpar);
+
+      if (CurveSeq.IsEmpty())
+      {
+        CurveSeq.Append(aCurve);
+        TopoDS_Shape aLocShape;
+        aLocShape.Location(aLoc);
+        aLocShape.Orientation(wexp.Orientation());
+        LocSeq.Append(aLocShape);
+        FparSeq.Append(fpar);
+        LparSeq.Append(lpar);
+        CurType = aType;
+        FirstVertex = wexp.CurrentVertex();
+      }
+      else
+      {
+        Standard_Boolean Done = Standard_False;
+        Standard_Real NewFpar, NewLpar;
+        GeomAdaptor_Curve GAprevcurve(CurveSeq.Last());
+        TopoDS_Vertex CurVertex = wexp.CurrentVertex();
+        TopoDS_Vertex CurFirstVer = TopExp::FirstVertex(anEdge);
+        TopAbs_Orientation ConnectByOrigin = (CurVertex.IsSame(CurFirstVer))? TopAbs_FORWARD : TopAbs_REVERSED;
+        if (aCurve == CurveSeq.Last())
+        {
+          NewFpar = fpar;
+          NewLpar = lpar;
+          if (aBasisCurve->IsPeriodic())
+          {
+            if (NewLpar < NewFpar)
+              NewLpar += aBasisCurve->Period();
+            if (ConnectByOrigin == TopAbs_FORWARD)
+              ElCLib::AdjustPeriodic(FparSeq.Last(),
+                                     FparSeq.Last() + aBasisCurve->Period(),
+                                     Precision::PConfusion(), NewFpar, NewLpar);
+            else
+              ElCLib::AdjustPeriodic(FparSeq.Last() - aBasisCurve->Period(),
+                                     FparSeq.Last(),
+                                     Precision::PConfusion(), NewFpar, NewLpar);
+          }
+          Done = Standard_True;
+        }
+        else if (aType == CurType &&
+                 aType != GeomAbs_BezierCurve &&
+                 aType != GeomAbs_BSplineCurve &&
+                 aType != GeomAbs_OtherCurve)
+        {
+          switch (aType)
+          {
+          case GeomAbs_Line:
+            {
+              gp_Lin aLine    = BAcurve.Line();
+              gp_Lin PrevLine = GAprevcurve.Line(); 
+              if (aLine.Contains(PrevLine.Location(), LinTol) &&
+                  aLine.Direction().IsParallel(PrevLine.Direction(), AngTol))
+              {
+                gp_Pnt P1 = ElCLib::Value(fpar, aLine);
+                gp_Pnt P2 = ElCLib::Value(lpar, aLine);
+                NewFpar = ElCLib::Parameter(PrevLine, P1);
+                NewLpar = ElCLib::Parameter(PrevLine, P2);
+                if (NewLpar < NewFpar)
+                {
+                  Standard_Real MemNewFpar = NewFpar;
+                  NewFpar = NewLpar;
+                  NewLpar = MemNewFpar;
+                  ConnectByOrigin = TopAbs::Reverse(ConnectByOrigin);
+                }
+                Done = Standard_True;
+              }
+              break;
+            }
+          case GeomAbs_Circle:
+            {
+              gp_Circ aCircle    = BAcurve.Circle();
+              gp_Circ PrevCircle = GAprevcurve.Circle();
+              if (aCircle.Location().Distance(PrevCircle.Location()) <= LinTol &&
+                  Abs(aCircle.Radius() - PrevCircle.Radius()) <= LinTol &&
+                  aCircle.Axis().IsParallel(PrevCircle.Axis(), AngTol))
+              {
+                if (aCircle.Axis().Direction() * PrevCircle.Axis().Direction() < 0.)
+                {
+                  Standard_Real memfpar = fpar;
+                  fpar = lpar;
+                  lpar = memfpar;
+                  ConnectByOrigin = TopAbs::Reverse(ConnectByOrigin);
+                }
+                gp_Pnt P1 = ElCLib::Value(fpar, aCircle);
+                gp_Pnt P2 = ElCLib::Value(lpar, aCircle);
+                NewFpar = ElCLib::Parameter(PrevCircle, P1);
+                NewLpar = ElCLib::Parameter(PrevCircle, P2);
+                if (NewLpar < NewFpar)
+                  NewLpar += 2.*PI;
+                //Standard_Real MemNewFpar = NewFpar, MemNewLpar =  NewLpar;
+                if (ConnectByOrigin == TopAbs_FORWARD)
+                  ElCLib::AdjustPeriodic(FparSeq.Last(),
+                                         FparSeq.Last() + 2.*PI,
+                                         Precision::PConfusion(), NewFpar, NewLpar);
+                else
+                  ElCLib::AdjustPeriodic(FparSeq.Last() - 2.*PI,
+                                         FparSeq.Last(),
+                                         Precision::PConfusion(), NewFpar, NewLpar);
+                Done = Standard_True;
+              }
+              break;
+            }
+          case GeomAbs_Ellipse:
+            {
+              gp_Elips anEllipse   = BAcurve.Ellipse();
+              gp_Elips PrevEllipse = GAprevcurve.Ellipse();
+              if (anEllipse.Focus1().Distance(PrevEllipse.Focus1()) <= LinTol &&
+                  anEllipse.Focus2().Distance(PrevEllipse.Focus2()) <= LinTol &&
+                  Abs(anEllipse.MajorRadius() - PrevEllipse.MajorRadius()) <= LinTol &&
+                  Abs(anEllipse.MinorRadius() - PrevEllipse.MinorRadius()) <= LinTol &&
+                  anEllipse.Axis().IsParallel(PrevEllipse.Axis(), AngTol))
+              {
+                if (anEllipse.Axis().Direction() * PrevEllipse.Axis().Direction() < 0.)
+                {
+                  Standard_Real memfpar = fpar;
+                  fpar = lpar;
+                  lpar = memfpar;
+                  ConnectByOrigin = TopAbs::Reverse(ConnectByOrigin);
+                }
+                gp_Pnt P1 = ElCLib::Value(fpar, anEllipse);
+                gp_Pnt P2 = ElCLib::Value(lpar, anEllipse);
+                NewFpar = ElCLib::Parameter(PrevEllipse, P1);
+                NewLpar = ElCLib::Parameter(PrevEllipse, P2);
+                if (NewLpar < NewFpar)
+                  NewLpar += 2.*PI;
+                if (ConnectByOrigin == TopAbs_FORWARD)
+                  ElCLib::AdjustPeriodic(FparSeq.Last(),
+                                         FparSeq.Last() + 2.*PI,
+                                         Precision::PConfusion(), NewFpar, NewLpar);
+                else
+                  ElCLib::AdjustPeriodic(FparSeq.Last() - 2.*PI,
+                                         FparSeq.Last(),
+                                         Precision::PConfusion(), NewFpar, NewLpar);
+                Done = Standard_True;
+              }
+              break;
+            }
+          case GeomAbs_Hyperbola:
+            {
+              gp_Hypr aHypr    = BAcurve.Hyperbola();
+              gp_Hypr PrevHypr = GAprevcurve.Hyperbola();
+              if (aHypr.Focus1().Distance(PrevHypr.Focus1()) <= LinTol &&
+                  aHypr.Focus2().Distance(PrevHypr.Focus2()) <= LinTol &&
+                  Abs(aHypr.MajorRadius() - PrevHypr.MajorRadius()) <= LinTol &&
+                  Abs(aHypr.MinorRadius() - PrevHypr.MinorRadius()) <= LinTol &&
+                  aHypr.Axis().IsParallel(PrevHypr.Axis(), AngTol))
+              {
+                gp_Pnt P1 = ElCLib::Value(fpar, aHypr);
+                gp_Pnt P2 = ElCLib::Value(lpar, aHypr);
+                NewFpar = ElCLib::Parameter(PrevHypr, P1);
+                NewLpar = ElCLib::Parameter(PrevHypr, P2);
+                if (NewLpar < NewFpar)
+                {
+                  Standard_Real MemNewFpar = NewFpar;
+                  NewFpar = NewLpar;
+                  NewLpar = MemNewFpar;
+                  ConnectByOrigin = TopAbs::Reverse(ConnectByOrigin);
+                }
+                Done = Standard_True;
+              }
+              break;
+            }
+          case GeomAbs_Parabola:
+            {
+              gp_Parab aParab    = BAcurve.Parabola();
+              gp_Parab PrevParab = GAprevcurve.Parabola();
+              if (aParab.Location().Distance(PrevParab.Location()) <= LinTol &&
+                  aParab.Focus().Distance(PrevParab.Focus()) <= LinTol &&
+                  Abs(aParab.Focal() - PrevParab.Focal()) <= LinTol &&
+                  aParab.Axis().IsParallel(PrevParab.Axis(), AngTol))
+              {
+                gp_Pnt P1 = ElCLib::Value(fpar, aParab);
+                gp_Pnt P2 = ElCLib::Value(lpar, aParab);
+                NewFpar = ElCLib::Parameter(PrevParab, P1);
+                NewLpar = ElCLib::Parameter(PrevParab, P2);
+                if (NewLpar < NewFpar)
+                {
+                  Standard_Real MemNewFpar = NewFpar;
+                  NewFpar = NewLpar;
+                  NewLpar = MemNewFpar;
+                  ConnectByOrigin = TopAbs::Reverse(ConnectByOrigin);
+                }
+                Done = Standard_True;
+              }
+              break;
+            }
+          } //end of switch (aType)
+        } // end of else if (aType == CurType && ...
+        if (Done)
+        {
+          if (NewFpar < FparSeq.Last())
+            FparSeq(FparSeq.Length()) = NewFpar;
+          else
+            LparSeq(LparSeq.Length()) = NewLpar;
+        }
+        else
+        {
+          CurveSeq.Append(aCurve);
+          TopoDS_Shape aLocShape;
+          aLocShape.Location(aLoc);
+          aLocShape.Orientation(wexp.Orientation());
+          LocSeq.Append(aLocShape);
+          FparSeq.Append(fpar);
+          LparSeq.Append(lpar);
+          TolSeq.Append(BRep_Tool::Tolerance(CurVertex));
+          CurType = aType;
+        }
+      } // end of else (CurveSeq.IsEmpty()) -> not first time
+    } // end for (; wexp.More(); wexp.Next())
+
+    LastVertex = wexp.CurrentVertex();
+    TolSeq.Append(BRep_Tool::Tolerance(LastVertex));
+
+    if (!CurveSeq.IsEmpty())
+    {
+      Standard_Integer nb_curve = CurveSeq.Length();   //number of curves
+      TColGeom_Array1OfBSplineCurve tab(0,nb_curve-1);                    //array of the curves
+      TColStd_Array1OfReal tabtolvertex(0,nb_curve-1); //(0,nb_curve-2);  //array of the tolerances
+      
+      Standard_Integer i;
+      
+      if (nb_curve > 1)
+      {
+        for (i = 1; i <= nb_curve; i++)
+        {
+          if (CurveSeq(i)->IsInstance(STANDARD_TYPE(Geom_TrimmedCurve)))
+            CurveSeq(i) = (*((Handle(Geom_TrimmedCurve)*)&(CurveSeq(i))))->BasisCurve();
+          
+          Handle(Geom_TrimmedCurve) aTrCurve = new Geom_TrimmedCurve(CurveSeq(i), FparSeq(i), LparSeq(i));
+          tab(i-1) = GeomConvert::CurveToBSplineCurve(aTrCurve);
+          tab(i-1)->Transform(LocSeq(i).Location().Transformation());
+          GeomConvert::C0BSplineToC1BSplineCurve(tab(i-1), Precision::Confusion());
+          if (LocSeq(i).Orientation() == TopAbs_REVERSED)
+            tab(i-1)->Reverse();
+          
+          //Temporary
+          //char* name = new char[100];
+          //sprintf(name, "c%d", i);
+          //DrawTrSurf::Set(name, tab(i-1));
+          
+          if (i > 1)
+            tabtolvertex(i-2) = TolSeq(i-1);
+        } // end for (i = 1; i <= nb_curve; i++)
+        tabtolvertex(nb_curve-1) = TolSeq(TolSeq.Length());
+        
+        Standard_Boolean closed_flag = Standard_False;
+        Standard_Real closed_tolerance = 0.;
+        if (FirstVertex.IsSame(LastVertex) &&
+            GeomLProp::Continuity(tab(0), tab(nb_curve-1),
+                                  tab(0)->FirstParameter(),
+                                  tab(nb_curve-1)->LastParameter(),
+                                  Standard_False, Standard_False, LinTol, AngTol) >= GeomAbs_G1)
+        {
+          closed_flag = Standard_True ;
+          closed_tolerance = BRep_Tool::Tolerance(FirstVertex);
+        }
+        
+        Handle(TColGeom_HArray1OfBSplineCurve)  concatcurve;     //array of the concatenated curves
+        Handle(TColStd_HArray1OfInteger)        ArrayOfIndices;  //array of the remining Vertex
+        GeomConvert::ConcatC1(tab,
+                              tabtolvertex,
+                              ArrayOfIndices,
+                              concatcurve,
+                              closed_flag,
+                              closed_tolerance);   //C1 concatenation
+        
+        if (concatcurve->Length() > 1)
+        {
+          GeomConvert_CompCurveToBSplineCurve Concat(concatcurve->Value(concatcurve->Lower()));
+          
+          for (i = concatcurve->Lower()+1; i <= concatcurve->Upper(); i++)
+            Concat.Add( concatcurve->Value(i), LinTol, Standard_True );
+          
+          concatcurve->SetValue(concatcurve->Lower(), Concat.BSplineCurve());
+        }
+        
+        ResEdge = BRepLib_MakeEdge(concatcurve->Value(concatcurve->Lower()),
+                                   FirstVertex, LastVertex);
+      }
+      else
+      {
+        if (CurveSeq(1)->IsInstance(STANDARD_TYPE(Geom_TrimmedCurve)))
+          CurveSeq(1) = (*((Handle(Geom_TrimmedCurve)*)&(CurveSeq(i))))->BasisCurve();
+        
+        CurveSeq(1)->Transform(LocSeq(1).Location().Transformation());
+        ResEdge = BRepLib_MakeEdge(CurveSeq(1),
+                                   FirstVertex, LastVertex,
+                                   FparSeq(1), LparSeq(1));
+      }
+    }
+      
+    aShape = ResEdge;
+  }
 
   if (aShape.IsNull()) return 0;
 
index b1d626427dad148325ce8ddf0f7e36db0bf09e71..b954ec438f89401f360fa1f53536d49e4b253d1f 100755 (executable)
 #define SUBSHAPE_NOT_SORTED 8
 #define FACE_WIRES          9
 #define REVERSE_ORIENTATION 10
+#define EDGE_WIRE           11
 
 #define ARCHIMEDE_TYPE 1
 
 #define SEWING             6
 #define DIVIDE_EDGE        7
 #define CHANGE_ORIENTATION 8
+#define LIMIT_TOLERANCE    9
 
 #define BASIC_FILLING 1
 
index a01872173af59d92675500d2c7cc63d7c9f84694..3d183d97602db3d7443623ad294c3298dc72d2eb 100644 (file)
@@ -334,9 +334,21 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
   case GEOMOp::OpTransparency:   // POPUP - TRANSPARENCY
     OnTransparency();
     break;
+  case GEOMOp::OpIncrTransparency: // SHORTCUT   - INCREASE TRANSPARENCY
+    OnChangeTransparency( true );
+    break;
+  case GEOMOp::OpDecrTransparency: // SHORTCUT   - DECREASE TRANSPARENCY
+    OnChangeTransparency( false );
+    break;
   case GEOMOp::OpIsos:           // POPUP - ISOS
     OnNbIsos();
     break;
+  case GEOMOp::OpIncrNbIsos:     // SHORTCUT   - INCREASE NB ISOLINES
+    OnNbIsos( INCR );
+    break;
+  case GEOMOp::OpDecrNbIsos:     // SHORTCUT   - DECREASE NB ISOLINES
+    OnNbIsos( DECR );
+    break;
   case GEOMOp::OpAutoColor:      // POPUP - AUTO COLOR
     OnAutoColor();
     break;
index ab7d404f38599f22cdb8f69172fb98116ebc67fe..09cdbd4e8e9e282aba8365f82f9415027ff625bb 100644 (file)
@@ -52,6 +52,8 @@ public:
   bool         OnGUIEvent( int, SUIT_Desktop* );
   virtual void deactivate();
 
+  enum ActionType { SHOWDLG, INCR, DECR };
+
 private:
   // Import and export topology methods
   bool         Import();
@@ -67,12 +69,15 @@ private:
   void         OnDisableAutoColor();
   void         OnColor();
   void         OnTransparency();
-  void         OnNbIsos();
+  void         OnNbIsos( ActionType actionType = SHOWDLG );
   void         OnDeflection();
   void         OnSelectOnly(int mode);
   void         OnShowHideChildren( bool );
   void         OnPointMarker();
 
+  // Shortcut commands
+  void         OnChangeTransparency( bool );
+
   // Recursive deletion of object with children
   void         removeObjectWithChildren( _PTR(SObject),
                                          _PTR(Study),
index fb05288a1731b37ca9414ed4a949b4ec401e901c..9efec8b19a1d4683cafae981648eecf39cf76aef 100644 (file)
@@ -325,6 +325,7 @@ void GEOMToolsGUI::OnColor()
             for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
               aView->SetColor( It.Value(), c );
             }
+           GeometryGUI::Modified();
           }
         } // if ( isVTK )
         else if ( isOCC ) {
@@ -382,6 +383,7 @@ void GEOMToolsGUI::OnColor()
                   anObject->SetColor( aSColor );
                   anObject->SetAutoColor( false );
                 }
+               GeometryGUI::Modified();
               }
             } // if c.isValid()
           } // first IO is not null
@@ -399,7 +401,88 @@ void GEOMToolsGUI::OnTransparency()
   dlg.exec();
 }
 
-void GEOMToolsGUI::OnNbIsos()
+void GEOMToolsGUI::OnChangeTransparency( bool increase )
+{
+ SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+  if ( !app )
+    return;
+  LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
+  if ( !aSelMgr )
+    return;
+  SALOME_ListIO selected;
+  aSelMgr->selectedObjects( selected );
+  if ( selected.IsEmpty() )
+    return;
+
+  Handle(SALOME_InteractiveObject) FirstIOS =  selected.First();
+  if ( FirstIOS.IsNull() )
+    return;
+
+  // Delta
+  float delta = 0.1; // VSR: 23/11/2010 (transparency value <= 0.05 is ignored)
+  if ( !increase )
+    delta *= -1;
+        
+  SUIT_ViewWindow* window = app->desktop()->activeWindow();
+  bool isOCC = ( window && window->getViewManager()->getType() == OCCViewer_Viewer::Type() );
+  bool isVTK = ( window && window->getViewManager()->getType() == SVTK_Viewer::Type() );
+
+  if ( isVTK ) {
+    SVTK_ViewWindow* vtkVW = dynamic_cast<SVTK_ViewWindow*>( window );
+    if ( !vtkVW )
+      return;
+    SVTK_View* aView = vtkVW->getView();
+   
+    float transp = aView->GetTransparency(FirstIOS);
+    
+    // Compute new transparency value
+    transp = transp + delta;
+    if ( transp < 0 )
+      transp = 0;
+    else if ( transp > 1 )
+      transp = 1;
+
+    for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+      aView->SetTransparency( It.Value(), transp );
+    }
+    aView->Repaint();
+    GeometryGUI::Modified();
+  } // if ( isVTK )
+        
+  else if ( isOCC ) {
+    GEOMBase* gb = new GEOMBase();
+    Standard_Boolean found;
+    Handle(GEOM_AISShape) aisShape;
+   
+    aisShape = gb->ConvertIOinGEOMAISShape( FirstIOS, found );
+    if( !found )
+      return;
+    float transp = aisShape->Transparency();
+
+    // Compute new transparency value
+    transp = transp + delta;
+    if ( transp < 0 )
+      transp = 0;
+    else if ( transp > 1 )
+      transp = 1;
+
+    OCCViewer_Viewer* vm = dynamic_cast<OCCViewer_Viewer*>( window->getViewManager()->getViewModel() );
+    if ( !vm )
+      return;
+    Handle(AIS_InteractiveContext) ic = vm->getAISContext();
+    for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
+      aisShape = gb->ConvertIOinGEOMAISShape( It.Value(), found );
+      if ( found ) {
+        ic->SetTransparency( aisShape, transp, false );
+        ic->Redisplay( aisShape, Standard_False, Standard_True );
+      }
+    } // for...
+    ic->UpdateCurrentViewer();
+    GeometryGUI::Modified();
+  } // if ( isOCC )
+}
+
+void GEOMToolsGUI::OnNbIsos( ActionType actionType )
 {
   SUIT_ViewWindow* window = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
 
@@ -419,29 +502,47 @@ void GEOMToolsGUI::OnNbIsos()
       int UIso = CurDrawer->UIsoAspect()->Number();
       int VIso = CurDrawer->VIsoAspect()->Number();
 
-      GEOMToolsGUI_NbIsosDlg * NbIsosDlg =
-        new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
+      int newNbUIso = -1;
+      int newNbVIso = -1;
 
-      NbIsosDlg->setU( UIso );
-      NbIsosDlg->setV( VIso );
+      if ( actionType == SHOWDLG ) {
+       GEOMToolsGUI_NbIsosDlg * NbIsosDlg =
+         new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
 
-      if ( NbIsosDlg->exec() ) {
-        SUIT_OverrideCursor();
-        for(; ic->MoreCurrent(); ic->NextCurrent()) {
-          CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
-          Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
+       NbIsosDlg->setU( UIso );
+       NbIsosDlg->setV( VIso );
 
-          int nbUIso = NbIsosDlg->getU();
-          int nbVIso = NbIsosDlg->getV();
-
-          CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , nbUIso) );
-          CurDrawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , nbVIso) );
+       if ( NbIsosDlg->exec() ) {
+         SUIT_OverrideCursor();
+         
+         newNbUIso = NbIsosDlg->getU();
+          newNbVIso = NbIsosDlg->getV();
+       }
+      }
+      else if ( actionType == INCR || actionType == DECR ) {
+       int delta = 1;
+       if (actionType == DECR)
+         delta = -1;
+       
+       newNbUIso = UIso + delta;
+       newNbVIso = VIso + delta;
+
+       if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 )
+         return;
+      }
 
-          ic->SetLocalAttributes(CurObject, CurDrawer);
-          ic->Redisplay(CurObject);
-        }
+      for(; ic->MoreCurrent(); ic->NextCurrent()) {
+       CurObject = Handle(GEOM_AISShape)::DownCast(ic->Current());
+       Handle(AIS_Drawer) CurDrawer = CurObject->Attributes();
+       
+       CurDrawer->SetUIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , newNbUIso) );
+       CurDrawer->SetVIsoAspect( new Prs3d_IsoAspect(Quantity_NOC_GRAY75, Aspect_TOL_SOLID, 0.5 , newNbVIso) );
+       
+       ic->SetLocalAttributes(CurObject, CurDrawer);
+       ic->Redisplay(CurObject);
       }
     }
+    GeometryGUI::Modified();
   }
   else if(isVTK){ // if is VTKViewer
     //
@@ -492,27 +593,46 @@ void GEOMToolsGUI::OnNbIsos()
       anActor->GetNbIsos(UIso,VIso);
     else
       return;
+    
+    int newNbUIso = -1;
+    int newNbVIso = -1;
 
-    GEOMToolsGUI_NbIsosDlg* NbIsosDlg =
-      new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
+    if ( actionType == SHOWDLG ) {
+      GEOMToolsGUI_NbIsosDlg* NbIsosDlg =
+       new GEOMToolsGUI_NbIsosDlg( SUIT_Session::session()->activeApplication()->desktop() );
 
-    NbIsosDlg->setU( UIso );
-    NbIsosDlg->setV( VIso );
+      NbIsosDlg->setU( UIso );
+      NbIsosDlg->setV( VIso );
 
-    if ( NbIsosDlg->exec() ) {
-      SUIT_OverrideCursor();
+      if ( NbIsosDlg->exec() ) {
+       SUIT_OverrideCursor();
 
-      while( anAct!=NULL ) {
-        if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)){
-          // There are no casting to needed actor.
-          UIso = NbIsosDlg->getU();
-          VIso = NbIsosDlg->getV();
-          int aIsos[2]={UIso,VIso};
-          anActor->SetNbIsos(aIsos);
-        }
-        anAct = aCollection->GetNextActor();
+       newNbUIso = NbIsosDlg->getU();
+       newNbVIso = NbIsosDlg->getV();
+      }
+    }
+    else if ( actionType == INCR || actionType == DECR ) {
+      int delta = 1;
+      if (actionType == DECR)
+       delta = -1;
+      
+      newNbUIso = UIso + delta;
+      newNbVIso = VIso + delta;
+      
+      if ( newNbUIso < 0 || newNbVIso < 0 || newNbUIso > 99 || newNbVIso > 99 )
+       return;
+    } 
+    
+    while( anAct!=NULL ) {
+      if(GEOM_Actor* anActor = GEOM_Actor::SafeDownCast(anAct)){
+       // There are no casting to needed actor.
+       int aIsos[2]={newNbUIso,newNbVIso};
+       anActor->SetNbIsos(aIsos);
       }
+      anAct = aCollection->GetNextActor();
     }
+    view->Repaint();
+    GeometryGUI::Modified();
   } // end vtkviewer
 }
 
@@ -559,6 +679,7 @@ void GEOMToolsGUI::OnDeflection()
         }
       }
     }
+    GeometryGUI::Modified();
   }
   else if (isVTK) { // if is VTKViewer
     SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
@@ -623,6 +744,7 @@ void GEOMToolsGUI::OnDeflection()
         anAct = aCollection->GetNextActor();
       }
     }
+    GeometryGUI::Modified();
   } // end vtkviewer
 }
 
index 5856aa4e6423e7d6ecdbfeb0745dbe87e77e147c..33940d0a04fcc3a51e63b7cd62f5e47b970f5093 100644 (file)
@@ -269,6 +269,7 @@ void GEOMToolsGUI_TransparencyDlg::SetTransparency()
     for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
       aView->SetTransparency( It.Value(), newValue );
     }
+    GeometryGUI::Modified();
     aView->Repaint();
   } // if ( isVTK )
         
@@ -300,6 +301,7 @@ void GEOMToolsGUI_TransparencyDlg::SetTransparency()
       }
     } // for...
     ic->UpdateCurrentViewer();
+    GeometryGUI::Modified();
   } // if ( isOCC )
 
   ValueHasChanged();
index 76f133190a950d5fd09f95c23da7a46c08bd585b..49292bda414c14ae054eee9905e8585a2882508d 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifdef WNT
 #pragma warning( disable:4786 )
@@ -30,8 +29,7 @@
 #include "GEOM_Object_i.hh"
 
 #include <set>
-#include <strstream>
-//#include <sstream>
+#include <sstream>
 
 #include "Utils_CorbaException.hxx"
 #include "OpUtil.hxx"
 // purpose  : constructor to be called for servant creation.
 //============================================================================
 GEOM_Gen_i::GEOM_Gen_i(CORBA::ORB_ptr            orb,
-                      PortableServer::POA_ptr   poa,
-                      PortableServer::ObjectId* contId,
-                      const char*               instanceName,
-                      const char*               interfaceName) :
+                       PortableServer::POA_ptr   poa,
+                       PortableServer::ObjectId* contId,
+                       const char*               instanceName,
+                       const char*               interfaceName) :
   Engines_Component_i(orb, poa, contId, instanceName, interfaceName)
 {
   _thisObj = this;
@@ -114,9 +112,9 @@ GEOM_Gen_i::~GEOM_Gen_i() {
 // purpose  :
 //============================================================================
 char* GEOM_Gen_i::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
-                                        const char* IORString,
-                                        CORBA::Boolean isMultiFile,
-                                        CORBA::Boolean isASCII)
+                                         const char* IORString,
+                                         CORBA::Boolean isMultiFile,
+                                         CORBA::Boolean isASCII)
 {
   GEOM::GEOM_Object_var anObject = GEOM::GEOM_Object::_narrow(_orb->string_to_object(IORString));
   if (!CORBA::is_nil(anObject)) {
@@ -133,9 +131,9 @@ char* GEOM_Gen_i::IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
 //          : The IOR (IORName) of object created is returned
 //============================================================================
 char* GEOM_Gen_i::LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
-                                        const char* aLocalPersistentID,
-                                        CORBA::Boolean isMultiFile,
-                                        CORBA::Boolean isASCII)
+                                         const char* aLocalPersistentID,
+                                         CORBA::Boolean isMultiFile,
+                                         CORBA::Boolean isASCII)
 {
   SALOMEDS::Study_var aStudy = theSObject->GetStudy();
 
@@ -164,9 +162,9 @@ bool GEOM_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 // purpose  :
 //============================================================================
 SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
-                                                SALOMEDS::SObject_ptr theSObject,
-                                                CORBA::Object_ptr theObject,
-                                                const char* theName) throw (SALOME::SALOME_Exception)
+                                                 SALOMEDS::SObject_ptr theSObject,
+                                                 CORBA::Object_ptr theObject,
+                                                 const char* theName) throw (SALOME::SALOME_Exception)
 {
   Unexpect aCatch(SALOME_SalomeException);
   SALOMEDS::SObject_var aResultSO;
@@ -266,8 +264,8 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
   aPixmap->Destroy();
   //if (strlen(theName) == 0) aShapeName += TCollection_AsciiString(aResultSO->Tag());
   //else aShapeName = TCollection_AsciiString(CORBA::string_dup(theName));
-  
-  // try to find existed name for current shape
+
+  // BEGIN: try to find existed name for current shape
   bool HasName = false;
   // recieve current TopoDS shape
   CORBA::String_var entry = aShape->GetEntry();
@@ -280,24 +278,28 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
   }
   entry = aMainSh->GetEntry();
   Handle(GEOM_Object) anObj = _impl->GetObject(aMainSh->GetStudyID(), entry);
-  TDF_Label aMainLbl = anObj->GetEntry();
+  TDF_Label aMainLbl = anObj->GetFunction(1)->GetNamingEntry();
+
   // check all named shapes using iterator
-  TDF_ChildIDIterator anIt(aMainLbl, TNaming_NamedShape::GetID(), Standard_True);
-  for(; anIt.More(); anIt.Next()) {
+  TDF_ChildIDIterator anIt (aMainLbl, TNaming_NamedShape::GetID(), Standard_True);
+
+  for (; anIt.More() && !HasName; anIt.Next()) {
     Handle(TNaming_NamedShape) anAttr =
       Handle(TNaming_NamedShape)::DownCast(anIt.Value());
-    if(anAttr.IsNull()) continue;
+    if (anAttr.IsNull()) continue;
     TopoDS_Shape S = anAttr->Get();
-    if( !S.IsEqual(TopoSh) ) continue;
-    TDF_Label L = anAttr->Label();
-    Handle(TDataStd_Name) aName;
-    if(L.FindAttribute(TDataStd_Name::GetID(),aName)) {
-      aShapeName = aName->Get();
-      HasName = true;
+    if (S.IsEqual(TopoSh)) {
+      TDF_Label L = anAttr->Label();
+      Handle(TDataStd_Name) aName;
+      if (L.FindAttribute(TDataStd_Name::GetID(), aName)) {
+        aShapeName = aName->Get();
+        HasName = true;
+      }
     }
   }
+  // END: try to find existed name for current shape
 
-  if(!HasName) {
+  if (!HasName) {
     // asv : 11.11.04 Introducing a more sofisticated method of name creation, just as
     //       it is done in GUI in GEOMBase::GetDefaultName() - not just add a Tag() == number
     //       of objects in the study, but compute a number of objects with the same prefix
@@ -307,8 +309,8 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
       SALOMEDS::SObject_var obj;
       TCollection_AsciiString aNewShapeName;
       do {
-       aNewShapeName = aShapeName + TCollection_AsciiString(++i);
-       obj = theStudy->FindObject( aNewShapeName.ToCString() );
+        aNewShapeName = aShapeName + TCollection_AsciiString(++i);
+        obj = theStudy->FindObject( aNewShapeName.ToCString() );
       }
       while ( !obj->_is_nil() );
       aShapeName = aNewShapeName;
@@ -335,9 +337,9 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
     SALOMEDS::ListOfStrings aListOfVars = aSections[i];
     for(int j = 0, m = aListOfVars.length(); j < m; j++) {
       if(theStudy->IsVariable(aListOfVars[j].in()))
-       aVars += TCollection_AsciiString(aListOfVars[j].in());
+        aVars += TCollection_AsciiString(aListOfVars[j].in());
       if(j != m-1)
-       aVars += ":";
+        aVars += ":";
     }
     if(i != n-1)
       aVars += "|";
@@ -361,12 +363,12 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
 // purpose  : auxilary for PublishNamedShapesInStudy
 //============================================================================
 void GEOM_Gen_i::CreateAndPublishGroup(SALOMEDS::Study_ptr theStudy,
-                                      GEOM::GEOM_Object_var theMainShape,
-                                      const TopTools_IndexedMapOfShape& anIndices,
-                                      const TopTools_SequenceOfShape& SeqS,
-                                      const TColStd_SequenceOfAsciiString& SeqN,
-                                      const Standard_CString& GrName,
-                                      GEOM::ListOfGO_var aResList)
+                                       GEOM::GEOM_Object_var theMainShape,
+                                       const TopTools_IndexedMapOfShape& anIndices,
+                                       const TopTools_SequenceOfShape& SeqS,
+                                       const TColStd_SequenceOfAsciiString& SeqN,
+                                       const Standard_CString& GrName,
+                                       GEOM::ListOfGO_var aResList)
 {
   CORBA::String_var entry = theMainShape->GetEntry();
   Handle(GEOM_Object) aMainShape = _impl->GetObject(theMainShape->GetStudyID(), entry);
@@ -412,8 +414,8 @@ void GEOM_Gen_i::CreateAndPublishGroup(SALOMEDS::Study_ptr theStudy,
 //============================================================================
 GEOM::ListOfGO* GEOM_Gen_i::
             PublishNamedShapesInStudy(SALOMEDS::Study_ptr theStudy,
-                                     //SALOMEDS::SObject_ptr theSObject,
-                                     CORBA::Object_ptr theObject)
+                                      //SALOMEDS::SObject_ptr theSObject,
+                                      CORBA::Object_ptr theObject)
 {
   //Unexpect aCatch(SALOME_SalomeException);
   GEOM::ListOfGO_var aResList = new GEOM::ListOfGO;
@@ -442,20 +444,20 @@ GEOM::ListOfGO* GEOM_Gen_i::
     if(L.FindAttribute(TDataStd_Name::GetID(),aName)) {
       TCollection_ExtendedString EName = aName->Get();
       if(S.ShapeType()==TopAbs_SOLID) {
-       SolidSeqS.Append(S);
-       SolidSeqN.Append(aName->Get());
+        SolidSeqS.Append(S);
+        SolidSeqN.Append(aName->Get());
       }
       else if(S.ShapeType()==TopAbs_FACE) {
-       FaceSeqS.Append(S);
-       FaceSeqN.Append(aName->Get());
+        FaceSeqS.Append(S);
+        FaceSeqN.Append(aName->Get());
       }
       else if(S.ShapeType()==TopAbs_EDGE) {
-       EdgeSeqS.Append(S);
-       EdgeSeqN.Append(aName->Get());
+        EdgeSeqS.Append(S);
+        EdgeSeqN.Append(aName->Get());
       }
       else if(S.ShapeType()==TopAbs_VERTEX) {
-       VertSeqS.Append(S);
-       VertSeqN.Append(aName->Get());
+        VertSeqS.Append(S);
+        VertSeqN.Append(aName->Get());
       }
     }
   }
@@ -464,16 +466,16 @@ GEOM::ListOfGO* GEOM_Gen_i::
   TopExp::MapShapes(MainSh, anIndices);
 
   CreateAndPublishGroup(theStudy, theMainShape, anIndices, SolidSeqS, SolidSeqN,
-                       "Group_Of_Named_Solids", aResList);
+                        "Group_Of_Named_Solids", aResList);
 
   CreateAndPublishGroup(theStudy, theMainShape, anIndices, FaceSeqS, FaceSeqN,
-                       "Group_Of_Named_Faces", aResList);
+                        "Group_Of_Named_Faces", aResList);
 
   CreateAndPublishGroup(theStudy, theMainShape, anIndices, EdgeSeqS, EdgeSeqN,
-                       "Group_Of_Named_Edges", aResList);
+                        "Group_Of_Named_Edges", aResList);
 
   CreateAndPublishGroup(theStudy, theMainShape, anIndices, VertSeqS, VertSeqN,
-                       "Group_Of_Named_Vertices", aResList);
+                        "Group_Of_Named_Vertices", aResList);
 
   return aResList._retn();
 }
@@ -484,8 +486,8 @@ GEOM::ListOfGO* GEOM_Gen_i::
 // purpose  : save OCAF/Geom document
 //============================================================================
 SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
-                                   const char* theURL,
-                                   bool isMultiFile) {
+                                    const char* theURL,
+                                    bool isMultiFile) {
   SALOMEDS::TMPFile_var aStreamFile;
   // Get a temporary directory to store a file
   std::string aTmpDir = (isMultiFile)?theURL:SALOMEDS_Tool::GetTmpDir();
@@ -529,8 +531,8 @@ SALOMEDS::TMPFile* GEOM_Gen_i::Save(SALOMEDS::SComponent_ptr theComponent,
 // purpose  :
 //============================================================================
 SALOMEDS::TMPFile* GEOM_Gen_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent,
-                                        const char* theURL,
-                                        bool isMultiFile) {
+                                         const char* theURL,
+                                         bool isMultiFile) {
   SALOMEDS::TMPFile_var aStreamFile = Save(theComponent, theURL, isMultiFile);
   return aStreamFile._retn();
 }
@@ -541,9 +543,9 @@ SALOMEDS::TMPFile* GEOM_Gen_i::SaveASCII(SALOMEDS::SComponent_ptr theComponent,
 // purpose  :
 //============================================================================
 CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
-                               const SALOMEDS::TMPFile& theStream,
-                               const char* theURL,
-                               bool isMultiFile) {
+                                const SALOMEDS::TMPFile& theStream,
+                                const char* theURL,
+                                bool isMultiFile) {
 
   if (theStream.length() <= 9) {
     MESSAGE("The TMPFile is too short : " << theStream.length() << " bytes ");
@@ -593,9 +595,9 @@ CORBA::Boolean GEOM_Gen_i::Load(SALOMEDS::SComponent_ptr theComponent,
 // purpose  :
 //============================================================================
 CORBA::Boolean GEOM_Gen_i::LoadASCII(SALOMEDS::SComponent_ptr theComponent,
-                                    const SALOMEDS::TMPFile& theStream,
-                                    const char* theURL,
-                                    bool isMultiFile) {
+                                     const SALOMEDS::TMPFile& theStream,
+                                     const char* theURL,
+                                     bool isMultiFile) {
   return Load(theComponent, theStream, theURL, isMultiFile);
 }
 
@@ -671,15 +673,15 @@ CORBA::Boolean GEOM_Gen_i::CanPaste(const char* theComponentName, CORBA::Long th
 // purpose  :
 //============================================================================
 SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream,
-                                           CORBA::Long theObjectID,
-                                           SALOMEDS::SObject_ptr theObject) {
+                                            CORBA::Long theObjectID,
+                                            SALOMEDS::SObject_ptr theObject) {
   // Find the current Study and StudyBuilder
   SALOMEDS::Study_var aStudy = theObject->GetStudy();
   SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
 
   // Retrieve a TopoDS_Shape from byte stream
   TopoDS_Shape aTopology;
-  std::istrstream aStreamedBrep((char*) &theStream[0], theStream.length());
+  std::istringstream aStreamedBrep((char*) &theStream[0]);
   BRep_Builder aBuilder;
   try {
     BRepTools::Read(aTopology, aStreamedBrep, aBuilder);
@@ -731,9 +733,9 @@ char* GEOM_Gen_i::ComponentDataType()
 // purpose  :
 //============================================================================
 SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy,
-                                             GEOM::GEOM_Object_ptr theObject,
-                                             const char* theName,
-                                             GEOM::GEOM_Object_ptr theFather)
+                                              GEOM::GEOM_Object_ptr theObject,
+                                              const char* theName,
+                                              GEOM::GEOM_Object_ptr theFather)
 {
   SALOMEDS::SObject_var aResultSO;
   if(theObject->_is_nil() || theStudy->_is_nil()) return aResultSO;
@@ -779,7 +781,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::AddInStudy (SALOMEDS::Study_ptr theStudy,
 //            To be used from python scripts out of geompy.addToStudy (non-default usage)
 //============================================================================
 GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr     theStudy,
-                                              GEOM::GEOM_Object_ptr   theObject,
+                                               GEOM::GEOM_Object_ptr   theObject,
                                                const GEOM::ListOfGO&   theArgs,
                                                GEOM::find_shape_method theFindMethod,
                                                CORBA::Boolean          theInheritFirstArg,
@@ -803,6 +805,36 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesO (SALOMEDS::Study_ptr     theStudy,
   return aParts._retn();
 }
 
+//============================================================================
+// function : RestoreGivenSubShapesO
+// purpose  : Publish sub-shapes, standing for arguments and sub-shapes of arguments.
+//            To be used from python scripts, generated by Dump Python.
+//============================================================================
+GEOM::ListOfGO* GEOM_Gen_i::RestoreGivenSubShapesO (SALOMEDS::Study_ptr     theStudy,
+                                                    GEOM::GEOM_Object_ptr   theObject,
+                                                    const GEOM::ListOfGO&   theArgs,
+                                                    GEOM::find_shape_method theFindMethod,
+                                                    CORBA::Boolean          theInheritFirstArg,
+                                                    CORBA::Boolean          theAddPrefix)
+{
+  GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
+  if (CORBA::is_nil(theStudy) || CORBA::is_nil(theObject))
+    return aParts._retn();
+
+  // find SObject in the study if it is already published
+  CORBA::String_var anIORo = _orb->object_to_string(theObject);
+  SALOMEDS::SObject_var aSO = theStudy->FindObjectIOR(anIORo.in());
+  //PTv, IMP 0020001, The salome object <aSO>
+  // is not obligatory in case of invokation from script
+  // if (CORBA::is_nil(aSO))
+  //  return aParts._retn();
+
+  aParts = RestoreGivenSubShapes(theStudy, theObject, aSO, theArgs,
+                                 theFindMethod, theInheritFirstArg, theAddPrefix);
+  if (!CORBA::is_nil(aSO)) aSO->Destroy();
+  return aParts._retn();
+}
+
 //============================================================================
 // function : RestoreSubShapesSO
 // purpose  : Publish sub-shapes, standing for arguments and sub-shapes of arguments.
@@ -868,11 +900,11 @@ static void addToListOfGO( const GEOM::ListOfGO& theSrcList,
 //            are defined, and does not check, if they correspond to each other.
 //============================================================================
 GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
-                                            GEOM::GEOM_Object_ptr   theObject,
-                                            SALOMEDS::SObject_ptr   theSObject,
-                                            const GEOM::ListOfGO&   theArgs,
-                                            GEOM::find_shape_method theFindMethod,
-                                            CORBA::Boolean          theInheritFirstArg,
+                                             GEOM::GEOM_Object_ptr   theObject,
+                                             SALOMEDS::SObject_ptr   theSObject,
+                                             const GEOM::ListOfGO&   theArgs,
+                                             GEOM::find_shape_method theFindMethod,
+                                             CORBA::Boolean          theInheritFirstArg,
                                              CORBA::Boolean          theAddPrefix)
 {
   GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
@@ -881,6 +913,9 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
   if (CORBA::is_nil(theStudy) || CORBA::is_nil(theObject) /*|| CORBA::is_nil(theSObject)*/)
     return aParts._retn();
 
+  // For Dump Python (mantis issue 0020768)
+  GEOM::ListOfGO_var anOutArgs = new GEOM::ListOfGO;
+
   // Arguments to be published
   GEOM::ListOfGO_var aList;
 
@@ -912,10 +947,21 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
     CORBA::String_var anIOR = _orb->object_to_string(aList[0]);
     SALOMEDS::SObject_var anArgSO = theStudy->FindObjectIOR(anIOR.in());
 
-    aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject, theFindMethod, theAddPrefix);
+    // remember restored objects for Python Dump
+    addToListOfGO(aList[0], anOutArgs);
+
+    aParts = RestoreSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject,
+                                      anOutArgs, theFindMethod, theAddPrefix);
 
     // set the color of the transformed shape to the color of initial shape
     theObject->SetColor(aList[0]->GetColor());
+    // set the texture
+    if (theObject->GetShapeType() == GEOM::VERTEX) {
+      theObject->SetMarkerStd(aList[0]->GetMarkerType(), aList[0]->GetMarkerSize());
+      if (aList[0]->GetMarkerType() == GEOM::MT_USER)
+        theObject->SetMarkerTexture(aList[0]->GetMarkerTexture());
+    }
+
     anArgSO->Destroy();
   }
   else {
@@ -990,6 +1036,9 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
         }
 
         if (!CORBA::is_nil(aSubO)) {
+          // remember restored objects for Python Dump
+          addToListOfGO(anArgO, anOutArgs);
+
           // add to parts list
           addToListOfGO( aSubO, aParts );
 
@@ -1005,6 +1054,12 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
             aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
             // Restore color
             aSubO->SetColor(anArgO->GetColor());
+            // set the texture
+            if (aSubO->GetShapeType() == GEOM::VERTEX) {
+              aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+              if (anArgO->GetMarkerType() == GEOM::MT_USER)
+                aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+            }
           }
 
           if (!CORBA::is_nil(anArgSO)) {
@@ -1013,10 +1068,10 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
             if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
               // pass theObject, because only it has the history
               aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
-                                                   theObject, theFindMethod, theAddPrefix);
+                                                   theObject, anOutArgs, theFindMethod, theAddPrefix);
             else
               aSubParts = RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
-                                                   aSubO, theFindMethod, theAddPrefix);
+                                                   aSubO, anOutArgs, theFindMethod, theAddPrefix);
             // add to parts list
             addToListOfGO( aSubParts, aParts );
           }
@@ -1030,12 +1085,15 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
             // Restore published sub-shapes of the argument
             GEOM::ListOfGO_var aSubParts =
               RestoreSubShapesOneLevel(theStudy, anArgSO, aSubSO,
-                                       theObject, theFindMethod, theAddPrefix);
+                                       theObject, anOutArgs, theFindMethod, theAddPrefix);
 
             // add to parts list
             addToListOfGO( aSubParts, aParts );
 
             if (aSubParts->length() > 0) {
+              // remember restored objects for Python Dump
+              addToListOfGO(anArgO, anOutArgs);
+
               // try to build an argument from a set of its sub-shapes,
               // that published and will be reconstructed
               if (aSubParts->length() > 1) {
@@ -1056,6 +1114,12 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
                 aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
                 // Restore color
                 aSubO->SetColor(anArgO->GetColor());
+                // set the texture
+                if (aSubO->GetShapeType() == GEOM::VERTEX) {
+                  aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+                  if (anArgO->GetMarkerType() == GEOM::MT_USER)
+                    aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+                }
               }
             }
             else if (!CORBA::is_nil(aSubSO)) {
@@ -1100,11 +1164,13 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
       pd << aGeomObj;
       j++;
     }
-    pd <<"]" << " = geompy.RestoreSubShapes(" << aMainObj << ", " << "[";
-    i = 0; nb = theArgs.length(); j = 0;
+    pd <<"]" << " = geompy.RestoreGivenSubShapes(" << aMainObj << ", " << "[";
+    //i = 0; nb = theArgs.length(); j = 0;
+    i = 0; nb = anOutArgs->length(); j = 0;
     for ( ; i < nb; i++ )
     {
-      GEOM::GEOM_Object_var anObj = theArgs[ i ];
+      //GEOM::GEOM_Object_var anObj = theArgs[ i ];
+      GEOM::GEOM_Object_var anObj = anOutArgs[ i ];
       if (CORBA::is_nil(anObj))
         continue;
       Handle(GEOM_Object) aGeomObj = _impl->GetObject(anObj->GetStudyID(), anObj->GetEntry());
@@ -1138,10 +1204,11 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapes(SALOMEDS::Study_ptr     theStudy,
 // purpose  : Private method
 //============================================================================
 GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr     theStudy,
-                                                     SALOMEDS::SObject_ptr   theOldSO,
-                                                     SALOMEDS::SObject_ptr   theNewSO,
-                                                     GEOM::GEOM_Object_ptr   theNewO,
-                                                     GEOM::find_shape_method theFindMethod,
+                                                      SALOMEDS::SObject_ptr   theOldSO,
+                                                      SALOMEDS::SObject_ptr   theNewSO,
+                                                      GEOM::GEOM_Object_ptr   theNewO,
+                                                      GEOM::ListOfGO&         theOutArgs,
+                                                      GEOM::find_shape_method theFindMethod,
                                                       CORBA::Boolean          theAddPrefix)
 {
   int i = 0;
@@ -1175,135 +1242,663 @@ GEOM::ListOfGO* GEOM_Gen_i::RestoreSubShapesOneLevel (SALOMEDS::Study_ptr     th
     if (anOldSubSO->FindAttribute(anAttr, "AttributeIOR")) {
       SALOMEDS::AttributeIOR_var anAttrIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
       GEOM::GEOM_Object_var anOldSubO =
-       GEOM::GEOM_Object::_narrow(_orb->string_to_object(anAttrIOR->Value()));
+        GEOM::GEOM_Object::_narrow(_orb->string_to_object(anAttrIOR->Value()));
       if (!CORBA::is_nil(anOldSubO)) {
-       // Find a sub-shape of theNewO in place of anOldSubO
-       GEOM::GEOM_Object_var aNewSubO;
-       switch (theFindMethod) {
-       case GEOM::FSM_GetInPlace:
-         {
-           // Use GetInPlace
-           aNewSubO = aShapesOp->GetInPlace(theNewO, anOldSubO);
-         }
-         break;
-       case GEOM::FSM_Transformed:
-         {
-           // transformation, cannot use GetInPlace, operate with indices
-           GEOM::ListOfLong_var anIDs = anOldSubO->GetSubShapeIndices();
-           if (anIDs->length() > 1) {
-             // group
-             aNewSubO = aGroupOp->CreateGroup(theNewO, aGroupOp->GetType(anOldSubO));
-             if (!CORBA::is_nil(aNewSubO))
-               aGroupOp->UnionIDs(aNewSubO, anIDs);
-           }
-           else {
-             // single sub-shape
-             aNewSubO = aShapesOp->GetSubShape(theNewO, anIDs[0]);
-           }
-         }
-         break;
-       case GEOM::FSM_GetSame:
-         {
-           // Use GetSame
-           aNewSubO = aShapesOp->GetSame(theNewO, anOldSubO);
-         }
-         break;
-       case GEOM::FSM_GetShapesOnShape:
-         {
-           // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
-           aNewSubO = aShapesOp->GetShapesOnShapeAsCompound(anOldSubO, theNewO,
-                                                            (short)GEOM::SOLID, GEOM::ST_ONIN);
-         }
-         break;
-       case GEOM::FSM_GetInPlaceByHistory:
-         {
-           // Use GetInPlaceByHistory
-           aNewSubO = aShapesOp->GetInPlaceByHistory(theNewO, anOldSubO);
-         }
-         break;
-       default:
-         {}
-       }
-
-       if (!CORBA::is_nil(aNewSubO)) {
-         // add the part to the list
-         aParts[i] = aNewSubO;
-         i++;
+        // Find a sub-shape of theNewO in place of anOldSubO
+        GEOM::GEOM_Object_var aNewSubO;
+        switch (theFindMethod) {
+        case GEOM::FSM_GetInPlace:
+          {
+            // Use GetInPlace
+            aNewSubO = aShapesOp->GetInPlace(theNewO, anOldSubO);
+          }
+          break;
+        case GEOM::FSM_Transformed:
+          {
+            // transformation, cannot use GetInPlace, operate with indices
+            GEOM::ListOfLong_var anIDs = anOldSubO->GetSubShapeIndices();
+            if (anIDs->length() > 1) {
+              // group
+              aNewSubO = aGroupOp->CreateGroup(theNewO, aGroupOp->GetType(anOldSubO));
+              if (!CORBA::is_nil(aNewSubO))
+                aGroupOp->UnionIDs(aNewSubO, anIDs);
+            }
+            else {
+              // single sub-shape
+              aNewSubO = aShapesOp->GetSubShape(theNewO, anIDs[0]);
+            }
+          }
+          break;
+        case GEOM::FSM_GetSame:
+          {
+            // Use GetSame
+            aNewSubO = aShapesOp->GetSame(theNewO, anOldSubO);
+          }
+          break;
+        case GEOM::FSM_GetShapesOnShape:
+          {
+            // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
+            aNewSubO = aShapesOp->GetShapesOnShapeAsCompound(anOldSubO, theNewO,
+                                                             (short)GEOM::SOLID, GEOM::ST_ONIN);
+          }
+          break;
+        case GEOM::FSM_GetInPlaceByHistory:
+          {
+            // Use GetInPlaceByHistory
+            aNewSubO = aShapesOp->GetInPlaceByHistory(theNewO, anOldSubO);
+          }
+          break;
+        default:
+          {}
+        }
+
+        if (!CORBA::is_nil(aNewSubO)) {
+          // remember restored objects for Python Dump
+          addToListOfGO(anOldSubO, theOutArgs);
+
+          // add the part to the list
+          aParts[i] = aNewSubO;
+          i++;
           // add to parts list
           addToListOfGO( aNewSubO, aNewParts );
 
           SALOMEDS::SObject_var aNewSubSO;
           if (!CORBA::is_nil(theNewSO)) {
-           // Publish the sub-shape
+              // Publish the sub-shape
             TCollection_AsciiString aSubName;
             if (theAddPrefix) {
               aSubName = "from_";
             }
-           aSubName += anArgName;
-           aNewSubSO = aStudyBuilder->NewObject(theNewSO);
-           aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
-           // Restore color
-           aNewSubO->SetColor(anOldSubO->GetColor());
+            aSubName += anArgName;
+            aNewSubSO = aStudyBuilder->NewObject(theNewSO);
+            aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+            // Restore color
+            aNewSubO->SetColor(anOldSubO->GetColor());
+            // set the texture
+            if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+              aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+              if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+                aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+            }
           }
-         // Restore published sub-shapes of the argument
-         GEOM::ListOfGO_var aSubParts;
-         if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
-           // pass the main shape as Object, because only it has the history
-           aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
-                                                 theNewO, theFindMethod, theAddPrefix);
-         else
-           aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
-                                                 aNewSubO, theFindMethod, theAddPrefix);
+          // Restore published sub-shapes of the argument
+          GEOM::ListOfGO_var aSubParts;
+          if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
+            // pass the main shape as Object, because only it has the history
+            aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                                 theNewO, theOutArgs, theFindMethod, theAddPrefix);
+          else
+            aSubParts = RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                                 aNewSubO, theOutArgs, theFindMethod, theAddPrefix);
           // add to parts list
           addToListOfGO( aSubParts, aNewParts );
-       }
-       else { // GetInPlace failed, try to build from published parts
-         SALOMEDS::SObject_var aNewSubSO;
+        }
+        else { // GetInPlace failed, try to build from published parts
+          SALOMEDS::SObject_var aNewSubSO;
           if (!CORBA::is_nil(theNewSO))
             aNewSubSO = aStudyBuilder->NewObject(theNewSO);
 
-         // Restore published sub-shapes of the argument
-         GEOM::ListOfGO_var aSubParts =
-           RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
-                                     theNewO, theFindMethod, theAddPrefix);
+          // Restore published sub-shapes of the argument
+          GEOM::ListOfGO_var aSubParts =
+            RestoreSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                     theNewO, theOutArgs, theFindMethod, theAddPrefix);
           // add to parts list
           addToListOfGO( aSubParts, aNewParts );
 
-         if (aSubParts->length() > 0) {
-           // try to build an object from a set of its sub-shapes,
-           // that published and will be reconstructed
-           if (aSubParts->length() > 1) {
-             aNewSubO = aShapesOp->MakeCompound(aSubParts);
+          if (aSubParts->length() > 0) {
+            // remember restored objects for Python Dump
+            addToListOfGO(anOldSubO, theOutArgs);
+
+            // try to build an object from a set of its sub-shapes,
+            // that published and will be reconstructed
+            if (aSubParts->length() > 1) {
+              aNewSubO = aShapesOp->MakeCompound(aSubParts);
               // add to parts list
               addToListOfGO( aNewSubO, aNewParts );
-           }
-           else {
-             aNewSubO = aSubParts[0];
-           }
-
-           if (!CORBA::is_nil(aNewSubO)) {
-             // add the part to the list
-             aSubParts[i] = aNewSubO;
-             i++;
-
-             // Publish the sub-shape
-             if (!CORBA::is_nil(aNewSubSO)) {
+            }
+            else {
+              aNewSubO = aSubParts[0];
+            }
+
+            if (!CORBA::is_nil(aNewSubO)) {
+              // add the part to the list
+              aSubParts[i] = aNewSubO;
+              i++;
+
+              // Publish the sub-shape
+              if (!CORBA::is_nil(aNewSubSO)) {
                 TCollection_AsciiString aSubName;
                 if (theAddPrefix) {
                   aSubName = "from_parts_of_";
                 }
-               aSubName += anArgName;
-               aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
-               // Restore color
-               aNewSubO->SetColor(anOldSubO->GetColor());
+                aSubName += anArgName;
+                aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+                // Restore color
+                aNewSubO->SetColor(anOldSubO->GetColor());
+                // set the texture
+                if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+                  aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+                  if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+                    aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+                }
               }
-           }
-         }
-         else if (!CORBA::is_nil(aNewSubSO)) {
-           // remove created aSubSO, because no parts have been found
-           aStudyBuilder->RemoveObject(aNewSubSO);
-         }
-       } // try to build from published parts
+            }
+          }
+          else if (!CORBA::is_nil(aNewSubSO)) {
+            // remove created aSubSO, because no parts have been found
+            aStudyBuilder->RemoveObject(aNewSubSO);
+          }
+        } // try to build from published parts
+      }
+    }
+  } // iterate on published sub-shapes
+
+  aParts->length(i);
+  // add to parts list
+  addToListOfGO( aNewParts, aParts );
+  return aParts._retn();
+}
+
+//============================================================================
+// function : RestoreGivenSubShapes
+// purpose  : Private method. Works only if both theObject and theSObject
+//            are defined, and does not check, if they correspond to each other.
+//            List theArgs in this case contains not only operation arguments,
+//            but also all subshapes, which must be published.
+//============================================================================
+GEOM::ListOfGO* GEOM_Gen_i::RestoreGivenSubShapes(SALOMEDS::Study_ptr     theStudy,
+                                                  GEOM::GEOM_Object_ptr   theObject,
+                                                  SALOMEDS::SObject_ptr   theSObject,
+                                                  const GEOM::ListOfGO&   theArgs,
+                                                  GEOM::find_shape_method theFindMethod,
+                                                  CORBA::Boolean          theInheritFirstArg,
+                                                  CORBA::Boolean          theAddPrefix)
+{
+  GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
+  //PTv, IMP 0020001, The salome object <theSObject>
+  //     is not obligatory in case of invokation from script
+  if (CORBA::is_nil(theStudy) || CORBA::is_nil(theObject) /*|| CORBA::is_nil(theSObject)*/)
+    return aParts._retn();
+
+  // If theArgs list is empty, nothing to do
+  Standard_Integer aLength = theArgs.length();
+  if (aLength == 0)
+    return aParts._retn();
+
+  // Get all arguments
+  GEOM::ListOfGO_var anOpArgsList = theObject->GetDependency();
+  Standard_Integer nbArgsActual = anOpArgsList->length();
+
+  // If anOpArgsList list is empty, nothing to do
+  if (nbArgsActual == 0)
+    return aParts._retn();
+
+  // Entries of arguments and subshapes
+  std::set<std::string> anArgs;
+  for (int i = 0; i < aLength; i++) {
+    CORBA::String_var anEntry = theArgs[i]->GetEntry();
+    anArgs.insert(anEntry.in());
+  }
+
+  // Arguments to be published
+  // We try to publish all arguments, that are in theArgs list
+  GEOM::ListOfGO_var aList = new GEOM::ListOfGO;
+  aList->length(nbArgsActual);
+
+  int k = 0;
+  for (int j = 0; j < nbArgsActual; j++) {
+    CORBA::String_var anEntry = anOpArgsList[j]->GetEntry();
+    if (anArgs.count(anEntry.in())) {
+      aList[k] = GEOM::GEOM_Object::_duplicate(anOpArgsList[j]);
+      k++;
+    }
+  }
+  nbArgsActual = k;
+  //aList->length(nbArgsActual);
+
+  if (nbArgsActual < 1)
+    return aParts._retn();
+
+  if (theInheritFirstArg || (nbArgsActual == 1)) {
+    // Do not publish argument's reflection,
+    // but only reconstruct its published sub-shapes
+
+    CORBA::String_var anIOR = _orb->object_to_string(aList[0]);
+    SALOMEDS::SObject_var anArgSO = theStudy->FindObjectIOR(anIOR.in());
+
+    aParts = RestoreGivenSubShapesOneLevel(theStudy, anArgSO, theSObject, theObject,
+                                           anArgs, theFindMethod, theAddPrefix);
+
+    // set the color of the transformed shape to the color of initial shape
+    theObject->SetColor(aList[0]->GetColor());
+    // set the texture
+    if (theObject->GetShapeType() == GEOM::VERTEX) {
+      theObject->SetMarkerStd(aList[0]->GetMarkerType(), aList[0]->GetMarkerSize());
+      if (aList[0]->GetMarkerType() == GEOM::MT_USER)
+        theObject->SetMarkerTexture(aList[0]->GetMarkerTexture());
+    }
+
+    anArgSO->Destroy();
+  }
+  else {
+    // Get interface, containing method, which we will use to reconstruct sub-shapes
+    GEOM::GEOM_IShapesOperations_var aShapesOp = GetIShapesOperations(theStudy->StudyId());
+    GEOM::GEOM_IGroupOperations_var  aGroupOp  = GetIGroupOperations(theStudy->StudyId());
+
+    // Reconstruct arguments and tree of sub-shapes of the arguments
+    CORBA::String_var anIOR;
+    SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
+    for (Standard_Integer i = 0; i < nbArgsActual; i++)
+    {
+      GEOM::GEOM_Object_var anArgO = aList[i];
+      if (!CORBA::is_nil(anArgO)) {
+        anIOR = _orb->object_to_string(anArgO);
+        SALOMEDS::SObject_var anArgSO = theStudy->FindObjectIOR(anIOR.in());
+        TCollection_AsciiString anArgName;
+        if (CORBA::is_nil(anArgSO)) {
+          anArgName = "arg_";
+          anArgName += TCollection_AsciiString(i);
+        }
+        else {
+          anArgName = anArgSO->GetName();
+        }
+
+        // Find a sub-shape of theObject in place of the argument
+        GEOM::GEOM_Object_var aSubO;
+        switch (theFindMethod) {
+        case GEOM::FSM_GetInPlace:
+          {
+            // Use GetInPlace
+            aSubO = aShapesOp->GetInPlace(theObject, anArgO);
+          }
+          break;
+        case GEOM::FSM_Transformed:
+          {
+            // transformation, cannot use GetInPlace, operate with indices
+            GEOM::ListOfLong_var anIDs = anArgO->GetSubShapeIndices();
+            if (anIDs->length() > 1) {
+              // group
+              aSubO = aGroupOp->CreateGroup(theObject, aGroupOp->GetType(anArgO));
+              if (!CORBA::is_nil(aSubO))
+                aGroupOp->UnionIDs(aSubO, anIDs);
+            }
+            else if (anIDs->length() > 0) {
+              // single sub-shape
+              aSubO = aShapesOp->GetSubShape(theObject, anIDs[0]);
+            }
+          }
+          break;
+        case GEOM::FSM_GetSame:
+          {
+            // Use GetSame
+            aSubO = aShapesOp->GetSame(theObject, anArgO);
+          }
+          break;
+        case GEOM::FSM_GetShapesOnShape:
+          {
+            // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
+            aSubO = aShapesOp->GetShapesOnShapeAsCompound(anArgO, theObject,
+              (short)GEOM::SOLID, GEOM::ST_ONIN);
+          }
+          break;
+        case GEOM::FSM_GetInPlaceByHistory:
+          {
+            // Use GetInPlaceByHistory
+            aSubO = aShapesOp->GetInPlaceByHistory(theObject, anArgO);
+          }
+          break;
+        default:
+          {}
+        }
+
+        if (!CORBA::is_nil(aSubO)) {
+          // add to parts list
+          addToListOfGO( aSubO, aParts );
+
+          // Publish the sub-shape
+          SALOMEDS::SObject_var aSubSO;
+          if (!CORBA::is_nil(theSObject)) {
+            TCollection_AsciiString aSubName;
+            if (theAddPrefix) {
+              aSubName = "from_";
+            }
+            aSubName += anArgName;
+            aSubSO = aStudyBuilder->NewObject(theSObject);
+            aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
+            // Restore color
+            aSubO->SetColor(anArgO->GetColor());
+            // set the texture
+            if (aSubO->GetShapeType() == GEOM::VERTEX) {
+              aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+              if (anArgO->GetMarkerType() == GEOM::MT_USER)
+                aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+            }
+          }
+
+          if (!CORBA::is_nil(anArgSO)) {
+            // Restore published sub-shapes of the argument
+            GEOM::ListOfGO_var aSubParts;
+            if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
+              // pass theObject, because only it has the history
+              aSubParts = RestoreGivenSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+                                                        theObject, anArgs, theFindMethod, theAddPrefix);
+            else
+              aSubParts = RestoreGivenSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+                                                        aSubO, anArgs, theFindMethod, theAddPrefix);
+            // add to parts list
+            addToListOfGO( aSubParts, aParts );
+          }
+        }
+        else { // GetInPlace failed, try to build from published parts
+          if (!CORBA::is_nil(anArgSO)) {
+            SALOMEDS::SObject_var aSubSO;
+            if (!CORBA::is_nil(theSObject))
+              aSubSO = aStudyBuilder->NewObject(theSObject);
+
+            // Restore published sub-shapes of the argument
+            GEOM::ListOfGO_var aSubParts =
+              RestoreGivenSubShapesOneLevel(theStudy, anArgSO, aSubSO,
+                                            theObject, anArgs, theFindMethod, theAddPrefix);
+
+            // add to parts list
+            addToListOfGO( aSubParts, aParts );
+
+            if (aSubParts->length() > 0) {
+              // try to build an argument from a set of its sub-shapes,
+              // that published and will be reconstructed
+              if (aSubParts->length() > 1) {
+                aSubO = aShapesOp->MakeCompound(aSubParts);
+                // add to parts list
+                addToListOfGO( aSubO, aParts );
+              }
+              else {
+                aSubO = aSubParts[0];
+              }
+              if (!CORBA::is_nil(aSubO) && !CORBA::is_nil(aSubSO)) {
+                // Publish the sub-shape
+                TCollection_AsciiString aSubName;
+                if (theAddPrefix) {
+                  aSubName = "from_parts_of_";
+                }
+                aSubName += anArgName;
+                aSubSO = PublishInStudy(theStudy, aSubSO, aSubO, aSubName.ToCString());
+                // Restore color
+                aSubO->SetColor(anArgO->GetColor());
+                // set the texture
+                if (aSubO->GetShapeType() == GEOM::VERTEX) {
+                  aSubO->SetMarkerStd(anArgO->GetMarkerType(), anArgO->GetMarkerSize());
+                  if (anArgO->GetMarkerType() == GEOM::MT_USER)
+                    aSubO->SetMarkerTexture(anArgO->GetMarkerTexture());
+                }
+              }
+            }
+            else if (!CORBA::is_nil(aSubSO)) {
+              // remove created aSubSO, because no parts have been found
+              aStudyBuilder->RemoveObject(aSubSO);
+            }
+          }
+        } // try to build from published parts
+        anArgSO->Destroy();
+      }
+    } // process arguments
+  }
+  std::set<std::string> anObjEntryMap;
+  GEOM::ListOfGO_var aResParts = new GEOM::ListOfGO;
+  int nbRes = 0;
+  int nb = aParts->length();
+  aResParts->length(nb);
+  if (nb > 0)
+  {
+    Handle(GEOM_Object) aMainObj = _impl->GetObject(theObject->GetStudyID(), theObject->GetEntry());
+    Handle(GEOM_Function) aFunction = aMainObj->GetLastFunction();
+    GEOM::TPythonDump pd (aFunction, true);
+    pd <<"[";
+    int i = 0, j = 0;
+    for ( ; i < nb; i++ )
+    {
+      GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object::_duplicate( aParts[ i ] );
+      if (CORBA::is_nil(anObj))
+        continue;
+      char* anEntry = anObj->GetEntry();
+      if (anObjEntryMap.count(anEntry))
+        continue; // already treated
+      anObjEntryMap.insert(anEntry);
+      aResParts[nbRes++] = anObj;
+      // clear python dump of object
+      Handle(GEOM_Object) aGeomObj = _impl->GetObject(anObj->GetStudyID(), anEntry);
+      Handle(GEOM_Function) anObjFun = aGeomObj->GetLastFunction();
+      if ( !anObjFun.IsNull() )
+        anObjFun->SetDescription( "" );
+      if ( j > 0 )
+        pd << ", ";
+      pd << aGeomObj;
+      j++;
+    }
+    pd <<"]" << " = geompy.RestoreGivenSubShapes(" << aMainObj << ", " << "[";
+    i = 0; nb = theArgs.length(); j = 0;
+    for ( ; i < nb; i++ )
+    {
+      GEOM::GEOM_Object_var anObj = theArgs[ i ];
+      if (CORBA::is_nil(anObj))
+        continue;
+      Handle(GEOM_Object) aGeomObj = _impl->GetObject(anObj->GetStudyID(), anObj->GetEntry());
+      if ( j > 0 )
+        pd << ", ";
+      pd << aGeomObj;
+      j++;
+    }
+    pd <<"]" << ", " <<"geompy.GEOM.";
+    switch (theFindMethod) {
+    case GEOM::FSM_GetInPlace:
+      pd << "FSM_GetInPlace"; break;
+    case GEOM::FSM_Transformed:
+      pd << "FSM_Transformed"; break;
+    case GEOM::FSM_GetSame:
+      pd << "FSM_GetSame"; break;
+    case GEOM::FSM_GetShapesOnShape:
+      pd << "FSM_GetShapesOnShape"; break;
+    case GEOM::FSM_GetInPlaceByHistory:
+    default:
+      pd << "FSM_GetInPlaceByHistory"; break;
+    }
+    pd << ", " << theInheritFirstArg << ", " << theAddPrefix << ")";
+  }
+  aResParts->length(nbRes);
+  return aResParts._retn();
+}
+
+//============================================================================
+// function : RestoreGivenSubShapesOneLevel
+// purpose  : Private method
+//============================================================================
+GEOM::ListOfGO* GEOM_Gen_i::RestoreGivenSubShapesOneLevel (SALOMEDS::Study_ptr     theStudy,
+                                                           SALOMEDS::SObject_ptr   theOldSO,
+                                                           SALOMEDS::SObject_ptr   theNewSO,
+                                                           GEOM::GEOM_Object_ptr   theNewO,
+                                                           std::set<std::string>   theArgs,
+                                                           GEOM::find_shape_method theFindMethod,
+                                                           CORBA::Boolean          theAddPrefix)
+{
+  int i = 0;
+  GEOM::ListOfGO_var aParts = new GEOM::ListOfGO;
+  GEOM::ListOfGO_var aNewParts = new GEOM::ListOfGO;
+  if (CORBA::is_nil(theStudy) || CORBA::is_nil(theOldSO) ||
+      CORBA::is_nil(theNewO) /*|| CORBA::is_nil(theNewSO)*/)
+    return aParts._retn();
+
+  SALOMEDS::StudyBuilder_var aStudyBuilder = theStudy->NewBuilder();
+
+  // Get interface, containing method, which we will use to reconstruct sub-shapes
+  GEOM::GEOM_IShapesOperations_var aShapesOp = GetIShapesOperations(theStudy->StudyId());
+  GEOM::GEOM_IGroupOperations_var  aGroupOp  = GetIGroupOperations(theStudy->StudyId());
+
+  // Reconstruct published sub-shapes
+  SALOMEDS::ChildIterator_var it = theStudy->NewChildIterator(theOldSO);
+
+  int aLen = 0;
+  for (it->Init(); it->More(); it->Next()) {
+    aLen++;
+  }
+  aParts->length(aLen);
+
+  for (it->Init(); it->More(); it->Next()) {
+    SALOMEDS::SObject_var anOldSubSO = it->Value();
+
+    TCollection_AsciiString anArgName = anOldSubSO->GetName();
+
+    SALOMEDS::GenericAttribute_var anAttr;
+    if (anOldSubSO->FindAttribute(anAttr, "AttributeIOR")) {
+      SALOMEDS::AttributeIOR_var anAttrIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
+      GEOM::GEOM_Object_var anOldSubO =
+        GEOM::GEOM_Object::_narrow(_orb->string_to_object(anAttrIOR->Value()));
+
+      bool okToContinue = false;
+
+      if (!CORBA::is_nil(anOldSubO)) {
+        CORBA::String_var anEntry = anOldSubO->GetEntry();
+        okToContinue = theArgs.count(anEntry.in());
+      }
+
+      if (okToContinue) {
+        // Find a sub-shape of theNewO in place of anOldSubO
+        GEOM::GEOM_Object_var aNewSubO;
+        switch (theFindMethod) {
+        case GEOM::FSM_GetInPlace:
+          {
+            // Use GetInPlace
+            aNewSubO = aShapesOp->GetInPlace(theNewO, anOldSubO);
+          }
+          break;
+        case GEOM::FSM_Transformed:
+          {
+            // transformation, cannot use GetInPlace, operate with indices
+            GEOM::ListOfLong_var anIDs = anOldSubO->GetSubShapeIndices();
+            if (anIDs->length() > 1) {
+              // group
+              aNewSubO = aGroupOp->CreateGroup(theNewO, aGroupOp->GetType(anOldSubO));
+              if (!CORBA::is_nil(aNewSubO))
+                aGroupOp->UnionIDs(aNewSubO, anIDs);
+            }
+            else {
+              // single sub-shape
+              aNewSubO = aShapesOp->GetSubShape(theNewO, anIDs[0]);
+            }
+          }
+          break;
+        case GEOM::FSM_GetSame:
+          {
+            // Use GetSame
+            aNewSubO = aShapesOp->GetSame(theNewO, anOldSubO);
+          }
+          break;
+        case GEOM::FSM_GetShapesOnShape:
+          {
+            // Use GetShapesOnShape. Can work only on solids, so it has sense to search only solids
+            aNewSubO = aShapesOp->GetShapesOnShapeAsCompound(anOldSubO, theNewO,
+                                                             (short)GEOM::SOLID, GEOM::ST_ONIN);
+          }
+          break;
+        case GEOM::FSM_GetInPlaceByHistory:
+          {
+            // Use GetInPlaceByHistory
+            aNewSubO = aShapesOp->GetInPlaceByHistory(theNewO, anOldSubO);
+          }
+          break;
+        default:
+          {}
+        }
+
+        if (!CORBA::is_nil(aNewSubO)) {
+          // add the part to the list
+          aParts[i] = aNewSubO;
+          i++;
+          // add to parts list
+          addToListOfGO( aNewSubO, aNewParts );
+
+          SALOMEDS::SObject_var aNewSubSO;
+          if (!CORBA::is_nil(theNewSO)) {
+              // Publish the sub-shape
+            TCollection_AsciiString aSubName;
+            if (theAddPrefix) {
+              aSubName = "from_";
+            }
+            aSubName += anArgName;
+            aNewSubSO = aStudyBuilder->NewObject(theNewSO);
+            aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+            // Restore color
+            aNewSubO->SetColor(anOldSubO->GetColor());
+            // set the texture
+            if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+              aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+              if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+                aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+            }
+          }
+          // Restore published sub-shapes of the argument
+          GEOM::ListOfGO_var aSubParts;
+          if (theFindMethod == GEOM::FSM_GetInPlaceByHistory)
+            // pass the main shape as Object, because only it has the history
+            aSubParts = RestoreGivenSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                                      theNewO, theArgs, theFindMethod, theAddPrefix);
+          else
+            aSubParts = RestoreGivenSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                                      aNewSubO, theArgs, theFindMethod, theAddPrefix);
+          // add to parts list
+          addToListOfGO( aSubParts, aNewParts );
+        }
+        else { // GetInPlace failed, try to build from published parts
+          SALOMEDS::SObject_var aNewSubSO;
+          if (!CORBA::is_nil(theNewSO))
+            aNewSubSO = aStudyBuilder->NewObject(theNewSO);
+
+          // Restore published sub-shapes of the argument
+          GEOM::ListOfGO_var aSubParts =
+            RestoreGivenSubShapesOneLevel(theStudy, anOldSubSO, aNewSubSO,
+                                          theNewO, theArgs, theFindMethod, theAddPrefix);
+          // add to parts list
+          addToListOfGO( aSubParts, aNewParts );
+
+          if (aSubParts->length() > 0) {
+            // try to build an object from a set of its sub-shapes,
+            // that published and will be reconstructed
+            if (aSubParts->length() > 1) {
+              aNewSubO = aShapesOp->MakeCompound(aSubParts);
+              // add to parts list
+              addToListOfGO( aNewSubO, aNewParts );
+            }
+            else {
+              aNewSubO = aSubParts[0];
+            }
+
+            if (!CORBA::is_nil(aNewSubO)) {
+              // add the part to the list
+              aSubParts[i] = aNewSubO;
+              i++;
+
+              // Publish the sub-shape
+              if (!CORBA::is_nil(aNewSubSO)) {
+                TCollection_AsciiString aSubName;
+                if (theAddPrefix) {
+                  aSubName = "from_parts_of_";
+                }
+                aSubName += anArgName;
+                aNewSubSO = PublishInStudy(theStudy, aNewSubSO, aNewSubO, aSubName.ToCString());
+                // Restore color
+                aNewSubO->SetColor(anOldSubO->GetColor());
+                // set the texture
+                if (aNewSubO->GetShapeType() == GEOM::VERTEX) {
+                  aNewSubO->SetMarkerStd(anOldSubO->GetMarkerType(), anOldSubO->GetMarkerSize());
+                  if (anOldSubO->GetMarkerType() == GEOM::MT_USER)
+                    aNewSubO->SetMarkerTexture(anOldSubO->GetMarkerTexture());
+                }
+              }
+            }
+          }
+          else if (!CORBA::is_nil(aNewSubSO)) {
+            // remove created aSubSO, because no parts have been found
+            aStudyBuilder->RemoveObject(aNewSubSO);
+          }
+        } // try to build from published parts
       }
     }
   } // iterate on published sub-shapes
@@ -1611,7 +2206,7 @@ GEOM::GEOM_IAdvancedOperations_ptr GEOM_Gen_i::GetIAdvancedOperations(CORBA::Lon
  */
 //=============================================================================
 GEOM::GEOM_Object_ptr GEOM_Gen_i::AddSubShape (GEOM::GEOM_Object_ptr theMainShape,
-                                              const GEOM::ListOfLong& theIndices)
+                                               const GEOM::ListOfLong& theIndices)
 {
   if (CORBA::is_nil(theMainShape) || theIndices.length() < 1)
     return GEOM::GEOM_Object::_nil();
@@ -1713,7 +2308,7 @@ bool GEOM_Gen_i::hasObjectInfo()
 char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry)
 {
   GEOM::GEOM_Object_var aGeomObject;
+
   CORBA::Object_var aSMObject = name_service->Resolve( "/myStudyManager" );
   SALOMEDS::StudyManager_var aStudyManager = SALOMEDS::StudyManager::_narrow( aSMObject );
   SALOMEDS::Study_var aStudy = aStudyManager->GetStudyByID( studyId );
@@ -1732,7 +2327,7 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry)
   }
   if (!aSObj->_is_nil() )
     aSObj->Destroy();
-  
+
   const char* aTypeInfo = "Object";
   if ( !aGeomObject->_is_nil() ) {
     GEOM::GEOM_IKindOfShape::shape_kind aKind;
@@ -1745,110 +2340,110 @@ char* GEOM_Gen_i::getObjectInfo(CORBA::Long studyId, const char* entry)
     if ( anOp->IsDone() ) {
       switch ( aKind ) {
       case GEOM::GEOM_IKindOfShape::COMPOUND:
-       aTypeInfo = "Compound";
-       break;
+        aTypeInfo = "Compound";
+        break;
       case GEOM::GEOM_IKindOfShape::COMPSOLID:
-       aTypeInfo = "CompSolid";
-       break;
+        aTypeInfo = "CompSolid";
+        break;
       case GEOM::GEOM_IKindOfShape::SHELL:
-       aTypeInfo = "Shell";
-       break;
+        aTypeInfo = "Shell";
+        break;
       case GEOM::GEOM_IKindOfShape::WIRE:
-       if ( anInts[0] == 1 )
-         aTypeInfo = "Closed Wire";
-       else if ( anInts[0] == 2 )
-         aTypeInfo = "Opened Wire";
-       else
-         aTypeInfo = "Wire";
-       break;
-       // SOLIDs
+        if ( anInts[0] == 1 )
+          aTypeInfo = "Closed Wire";
+        else if ( anInts[0] == 2 )
+          aTypeInfo = "Opened Wire";
+        else
+          aTypeInfo = "Wire";
+        break;
+        // SOLIDs
       case GEOM::GEOM_IKindOfShape::SPHERE:
-       aTypeInfo = "Sphere";
-       break;
+        aTypeInfo = "Sphere";
+        break;
       case GEOM::GEOM_IKindOfShape::CYLINDER:
-       aTypeInfo = "Cylinder";
-       break;
+        aTypeInfo = "Cylinder";
+        break;
       case GEOM::GEOM_IKindOfShape::BOX:
       case GEOM::GEOM_IKindOfShape::ROTATED_BOX:
-       aTypeInfo = "Box";
-       break;
+        aTypeInfo = "Box";
+        break;
       case GEOM::GEOM_IKindOfShape::TORUS:
-       aTypeInfo = "Torus";
-       break;
+        aTypeInfo = "Torus";
+        break;
       case GEOM::GEOM_IKindOfShape::CONE:
-       aTypeInfo = "Cone";
-       break;
+        aTypeInfo = "Cone";
+        break;
       case GEOM::GEOM_IKindOfShape::POLYHEDRON:
-       aTypeInfo = "Polyhedron";
-       break;
+        aTypeInfo = "Polyhedron";
+        break;
       case GEOM::GEOM_IKindOfShape::SOLID:
-       aTypeInfo = "Solid";
-       break;
-       // FACEs
+        aTypeInfo = "Solid";
+        break;
+        // FACEs
       case GEOM::GEOM_IKindOfShape::SPHERE2D:
-       aTypeInfo = "Spherical Face";
-       break;
+        aTypeInfo = "Spherical Face";
+        break;
       case GEOM::GEOM_IKindOfShape::CYLINDER2D:
-       aTypeInfo = "Cylindrical Face";
-       break;
+        aTypeInfo = "Cylindrical Face";
+        break;
       case GEOM::GEOM_IKindOfShape::TORUS2D:
-       aTypeInfo = "Toroidal Face";
-       break;
+        aTypeInfo = "Toroidal Face";
+        break;
       case GEOM::GEOM_IKindOfShape::CONE2D:
-       aTypeInfo = "Conical Face";
-       break;
+        aTypeInfo = "Conical Face";
+        break;
       case GEOM::GEOM_IKindOfShape::DISK_CIRCLE:
-       aTypeInfo = "Disk";
-       break;
+        aTypeInfo = "Disk";
+        break;
       case GEOM::GEOM_IKindOfShape::DISK_ELLIPSE:
-       aTypeInfo = "Elliptical Face";
-       break;
+        aTypeInfo = "Elliptical Face";
+        break;
       case GEOM::GEOM_IKindOfShape::POLYGON:
-       aTypeInfo = "Polygon";
-       break;
+        aTypeInfo = "Polygon";
+        break;
       case GEOM::GEOM_IKindOfShape::PLANE:
-       aTypeInfo = "Plane";
-       break;
+        aTypeInfo = "Plane";
+        break;
       case GEOM::GEOM_IKindOfShape::PLANAR:
-       aTypeInfo = "Planar Face";
-       break;
+        aTypeInfo = "Planar Face";
+        break;
       case GEOM::GEOM_IKindOfShape::FACE:
-       aTypeInfo = "Face";
-       break;
-       // EDGEs
+        aTypeInfo = "Face";
+        break;
+        // EDGEs
       case GEOM::GEOM_IKindOfShape::CIRCLE:
-       aTypeInfo = "Circle";
-       break;
+        aTypeInfo = "Circle";
+        break;
       case GEOM::GEOM_IKindOfShape::ARC_CIRCLE:
-       aTypeInfo = "Arc Circle";
-       break;
+        aTypeInfo = "Arc Circle";
+        break;
       case GEOM::GEOM_IKindOfShape::ELLIPSE:
-       aTypeInfo = "Ellipse";
-       break;
+        aTypeInfo = "Ellipse";
+        break;
       case GEOM::GEOM_IKindOfShape::ARC_ELLIPSE:
-       aTypeInfo = "Arc Ellipse";
-       break;
+        aTypeInfo = "Arc Ellipse";
+        break;
       case GEOM::GEOM_IKindOfShape::LINE:
-       aTypeInfo = "Line";
-       break;
+        aTypeInfo = "Line";
+        break;
       case GEOM::GEOM_IKindOfShape::SEGMENT:
-       aTypeInfo = "Segment";
-       break;
+        aTypeInfo = "Segment";
+        break;
       case GEOM::GEOM_IKindOfShape::EDGE:
-       aTypeInfo = "Edge";
-       break;
+        aTypeInfo = "Edge";
+        break;
       case GEOM::GEOM_IKindOfShape::VERTEX:
-       aTypeInfo = "Vertex";
-       break;
+        aTypeInfo = "Vertex";
+        break;
       default:
-       break;
+        break;
       }
     }
   }
-    
+
   char* anInfo = new char[strlen("Module ") + strlen(ComponentDataType()) + strlen(", ") + strlen(aTypeInfo) + 3];
   sprintf(anInfo, "Module %s, %s", ComponentDataType(), aTypeInfo);
-  
+
   char* ret = CORBA::string_dup(anInfo);
   delete [] anInfo;
   return ret;
@@ -1863,13 +2458,13 @@ extern "C"
   GEOM_I_EXPORT
   PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB*, PortableServer::POA*, PortableServer::ObjectId*, const char*, const char*);
   */
-  
+
   GEOM_I_EXPORT
   PortableServer::ObjectId* GEOMEngine_factory(CORBA::ORB_ptr            orb,
-                                              PortableServer::POA_ptr   poa,
-                                              PortableServer::ObjectId* contId,
-                                              const char*               instanceName,
-                                              const char*               interfaceName)
+                                               PortableServer::POA_ptr   poa,
+                                               PortableServer::ObjectId* contId,
+                                               const char*               instanceName,
+                                               const char*               interfaceName)
   {
     GEOM_Gen_i* myGEOM_Gen_i = new GEOM_Gen_i(orb, poa, contId, instanceName, interfaceName);
     return myGEOM_Gen_i->getId();
index cb8db42a2202a9e4d49ea87f41b3f0f3402a1178..9f24703c3f635bfc3e96bda43c30c5ad7e5a1ea6 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #ifndef __GEOM_GEN_I_H__
 #define __GEOM_GEN_I_H__
@@ -54,6 +53,9 @@
 
 #include <TopTools_IndexedMapOfShape.hxx>
 
+#include <set>
+#include <string>
+
 //#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
 
 
@@ -71,10 +73,10 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
   // constructor to be called for servant creation.
   GEOM_Gen_i();
   GEOM_Gen_i(CORBA::ORB_ptr orb,
-            PortableServer::POA_ptr poa,
-            PortableServer::ObjectId * contId,
-            const char *instanceName,
-            const char *interfaceName);
+             PortableServer::POA_ptr poa,
+             PortableServer::ObjectId * contId,
+             const char *instanceName,
+             const char *interfaceName);
 
   // destructor, doing nothing (for now)
   virtual ~GEOM_Gen_i();
@@ -88,75 +90,85 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
   //-----------------------------------------------------------------------//
 
   SALOMEDS::TMPFile* Save(SALOMEDS::SComponent_ptr theComponent,
-                         const char* theURL,
-                         bool isMultiFile);
+                          const char* theURL,
+                          bool isMultiFile);
 
   SALOMEDS::TMPFile* SaveASCII(SALOMEDS::SComponent_ptr theComponent,
-                              const char* theURL,
-                              bool isMultiFile);
+                               const char* theURL,
+                               bool isMultiFile);
 
   CORBA::Boolean Load(SALOMEDS::SComponent_ptr theComponent,
-                     const SALOMEDS::TMPFile& theStream,
-                     const char* theURL,
-                     bool isMultiFile);
+                      const SALOMEDS::TMPFile& theStream,
+                      const char* theURL,
+                      bool isMultiFile);
 
   CORBA::Boolean LoadASCII(SALOMEDS::SComponent_ptr theComponent,
-                          const SALOMEDS::TMPFile& theStream,
-                          const char* theURL,
-                          bool isMultiFile);
+                           const SALOMEDS::TMPFile& theStream,
+                           const char* theURL,
+                           bool isMultiFile);
 
   void Close(SALOMEDS::SComponent_ptr theComponent);
   char* ComponentDataType();
 
 
   char* IORToLocalPersistentID(SALOMEDS::SObject_ptr theSObject,
-                              const char* IORString,
-                              CORBA::Boolean isMultiFile,
-                              CORBA::Boolean isASCII);
+                               const char* IORString,
+                               CORBA::Boolean isMultiFile,
+                               CORBA::Boolean isASCII);
   char* LocalPersistentIDToIOR(SALOMEDS::SObject_ptr theSObject,
-                              const char* aLocalPersistentID,
-                              CORBA::Boolean isMultiFile,
-                              CORBA::Boolean isASCII);
+                               const char* aLocalPersistentID,
+                               CORBA::Boolean isMultiFile,
+                               CORBA::Boolean isASCII);
 
   bool CanPublishInStudy(CORBA::Object_ptr theIOR);
   SALOMEDS::SObject_ptr PublishInStudy(SALOMEDS::Study_ptr theStudy,
-                                      SALOMEDS::SObject_ptr theSObject,
-                                      CORBA::Object_ptr theObject,
-                                      const char* theName) throw (SALOME::SALOME_Exception) ;
+                                       SALOMEDS::SObject_ptr theSObject,
+                                       CORBA::Object_ptr theObject,
+                                       const char* theName) throw (SALOME::SALOME_Exception) ;
 
   GEOM::ListOfGO* PublishNamedShapesInStudy(SALOMEDS::Study_ptr theStudy,
-                                           CORBA::Object_ptr theObject);
+                                            CORBA::Object_ptr theObject);
 
   CORBA::Boolean CanCopy(SALOMEDS::SObject_ptr theObject);
   SALOMEDS::TMPFile* CopyFrom(SALOMEDS::SObject_ptr theObject, CORBA::Long& theObjectID);
   CORBA::Boolean CanPaste(const char* theComponentName, CORBA::Long theObjectID);
   SALOMEDS::SObject_ptr PasteInto(const SALOMEDS::TMPFile& theStream,
-                                 CORBA::Long theObjectID,
-                                 SALOMEDS::SObject_ptr theObject);
+                                  CORBA::Long theObjectID,
+                                  SALOMEDS::SObject_ptr theObject);
 
   /*! \brief Adds theObject in the study with a name = theName, if
    *         theFather is not null the object is placed under theFather
    */
   SALOMEDS::SObject_ptr AddInStudy (SALOMEDS::Study_ptr theStudy,
-                                   GEOM::GEOM_Object_ptr theObject,
-                                   const char* theName,
-                                   GEOM::GEOM_Object_ptr theFather);
+                                    GEOM::GEOM_Object_ptr theObject,
+                                    const char* theName,
+                                    GEOM::GEOM_Object_ptr theFather);
 
   /*! \brief Publish sub-shapes, standing for arguments and sub-shapes of arguments.
    *         To be used from python scripts out of geompy.addToStudy (non-default usage)
    */
   GEOM::ListOfGO* RestoreSubShapesO (SALOMEDS::Study_ptr     theStudy,
-                                    GEOM::GEOM_Object_ptr   theObject,
+                                     GEOM::GEOM_Object_ptr   theObject,
                                      const GEOM::ListOfGO&   theArgs,
                                      GEOM::find_shape_method theFindMethod,
                                      CORBA::Boolean          theInheritFirstArg,
                                      CORBA::Boolean          theAddPrefix);
 
+  /*! \brief Publish sub-shapes, standing for given in \a theArgs arguments and sub-shapes.
+   *         To be used from python scripts, generated by Dump Python.
+   */
+  GEOM::ListOfGO* RestoreGivenSubShapesO (SALOMEDS::Study_ptr     theStudy,
+                                          GEOM::GEOM_Object_ptr   theObject,
+                                          const GEOM::ListOfGO&   theArgs,
+                                          GEOM::find_shape_method theFindMethod,
+                                          CORBA::Boolean          theInheritFirstArg,
+                                          CORBA::Boolean          theAddPrefix);
+
   /*! \brief Publish sub-shapes, standing for arguments and sub-shapes of arguments.
    *         To be used from GUI and from geompy.addToStudy
    */
   GEOM::ListOfGO* RestoreSubShapesSO (SALOMEDS::Study_ptr     theStudy,
-                                     SALOMEDS::SObject_ptr   theSObject,
+                                      SALOMEDS::SObject_ptr   theSObject,
                                       const GEOM::ListOfGO&   theArgs,
                                       GEOM::find_shape_method theFindMethod,
                                       CORBA::Boolean          theInheritFirstArg,
@@ -230,7 +242,7 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
 
   //Adds a new sub shape
   virtual GEOM::GEOM_Object_ptr AddSubShape (GEOM::GEOM_Object_ptr theMainShape,
-                                            const GEOM::ListOfLong& theIndices);
+                                             const GEOM::ListOfLong& theIndices);
 
   virtual void RemoveObject(GEOM::GEOM_Object_ptr theObject);
 
@@ -239,17 +251,17 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
   virtual GEOM::GEOM_Object_ptr GetIORFromString(const char* stringIOR);
 
   virtual Engines::TMPFile* DumpPython(CORBA::Object_ptr theStudy,
-                                      CORBA::Boolean isPublished,
-                                      CORBA::Boolean& isValidScript);
+                                       CORBA::Boolean isPublished,
+                                       CORBA::Boolean& isValidScript);
 
   char* GetDumpName (const char* theStudyEntry);
 
   GEOM::string_array* GetAllDumpNames();
-  
+
   // Object information
   virtual bool hasObjectInfo();
   virtual char* getObjectInfo(CORBA::Long studyId, const char* entry);
-  
+
   //-----------------------------------------------------------------------//
   // Internal methods                                                      //
   //-----------------------------------------------------------------------//
@@ -257,29 +269,46 @@ class GEOM_I_EXPORT GEOM_Gen_i: virtual public POA_GEOM::GEOM_Gen, virtual publi
   virtual GEOM::GEOM_Object_ptr GetObject(CORBA::Long theStudyID, const char* theEntry);
 
  private:
-  GEOM::ListOfGO* RestoreSubShapesOneLevel (SALOMEDS::Study_ptr     theStudy,
-                                           SALOMEDS::SObject_ptr   theOldSO,
-                                           SALOMEDS::SObject_ptr   theNewSO,
-                                           GEOM::GEOM_Object_ptr   theNewO,
-                                           GEOM::find_shape_method theFindMethod,
-                                            CORBA::Boolean          theAddPrefix);
-
   GEOM::ListOfGO* RestoreSubShapes (SALOMEDS::Study_ptr     theStudy,
-                                   GEOM::GEOM_Object_ptr   theObject,
+                                    GEOM::GEOM_Object_ptr   theObject,
                                     SALOMEDS::SObject_ptr   theSObject,
                                     const GEOM::ListOfGO&   theArgs,
                                     GEOM::find_shape_method theFindMethod,
                                     CORBA::Boolean          theInheritFirstArg,
                                     CORBA::Boolean          theAddPrefix);
 
+  GEOM::ListOfGO* RestoreSubShapesOneLevel (SALOMEDS::Study_ptr     theStudy,
+                                            SALOMEDS::SObject_ptr   theOldSO,
+                                            SALOMEDS::SObject_ptr   theNewSO,
+                                            GEOM::GEOM_Object_ptr   theNewO,
+                                            GEOM::ListOfGO&         theOutArgs,
+                                            GEOM::find_shape_method theFindMethod,
+                                            CORBA::Boolean          theAddPrefix);
+
+  GEOM::ListOfGO* RestoreGivenSubShapes (SALOMEDS::Study_ptr     theStudy,
+                                         GEOM::GEOM_Object_ptr   theObject,
+                                         SALOMEDS::SObject_ptr   theSObject,
+                                         const GEOM::ListOfGO&   theArgs,
+                                         GEOM::find_shape_method theFindMethod,
+                                         CORBA::Boolean          theInheritFirstArg,
+                                         CORBA::Boolean          theAddPrefix);
+
+  GEOM::ListOfGO* RestoreGivenSubShapesOneLevel (SALOMEDS::Study_ptr     theStudy,
+                                                 SALOMEDS::SObject_ptr   theOldSO,
+                                                 SALOMEDS::SObject_ptr   theNewSO,
+                                                 GEOM::GEOM_Object_ptr   theNewO,
+                                                 std::set<std::string>   theArgs,
+                                                 GEOM::find_shape_method theFindMethod,
+                                                 CORBA::Boolean          theAddPrefix);
+
   // auxilary for PublishNamedShapesInStudy
   void CreateAndPublishGroup(SALOMEDS::Study_ptr theStudy,
-                            GEOM::GEOM_Object_var theMainShape,
-                            const TopTools_IndexedMapOfShape& anIndices,
-                            const TopTools_SequenceOfShape& SeqS,
-                            const TColStd_SequenceOfAsciiString& SeqN,
-                            const Standard_CString& GrName,
-                            GEOM::ListOfGO_var aResList);
+                             GEOM::GEOM_Object_var theMainShape,
+                             const TopTools_IndexedMapOfShape& anIndices,
+                             const TopTools_SequenceOfShape& SeqS,
+                             const TColStd_SequenceOfAsciiString& SeqN,
+                             const Standard_CString& GrName,
+                             GEOM::ListOfGO_var aResList);
 
  private:
 
index d5435c5d1bc9e9c33586de649fb59fc7d22e9845..f765856d0950c94be2e4b519909ff49de0064f42 100644 (file)
@@ -269,6 +269,34 @@ GEOM::GEOM_Object_ptr GEOM_IBlocksOperations_i::GetPoint (GEOM::GEOM_Object_ptr
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  GetVertexNearPoint
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBlocksOperations_i::GetVertexNearPoint
+                                                (GEOM::GEOM_Object_ptr theShape,
+                                                 GEOM::GEOM_Object_ptr thePoint)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  // Set a not done flag
+  GetOperations()->SetNotDone();
+
+  // Get the reference Objects
+  Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
+  Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint);
+  if (aShape.IsNull() || aPoint.IsNull()) return aGEOMObject._retn();
+
+  // Create the Point
+  Handle(GEOM_Object) anObject =
+    GetOperations()->GetVertexNearPoint(aShape, aPoint);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  GetEdge
@@ -481,6 +509,37 @@ GEOM::GEOM_Object_ptr GEOM_IBlocksOperations_i::GetFaceByNormale (GEOM::GEOM_Obj
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  GetShapesNearPoint
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBlocksOperations_i::GetShapesNearPoint
+                      (GEOM::GEOM_Object_ptr theShape,
+                       GEOM::GEOM_Object_ptr thePoint,
+                       CORBA::Long           theShapeType,
+                       CORBA::Double         theTolerance)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  // Set a not done flag
+  GetOperations()->SetNotDone();
+
+  // Get the reference Objects
+  Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
+  Handle(GEOM_Object) aPoint = GetObjectImpl(thePoint);
+
+  if (aShape.IsNull() || aPoint.IsNull()) return aGEOMObject._retn();
+
+  // Create the Shape
+  Handle(GEOM_Object) anObject =
+    GetOperations()->GetShapesNearPoint(aShape, aPoint, theShapeType, theTolerance);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  ExplodeCompoundOfBlocks
index 68904892c10ad6ea2fe23899be25507128cd61be..8fa1e1de7766660df12924f4cd5436e2cfb05b47 100644 (file)
@@ -75,6 +75,9 @@ class GEOM_I_EXPORT GEOM_IBlocksOperations_i :
                                  CORBA::Double   theZ,
                                  CORBA::Double   theEpsilon);
 
+  GEOM::GEOM_Object_ptr GetVertexNearPoint (GEOM::GEOM_Object_ptr theShape,
+                                            GEOM::GEOM_Object_ptr thePoint);
+
   GEOM::GEOM_Object_ptr GetEdge (GEOM::GEOM_Object_ptr theShape,
                                 GEOM::GEOM_Object_ptr thePoint1,
                                 GEOM::GEOM_Object_ptr thePoint2);
@@ -101,10 +104,15 @@ class GEOM_I_EXPORT GEOM_IBlocksOperations_i :
   GEOM::GEOM_Object_ptr GetFaceByNormale (GEOM::GEOM_Object_ptr theBlock,
                                          GEOM::GEOM_Object_ptr theVector);
 
+  GEOM::GEOM_Object_ptr GetShapesNearPoint (GEOM::GEOM_Object_ptr theShape,
+                                            GEOM::GEOM_Object_ptr thePoint,
+                                            CORBA::Long           theShapeType,
+                                            CORBA::Double         theTolerance);
+
   // Check blocks compound
   CORBA::Boolean IsCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound,
-                                    CORBA::Long     theMinNbFaces,
-                                    CORBA::Long     theMaxNbFaces,
+                                    CORBA::Long           theMinNbFaces,
+                                    CORBA::Long           theMaxNbFaces,
                                     CORBA::Long&          theNbBlocks);
 
   CORBA::Boolean CheckCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound,
index 81dac09c329d9f57972fc3772d1c3546854312d5..39df78fe1cecb656e901a0f8502e3268c059b1ff 100644 (file)
@@ -18,7 +18,6 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
 
 #include <Standard_Stream.hxx>
 
@@ -493,3 +492,30 @@ GEOM::GEOM_Object_ptr GEOM_IHealingOperations_i::ChangeOrientationCopy (GEOM::GE
 
   return GetObject(aNewObject);
 }
+
+//=============================================================================
+/*!
+ *  LimitTolerance
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IHealingOperations_i::LimitTolerance (GEOM::GEOM_Object_ptr theObject,
+                                                                 CORBA::Double theTolerance)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  // Set a not done flag
+  GetOperations()->SetNotDone();
+
+  // Get the object itself
+  Handle(GEOM_Object) anObject = GetObjectImpl(theObject);
+  if (anObject.IsNull())
+    return aGEOMObject._retn();
+
+  // Perform
+  Handle(GEOM_Object) aNewObject =
+    GetOperations()->LimitTolerance(anObject, theTolerance);
+  if (!GetOperations()->IsDone() || aNewObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(aNewObject);
+}
index be42fbd55115cc85464394bf1e365ec9f2ac4b6b..01b3f48fc4ba5da4a3c5ae9bb6f0ea191cc7df1c 100644 (file)
@@ -18,7 +18,7 @@
 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
+
 
 #ifndef _GEOM_IHealingOperations_i_HeaderFile
 #define _GEOM_IHealingOperations_i_HeaderFile
 #include <TColStd_HArray1OfExtendedString.hxx>
 #include <TColStd_HArray1OfInteger.hxx>
 
-class GEOM_I_EXPORT GEOM_IHealingOperations_i : 
+class GEOM_I_EXPORT GEOM_IHealingOperations_i :
     public virtual POA_GEOM::GEOM_IHealingOperations,
     public virtual GEOM_IOperations_i
 {
  public:
-   GEOM_IHealingOperations_i(PortableServer::POA_ptr thePOA, GEOM::GEOM_Gen_ptr theEngine, ::GEOMImpl_IHealingOperations* theImpl);
+   GEOM_IHealingOperations_i(PortableServer::POA_ptr thePOA,
+                             GEOM::GEOM_Gen_ptr theEngine,
+                             ::GEOMImpl_IHealingOperations* theImpl);
    ~GEOM_IHealingOperations_i();
-  
-   GEOM::GEOM_Object_ptr ProcessShape(GEOM::GEOM_Object_ptr theObject, const GEOM::string_array& theOperations, const GEOM::string_array& theParams, const GEOM::string_array& theValues);
 
-   void GetShapeProcessParameters(GEOM::string_array_out theOperations, GEOM::string_array_out theParams, GEOM::string_array_out theValues);
+   GEOM::GEOM_Object_ptr ProcessShape(GEOM::GEOM_Object_ptr theObject,
+                                      const GEOM::string_array& theOperations,
+                                      const GEOM::string_array& theParams,
+                                      const GEOM::string_array& theValues);
+
+   void GetShapeProcessParameters(GEOM::string_array_out theOperations,
+                                  GEOM::string_array_out theParams,
+                                  GEOM::string_array_out theValues);
 
-   void GetOperatorParameters (const char* theOperator,  GEOM::string_array_out theParams, GEOM::string_array_out theValues);
+   void GetOperatorParameters (const char* theOperator,
+                               GEOM::string_array_out theParams,
+                               GEOM::string_array_out theValues);
 
-   GEOM::GEOM_Object_ptr SuppressFaces(GEOM::GEOM_Object_ptr theObject, const GEOM::short_array& theFaces);
+   GEOM::GEOM_Object_ptr SuppressFaces(GEOM::GEOM_Object_ptr theObject,
+                                       const GEOM::short_array& theFaces);
 
-   GEOM::GEOM_Object_ptr CloseContour (GEOM::GEOM_Object_ptr theObject, const GEOM::short_array& theWires, CORBA::Boolean isCommonVertex);
+   GEOM::GEOM_Object_ptr CloseContour (GEOM::GEOM_Object_ptr theObject,
+                                       const GEOM::short_array& theWires,
+                                       CORBA::Boolean isCommonVertex);
 
-   GEOM::GEOM_Object_ptr RemoveIntWires (GEOM::GEOM_Object_ptr theObject, const GEOM::short_array& theWires);
-   
-   GEOM::GEOM_Object_ptr FillHoles (GEOM::GEOM_Object_ptr theObject, const GEOM::short_array& theWires);
+   GEOM::GEOM_Object_ptr RemoveIntWires (GEOM::GEOM_Object_ptr theObject,
+                                         const GEOM::short_array& theWires);
 
-   GEOM::GEOM_Object_ptr Sew (GEOM::GEOM_Object_ptr theObject, CORBA::Double theTolerance);
+   GEOM::GEOM_Object_ptr FillHoles (GEOM::GEOM_Object_ptr theObject,
+                                    const GEOM::short_array& theWires);
 
-   GEOM::GEOM_Object_ptr DivideEdge (GEOM::GEOM_Object_ptr theObject, CORBA::Short theIndex, CORBA::Double theValue, CORBA::Boolean isByParameter);        
+   GEOM::GEOM_Object_ptr Sew (GEOM::GEOM_Object_ptr theObject,
+                              CORBA::Double theTolerance);
+
+   GEOM::GEOM_Object_ptr DivideEdge (GEOM::GEOM_Object_ptr theObject,
+                                     CORBA::Short theIndex,
+                                     CORBA::Double theValue,
+                                     CORBA::Boolean isByParameter);
+
+   CORBA::Boolean GetFreeBoundary(GEOM::GEOM_Object_ptr theObject,
+                                  GEOM::ListOfGO_out theClosedWires,
+                                  GEOM::ListOfGO_out theOpenWires );
 
-   CORBA::Boolean GetFreeBoundary(GEOM::GEOM_Object_ptr theObject, GEOM::ListOfGO_out theClosedWires, GEOM::ListOfGO_out theOpenWires );
-   
    GEOM::GEOM_Object_ptr ChangeOrientation (GEOM::GEOM_Object_ptr theObject);
    GEOM::GEOM_Object_ptr ChangeOrientationCopy (GEOM::GEOM_Object_ptr theObject);
 
+   GEOM::GEOM_Object_ptr LimitTolerance (GEOM::GEOM_Object_ptr theObject,
+                                         CORBA::Double theTolerance);
+
    ::GEOMImpl_IHealingOperations* GetOperations() { return (::GEOMImpl_IHealingOperations*)GetImpl(); }
 
 private:
-        Handle(TColStd_HArray1OfExtendedString) Convert( const GEOM::string_array& );
-        Handle(TColStd_HArray1OfInteger)        Convert( const GEOM::short_array& );
+         Handle(TColStd_HArray1OfExtendedString) Convert( const GEOM::string_array& );
+         Handle(TColStd_HArray1OfInteger)        Convert( const GEOM::short_array& );
 
 };
 
index 5df05efd480ba8a246854a385dd435a00facd77f..fcf400be55979bd0c729fc07656976e4554d0bb6 100644 (file)
@@ -85,6 +85,34 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeEdge
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeEdgeWire
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeEdgeWire
+                      (GEOM::GEOM_Object_ptr theWire,
+                      const CORBA::Double theLinearTolerance,
+                      const CORBA::Double theAngularTolerance)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  //Get the source wire
+  Handle(GEOM_Object) aWire = GetObjectImpl(theWire);
+
+  if (aWire.IsNull()) return aGEOMObject._retn();
+
+  //Create the Edge
+  Handle(GEOM_Object) anObject = GetOperations()->MakeEdgeWire(aWire, theLinearTolerance, theAngularTolerance);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeWire
@@ -229,8 +257,11 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeSolidShell
   Handle(GEOM_Object) aShell = GetObjectImpl(theShell);
   if (aShell.IsNull()) return aGEOMObject._retn();
 
+  std::list<Handle(GEOM_Object)> aShapes;
+  aShapes.push_back(aShell);
+
   //Create the Solid
-  Handle(GEOM_Object) anObject = GetOperations()->MakeSolidShell(aShell);
+  Handle(GEOM_Object) anObject = GetOperations()->MakeSolidShells(aShapes);
   if (!GetOperations()->IsDone() || anObject.IsNull())
     return aGEOMObject._retn();
 
@@ -410,6 +441,32 @@ GEOM::GEOM_Object_ptr GEOM_IShapesOperations_i::MakeGlueFacesByList
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  GetExistingSubObjects
+ */
+//=============================================================================
+GEOM::ListOfGO* GEOM_IShapesOperations_i::GetExistingSubObjects (GEOM::GEOM_Object_ptr theShape,
+                                                                 CORBA::Boolean        theGroupsOnly)
+{
+  GEOM::ListOfGO_var aSeq = new GEOM::ListOfGO;
+
+  Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
+  if (aShape.IsNull()) return aSeq._retn();
+
+  Handle(TColStd_HSequenceOfTransient) aHSeq =
+    GetOperations()->GetExistingSubObjects(aShape, theGroupsOnly);
+  if (!GetOperations()->IsDone() || aHSeq.IsNull())
+    return aSeq._retn();
+
+  Standard_Integer aLength = aHSeq->Length();
+  aSeq->length(aLength);
+  for (Standard_Integer i = 1; i <= aLength; i++)
+    aSeq[i-1] = GetObject(Handle(GEOM_Object)::DownCast(aHSeq->Value(i)));
+
+  return aSeq._retn();
+}
+
 //=============================================================================
 /*!
  *  MakeExplode
index da9da31cd2f2b431422953ad3b15d30b74639850..424228f981edc4926ca99662000c8230c3819441 100644 (file)
@@ -44,6 +44,9 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i :
 
   GEOM::GEOM_Object_ptr MakeEdge (GEOM::GEOM_Object_ptr thePnt1,
                                   GEOM::GEOM_Object_ptr thePnt2);
+  GEOM::GEOM_Object_ptr MakeEdgeWire (GEOM::GEOM_Object_ptr theWire,
+                                     const CORBA::Double theLinearTolerance,
+                                     const CORBA::Double theAngularTolerance);
 
   GEOM::GEOM_Object_ptr MakeWire (const GEOM::ListOfGO& theEdgesAndWires,
                                   const CORBA::Double   theTolerance);
@@ -74,6 +77,8 @@ class GEOM_I_EXPORT GEOM_IShapesOperations_i :
                                              const GEOM::ListOfGO& theFaces,
                                              CORBA::Boolean  doKeepNonSolids);
 
+  GEOM::ListOfGO* GetExistingSubObjects (GEOM::GEOM_Object_ptr theShape,
+                                         CORBA::Boolean        theGroupsOnly);
 
   // For old SubShapeAll()
   // Deprecated, use MakeAllSubShapes() instead
index 3d2534d2dc6e82883364daf2f2ea2692b5146ad8..ad139cb773e8b6136d4b72849cb5e6669ab867a6 100644 (file)
@@ -28,8 +28,7 @@
 
 #include "utilities.h"
 #include <fstream>
-#include <strstream>
-//#include <sstream>
+#include <sstream>
 
 #include <OpUtil.hxx>
 #include <Utils_ExceptHandlers.hxx>
@@ -40,6 +39,7 @@
 #include <BRepTools_ShapeSet.hxx>
 #include <BRepTools.hxx>
 #include <TopAbs.hxx>
+#include <TopoDS_Iterator.hxx>
 
 #ifdef WNT
 #pragma warning( disable:4786 )
@@ -117,6 +117,61 @@ GEOM::shape_type GEOM_Object_i::GetShapeType()
   return (GEOM::shape_type)_geom.ShapeType();
 }
 
+//=============================================================================
+/*!
+ *  GetTopologyType
+ */
+//=============================================================================
+GEOM::shape_type GEOM_Object_i::GetTopologyType()
+{
+  TopoDS_Shape shape = _impl->GetValue();
+  if(shape.IsNull()) return GEOM::SHAPE;
+
+  if ( shape.ShapeType() == TopAbs_COMPOUND || shape.ShapeType() == TopAbs_COMPSOLID ) {
+    TopoDS_Shape shape_i;
+    TopoDS_Iterator It (shape, Standard_True, Standard_False);
+    for (; It.More(); It.Next()) {
+      if ( !shape_i.IsNull() ) return (GEOM::shape_type)shape.ShapeType();
+      shape_i = It.Value();
+    }
+    if ( !shape_i.IsNull() )
+      return (GEOM::shape_type) shape_i.ShapeType();
+  }
+
+  return (GEOM::shape_type)shape.ShapeType();
+}
+
+static GEOM::shape_type getMinShapeType( const TopoDS_Shape& shape )
+{
+  if ( shape.IsNull() )
+    return GEOM::SHAPE;
+
+  GEOM::shape_type ret = (GEOM::shape_type)shape.ShapeType();
+
+  if ( shape.ShapeType() == TopAbs_COMPOUND || shape.ShapeType() == TopAbs_COMPSOLID ) {
+    TopoDS_Iterator it(shape, Standard_True, Standard_False);
+    for (; it.More(); it.Next()) {
+      TopoDS_Shape sub_shape = it.Value();
+      if ( sub_shape.IsNull() ) continue;
+      GEOM::shape_type stype = (GEOM::shape_type)sub_shape.ShapeType();
+      if ( stype != GEOM::SHAPE && stype > ret )
+       ret = stype;
+    }
+  }
+
+  return ret;
+}
+
+//=============================================================================
+/*!
+ *  GetMinShapeType
+ */
+//=============================================================================
+GEOM::shape_type GEOM_Object_i::GetMinShapeType()
+{
+  return getMinShapeType( _impl->GetValue() );
+}
+
 //=============================================================================
 /*!
  *  SetName
@@ -343,23 +398,18 @@ SALOMEDS::TMPFile* GEOM_Object_i::GetShapeStream()
 
   if(aShape.IsNull()) return NULL;
 
-  std::ostrstream streamShape;
+  std::ostringstream streamShape;
   //Write TopoDS_Shape in ASCII format to the stream
   BRepTools::Write(aShape, streamShape);
   //Returns the number of bytes that have been stored in the stream's buffer.
-  int size = streamShape.pcount();
-  char* buf = new char [size];
-  //Get pointer on internal character array in ostrstream
-  char* valueOfStream = streamShape.str();
-  //Create copy of ostrstream content
-  memcpy(buf, valueOfStream, size);
-  //Allow automatic deletion of ostrstream content
-  streamShape.rdbuf()->freeze(0);
-
-  CORBA::Octet* OctetBuf =  (CORBA::Octet*)buf;
+  int size = streamShape.str().size();
+  //Allocate octect buffer of required size
+  CORBA::Octet* OctetBuf = SALOMEDS::TMPFile::allocbuf(size);
+  //Copy ostrstream content to the octect buffer
+  memcpy(OctetBuf, streamShape.str().c_str(), size);
+  //Create and return TMPFile
   SALOMEDS::TMPFile_var SeqFile = new SALOMEDS::TMPFile(size,size,OctetBuf,1);
   return SeqFile._retn();
-
 }
 
 
index 46a7ae2c08d9b3459c64300182b4343f59f35dbe..d47306aada225cf868ffdd3ea0ea1751024e6821 100644 (file)
@@ -51,6 +51,10 @@ class GEOM_I_EXPORT GEOM_Object_i : public virtual POA_GEOM::GEOM_Object, public
 
   virtual GEOM::shape_type GetShapeType();
 
+  virtual GEOM::shape_type GetTopologyType();
+
+  virtual GEOM::shape_type GetMinShapeType();
+
   virtual void SetName(const char* theName);
 
   virtual char* GetName();
diff --git a/src/GEOM_PY/Makefile.am b/src/GEOM_PY/Makefile.am
new file mode 100644 (file)
index 0000000..70d732d
--- /dev/null
@@ -0,0 +1,27 @@
+#  Copyright (C) 2007-2010  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
+#  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
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+SUBDIRS= structelem
+
+mypkgpythondir = $(salomepythondir)/salome/geom
+mypkgpython_PYTHON = \
+       __init__.py \
+       geomtools.py
diff --git a/src/GEOM_PY/__init__.py b/src/GEOM_PY/__init__.py
new file mode 100644 (file)
index 0000000..5d3edfa
--- /dev/null
@@ -0,0 +1 @@
+# -*- coding: iso-8859-1 -*-
diff --git a/src/GEOM_PY/geomtools.py b/src/GEOM_PY/geomtools.py
new file mode 100644 (file)
index 0000000..9693525
--- /dev/null
@@ -0,0 +1,115 @@
+# -*- coding: utf-8 -*-
+#
+#  Copyright (C) 2007-2009     EDF R&D
+# 
+#    This file is part of PAL_SRC.
+#
+#    PAL_SRC is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    PAL_SRC 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with PAL_SRC; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+#
+"""
+This module provides tools to facilitate the use of geom engine and geom
+objects in Salome.
+"""
+
+import salome
+GEOM = None    # GEOM module is loaded only when needed
+
+from salome.kernel.logger import Logger
+from salome.kernel import termcolor
+logger = Logger("salome.geom.geomtools", color = termcolor.RED)
+
+from salome.kernel.studyedit import getActiveStudyId, getStudyEditor
+
+_geompys = {}
+
+def getGeompy(studyId = None):
+    """
+    Return an object behaving exactly like geompy module, except that it is
+    associated with the study `studyId`. If `studyId` is :const:`None`, return
+    a pseudo geompy object for the current study.
+    """
+    # We can't use geompy module because it initializes GEOM with
+    # salome.myStudy, which may not exist. So we use this trick to create
+    # a pseudo geompy module. 
+    salome.salome_init()
+    if studyId is None:
+        studyId = getActiveStudyId()
+    if not _geompys.has_key(studyId):
+        import geompyDC
+        _geompys[studyId] = salome.lcc.FindOrLoadComponent("FactoryServer",
+                                                           "GEOM")
+        _geompys[studyId].ShapeType = geompyDC.ShapeType
+        _geompys[studyId].GEOM = geompyDC.GEOM
+        _geompys[studyId].kind = geompyDC.kind
+        _geompys[studyId].info = geompyDC.info
+        _geompys[studyId].PackData = geompyDC.PackData
+        _geompys[studyId].ReadTexture = geompyDC.ReadTexture
+        study = salome.myStudyManager.GetStudyByID(studyId)
+        _geompys[studyId].init_geom(study)
+    return _geompys[studyId]
+
+
+class GeomStudyTools:
+    """
+    This class provides several methods to manipulate geom objects in Salome
+    study. The parameter `studyEditor` defines a
+    :class:`~salome.kernel.studyedit.StudyEditor` object used to access the study. If
+    :const:`None`, the method returns a :class:`~salome.kernel.studyedit.StudyEditor`
+    object on the current study.
+
+    .. attribute:: editor
+    
+       This instance attribute contains the underlying
+       :class:`~salome.kernel.studyedit.StudyEditor` object. It can be used to access
+       the study but the attribute itself should not be modified.
+
+    """
+
+    def __init__(self, studyEditor = None):
+        global GEOM
+        if GEOM is None:
+            GEOM = __import__("GEOM")
+        if studyEditor is None:
+            studyEditor = getStudyEditor()
+        self.editor = studyEditor
+
+    def displayShapeByName(self, shapeName, color = None):
+        """
+        Display the geometrical shape whose name in the study is `shapeName`.
+        
+        :type   shapeName: string
+        :param  shapeName: name of the geometrical shape
+        
+        :type   color: tuple (triplet)
+        :param  color: RGB components of the color of the shape
+        
+        :return: True if the shape was found, False otherwise
+        """
+        logger.debug("displayShapeByName in PAL: %s with color %s" %
+                     (shapeName, color))
+        listSO = self.editor.study.FindObjectByName(shapeName, "GEOM")
+        for sObj in listSO:
+            entry = sObj.GetID()
+            geomObj = self.editor.getOrLoadObject(sObj)
+            if geomObj:
+                shape = geomObj._narrow(GEOM.GEOM_Object)
+                if shape:                
+                    geomgui = salome.ImportComponentGUI("GEOM")            
+                    geomgui.createAndDisplayGO(entry)
+                    geomgui.setDisplayMode(entry, 1)
+                    if color is not None:
+                        geomgui.setColor(entry, color[0], color[1], color[2])
+                    return True
+        return False
diff --git a/src/GEOM_PY/structelem/Makefile.am b/src/GEOM_PY/structelem/Makefile.am
new file mode 100644 (file)
index 0000000..cea34db
--- /dev/null
@@ -0,0 +1,26 @@
+#  Copyright (C) 2007-2010  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
+#  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
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+salomepypkgdir = $(salomepythondir)/salome/geom/structelem
+salomepypkg_PYTHON = \
+       __init__.py \
+       parts.py \
+       orientation.py
diff --git a/src/GEOM_PY/structelem/__init__.py b/src/GEOM_PY/structelem/__init__.py
new file mode 100644 (file)
index 0000000..e713832
--- /dev/null
@@ -0,0 +1,486 @@
+# -*- coding: utf-8 -*-
+#
+#  Copyright (C) 2007-2009      EDF R&D
+# 
+#    This file is part of PAL_SRC.
+#
+#    PAL_SRC is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    PAL_SRC 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with PAL_SRC; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+#
+"""
+This package is used to create and visualize structural elements. It contains
+three modules:
+
+* This module :mod:`salome.geom.structelem` defines the main classes
+  :class:`StructuralElement` and :class:`StructuralElementManager` that can be
+  directly used to build structural elements.
+* The module :mod:`salome.geom.structelem.parts` defines the classes corresponding to
+  the different parts (beams, grids, etc.) that make up a structural element.
+  It is used to build the geometric shapes in the structural element.
+* The module :mod:`salome.geom.structelem.orientation` defines the classes that are
+  used to compute the orientation of the structural element parts and to build
+  the corresponding markers.
+
+A structural element is a set of geometric shapes (beams, grids, etc.) that
+are built semi-automatically along a set of geometric primitives (edges for
+instance). They are visualized with the same color as their base primitives in
+the geom viewer.
+
+Structural elements are generally created by the
+:class:`StructuralElementManager` class, from a list of commands describing
+the element to create.
+
+Example::
+
+    commandList = [('VisuPoutreGenerale', {'Group_Maille': 'Edge_1'}),
+                   ('VisuBarreCercle',
+                    {'R': 30, 'Group_Maille': 'Edge_1', 'EP': 15}),
+                  ]
+
+    structElemManager = StructuralElementManager()
+    elem = structElemManager.createElement(commandList)
+    elem.display()
+    salome.sg.updateObjBrowser(True)
+
+"""
+
+import types
+
+import salome
+
+from salome.kernel.logger import Logger
+from salome.kernel import termcolor
+logger = Logger("salome.geom.structelem", color = termcolor.RED)
+from salome.kernel.studyedit import getStudyEditor
+
+__all__ = ["parts", "orientation"]
+
+from salome.geom.structelem import parts
+from salome.geom.structelem.parts import InvalidParameterError
+
+class StructuralElementManager:
+    """
+    This class manages the structural elements in the study. It is used to
+    create a new structural element from a list of commands. The parameter
+    `studyId` defines the ID of the study in which the manager will create
+    structural elements. If it is :const:`None` or not specified, it will use
+    the ID of the current study as defined by
+    :func:`salome.kernel.studyedit.getActiveStudyId` function.
+    """
+    def __init__(self, studyId = None):
+        self._studyEditor = getStudyEditor(studyId)
+
+    def createElement(self, commandList):
+        """
+        Create a structural element from the list of commands `commandList`.
+        Each command in this list represent a part of the structural element,
+        that is a specific kind of shape (circular beam, grid, etc.)
+        associated with one or several geometrical primitives. A command must
+        be a tuple. The first element is the structural element part class
+        name or alias name. The second element is a dictionary containing the
+        parameters describing the part. Valid class names are all the classes
+        defined in the module :mod:`~salome.geom.structelem.parts` and inheriting
+        class :class:`~parts.StructuralElementPart`. There are also several
+        aliases for backward compatibility. Here is the complete list:
+        
+        * :class:`~parts.GeneralBeam`
+        * :class:`~parts.CircularBeam`
+        * :class:`~parts.RectangularBeam`
+        * :class:`~parts.ThickShell`
+        * :class:`~parts.Grid`
+
+        * :func:`~parts.VisuPoutreGenerale` (alias for
+          :class:`~parts.GeneralBeam`)
+        * :func:`~parts.VisuPoutreCercle` (alias for
+          :class:`~parts.CircularBeam`)
+        * :func:`~parts.VisuPoutreRectangle` (alias for
+          :class:`~parts.RectangularBeam`)
+        * :func:`~parts.VisuBarreGenerale` (alias for
+          :class:`~parts.GeneralBeam`)
+        * :func:`~parts.VisuBarreRectangle` (alias for
+          :class:`~parts.RectangularBeam`)
+        * :func:`~parts.VisuBarreCercle` (alias for
+          :class:`~parts.CircularBeam`)
+        * :func:`~parts.VisuCable` (alias for :class:`~parts.CircularBeam`)
+        * :func:`~parts.VisuCoque` (alias for :class:`~parts.ThickShell`)
+        * :func:`~parts.VisuGrille` (alias for :class:`~parts.Grid`)
+        
+        * ``Orientation``: This identifier is used to specify the orientation
+          of one or several 1D structural element parts (i.e. beams). The
+          parameters are described in class
+          :class:`~orientation.Orientation1D`.
+
+        The valid parameters in the dictionary depend on the type of the
+        structural element part, and are detailed in the documentation of
+        the corresponding class. The only parameter that is common to all the
+        classes is "MeshGroups" (that can also be named "Group_Maille"). It
+        defines the name of the geometrical object(s) in the study that will
+        be used as primitives to build the structural element part. This
+        parameter can be either a list of strings or a single string with
+        comma separated names.
+        """
+        logger.debug("StructuralElementManager.createElement: START")
+        logger.debug("Command list: %s" % commandList)
+
+        element = StructuralElement(self._studyEditor.studyId)
+        orientationCmdList = []
+        for command in commandList:
+            (parttype, parameters) = command
+            if parttype == "Orientation":
+                orientationCmdList += [command]
+            elif parttype not in dir(parts):
+                logger.warning('Invalid structural element part name "%s"'
+                               ' in command %s, this command will be '
+                               'ignored.' % (parttype, command))
+            else:
+                (meshGroupList, newparams) = self._extractMeshGroups(command)
+                for meshGroup in meshGroupList:
+                    # Get the geometrical primitive object
+                    groupSObj = self._studyEditor.study.FindObject(meshGroup)
+                    groupGeomObj = None
+                    if groupSObj is not None:
+                        groupGeomObj = \
+                                self._studyEditor.getOrLoadObject(groupSObj)
+                    if groupGeomObj is None:
+                        logger.error("Can't get geom object corresponding to "
+                                     'mesh group "%s", structural element '
+                                     "part %s will not be built." %
+                                     (groupName, part))
+                        continue
+                    
+                    # Create the part
+                    try:
+                        part = parts.__dict__[parttype](
+                                        self._studyEditor.studyId, meshGroup,
+                                        groupGeomObj, newparams)
+                        element.addPart(part)
+                    except InvalidParameterError, e:
+                        logger.error("Invalid parameter error: %s" % e)
+                        raise
+                    except:
+                        logger.exception("Can't create structural element"
+                                         " part with command %s." %
+                                         str(command))
+
+        # Orientations are parsed after the parts because they must be
+        # associated with existing parts.
+        for command in orientationCmdList:
+            (parttype, parameters) = command
+            (meshGroupList, orientParams) = self._extractMeshGroups(command)
+            for meshGroup in meshGroupList:
+                element.addOrientation(meshGroup, orientParams)
+
+        element.build()
+        logger.debug("StructuralElementManager.createElement: END")
+        return element
+    
+    def _extractMeshGroups(self, command):
+        """
+        This method extracts the names of the mesh groups (i.e. the
+        geometrical objects used to build the structural element part) in the
+        command in parameter. It returns a tuple containing the mesh groups as
+        a list of strings and the other parameters of the command as a new
+        dictionary.
+        """
+        (parttype, parameters) = command
+        newparams = parameters.copy()
+        groupMailleParam = newparams.pop("Group_Maille", None)
+        meshGroupParam = newparams.pop("MeshGroups", None)
+        if groupMailleParam is None and meshGroupParam is None:
+            logger.warning("No mesh group specified in command %s, this "
+                           "command will be ignored." % command)
+            return ([], newparams)
+        elif groupMailleParam is not None and meshGroupParam is not None:
+            logger.warning('Both "MeshGroups" and "Group_Maille" specified in'
+                           ' command %s, only "MeshGroups" will be used.' %
+                           command)
+        elif groupMailleParam is not None and meshGroupParam is None:
+            meshGroupParam = groupMailleParam
+        
+        meshGroupList = []
+        if type(meshGroupParam) == types.StringType:
+            meshGroupList = self._getMeshGroupListFromString(meshGroupParam)
+        else:
+            for item in meshGroupParam:
+                meshGroupList += self._getMeshGroupListFromString(item)
+        
+        if len(meshGroupList) == 0:
+            logger.warning("Mesh group list is empty in command %s, this "
+                           "command will be ignored." % command)
+
+        return (meshGroupList, newparams)
+    
+    def _getMeshGroupListFromString(self, meshString):
+        """
+        This method splits the string in parameter to extract comma separated
+        names. Those names are returned as a list of strings.
+        """
+        meshGroupList = []
+        list = meshString.split(",")
+        for item in list:
+            strippedItem = item.strip()
+            if len(strippedItem) > 0:
+                meshGroupList.append(strippedItem)
+        return meshGroupList
+
+
+class StructuralElement:
+    """
+    This class represents a structural element, i.e. a set of geometrical
+    objects built along geometrical primitives. The parameter `studyId`
+    defines the ID of the study that will contain the structural element. If
+    it is :const:`None` or not specified, the constructor will use the ID of
+    the active study as defined by :func:`salome.kernel.studyedit.getActiveStudyId`
+    function. Structural elements are normally created by the class
+    :class:`StructuralElementManager`, so this class should not be
+    instantiated directly in the general case.
+    """
+    _counter = 1
+    _mainFolderTag = 14725
+
+    def __init__(self, studyId = None):
+        # _parts is the dictionary mapping group name to structural element
+        # part. _shapeDict is the dictionary mapping SubShapeID objects to
+        # structural element parts. Both are used to avoid duplicate shapes
+        # in structural elements.
+        self._parts = {}
+        self._shapeDict = {}
+        self._id = StructuralElement._counter
+        StructuralElement._counter += 1
+        self._studyEditor = getStudyEditor(studyId)
+        logger.debug("Creating structural element in study %s" %
+                     self._studyEditor.studyId)
+        self._SObject = None
+
+    def _getSObject(self):
+        """
+        Find or create the study object corresponding to the structural
+        element. This object is named "SE_N" where N is a numerical ID. 
+        """
+        if self._SObject is None:
+            geomComponent = self._studyEditor.study.FindComponent("GEOM")
+            mainFolder = self._studyEditor.setItemAtTag(geomComponent,
+                                            StructuralElement._mainFolderTag,
+                                            name = "Structural Elements")
+            self._SObject = self._studyEditor.findOrCreateItem(mainFolder,
+                                            name = "SE_" + str(self._id))
+        return self._SObject
+
+    def addPart(self, newpart):
+        """
+        Add a part to the structural element.
+
+        :type  newpart: :class:`~parts.StructuralElementPart`
+        :param newpart: the part to add to the structural element.
+
+        """
+        newshapes = newpart.baseShapesSet
+
+        # Check duplicate groups
+        if self._parts.has_key(newpart.groupName):
+            logger.warning('Mesh group "%s" is used several times in the '
+                           'structural element. Only the last definition '
+                           'will be used.' % newpart.groupName)
+        else:
+            # Check duplicate shapes
+            intersect = newshapes.intersection(self._shapeDict.keys())
+            while len(intersect) > 0:
+                shape, = intersect
+                oldpartwithshape = self._shapeDict[shape]
+                oldpartshapes = oldpartwithshape.baseShapesSet
+                intersectwitholdpart = intersect.intersection(oldpartshapes)
+                logger.warning('Some shapes are common to groups "%s" and '
+                               '"%s". For those, the parameters defined for '
+                               '"%s" will be used.' %
+                               (oldpartwithshape.groupName, newpart.groupName,
+                                newpart.groupName))
+                oldpartwithshape.baseShapesSet = \
+                                oldpartshapes.difference(intersectwitholdpart)
+                intersect = intersect.difference(intersectwitholdpart)
+
+        # Finally add the new part in the structural element
+        self._parts[newpart.groupName] = newpart
+        for shape in newshapes:
+            self._shapeDict[shape] = newpart
+
+    def addOrientation(self, meshGroup, orientParams):
+        """
+        Add orientation information to a part in the structural element. This
+        information will be used to build the corresponding markers.
+
+        :type  meshGroup: string
+        :param meshGroup: the name of a geometrical primitive. The orientation
+                          information will apply to the structural element
+                          part built along this primitive.
+
+        :type  orientParams: dictionary
+        :param orientParams: parameters defining the orientation of the
+                             structural element part. Those parameters are
+                             detailed in class
+                             :class:`~orientation.Orientation1D`.
+
+        """
+        if self._parts.has_key(meshGroup):
+            self._parts[meshGroup].addOrientation(orientParams)
+        else:
+            logger.warning('Mesh group "%s" not found in structural element, '
+                           'cannot set orientation.' % meshGroup)
+
+    def build(self):
+        """
+        Build the geometric shapes and the markers corresponding to the
+        different parts of the structural element, and add them to the study.
+        """
+        gg = salome.ImportComponentGUI("GEOM")
+        for part in self._parts.itervalues():
+            # Build the structural element part
+            logger.debug("Building %s" % part)
+            try:
+                (shape, markers) = part.build()
+                if shape is None:
+                    logger.error("Part %s has not been built" % part)
+                    continue
+            except:
+                logger.exception("Couldn't build part %s" % part)
+                continue
+            
+            # Add the new objects to the study
+            IOR = self._studyEditor.study.ConvertObjectToIOR(shape)
+            shapeSObjName = part.name + "_" + part.groupName
+            icon = None
+            if salome.hasDesktop():
+                icon = gg.getShapeTypeIcon(IOR)
+            shapeSObj = self._studyEditor.createItem(self._getSObject(),
+                                            name = shapeSObjName, IOR = IOR,
+                                            icon = icon)
+            if markers is not None and len(markers) > 0:
+                i = 1
+                for marker in markers:
+                    markerIOR = \
+                            self._studyEditor.study.ConvertObjectToIOR(marker)
+                    markerSObjName = "Orient_" + shapeSObjName
+                    if len(markers) > 1:
+                        markerSObjName += "_%d" % i
+                    markerSObj = self._studyEditor.createItem(
+                                                self._getSObject(),
+                                                name = markerSObjName,
+                                                IOR = markerIOR,
+                                                icon = "ICON_OBJBROWSER_LCS")
+                    i += 1
+
+    def display(self):
+        """
+        Display the structural element in the geom view.
+        """
+        StructuralElement.showElement(self._SObject)
+
+    @staticmethod
+    def showElement(theSObject):
+        """
+        Display the structural element corresponding to the study object
+        `theSObject`
+        """
+        if theSObject is not None:
+            gg = salome.ImportComponentGUI("GEOM")
+            aStudy = theSObject.GetStudy()
+            editor = getStudyEditor(aStudy._get_StudyId())
+            aIterator = aStudy.NewChildIterator(theSObject)
+            aIterator.Init()
+            while aIterator.More():
+                sobj = aIterator.Value()
+                icon = editor.getIcon(sobj)
+                if icon != "ICON_OBJBROWSER_LCS":
+                    entry = aIterator.Value().GetID()
+                    gg.createAndDisplayGO(entry)
+                    gg.setDisplayMode(entry, 1)
+                aIterator.Next()
+
+
+def TEST_CreateGeometry():
+    import geompy
+    import SALOMEDS
+    geompy.init_geom(salome.myStudy)
+    Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+    edges = geompy.SubShapeAllSorted(Box_1, geompy.ShapeType["EDGE"])
+    edges[0].SetColor(SALOMEDS.Color(1.0,0.0,0.0))
+    edges[1].SetColor(SALOMEDS.Color(0.0,1.0,0.0))
+    edges[2].SetColor(SALOMEDS.Color(0.0,0.0,1.0))
+    edges[3].SetColor(SALOMEDS.Color(1.0,0.0,1.0))
+    edges[4].SetColor(SALOMEDS.Color(0.0,1.0,1.0))
+    edges[5].SetColor(SALOMEDS.Color(0.5,0.0,0.0))
+    edges[6].SetColor(SALOMEDS.Color(0.0,0.5,0.0))
+    edges[7].SetColor(SALOMEDS.Color(0.0,0.0,0.5))
+    geompy.addToStudy(Box_1, "Box_1")
+    for i in range(len(edges)):
+        geompy.addToStudyInFather(Box_1, edges[i], "Edge_%d" % i)
+    faces = geompy.SubShapeAllSorted(Box_1, geompy.ShapeType["FACE"])
+    faces[3].SetColor(SALOMEDS.Color(1.0,0.5,0.0))
+    faces[4].SetColor(SALOMEDS.Color(0.0,1.0,0.5))
+    for i in range(len(faces)):
+        geompy.addToStudyInFather(Box_1, faces[i], "Face_%d" % i)
+    Cylinder_1 = geompy.MakeCylinderRH(50, 200)
+    geompy.TranslateDXDYDZ(Cylinder_1, 300, 300, 0)
+    cyl_faces = geompy.SubShapeAllSorted(Cylinder_1, geompy.ShapeType["FACE"])
+    geompy.addToStudy(Cylinder_1, "Cylinder_1")
+    for i in range(len(cyl_faces)):
+        geompy.addToStudyInFather(Cylinder_1, cyl_faces[i], "CylFace_%d" % i)
+    Cylinder_2 = geompy.MakeTranslation(Cylinder_1, 100, 100, 0)
+    cyl_faces2 = geompy.SubShapeAllSorted(Cylinder_2,
+                                          geompy.ShapeType["FACE"])
+    geompy.addToStudy(Cylinder_2, "Cylinder_2")
+    for i in range(len(cyl_faces2)):
+        geompy.addToStudyInFather(Cylinder_2, cyl_faces2[i],
+                                  "CylFace2_%d" % i)
+
+
+def TEST_StructuralElement():
+    salome.salome_init()
+    TEST_CreateGeometry()
+    liste_commandes = [('Orientation', {'MeshGroups': 'Edge_4',
+                                        'VECT_Y': (1.0, 0.0, 1.0)}),
+                       ('Orientation', {'MeshGroups': 'Edge_5',
+                                        'ANGL_VRIL': 45.0}),
+                       ('GeneralBeam', {'MeshGroups': 'Edge_1, Edge_7'}),
+                       ('VisuPoutreCercle', {'MeshGroups': ['Edge_6'],
+                                             'R1': 30, 'R2': 20}),
+                       ('CircularBeam', {'MeshGroups': ['Edge_2', 'Edge_3'],
+                                         'R': 40, 'EP': 20}),
+                       ('RectangularBeam', {'MeshGroups': 'Edge_4, Edge_5',
+                                            'HZ1': 60, 'HY1': 40,
+                                            'EPZ1': 15, 'EPY1': 10,
+                                            'HZ2': 40, 'HY2': 60,
+                                            'EPZ2': 10, 'EPY2': 15}),
+                       ('VisuCable', {'MeshGroups': 'Edge_7', 'R': 5}),
+                       ('VisuCoque', {'MeshGroups': 'Face_4',
+                                      'Epais': 10, 'Excentre': 5,
+                                      'angleAlpha': 45, 'angleBeta': 60}),
+                       ('VisuCoque', {'MeshGroups': 'CylFace_2', 'Epais': 5}),
+                       ('VisuGrille', {'MeshGroups': 'Face_5', 'Excentre': 5,
+                                       'angleAlpha': 45, 'angleBeta': 60}),
+                       ('VisuGrille', {'MeshGroups': 'CylFace2_2',
+                                       'Excentre': 5, 'origAxeX': 400,
+                                       'origAxeY': 400, 'origAxeZ': 0,
+                                       'axeX': 0, 'axeY': 0, 'axeZ': 100}),
+                      ]
+
+    structElemManager = StructuralElementManager()
+    elem = structElemManager.createElement(liste_commandes)
+    if salome.hasDesktop():
+        elem.display()
+        salome.sg.updateObjBrowser(True)
+
+
+# Main function only used to test the module
+if __name__ == "__main__":
+    TEST_StructuralElement()
diff --git a/src/GEOM_PY/structelem/orientation.py b/src/GEOM_PY/structelem/orientation.py
new file mode 100644 (file)
index 0000000..1bf1117
--- /dev/null
@@ -0,0 +1,249 @@
+# -*- coding: utf-8 -*-
+#
+#  Copyright (C) 2007-2009      EDF R&D
+# 
+#    This file is part of PAL_SRC.
+#
+#    PAL_SRC is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    PAL_SRC 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with PAL_SRC; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+#
+"""
+This module is used to compute the orientation of the different parts in a
+structural element and to build the corresponding markers (trihedrons).
+"""
+
+import math
+
+from salome.kernel.logger import Logger
+from salome.kernel import termcolor
+logger = Logger("__PAL_GEOM__.structelem.orientation", color = termcolor.RED)
+
+
+class Orientation1D:
+    """
+    This class is used to compute the orientation of 1D elements and to build
+    the corresponding markers.
+    """
+    
+    def __init__(self):
+        self.geom = None
+        self._vectorYCoords = None
+        self._angle = 0.0
+
+    def __repr__(self):
+        reprdict = self.__dict__.copy()
+        del reprdict["geom"]
+        return '%s(%s)' % (self.__class__.__name__, reprdict)
+
+    def addParams(self, params):
+        """
+        Add orientation parameters. `params` is a dictionary containing one or
+        several orientation parameters. The valid parameters are:
+
+        * "VECT_Y": Triplet defining the local Y axis (the X axis is the
+          main direction of the 1D element).
+        * "ANGL_VRIL": Angle of rotation along the X axis to define the local
+          coordinate system.
+        
+        The parameters can be specified several times. In this case, only the
+        first "VECT_Y" is taken into account, and the values of "ANGL_VRIL"
+        are added to obtain the total rotation angle.
+        """
+        mydict = params.copy()
+        if mydict.has_key("VECT_Y"):
+            newVecCoords = mydict.pop("VECT_Y")
+            if self._vectorYCoords is None:
+                logger.debug("Setting orientation vector Y to %s" %
+                             str(newVecCoords))
+                self._vectorYCoords = newVecCoords
+            else:
+                logger.warning('Orientation parameter "VECT_Y" is specified '
+                               'several times for the same mesh group, vector'
+                               ' %s will be used' % str(self._vectorYCoords))
+        if mydict.has_key("ANGL_VRIL"):
+            newAngle = mydict.pop("ANGL_VRIL")
+            self._angle += newAngle
+            logger.debug("Adding angle %f to orientation, new angle is %f." %
+                         (newAngle, self._angle))
+        if len(mydict) > 0:
+            logger.warning("Invalid orientation parameter(s) (ignored): %s" %
+                           str(mydict))
+
+    def _buildDefaultMarker(self, center, vecX):
+        """
+        Create the default marker, that use the main direction of the 1D
+        object as the local X axis and the global Z axis to determine the
+        local Z axis.
+        """
+        xPoint = self.geom.MakeTranslationVector(center, vecX)
+        givenVecZ = self.geom.MakeVectorDXDYDZ(0.0, 0.0, 1.0)
+        angle = self.geom.GetAngleRadians(vecX, givenVecZ)
+        if abs(angle) < 1e-7 or abs(angle - math.pi) < 1e-7:
+            logger.warning("Beam X axis is colinear to absolute Z axis. "
+                           "Absolute X axis will be used to determine "
+                           "local Z axis.")
+            givenVecZ = self.geom.MakeVectorDXDYDZ(1.0, 0.0, 0.0)
+        zPoint = self.geom.MakeTranslationVector(center, givenVecZ)
+        locPlaneZX = self.geom.MakePlaneThreePnt(center, zPoint, xPoint, 1.0)
+        locY = self.geom.GetNormal(locPlaneZX)
+        marker = self.geom.MakeMarkerPntTwoVec(center,vecX,locY)
+        return marker
+
+    def buildMarker(self, geom, center, vecX):
+        """
+        Create a marker with origin `center` and X axis `vecX`. `geom` is the
+        pseudo-geompy object used to build the geometric shapes.
+        """
+        self.geom = geom
+        marker = None
+        if self._vectorYCoords is None:
+            marker = self._buildDefaultMarker(center, vecX)
+        else:
+            xPoint = self.geom.MakeTranslationVector(center, vecX)
+            givenLocY = self.geom.MakeVectorDXDYDZ(self._vectorYCoords[0],
+                                                   self._vectorYCoords[1],
+                                                   self._vectorYCoords[2])
+            angle = self.geom.GetAngleRadians(vecX, givenLocY)
+            if abs(angle) < 1e-7 or abs(angle - math.pi) < 1e-7:
+                logger.warning("Vector Y is colinear to the beam X axis, "
+                               "using default LCS.")
+                marker = self._buildDefaultMarker(center, vecX)
+            else:
+                yPoint = self.geom.MakeTranslationVector(center, givenLocY)
+                locPlaneXY = self.geom.MakePlaneThreePnt(center, xPoint,
+                                                         yPoint, 1.0)
+                locZ = self.geom.GetNormal(locPlaneXY)
+                zPoint = self.geom.MakeTranslationVector(center, locZ)
+                locPlaneZX = self.geom.MakePlaneThreePnt(center, zPoint,
+                                                         xPoint, 1.0)
+                locY = self.geom.GetNormal(locPlaneZX)
+                marker = self.geom.MakeMarkerPntTwoVec(center,vecX,locY)
+
+        if self._angle != 0.0:
+            angleRad = math.radians(self._angle)
+            marker = self.geom.Rotate(marker, vecX, angleRad)
+
+        return marker
+
+
+class Orientation2D:
+    """
+    This class is used to compute the orientation of 2D elements and to build
+    the corresponding markers. Angles `alpha` and `beta` are used to determine
+    the local coordinate system for the 2D element. If `vect` is not
+    :const:`None`, it is used instead of `alpha` and `beta`.
+    """
+
+    def __init__(self, alpha, beta, vect):
+        self.geom = None
+        self._alpha = alpha
+        self._beta = beta
+        self._vect = vect
+
+    def __repr__(self):
+        reprdict = self.__dict__.copy()
+        del reprdict["geom"]
+        return '%s(%s)' % (self.__class__.__name__, reprdict)
+
+    def _buildDefaultMarker(self, center, normal, warnings = True):
+        """
+        Create the default marker, that use the normal vector of the 2D object
+        as the local Z axis and the global X axis to determine the local X
+        axis. `warnings` can be used to enable or disable the logging of
+        warning messages.
+        """
+        marker = None
+        globalVecX = self.geom.MakeVectorDXDYDZ(1.0, 0.0, 0.0)
+        angle = self.geom.GetAngleRadians(normal, globalVecX)
+        if abs(angle) < 1e-7 or abs(angle - math.pi) < 1e-7:
+            if warnings:
+                logger.warning("Face normal is colinear to absolute X axis. "
+                               "Absolute Y axis will be used to determine "
+                               "local X axis.")
+            globalVecY = self.geom.MakeVectorDXDYDZ(0.0, 1.0, 0.0)
+            marker = self._buildMarkerRefVecX(center, normal, globalVecY)
+        else:
+            marker = self._buildMarkerRefVecX(center, normal, globalVecX)
+        return marker
+
+    def _buildMarkerRefVecX(self, center, normal, refVecX):
+        """
+        Create a marker using `normal` as Z axis and `refVecX` to determine
+        the X axis.
+        """
+        xPoint = self.geom.MakeTranslationVector(center, refVecX)
+        zPoint = self.geom.MakeTranslationVector(center, normal)
+        locPlaneZX = self.geom.MakePlaneThreePnt(center, zPoint, xPoint, 1.0)
+        locY = self.geom.GetNormal(locPlaneZX)
+        yPoint = self.geom.MakeTranslationVector(center, locY)
+        locPlaneYZ = self.geom.MakePlaneThreePnt(center, yPoint, zPoint, 1.0)
+        locX = self.geom.GetNormal(locPlaneYZ)
+        marker = self.geom.MakeMarkerPntTwoVec(center, locX, locY)
+        return marker
+
+    def buildMarker(self, geom, center, normal, warnings = True):
+        """
+        Create a marker with origin `center` and `normal` as Z axis. The other
+        axes are computed using the parameters alpha and beta of the
+        Orientation2D instance. `geom` is the pseudo-geompy object used to
+        build the geometric shapes. `warnings` can be used to enable or
+        disable the logging of warning messages.
+        """
+        self.geom = geom
+        marker = None
+        refVecX = None
+        if self._vect is not None:
+            # Using vector parameter
+            if abs(self._vect[0]) <= 1e-7 and abs(self._vect[1]) <= 1e-7 and \
+                                              abs(self._vect[2]) <= 1e-7:
+                if warnings:
+                    logger.warning("Vector too small: %s, using default LCS" %
+                                   self._vect)
+            else:
+                refVecX = self.geom.MakeVectorDXDYDZ(self._vect[0],
+                                                     self._vect[1],
+                                                     self._vect[2])
+        elif self._alpha is not None and self._beta is not None:
+            # Using alpha and beta angles
+            alphaRad = math.radians(self._alpha)
+            betaRad = math.radians(self._beta)
+            if abs(alphaRad) <= 1e-7 and abs(betaRad) <= 1e-7:
+                if warnings:
+                    logger.warning("Angles too small: (%g, %g), using "
+                                   "default LCS" % (self._alpha, self._beta))
+            else:
+                # rotate global CS with angles alpha and beta
+                refVecX = self.geom.MakeVectorDXDYDZ(1.0, 0.0, 0.0)
+                refVecY = self.geom.MakeVectorDXDYDZ(0.0, 1.0, 0.0)
+                globalVecZ = self.geom.MakeVectorDXDYDZ(0.0, 0.0, 1.0)
+                if abs(alphaRad) > 1e-7:
+                    refVecX = self.geom.Rotate(refVecX, globalVecZ, alphaRad)
+                    refVecY = self.geom.Rotate(refVecY, globalVecZ, alphaRad)
+                if abs(betaRad) > 1e-7:
+                    refVecX = self.geom.Rotate(refVecX, refVecY, betaRad)
+    
+        if refVecX is not None:
+            # build local coordinate system
+            angle = self.geom.GetAngleRadians(normal, refVecX)
+            if abs(angle) < 1e-7 or abs(angle - math.pi) < 1e-7:
+                if warnings:
+                    logger.warning("Face normal is colinear to the reference "
+                                   "X axis, using default LCS.")
+            else:
+                marker = self._buildMarkerRefVecX(center, normal, refVecX)
+
+        if marker is None:
+            marker = self._buildDefaultMarker(center, normal, warnings)
+
+        return marker
diff --git a/src/GEOM_PY/structelem/parts.py b/src/GEOM_PY/structelem/parts.py
new file mode 100644 (file)
index 0000000..0781f6d
--- /dev/null
@@ -0,0 +1,969 @@
+# -*- coding: utf-8 -*-
+#
+#  Copyright (C) 2007-2009      EDF R&D
+# 
+#    This file is part of PAL_SRC.
+#
+#    PAL_SRC is free software; you can redistribute it and/or modify
+#    it under the terms of the GNU General Public License as published by
+#    the Free Software Foundation; either version 2 of the License, or
+#    (at your option) any later version.
+#
+#    PAL_SRC 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 General Public License for more details.
+#
+#    You should have received a copy of the GNU General Public License
+#    along with PAL_SRC; if not, write to the Free Software
+#    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
+#
+"""
+This module defines the different structural element parts. It is used to
+build the geometric shapes of the structural elements. It should not be used
+directly in the general case. Structural elements should be created by the
+class :class:`~salome.geom.structelem.StructuralElementManager`.
+"""
+
+import salome
+
+from salome.kernel.logger import Logger
+from salome.kernel import termcolor
+logger = Logger("salome.geom.structelem.parts", color = termcolor.RED)
+from salome.geom.geomtools import getGeompy
+
+import orientation
+
+# Filling for the beams
+FULL = "FULL"
+HOLLOW = "HOLLOW"
+
+# Minimum dimension for the shapes to extrude
+MIN_DIM_FOR_EXTRUDED_SHAPE = 2e-4
+MIN_LENGTH_FOR_EXTRUSION = 1e-4
+MIN_THICKNESS = 1e-5
+
+
+class InvalidParameterError(Exception):
+    """
+    This exception is raised when an invalid parameter is used to build a
+    structural element part.
+    """
+    
+    def __init__(self, groupName, expression, minValue, value):
+        self.groupName = groupName
+        self.expression = expression
+        self.minValue = minValue
+        self.value = value
+        
+    def __str__(self):
+        return "%s < %g (%s = %g in %s)" % (self.expression, self.minValue,
+                                            self.expression, self.value,
+                                            self.groupName)
+
+
+class SubShapeID:
+    """
+    This class enables the use of subshapes in sets or as dictionary keys.
+    It implements __eq__ and __hash__ methods so that subshapes with the same
+    CORBA object `mainShape` and the same `id` are considered equal.
+    """
+
+    def __init__(self, mainShape, id):
+        self._mainShape = mainShape
+        self._id = id
+
+    def getObj(self, geom):
+        """
+        Return the subshape (GEOM object). `geom` is a pseudo-geompy object
+        used to find the geometrical object.
+        """
+        return geom.GetSubShape(self._mainShape, [self._id])
+    
+    def __eq__(self, other):
+        return self._mainShape._is_equivalent(other._mainShape) and \
+               self._id == other._id
+    
+    def __hash__(self):
+        return self._mainShape._hash(2147483647) ^ self._id
+
+
+class StructuralElementPart:
+    """
+    This class is the base class for all structural element parts. It should
+    not be instantiated directly (consider it as an "abstract" class).
+
+    :type  studyId: integer
+    :param studyId: the ID of the study in which the part is created.
+
+    :type  groupName: string
+    :param groupName: the name of the underlying geometrical primitive in the
+                      study.
+
+    :type  groupGeomObj: GEOM object
+    :param groupGeomObj: the underlying geometrical primitive.
+
+    :type  parameters: dictionary
+    :param parameters: parameters defining the structural element (see
+                       subclasses for details).
+
+    :type  name: string
+    :param name: name to use for the created object in the study.
+
+    """
+    
+    DEFAULT_NAME = "StructElemPart"
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = DEFAULT_NAME):
+        self._parameters = parameters
+        self.groupName = groupName
+        self._groupGeomObj = groupGeomObj
+        self._orientation = None
+        self._paramUserName = {}
+        self.name = name
+        self.geom = getGeompy(studyId)
+        self.baseShapesSet = set()
+        mainShape = self.geom.GetMainShape(groupGeomObj)
+        listIDs = self.geom.GetObjectIDs(groupGeomObj)
+        if mainShape is not None and listIDs is not None:
+            for id in listIDs:
+                self.baseShapesSet.add(SubShapeID(mainShape, id))
+
+    def _getParameter(self, nameList, default = None):
+        """
+        This method finds the value of a parameter in the parameters
+        dictionary. The argument is a list because some parameters can have
+        several different names.
+        """
+        if len(nameList) > 0:
+            paramName = nameList[0]
+        for name in nameList:
+            if self._parameters.has_key(name):
+                self._paramUserName[paramName] = name
+                return self._parameters[name]
+        return default
+
+    def _getParamUserName(self, paramName):
+        """
+        This method finds the user name for a parameter.
+        """
+        if self._paramUserName.has_key(paramName):
+            return self._paramUserName[paramName]
+        else:
+            return paramName
+
+    def __repr__(self):
+        reprdict = self.__dict__.copy()
+        del reprdict["_parameters"]
+        del reprdict["groupName"]
+        del reprdict["_groupGeomObj"]
+        del reprdict["_paramUserName"]
+        del reprdict["name"]
+        del reprdict["geom"]
+        del reprdict["baseShapesSet"]
+        return '%s("%s", %s)' % (self.__class__.__name__, self.groupName,
+                                 reprdict)
+
+    def addOrientation(self, orientParams):
+        """
+        Add orientation information to the structural element part. See class
+        :class:`~salome.geom.structelem.orientation.Orientation1D` for the description
+        of the parameters.
+        """
+        self._orientation.addParams(orientParams)
+
+    def _checkSize(self, value, mindim, expression):
+        """
+        This method checks that some parameters or some expressions involving
+        those parameters are greater than a minimum value.
+        """
+        if value < mindim:
+            raise InvalidParameterError(self.groupName, expression,
+                                        mindim, value)
+
+    def build(self):
+        """
+        Build the geometric shapes and the markers corresponding to the
+        structural element part in the study `studyId`.
+        """
+        shape = self._buildPart()
+        markers = self._buildMarkers()
+        shape.SetColor(self._groupGeomObj.GetColor())
+        for marker in markers:
+            marker.SetColor(self._groupGeomObj.GetColor())
+        return (shape, markers)
+
+    def _buildPart(self):
+        """
+        This abstract method must be implemented in subclasses and should
+        create the geometrical shape(s) of the structural element part.
+        """
+        raise NotImplementedError("Method _buildPart not implemented in class"
+                                  " %s (it must be implemented in "
+                                  "StructuralElementPart subclasses)." %
+                                  self.__class__.__name__)
+
+    def _buildMarkers(self):
+        """
+        This abstract method must be implemented in subclasses and should
+        create the markers defining the orientation of the structural element
+        part.
+        """
+        raise NotImplementedError("Method _buildMarker not implemented in "
+                                  "class %s (it must be implemented in "
+                                  "StructuralElementPart subclasses)." %
+                                  self.__class__.__name__)
+
+    def _getSubShapes(self, minDim = MIN_LENGTH_FOR_EXTRUSION):
+        """
+        Find and return the base subshapes in the structural element part.
+        """
+        subShapes = []
+        for subShapeID in self.baseShapesSet:
+            subShape = subShapeID.getObj(self.geom)
+            length = self.geom.BasicProperties(subShape)[0]
+            if length < minDim:
+                logger.warning("Length too short (%s - ID %s, length = %g), "
+                               "subshape will not be used in structural "
+                               "element" % (self.groupName, subShapeID._id,
+                                            length))
+            else:
+                subShapes.append(subShape)
+        return subShapes
+
+
+class Beam(StructuralElementPart):
+    """
+    This class is an "abstract" class for all 1D structural element parts. It
+    should not be instantiated directly. See class
+    :class:`StructuralElementPart` for the description of the parameters.
+    """
+
+    DEFAULT_NAME = "Beam"
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = DEFAULT_NAME):
+        StructuralElementPart.__init__(self, studyId, groupName, groupGeomObj,
+                                       parameters, name)
+        self._orientation = orientation.Orientation1D()
+
+    def _isReversed(self, path):
+        """
+        This method checks if a 1D object is "reversed", i.e. if its
+        orientation is different than the orientation of the underlying OCC
+        object.
+        """
+        fParam = 0.
+        lParam = 1.
+        fPoint = self.geom.MakeVertexOnCurve(path, fParam)
+        lPoint = self.geom.MakeVertexOnCurve(path, lParam)
+
+        fNormal = self.geom.MakeTangentOnCurve(path, fParam)
+        lNormal = self.geom.MakeTangentOnCurve(path, lParam)
+
+        fCircle = self.geom.MakeCircle(fPoint, fNormal, 10)
+        lCircle = self.geom.MakeCircle(lPoint, lNormal, 10)
+
+        try:
+            pipe = self.geom.MakePipeWithDifferentSections([fCircle, lCircle],
+                                                           [fPoint, lPoint],
+                                                           path, False, False)
+        except RuntimeError, e:
+            # This dirty trick is needed if the wire is not oriented in the
+            # direction corresponding to parameters 0.0 -> 1.0. In this case,
+            # we catch the error and invert the ends of the wire. This trick
+            # will be removed when the function giving the orientation of an
+            # edge will be added in geompy (see issue 1144 in PAL bugtracker).
+            if (str(e) == "MakePipeWithDifferentSections : First location "
+                          "shapes is not coincided with first vertex of "
+                          "aWirePath"):
+                return True
+            else:
+                raise
+        return False
+
+    def _getVertexAndTangentOnOrientedWire(self, path, param):
+        """
+        Get a vertex and the corresponding tangent on a wire by parameter.
+        This method takes into account the "real" orientation of the wire
+        (i.e. the orientation of the underlying OCC object).
+        """
+        if self._isReversed(path):
+            vertex = self.geom.MakeVertexOnCurve(path, 1.0 - param)
+            invtangent = self.geom.MakeTangentOnCurve(path, 1.0 - param)
+            tanpoint = self.geom.MakeTranslationVectorDistance(vertex,
+                                                               invtangent,
+                                                               -1.0)
+            tangent = self.geom.MakeVector(vertex, tanpoint)
+        else:
+            vertex = self.geom.MakeVertexOnCurve(path, param)
+            tangent = self.geom.MakeTangentOnCurve(path, param)
+        return (vertex, tangent)
+
+    def _makeSolidPipeFromWires(self, wire1, wire2, point1, point2, path):
+        """
+        Create a solid by the extrusion of section `wire1` to section `wire2`
+        along `path`.
+        """
+        face1 = self.geom.MakeFace(wire1, True)
+        face2 = self.geom.MakeFace(wire2, True)
+        shell = self.geom.MakePipeWithDifferentSections([wire1, wire2],
+                                                        [point1, point2],
+                                                        path, False, False)
+        closedShell = self.geom.MakeShell([face1, face2, shell])
+        solid = self.geom.MakeSolid([closedShell])
+        return solid
+
+    def _buildPart(self):
+        """
+        Build the structural element part.
+        """
+        # Get all the subshapes in the group (normally only edges and wires)
+        paths = self._getSubShapes()
+        listPipes = []
+        withContact = False
+        withCorrection = False
+    
+        for path in paths:
+            # Build the sections (rectangular or circular) at each end of the
+            # beam
+            (fPoint, fNormal) = self._getVertexAndTangentOnOrientedWire(path,
+                                                                        0.0)
+            (lPoint, lNormal) = self._getVertexAndTangentOnOrientedWire(path,
+                                                                        1.0)
+            (outerWire1, innerWire1, outerWire2, innerWire2) = \
+                    self._makeSectionWires(fPoint, fNormal, lPoint, lNormal)
+
+            # Create the resulting solid
+            outerSolid = self._makeSolidPipeFromWires(outerWire1, outerWire2,
+                                                      fPoint, lPoint, path)
+            if self.filling == HOLLOW:
+                innerSolid = self._makeSolidPipeFromWires(innerWire1,
+                                                          innerWire2, fPoint,
+                                                          lPoint, path)
+                resultSolid = self.geom.MakeCut(outerSolid, innerSolid)
+                listPipes.append(resultSolid)
+            else:
+                listPipes.append(outerSolid)
+
+        if len(listPipes) == 0:
+            return None
+        elif len(listPipes) == 1:
+            return listPipes[0]
+        else:
+            return self.geom.MakeCompound(listPipes)
+
+    def _buildMarkers(self):
+        """
+        Build the markers defining the orientation of the structural element
+        part.
+        """
+        param = 0.5
+        paths = self._getSubShapes()
+        listMarkers = []
+        for path in paths:
+            (center, vecX) = self._getVertexAndTangentOnOrientedWire(path,
+                                                                     param)
+            marker = self._orientation.buildMarker(self.geom, center, vecX)
+            listMarkers.append(marker)
+        return listMarkers
+
+
+class GeneralBeam(Beam):
+    """
+    This class defines a beam with a generic section. It is represented only
+    as the underlying wire. See class :class:`StructuralElementPart` for the
+    description of the parameters.
+    """
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = Beam.DEFAULT_NAME):
+        Beam.__init__(self, studyId, groupName, groupGeomObj, parameters,
+                      name)
+        logger.debug(repr(self))
+
+    def _buildPart(self):
+        """
+        Create a copy of the underlying wire.
+        """
+        edges = self._getSubShapes(1e-7)
+        wire = None
+        if len(edges) > 0:
+            wire = self.geom.MakeWire(edges)
+        return wire
+
+
+class CircularBeam(Beam):
+    """
+    This class defines a beam with a circular section. It can be full or
+    hollow, and its radius and thickness can vary from one end of the beam to
+    the other. The valid parameters for circular beams are:
+
+    * "R1" or "R": radius at the first end of the beam.
+    * "R2" or "R": radius at the other end of the beam.
+    * "EP1" or "EP" (optional): thickness at the first end of the beam.
+      If not specified or equal to 0, the beam is considered full.
+    * "EP2" or "EP" (optional): thickness at the other end of the beam.
+      If not specified or equal to 0, the beam is considered full.
+
+    See class :class:`StructuralElementPart` for the description of the
+    other parameters.
+
+    """
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = Beam.DEFAULT_NAME):
+        Beam.__init__(self, studyId, groupName, groupGeomObj, parameters,
+                      name)
+
+        self.R1 = self._getParameter(["R1", "R"])
+        self.R2 = self._getParameter(["R2", "R"])
+        self.EP1 = self._getParameter(["EP1", "EP"])
+        self.EP2 = self._getParameter(["EP2", "EP"])
+
+        if self.EP1 is None or self.EP2 is None or \
+                                self.EP1 == 0 or self.EP2 == 0:
+            self.filling = FULL
+        else:
+            self.filling = HOLLOW
+
+        logger.debug(repr(self))
+
+        # Check parameters
+        self._checkSize(self.R1, MIN_DIM_FOR_EXTRUDED_SHAPE / 2.0,
+                        self._getParamUserName("R1"))
+        self._checkSize(self.R2, MIN_DIM_FOR_EXTRUDED_SHAPE / 2.0,
+                        self._getParamUserName("R2"))
+        if self.filling == HOLLOW:
+            self._checkSize(self.EP1, MIN_THICKNESS,
+                            self._getParamUserName("EP1"))
+            self._checkSize(self.EP2, MIN_THICKNESS,
+                            self._getParamUserName("EP2"))
+            self._checkSize(self.R1 - self.EP1,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE / 2.0,
+                            "%s - %s" % (self._getParamUserName("R1"),
+                                         self._getParamUserName("EP1")))
+            self._checkSize(self.R2 - self.EP2,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE / 2.0,
+                            "%s - %s" % (self._getParamUserName("R2"),
+                                         self._getParamUserName("EP2")))
+
+    def _makeSectionWires(self, fPoint, fNormal, lPoint, lNormal):
+        """
+        Create the circular sections used to build the pipe.
+        """
+        outerCircle1 = self.geom.MakeCircle(fPoint, fNormal, self.R1)
+        outerCircle2 = self.geom.MakeCircle(lPoint, lNormal, self.R2)
+        if self.filling == HOLLOW:
+            innerCircle1 = self.geom.MakeCircle(fPoint, fNormal,
+                                                self.R1 - self.EP1)
+            innerCircle2 = self.geom.MakeCircle(lPoint, lNormal,
+                                                self.R2 - self.EP2)
+        else:
+            innerCircle1 = None
+            innerCircle2 = None
+
+        return (outerCircle1, innerCircle1, outerCircle2, innerCircle2)
+
+
+class RectangularBeam(Beam):
+    """
+    This class defines a beam with a rectangular section. It can be full or
+    hollow, and its dimensions can vary from one end of the beam to the other.
+    The valid parameters for rectangular beams are:
+
+    * "HY1", "HY", "H1" or "H": width at the first end of the beam.
+    * "HZ1", "HZ", "H1" or "H": height at the first end of the beam.
+    * "HY2", "HY", "H2" or "H": width at the other end of the beam.
+    * "HZ2", "HZ", "H2" or "H": height at the other end of the beam.
+    * "EPY1", "EPY", "EP1" or "EP" (optional): thickness in the width
+      direction at the first end of the beam. If not specified or equal to 0,
+      the beam is considered full.
+    * "EPZ1", "EPZ", "EP1" or "EP" (optional): thickness in the height
+      direction at the first end of the beam. If not specified or equal to 0,
+      the beam is considered full.
+    * "EPY2", "EPY", "EP2" or "EP" (optional): thickness in the width
+      direction at the other end of the beam. If not specified or equal to 0,
+      the beam is considered full.
+    * "EPZ2", "EPZ", "EP2" or "EP" (optional): thickness in the height
+      direction at the other end of the beam. If not specified or equal to 0,
+      the beam is considered full.
+
+    See class :class:`StructuralElementPart` for the description of the
+    other parameters.
+
+    """
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = Beam.DEFAULT_NAME):
+        Beam.__init__(self, studyId, groupName, groupGeomObj, parameters,
+                      name)
+
+        self.HY1 = self._getParameter(["HY1", "HY", "H1", "H"])
+        self.HZ1 = self._getParameter(["HZ1", "HZ", "H1", "H"])
+        self.HY2 = self._getParameter(["HY2", "HY", "H2", "H"])
+        self.HZ2 = self._getParameter(["HZ2", "HZ", "H2", "H"])
+        self.EPY1 = self._getParameter(["EPY1", "EPY", "EP1", "EP"])
+        self.EPZ1 = self._getParameter(["EPZ1", "EPZ", "EP1", "EP"])
+        self.EPY2 = self._getParameter(["EPY2", "EPY", "EP2", "EP"])
+        self.EPZ2 = self._getParameter(["EPZ2", "EPZ", "EP2", "EP"])
+
+        if self.EPY1 is None or self.EPZ1 is None or \
+           self.EPY2 is None or self.EPZ2 is None or \
+           self.EPY1 == 0 or self.EPZ1 == 0 or \
+           self.EPY2 == 0 or self.EPZ2 == 0:
+            self.filling = FULL
+        else:
+            self.filling = HOLLOW
+
+        logger.debug(repr(self))
+
+        # Check parameters
+        self._checkSize(self.HY1, MIN_DIM_FOR_EXTRUDED_SHAPE,
+                        self._getParamUserName("HY1"))
+        self._checkSize(self.HZ1, MIN_DIM_FOR_EXTRUDED_SHAPE,
+                        self._getParamUserName("HZ1"))
+        self._checkSize(self.HY2, MIN_DIM_FOR_EXTRUDED_SHAPE,
+                        self._getParamUserName("HY2"))
+        self._checkSize(self.HZ2, MIN_DIM_FOR_EXTRUDED_SHAPE,
+                        self._getParamUserName("HZ2"))
+        if self.filling == HOLLOW:
+            self._checkSize(self.EPY1, MIN_THICKNESS,
+                            self._getParamUserName("EPY1"))
+            self._checkSize(self.EPZ1, MIN_THICKNESS,
+                            self._getParamUserName("EPZ1"))
+            self._checkSize(self.EPY2, MIN_THICKNESS,
+                            self._getParamUserName("EPY2"))
+            self._checkSize(self.EPZ2, MIN_THICKNESS,
+                            self._getParamUserName("EPZ2"))
+            self._checkSize(self.HY1 - 2 * self.EPY1,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE,
+                            "%s - 2 * %s" % (self._getParamUserName("HY1"),
+                                             self._getParamUserName("EPY1")))
+            self._checkSize(self.HZ1 - 2 * self.EPZ1,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE,
+                            "%s - 2 * %s" % (self._getParamUserName("HZ1"),
+                                             self._getParamUserName("EPZ1")))
+            self._checkSize(self.HY2 - 2 * self.EPY2,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE,
+                            "%s - 2 * %s" % (self._getParamUserName("HY2"),
+                                             self._getParamUserName("EPY2")))
+            self._checkSize(self.HZ2 - 2 * self.EPZ2,
+                            MIN_DIM_FOR_EXTRUDED_SHAPE,
+                            "%s - 2 * %s" % (self._getParamUserName("HZ2"),
+                                             self._getParamUserName("EPZ2")))
+
+    def _makeRectangle(self, HY, HZ, planeSect):
+        """
+        Create a rectangle in the specified plane.
+        """
+        halfHY = HY / 2.0
+        halfHZ = HZ / 2.0
+        sketchStr = "Sketcher:F %g" % (-halfHZ) + " %g" % (-halfHY) + ":"
+        sketchStr += "TT %g" % (halfHZ) + " %g" % (-halfHY) + ":"
+        sketchStr += "TT %g" % (halfHZ) + " %g" % (halfHY) + ":" 
+        sketchStr += "TT %g" % (-halfHZ) + " %g" % (halfHY) + ":WW"
+        logger.debug('Drawing rectangle: "%s"' % sketchStr)
+        sketch = self.geom.MakeSketcherOnPlane(sketchStr, planeSect)
+        return sketch
+
+    def _makeSectionWires(self, fPoint, fNormal, lPoint, lNormal):
+        """
+        Create the rectangular sections used to build the pipe.
+        """
+        planeSect1 = self.geom.MakePlane(fPoint, fNormal, 1.0)
+        outerRect1 = self._makeRectangle(self.HY1, self.HZ1, planeSect1)
+        planeSect2 = self.geom.MakePlane(lPoint, lNormal, 1.0)
+        outerRect2 = self._makeRectangle(self.HY2, self.HZ2, planeSect2)
+        if self.filling == HOLLOW:
+            innerRect1 = self._makeRectangle(self.HY1 - 2 * self.EPY1,
+                                             self.HZ1 - 2 * self.EPZ1,
+                                             planeSect1)
+            innerRect2 = self._makeRectangle(self.HY2 - 2 * self.EPY2,
+                                             self.HZ2 - 2 * self.EPZ2,
+                                             planeSect2)
+        else:
+            innerRect1 = None
+            innerRect2 = None
+
+        return (outerRect1, innerRect1, outerRect2, innerRect2)
+
+
+class StructuralElementPart2D(StructuralElementPart):
+    """
+    This class is an "abstract" class for all 2D structural element parts. It
+    should not be instantiated directly. See class
+    :class:`StructuralElementPart` for the description of the parameters.
+    """
+
+    DEFAULT_NAME = "StructuralElementPart2D"
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = DEFAULT_NAME):
+        StructuralElementPart.__init__(self, studyId, groupName, groupGeomObj,
+                                       parameters, name)
+        self._orientation = orientation.Orientation2D(
+                                        self._getParameter(["angleAlpha"]),
+                                        self._getParameter(["angleBeta"]),
+                                        self._getParameter(["Vecteur"]))
+        self.offset = self._getParameter(["Excentre"], 0.0)
+
+    def _makeFaceOffset(self, face, offset, epsilon = 1e-6):
+        """
+        Create a copy of a face at a given offset.
+        """
+        if abs(offset) < epsilon:
+            return self.geom.MakeCopy(face)
+        else:
+            offsetObj = self.geom.MakeOffset(face, offset)
+            # We have to explode the resulting object into faces because it is
+            # created as a polyhedron and not as a single face
+            faces = self.geom.SubShapeAll(offsetObj,
+                                          self.geom.ShapeType["FACE"])
+            return faces[0]
+
+    def _buildMarkersWithOffset(self, offset):
+        """
+        Build the markers for the structural element part with a given offset
+        from the base face.
+        """
+        uParam = 0.5
+        vParam = 0.5
+        listMarkers = []
+        subShapes = self._getSubShapes()
+    
+        for subShape in subShapes:
+            faces = self.geom.SubShapeAll(subShape,
+                                          self.geom.ShapeType["FACE"])
+            for face in faces:
+                offsetFace = self._makeFaceOffset(face, offset)
+                # get tangent plane on surface by parameters
+                center = self.geom.MakeVertexOnSurface(offsetFace,
+                                                       uParam, vParam)
+                tangPlane = self.geom.MakeTangentPlaneOnFace(offsetFace,
+                                                             uParam, vParam,
+                                                             1.0)
+                normal = self.geom.GetNormal(tangPlane)
+                marker = self._orientation.buildMarker(self.geom,
+                                                       center, normal)
+                listMarkers.append(marker)
+
+        return listMarkers
+
+
+class ThickShell(StructuralElementPart2D):
+    """
+    This class defines a shell with a given thickness. It can be shifted from
+    the base face. The valid parameters for thick shells are:
+
+    * "Epais": thickness of the shell.
+    * "Excentre": offset of the shell from the base face.
+    * "angleAlpha": angle used to build the markers (see class
+      :class:`~salome.geom.structelem.orientation.Orientation2D`)
+    * "angleBeta": angle used to build the markers (see class
+      :class:`~salome.geom.structelem.orientation.Orientation2D`)
+    * "Vecteur": vector used instead of the angles to build the markers (see
+      class :class:`~salome.geom.structelem.orientation.Orientation2D`)
+
+    See class :class:`StructuralElementPart` for the description of the
+    other parameters.
+    """
+
+    DEFAULT_NAME = "ThickShell"
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = DEFAULT_NAME):
+        StructuralElementPart2D.__init__(self, studyId, groupName,
+                                         groupGeomObj, parameters, name)
+        self.thickness = self._getParameter(["Epais"])
+        logger.debug(repr(self))
+
+    def _buildPart(self):
+        """
+        Create the geometrical shapes corresponding to the thick shell.
+        """
+        subShapes = self._getSubShapes()
+        listSolids = []
+    
+        for subShape in subShapes:
+            faces = self.geom.SubShapeAll(subShape,
+                                          self.geom.ShapeType["FACE"])
+            for face in faces:
+                shape = self._buildThickShellForFace(face)
+                listSolids.append(shape)
+
+        if len(listSolids) == 0:
+            return None
+        elif len(listSolids) == 1:
+            return listSolids[0]
+        else:
+            return self.geom.MakeCompound(listSolids)
+
+    def _buildThickShellForFace(self, face):
+        """
+        Create the geometrical shapes corresponding to the thick shell for a
+        given face.
+        """
+        epsilon = 1e-6
+        if self.thickness < 2 * epsilon:
+            return self._makeFaceOffset(face, self.offset, epsilon)
+
+        upperOffset = self.offset + self.thickness / 2.0
+        lowerOffset = self.offset - self.thickness / 2.0
+        ruledMode = True
+        modeSolid = False
+
+        upperFace = self._makeFaceOffset(face, upperOffset, epsilon)
+        lowerFace = self._makeFaceOffset(face, lowerOffset, epsilon)
+        listShapes = [upperFace, lowerFace]
+        upperWires = self.geom.SubShapeAll(upperFace,
+                                           self.geom.ShapeType["WIRE"])
+        lowerWires = self.geom.SubShapeAll(lowerFace,
+                                           self.geom.ShapeType["WIRE"])
+        if self.geom.KindOfShape(face)[0] == self.geom.kind.CYLINDER2D:
+            # if the face is a cylinder, we remove the extra side edge
+            upperWires = self._removeCylinderExtraEdge(upperWires)
+            lowerWires = self._removeCylinderExtraEdge(lowerWires)
+        for i in range(len(upperWires)):
+            resShape = self.geom.MakeThruSections([upperWires[i],
+                                                   lowerWires[i]],
+                                                  modeSolid, epsilon,
+                                                  ruledMode)
+            listShapes.append(resShape)
+        resultShell = self.geom.MakeShell(listShapes)
+        resultSolid = self.geom.MakeSolid([resultShell])
+        return resultSolid
+
+    def _removeCylinderExtraEdge(self, wires):
+        """
+        Remove the side edge in a cylinder.
+        """
+        result = []
+        for wire in wires:
+            edges = self.geom.SubShapeAll(wire, self.geom.ShapeType["EDGE"])
+            for edge in edges:
+                if self.geom.KindOfShape(edge)[0] == self.geom.kind.CIRCLE:
+                    result.append(edge)
+        return result
+
+    def _buildMarkers(self):
+        """
+        Build the markers defining the orientation of the thick shell.
+        """
+        return self._buildMarkersWithOffset(self.offset +
+                                            self.thickness / 2.0)
+
+
+class Grid(StructuralElementPart2D):
+    """
+    This class defines a grid. A grid is represented by a 2D face patterned
+    with small lines in the main direction of the grid frame. The valid
+    parameters for grids are:
+
+    * "Excentre": offset of the grid from the base face.
+    * "angleAlpha": angle used to build the markers (see class
+      :class:`~salome.geom.structelem.orientation.Orientation2D`)
+    * "angleBeta": angle used to build the markers (see class
+      :class:`~salome.geom.structelem.orientation.Orientation2D`)
+    * "Vecteur": vector used instead of the angles to build the markers (see
+      class :class:`~salome.geom.structelem.orientation.Orientation2D`)
+    * "origAxeX": X coordinate of the origin of the axis used to determine the
+      orientation of the frame in the case of a cylindrical grid.
+    * "origAxeY": Y coordinate of the origin of the axis used to determine the
+      orientation of the frame in the case of a cylindrical grid.
+    * "origAxeZ": Z coordinate of the origin of the axis used to determine the
+      orientation of the frame in the case of a cylindrical grid.
+    * "axeX": X coordinate of the axis used to determine the orientation of
+      the frame in the case of a cylindrical grid.
+    * "axeY": Y coordinate of the axis used to determine the orientation of
+      the frame in the case of a cylindrical grid.
+    * "axeZ": Z coordinate of the axis used to determine the orientation of
+      the frame in the case of a cylindrical grid.
+
+    See class :class:`StructuralElementPart` for the description of the
+    other parameters.
+    """
+
+    DEFAULT_NAME = "Grid"
+
+    def __init__(self, studyId, groupName, groupGeomObj, parameters,
+                 name = DEFAULT_NAME):
+        StructuralElementPart2D.__init__(self, studyId, groupName,
+                                         groupGeomObj, parameters, name)
+        self.xr = self._getParameter(["origAxeX"])
+        self.yr = self._getParameter(["origAxeY"])
+        self.zr = self._getParameter(["origAxeZ"])
+        self.vx = self._getParameter(["axeX"])
+        self.vy = self._getParameter(["axeY"])
+        self.vz = self._getParameter(["axeZ"])
+        logger.debug(repr(self))
+
+    def _buildPart(self):
+        """
+        Create the geometrical shapes representing the grid.
+        """
+        subShapes = self._getSubShapes()
+        listGridShapes = []
+    
+        for subShape in subShapes:
+            faces = self.geom.SubShapeAll(subShape,
+                                          self.geom.ShapeType["FACE"])
+            for face in faces:
+                if self.geom.KindOfShape(face)[0] == \
+                                        self.geom.kind.CYLINDER2D and \
+                        self.xr is not None and self.yr is not None and \
+                        self.zr is not None and self.vx is not None and \
+                        self.vy is not None and self.vz is not None:
+                    shape = self._buildGridForCylinderFace(face)
+                else:
+                    shape = self._buildGridForNormalFace(face)
+                listGridShapes.append(shape)
+
+        if len(listGridShapes) == 0:
+            return None
+        elif len(listGridShapes) == 1:
+            return listGridShapes[0]
+        else:
+            return self.geom.MakeCompound(listGridShapes)
+
+    def _buildGridForNormalFace(self, face):
+        """
+        Create the geometrical shapes representing the grid for a given
+        non-cylindrical face.
+        """
+        baseFace = self._makeFaceOffset(face, self.offset)
+        gridList = [baseFace]
+        
+        # Compute display length for grid elements
+        p1 = self.geom.MakeVertexOnSurface(baseFace, 0.0, 0.0)
+        p2 = self.geom.MakeVertexOnSurface(baseFace, 0.1, 0.1)
+        length = self.geom.MinDistance(p1, p2) / 2.0
+
+        for u in range(1, 10):
+            uParam = u * 0.1
+            for v in range(1, 10):
+                vParam = v * 0.1
+                # get tangent plane on surface by parameters
+                center = self.geom.MakeVertexOnSurface(baseFace,
+                                                       uParam, vParam)
+                tangPlane = self.geom.MakeTangentPlaneOnFace(baseFace, uParam,
+                                                             vParam, 1.0)
+                
+                # use the marker to get the orientation of the frame
+                normal = self.geom.GetNormal(tangPlane)
+                marker = self._orientation.buildMarker(self.geom, center,
+                                                       normal, False)
+                [Ox,Oy,Oz, Zx,Zy,Zz, Xx,Xy,Xz] = self.geom.GetPosition(marker)
+                xPoint = self.geom.MakeTranslation(center, Xx * length,
+                                                   Xy * length, Xz * length)
+                gridLine = self.geom.MakeLineTwoPnt(center, xPoint)
+                gridList.append(gridLine)
+        grid = self.geom.MakeCompound(gridList)
+        return grid
+
+    def _buildGridForCylinderFace(self, face):
+        """
+        Create the geometrical shapes representing the grid for a given
+        cylindrical face.
+        """
+        baseFace = self._makeFaceOffset(face, self.offset)
+        gridList = [baseFace]
+        
+        # Compute display length for grid elements
+        p1 = self.geom.MakeVertexOnSurface(baseFace, 0.0, 0.0)
+        p2 = self.geom.MakeVertexOnSurface(baseFace, 0.1, 0.1)
+        length = self.geom.MinDistance(p1, p2) / 2.0
+        
+        # Create reference vector V
+        origPoint = self.geom.MakeVertex(self.xr, self.yr, self.zr)
+        vPoint = self.geom.MakeTranslation(origPoint,
+                                           self.vx, self.vy, self.vz)
+        refVec = self.geom.MakeVector(origPoint, vPoint)
+
+        for u in range(10):
+            uParam = u * 0.1
+            for v in range(1, 10):
+                vParam = v * 0.1
+                
+                # Compute the local orientation of the frame
+                center = self.geom.MakeVertexOnSurface(baseFace,
+                                                       uParam, vParam)
+                locPlaneYZ = self.geom.MakePlaneThreePnt(origPoint, center,
+                                                         vPoint, 1.0)
+                locOrient = self.geom.GetNormal(locPlaneYZ)
+                xPoint = self.geom.MakeTranslationVectorDistance(center,
+                                                                 locOrient,
+                                                                 length)
+                gridLine = self.geom.MakeLineTwoPnt(center, xPoint)
+                gridList.append(gridLine)
+
+        grid = self.geom.MakeCompound(gridList)
+        return grid
+
+    def _buildMarkers(self):
+        """
+        Create the markers defining the orientation of the grid.
+        """
+        return self._buildMarkersWithOffset(self.offset)
+
+
+def VisuPoutreGenerale(studyId, groupName, groupGeomObj, parameters,
+                       name = "POUTRE"):
+    """
+    Alias for class :class:`GeneralBeam`.
+    """
+    return GeneralBeam(studyId, groupName, groupGeomObj, parameters, name)
+
+def VisuPoutreCercle(studyId, groupName, groupGeomObj, parameters,
+                     name = "POUTRE"):
+    """
+    Alias for class :class:`CircularBeam`.
+    """
+    return CircularBeam(studyId, groupName, groupGeomObj, parameters, name)
+  
+def VisuPoutreRectangle(studyId, groupName, groupGeomObj, parameters,
+                        name = "POUTRE"):
+    """
+    Alias for class :class:`RectangularBeam`.
+    """
+    return RectangularBeam(studyId, groupName, groupGeomObj, parameters, name)
+  
+def VisuBarreGenerale(studyId, groupName, groupGeomObj, parameters,
+                      name = "BARRE"):
+    """
+    Alias for class :class:`GeneralBeam`.
+    """
+    return GeneralBeam(studyId, groupName, groupGeomObj, parameters, name)
+      
+def VisuBarreRectangle(studyId, groupName, groupGeomObj, parameters,
+                       name = "BARRE"):
+    """
+    Alias for class :class:`RectangularBeam`.
+    """
+    return RectangularBeam(studyId, groupName, groupGeomObj, parameters, name)
+
+def VisuBarreCercle(studyId, groupName, groupGeomObj, parameters,
+                    name = "BARRE"):
+    """
+    Alias for class :class:`CircularBeam`.
+    """
+    return CircularBeam(studyId, groupName, groupGeomObj, parameters, name)
+
+def VisuCable(studyId, groupName, groupGeomObj, parameters, name = "CABLE"):
+    """
+    Alias for class :class:`CircularBeam`.
+    """
+    return CircularBeam(studyId, groupName, groupGeomObj, parameters, name)
+
+def VisuCoque(studyId, groupName, groupGeomObj, parameters, name = "COQUE"):
+    """
+    Alias for class :class:`ThickShell`.
+    """
+    return ThickShell(studyId, groupName, groupGeomObj, parameters, name)
+  
+def VisuGrille(studyId, groupName, groupGeomObj, parameters, name = "GRILLE"):
+    """
+    Alias for class :class:`Grid`.
+    """
+    return Grid(studyId, groupName, groupGeomObj, parameters, name)
index 63d2d0b6953146684cec508975fb80339a5fbc26..6637f15d5c5789dec53c9df550d9bb84e4fd5c89 100644 (file)
@@ -437,6 +437,14 @@ def TestAll (geompy, math):
   nameS      = geompy.SubShapeName(SubFaceS, Box)
   id_SubFace = geompy.addToStudyInFather(Box, SubFaceS, nameS)
 
+  # GetExistingSubObjects
+  SubObjsAll = geompy.GetExistingSubObjects(Box, True)
+  print "For now, Box has the following created sub-objects:", SubObjsAll
+
+  # GetGroups
+  SubGrpsAll = geompy.GetGroups(Box)
+  print "For now, Box has the following created groups:", SubGrpsAll
+
   # SubShapeAll
   SubEdgeList = geompy.SubShapeAll(SubFace, geompy.ShapeType["EDGE"])
   i=0
index 327eea93075511acaa2f0b1177866219b252fbbf..e0050e398ab45f6d0e5ae53e2fe535a6f9ef711c 100644 (file)
@@ -510,6 +510,17 @@ def TestOtherOperations (geompy, math):
   geompy.addToStudyInFather(blocksComp, pb0_top_1, "point from blocksComp (-50,  50,  50)")
   geompy.addToStudyInFather(blocksComp, pb0_bot_1, "point from blocksComp (-50, -50, -50)")
 
+  # GetVertexNearPoint(theShape, thePoint)
+  pb0_top_2_near = geompy.MakeVertex(40, 40, 40)
+  pb0_top_2      = geompy.GetVertexNearPoint(blocksComp, pb0_top_2_near)
+
+  geompy.addToStudyInFather(blocksComp, pb0_top_2, "point from blocksComp near (40,  40,  40)")
+
+  # GetEdge(theShape, thePoint1, thePoint2)
+  edge_top_y50 = geompy.GetEdge(blocksComp, pb0_top_1, pb0_top_2)
+
+  geompy.addToStudyInFather(blocksComp, edge_top_y50, "edge from blocksComp by two points")
+
   # GetEdgeNearPoint(theShape, thePoint)
   pmidle = geompy.MakeVertex(50, 0, 50)
   edge1 = geompy.GetEdgeNearPoint(blocksComp, pmidle)
@@ -521,6 +532,11 @@ def TestOtherOperations (geompy, math):
 
   geompy.addToStudyInFather(blocksComp, b0_image, "b0 image")
 
+  # GetShapesNearPoint(theShape, thePoint, theShapeType, theTolerance)
+  b0_faces_plus = geompy.GetShapesNearPoint(blocksComp, pb0_top_2_near, geompy.ShapeType["FACE"], 0.01)
+
+  geompy.addToStudyInFather(blocksComp, b0_faces_plus, "faces near point (40,  40,  40)")
+
   # GetShapesOnPlane
   faces_on_pln = geompy.GetShapesOnPlane(blocksComp, geompy.ShapeType["FACE"],
                                          v_0pp, geompy.GEOM.ST_ONIN)
index 6ccb27bad9fd6bb25ea6b5f067fbdb5815a9c84b..4c7c7919a6caae6889bf08c8527a1f95e9c77bb7 100644 (file)
@@ -85,7 +85,7 @@ import math
 
 ## Enumeration ShapeType as a dictionary
 #  @ingroup l1_geompy_auxiliary
-ShapeType = {"COMPOUND":0, "COMPSOLID":1, "SOLID":2, "SHELL":3, "FACE":4, "WIRE":5, "EDGE":6, "VERTEX":7, "SHAPE":8}
+ShapeType = {"AUTO":-1, "COMPOUND":0, "COMPSOLID":1, "SOLID":2, "SHELL":3, "FACE":4, "WIRE":5, "EDGE":6, "VERTEX":7, "SHAPE":8}
 
 ## Raise an Error, containing the Method_name, if Operation is Failed
 ## @ingroup l1_geompy_auxiliary
@@ -409,6 +409,33 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             return self.RestoreSubShapesO(self.myStudy, theObject, theArgs,
                                           theFindMethod, theInheritFirstArg, theAddPrefix)
 
+        ## Publish sub-shapes, standing for arguments and sub-shapes of arguments
+        #  To be used from python scripts out of geompy.addToStudy (non-default usage)
+        #  \param theObject published GEOM object, arguments of which will be published
+        #  \param theArgs   list of GEOM_Object, operation arguments to be published.
+        #                   If this list is empty, all operation arguments will be published
+        #  \param theFindMethod method to search subshapes, corresponding to arguments and
+        #                       their subshapes. Value from enumeration GEOM::find_shape_method.
+        #  \param theInheritFirstArg set properties of the first argument for <VAR>theObject</VAR>.
+        #                            Do not publish subshapes in place of arguments, but only
+        #                            in place of subshapes of the first argument,
+        #                            because the whole shape corresponds to the first argument.
+        #                            Mainly to be used after transformations, but it also can be
+        #                            usefull after partition with one object shape, and some other
+        #                            operations, where only the first argument has to be considered.
+        #                            If theObject has only one argument shape, this flag is automatically
+        #                            considered as True, not regarding really passed value.
+        #  \param theAddPrefix add prefix "from_" to names of restored sub-shapes,
+        #                      and prefix "from_subshapes_of_" to names of partially restored subshapes.
+        #  \return list of published sub-shapes
+        #
+        #  @ref tui_restore_prs_params "Example"
+        def RestoreGivenSubShapes (self, theObject, theArgs=[], theFindMethod=GEOM.FSM_GetInPlace,
+                                   theInheritFirstArg=False, theAddPrefix=True):
+            # Example: see GEOM_TestAll.py
+            return self.RestoreGivenSubShapesO(self.myStudy, theObject, theArgs,
+                                               theFindMethod, theInheritFirstArg, theAddPrefix)
+
         # end of l3_restore_ss
         ## @}
 
@@ -422,7 +449,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @return New GEOM_Object, containing the created point.
         #
         #  @ref tui_creation_point "Example"
-        def MakeVertex(self,theX, theY, theZ):
+        def MakeVertex(self, theX, theY, theZ):
             # Example: see GEOM_TestAll.py
             theX,theY,theZ,Parameters = ParseParameters(theX, theY, theZ)
             anObj = self.BasicOp.MakePointXYZ(theX, theY, theZ)
@@ -1350,13 +1377,13 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @param theTol3D a 3d tolerance to be reached
         #  @param theNbIter a number of iteration of approximation algorithm
         #  @param theMethod Kind of method to perform filling operation:
-        #                   0 - Default - standard behaviour
-        #                   1 - Use edges orientation - orientation of edges are
-        #                       used: if edge is reversed curve from this edge
-        #                       is reversed before using in filling algorithm.
-        #                   2 - Auto-correct orientation - change orientation
-        #                       of curves using minimization of sum of distances
-        #                       between ends points of edges.
+        #                   GEOM.FOM_Default - Default - standard behaviour
+        #                   /GEOM.FOM_UseOri - Use edges orientation - orientation of edges is
+        #                       used: if the edge is reversed, the curve from this edge
+        #                       is reversed before using it in the filling algorithm.
+        #                   /GEOM.FOM_AutoCorrect - Auto-correct orientation - changes the orientation
+        #                       of the curves using minimization of sum of distances
+        #                       between the end points of the edges.
         #  @param isApprox if True, BSpline curves are generated in the process
         #                  of surface construction. By default it is False, that means
         #                  the surface is created using Besier curves. The usage of
@@ -1543,6 +1570,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             RaiseIfFailed("MakeEdge", self.ShapesOp)
             return anObj
 
+        ## Create an edge from specified wire.
+        #  @param theWire source Wire.
+        #  @param theLinearTolerance linear tolerance value.
+        #  @param theAngularTolerance angular tolerance value.
+        #  @return New GEOM_Object, containing the created edge.
+        #
+        #  @ref tui_creation_edge "Example"
+        def MakeEdgeWire(self, theWire, theLinearTolerance = 1e-07, theAngularTolerance = 1e-12):
+            # Example: see GEOM_TestAll.py
+            anObj = self.ShapesOp.MakeEdgeWire(theWire, theLinearTolerance, theAngularTolerance)
+            RaiseIfFailed("MakeEdgeWire", self.ShapesOp)
+            return anObj
+
         ## Create a wire from the set of edges and wires.
         #  @param theEdgesAndWires List of edges and/or wires.
         #  @param theTolerance Maximum distance between vertices, that will be merged.
@@ -1986,8 +2026,14 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @param theShapeWhat Shape, specifying what to find.
         #  @return Group of all found sub-shapes or a single found sub-shape.
         #
+        #  @note This function has a restriction on argument shapes.
+        #        If \a theShapeWhere has curved parts with significantly
+        #        outstanding centres (i.e. the mass centre of a part is closer to
+        #        \a theShapeWhat than to the part), such parts will not be found.
+        #        @image html get_in_place_lost_part.png
+        #
         #  @ref swig_GetInPlace "Example"
-        def GetInPlace(self,theShapeWhere, theShapeWhat):
+        def GetInPlace(self, theShapeWhere, theShapeWhat):
             # Example: see GEOM_TestOthers.py
             anObj = self.ShapesOp.GetInPlace(theShapeWhere, theShapeWhat)
             RaiseIfFailed("GetInPlace", self.ShapesOp)
@@ -2056,6 +2102,32 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         ## @addtogroup l4_decompose
         ## @{
 
+        ## Get all sub-shapes and groups of \a theShape,
+        #  that were created already by any other methods.
+        #  @param theShape Any shape.
+        #  @param theGroupsOnly If this parameter is TRUE, only groups will be
+        #                       returned, else all found sub-shapes and groups.
+        #  @return List of existing sub-objects of \a theShape.
+        #
+        #  @ref swig_all_decompose "Example"
+        def GetExistingSubObjects(self, theShape, theGroupsOnly = False):
+            # Example: see GEOM_TestAll.py
+            ListObj = self.ShapesOp.GetExistingSubObjects(theShape, theGroupsOnly)
+            RaiseIfFailed("GetExistingSubObjects", self.ShapesOp)
+            return ListObj
+
+        ## Get all groups of \a theShape,
+        #  that were created already by any other methods.
+        #  @param theShape Any shape.
+        #  @return List of existing groups of \a theShape.
+        #
+        #  @ref swig_all_decompose "Example"
+        def GetGroups(self, theShape):
+            # Example: see GEOM_TestAll.py
+            ListObj = self.ShapesOp.GetExistingSubObjects(theShape, True)
+            RaiseIfFailed("GetExistingSubObjects", self.ShapesOp)
+            return ListObj
+
         ## Explode a shape on subshapes of a given type.
         #  @param aShape Shape to be exploded.
         #  @param aType Type of sub-shapes to be retrieved.
@@ -2303,11 +2375,22 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @return New GEOM_Object, containing processed shape.
         #
         #  @ref swig_todo "Example"
-        def ChangeOrientationShellCopy(self,theObject):
+        def ChangeOrientationShellCopy(self, theObject):
             anObj = self.HealOp.ChangeOrientationCopy(theObject)
             RaiseIfFailed("ChangeOrientationCopy", self.HealOp)
             return anObj
 
+        ## Try to limit tolerance of the given object by value \a theTolerance.
+        #  @param theObject Shape to be processed.
+        #  @param theTolerance Required tolerance value.
+        #  @return New GEOM_Object, containing processed shape.
+        #
+        #  @ref tui_limit_tolerance "Example"
+        def LimitTolerance(self, theObject, theTolerance = 1e-07):
+            anObj = self.HealOp.LimitTolerance(theObject, theTolerance)
+            RaiseIfFailed("LimitTolerance", self.HealOp)
+            return anObj
+
         ## Get a list of wires (wrapped in GEOM_Object-s),
         #  that constitute a free boundary of the given shape.
         #  @param theObject Shape to get free boundary of.
@@ -2317,7 +2400,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  theOpenWires: Open wires on the free boundary of the given shape.
         #
         #  @ref tui_measurement_tools_page "Example"
-        def GetFreeBoundary(self,theObject):
+        def GetFreeBoundary(self, theObject):
             # Example: see GEOM_TestHealing.py
             anObj = self.HealOp.GetFreeBoundary(theObject)
             RaiseIfFailed("GetFreeBoundary", self.HealOp)
@@ -2441,6 +2524,8 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #           in order to avoid possible intersection between shapes from
         #           this compound.
         #  @param Limit Type of resulting shapes (corresponding to TopAbs_ShapeEnum).
+        #         If this parameter is set to -1 ("Auto"), most appropriate shape limit
+        #         type will be detected automatically.
         #  @param KeepNonlimitShapes: if this parameter == 0, then only shapes of
         #                             target type (equal to Limit) are kept in the result,
         #                             else standalone shapes of lower dimension
@@ -2462,9 +2547,15 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #
         #  @ref tui_partition "Example"
         def MakePartition(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[],
-                          Limit=ShapeType["SHAPE"], RemoveWebs=0, ListMaterials=[],
+                          Limit=ShapeType["AUTO"], RemoveWebs=0, ListMaterials=[],
                           KeepNonlimitShapes=0):
             # Example: see GEOM_TestAll.py
+            if Limit == ShapeType["AUTO"]:
+                # automatic detection of the most appropriate shape limit type
+                lim = GEOM.SOLID
+                for s in ListShapes: lim = max( lim, s.GetMinShapeType() )
+                Limit = lim._v
+                pass
             anObj = self.BoolOp.MakePartition(ListShapes, ListTools,
                                               ListKeepInside, ListRemoveInside,
                                               Limit, RemoveWebs, ListMaterials,
@@ -2487,8 +2578,14 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @ref swig_todo "Example"
         def MakePartitionNonSelfIntersectedShape(self, ListShapes, ListTools=[],
                                                  ListKeepInside=[], ListRemoveInside=[],
-                                                 Limit=ShapeType["SHAPE"], RemoveWebs=0,
+                                                 Limit=ShapeType["AUTO"], RemoveWebs=0,
                                                  ListMaterials=[], KeepNonlimitShapes=0):
+            if Limit == ShapeType["AUTO"]:
+                # automatic detection of the most appropriate shape limit type
+                lim = GEOM.SOLID
+                for s in ListShapes: lim = max( lim, s.GetMinShapeType() )
+                Limit = lim._v
+                pass
             anObj = self.BoolOp.MakePartitionNonSelfIntersectedShape(ListShapes, ListTools,
                                                                      ListKeepInside, ListRemoveInside,
                                                                      Limit, RemoveWebs, ListMaterials,
@@ -2501,7 +2598,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @ref tui_partition "Example 1"
         #  \n @ref swig_Partition "Example 2"
         def Partition(self, ListShapes, ListTools=[], ListKeepInside=[], ListRemoveInside=[],
-                      Limit=ShapeType["SHAPE"], RemoveWebs=0, ListMaterials=[],
+                      Limit=ShapeType["AUTO"], RemoveWebs=0, ListMaterials=[],
                       KeepNonlimitShapes=0):
             # Example: see GEOM_TestOthers.py
             anObj = self.MakePartition(ListShapes, ListTools,
@@ -2960,8 +3057,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @ref tui_fillet2d "Example"
         def MakeFillet1D(self,theShape, theR, theListOfVertexes):
             # Example: see GEOM_TestAll.py
+            theR,Parameters = ParseParameters(theR)
             anObj = self.LocalOp.MakeFillet1D(theShape, theR, theListOfVertexes)
             RaiseIfFailed("MakeFillet1D", self.LocalOp)
+            anObj.SetParameters(Parameters)
             return anObj
 
         ## Perform a fillet on the specified edges/faces of the given shape
@@ -2974,8 +3073,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @ref tui_fillet2d "Example"
         def MakeFillet2D(self,theShape, theR, theListOfVertexes):
             # Example: see GEOM_TestAll.py
+            theR,Parameters = ParseParameters(theR)
             anObj = self.LocalOp.MakeFillet2D(theShape, theR, theListOfVertexes)
             RaiseIfFailed("MakeFillet2D", self.LocalOp)
+            anObj.SetParameters(Parameters)
             return anObj
 
         ## Perform a symmetric chamfer on all edges of the given shape.
@@ -3657,19 +3758,31 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @return New GEOM_Object, containing the found vertex.
         #
         #  @ref swig_GetPoint "Example"
-        def GetPoint(self,theShape, theX, theY, theZ, theEpsilon):
+        def GetPoint(self, theShape, theX, theY, theZ, theEpsilon):
             # Example: see GEOM_TestOthers.py
             anObj = self.BlocksOp.GetPoint(theShape, theX, theY, theZ, theEpsilon)
             RaiseIfFailed("GetPoint", self.BlocksOp)
             return anObj
 
+        ## Find a vertex of the given shape, which has minimal distance to the given point.
+        #  @param theShape Any shape.
+        #  @param thePoint Point, close to the desired vertex.
+        #  @return New GEOM_Object, containing the found vertex.
+        #
+        #  @ref swig_GetVertexNearPoint "Example"
+        def GetVertexNearPoint(self, theShape, thePoint):
+            # Example: see GEOM_TestOthers.py
+            anObj = self.BlocksOp.GetVertexNearPoint(theShape, thePoint)
+            RaiseIfFailed("GetVertexNearPoint", self.BlocksOp)
+            return anObj
+
         ## Get an edge, found in the given shape by two given vertices.
         #  @param theShape Block or a compound of blocks.
         #  @param thePoint1,thePoint2 Points, close to the ends of the desired edge.
         #  @return New GEOM_Object, containing the found edge.
         #
-        #  @ref swig_todo "Example"
-        def GetEdge(self,theShape, thePoint1, thePoint2):
+        #  @ref swig_GetEdge "Example"
+        def GetEdge(self, theShape, thePoint1, thePoint2):
             # Example: see GEOM_Spanner.py
             anObj = self.BlocksOp.GetEdge(theShape, thePoint1, thePoint2)
             RaiseIfFailed("GetEdge", self.BlocksOp)
@@ -3681,7 +3794,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @return New GEOM_Object, containing the found edge.
         #
         #  @ref swig_GetEdgeNearPoint "Example"
-        def GetEdgeNearPoint(self,theShape, thePoint):
+        def GetEdgeNearPoint(self, theShape, thePoint):
             # Example: see GEOM_TestOthers.py
             anObj = self.BlocksOp.GetEdgeNearPoint(theShape, thePoint)
             RaiseIfFailed("GetEdgeNearPoint", self.BlocksOp)
@@ -3729,7 +3842,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         #  @return New GEOM_Object, containing the found face.
         #
         #  @ref swig_GetFaceNearPoint "Example"
-        def GetFaceNearPoint(self,theShape, thePoint):
+        def GetFaceNearPoint(self, theShape, thePoint):
             # Example: see GEOM_Spanner.py
             anObj = self.BlocksOp.GetFaceNearPoint(theShape, thePoint)
             RaiseIfFailed("GetFaceNearPoint", self.BlocksOp)
@@ -3747,6 +3860,23 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             RaiseIfFailed("GetFaceByNormale", self.BlocksOp)
             return anObj
 
+        ## Find all subshapes of type \a theShapeType of the given shape,
+        #  which have minimal distance to the given point.
+        #  @param theShape Any shape.
+        #  @param thePoint Point, close to the desired shape.
+        #  @param theShapeType Defines what kind of subshapes is searched.
+        #  @param theTolerance The tolerance for distances comparison. All shapes
+        #                      with distances to the given point in interval
+        #                      [minimal_distance, minimal_distance + theTolerance] will be gathered.
+        #  @return New GEOM_Object, containing a group of all found shapes.
+        #
+        #  @ref swig_GetShapesNearPoint "Example"
+        def GetShapesNearPoint(self, theShape, thePoint, theShapeType, theTolerance = 1e-07):
+            # Example: see GEOM_TestOthers.py
+            anObj = self.BlocksOp.GetShapesNearPoint(theShape, thePoint, theShapeType, theTolerance)
+            RaiseIfFailed("GetShapesNearPoint", self.BlocksOp)
+            return anObj
+
         # end of l3_blocks_op
         ## @}
 
@@ -3946,7 +4076,9 @@ class geompyDC(GEOM._objref_GEOM_Gen):
         def AddObject(self,theGroup, theSubShapeID):
             # Example: see GEOM_TestOthers.py
             self.GroupOp.AddObject(theGroup, theSubShapeID)
-            RaiseIfFailed("AddObject", self.GroupOp)
+            if self.GroupOp.GetErrorCode() != "PAL_ELEMENT_ALREADY_PRESENT":
+                RaiseIfFailed("AddObject", self.GroupOp)
+                pass
             pass
 
         ## Removes a sub object with ID \a theSubShapeId from the group
index 91ac4ab995a7d6a8f20938edb691c755212aa34f..a1d4e7feddf5cdd82f74986ab3fdc95277fa329c 100644 (file)
@@ -302,7 +302,7 @@ void GenerationGUI_PipeDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index 57709293039ad652a36aac2404719b3b71d708ea..4d1b317b0831cc307a9f4aa50d5824cfd2240685 100644 (file)
@@ -371,7 +371,7 @@ void GenerationGUI_PrismDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
@@ -428,7 +428,7 @@ void GenerationGUI_PrismDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
         }
index eef13201df7f395a9f284b639aa6314d484bd774..466a15c66a63bad19a6381014193281f0a9934d8 100644 (file)
@@ -262,7 +262,7 @@ void GenerationGUI_RevolDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         myAxis = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index 8391cb3bfc6267c6f7ea03fd914c9a6293ce4d66..327b0d4bbb53f7fab29f16b78d75526bff2c8df5 100644 (file)
@@ -141,9 +141,9 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg (Mode mode, GeometryGUI* theGeometryGUI, QW
   myRestrictGroupBox->setEnabled(!CORBA::is_nil(myMainObj));
   allSubs->setChecked(true);
 
-  myShowOnlyBtn = new QPushButton(tr("Show only selected"), GroupMedium);
-  myHideSelBtn  = new QPushButton(tr("Hide selected"), GroupMedium);
-  myShowAllBtn  = new QPushButton(tr("Show all sub-shapes"), GroupMedium);
+  myShowOnlyBtn = new QPushButton(tr("SHOW_ONLY_SELECTED"), GroupMedium);
+  myHideSelBtn  = new QPushButton(tr("HIDE_SELECTED"), GroupMedium);
+  myShowAllBtn  = new QPushButton(tr("SHOW_ALL_SUB_SHAPES"), GroupMedium);
 
   mySelAllBtn   = new QPushButton(tr("SELECT_ALL"), GroupMedium);
   myAddBtn      = new QPushButton(tr("ADD"), GroupMedium);
@@ -473,7 +473,7 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
     }
   }
   else { // an attempt to synchronize list box selection with 3d viewer
-    if (myBusy) {
+    if ( myBusy || myMainObj->_is_nil() ) {
       return;
     }
 
@@ -617,7 +617,8 @@ int GroupGUI_GroupDlg::getSelectedSubshapes (TColStd_IndexedMapOfInteger& theMap
   theMapIndex.Clear();
 
   SalomeApp_Application* app = myGeomGUI->getApp();
-  if (!app) return 0;
+  if ( !app || myMainObj->_is_nil() )
+    return 0;
 
   LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
   SALOME_ListIO aSelList;
@@ -786,6 +787,7 @@ void GroupGUI_GroupDlg::activateSelection()
       myIsShapeType) // check if shape type is already choosen by user
   {
     GEOM_Displayer* aDisplayer = getDisplayer();
+    int prevDisplayMode = aDisplayer->SetDisplayMode(0);
 
     SUIT_ViewWindow* aViewWindow = 0;
     SUIT_Study* activeStudy = SUIT_Session::session()->activeApplication()->activeStudy();
@@ -828,6 +830,7 @@ void GroupGUI_GroupDlg::activateSelection()
       }
     }
     aDisplayer->UpdateViewer();
+    aDisplayer->SetDisplayMode(prevDisplayMode);
   }
 
   globalSelection(GEOM_ALLSHAPES);
@@ -1056,11 +1059,9 @@ bool GroupGUI_GroupDlg::execute(ObjectList& objects)
 
   SalomeApp_Study* study = getStudy();
   if (study) {
-    char* objIOR = GEOMBase::GetIORFromObject(aGroup);
-    std::string IOR(objIOR);
-    free(objIOR);
-    if (IOR != "") {
-      _PTR(SObject) SO (study->studyDS()->FindObjectIOR(IOR));
+    QString objIOR = GEOMBase::GetIORFromObject(aGroup);
+    if (objIOR != "") {
+      _PTR(SObject) SO (study->studyDS()->FindObjectIOR(objIOR.toLatin1().constData()));
       if (SO) {
         _PTR(StudyBuilder) aBuilder (study->studyDS()->NewBuilder());
         aBuilder->SetName(SO, getNewObjectName().toLatin1().constData());
index 2c4eb04a9aec9ba2ed2b96cb6a38550cca7fe1b0..a9ee6b7c65e498243401c297771bb0b0f0f4bc29 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  File:        IGESImport.cxx
+//  Created:     Wed May 19 14:36:35 2004
+//  Author:      Pavel TELKOV
 
-// File:        IGESImport.cxx
-// Created:     Wed May 19 14:36:35 2004
-// Author:      Pavel TELKOV
-//              <ptv@mutex.nnov.opencascade.com>
-//
 #include "utilities.h"
 
 #include <Basics_Utils.hxx>
 #include <IFSelect_ReturnStatus.hxx>
 #include <IGESControl_Reader.hxx>
 #include <IGESData_IGESModel.hxx>
+#include <IGESData_IGESEntity.hxx>
 
-#include <TCollection_HAsciiString.hxx>
-#include <TopoDS_Shape.hxx>
+#include <Interface_Static.hxx>
+#include <Interface_InterfaceModel.hxx>
+#include <XSControl_TransferReader.hxx>
+#include <XSControl_WorkSession.hxx>
+#include <Transfer_TransientProcess.hxx>
+#include <Transfer_Binder.hxx>
+#include <TransferBRep.hxx>
+
+#include <TNaming_Builder.hxx>
+#include <TDF_TagSource.hxx>
+#include <TDataStd_Name.hxx>
 #include <TDF_Label.hxx>
 
+#include <TCollection_HAsciiString.hxx>
+#include <TopoDS_Shape.hxx>
 #include <TopoDS_Vertex.hxx>
 #include <BRep_Builder.hxx>
 #include <gp_Pnt.hxx>
-#include <Interface_Static.hxx>
 
 #ifdef WNT
  #if defined IGESIMPORT_EXPORTS || defined IGESImport_EXPORTS
@@ -72,7 +81,7 @@ IGESIMPORT_EXPORT
   TopoDS_Shape Import (const TCollection_AsciiString& theFileName,
                        const TCollection_AsciiString& theFormatName,
                        TCollection_AsciiString&       theError,
-                       const TDF_Label&)
+                       const TDF_Label&               theShapeLabel)
   {
     // Set "C" numeric locale to save numbers correctly
     Kernel_Utils::Localizer loc;
@@ -85,19 +94,19 @@ IGESIMPORT_EXPORT
 
       if (status == IFSelect_RetDone) {
 
-        if( theFormatName == "IGES_UNIT" ) {
-          Handle(IGESData_IGESModel) aModel = 
+        if (theFormatName == "IGES_UNIT") {
+          Handle(IGESData_IGESModel) aModel =
             Handle(IGESData_IGESModel)::DownCast(aReader.Model());
           gp_Pnt P(1.0,0.0,0.0);
-          if(!aModel.IsNull()) {
-            Handle(TCollection_HAsciiString) aUnitName = 
+          if (!aModel.IsNull()) {
+            Handle(TCollection_HAsciiString) aUnitName =
               aModel->GlobalSection().UnitName();
             //cout<<"aUnitName = "<<aUnitName->ToCString()<<endl;
             //cout<<"aUnitFlag = "<<aModel->GlobalSection().UnitFlag()<<endl;
-            if( aUnitName->String()=="MM" ) {
+            if (aUnitName->String()=="MM") {
               P = gp_Pnt(0.001,0.0,0.0);
             }
-            else if( aUnitName->String()=="CM" ) {
+            else if (aUnitName->String()=="CM") {
               P = gp_Pnt(0.01,0.0,0.0);
             }
           }
@@ -107,12 +116,12 @@ IGESIMPORT_EXPORT
           aResShape = V;
           return aResShape;
         }
-        if( theFormatName == "IGES_SCALE" ) {
+        if (theFormatName == "IGES_SCALE") {
           //cout<<"need re-scale a model"<<endl;
           // set UnitFlag to 'meter'
-          Handle(IGESData_IGESModel) aModel = 
+          Handle(IGESData_IGESModel) aModel =
             Handle(IGESData_IGESModel)::DownCast(aReader.Model());
-          if(!aModel.IsNull()) {
+          if (!aModel.IsNull()) {
             IGESData_GlobalSection aGS = aModel->GlobalSection();
             aGS.SetUnitFlag(6);
             aModel->SetGlobalSection(aGS);
@@ -129,6 +138,38 @@ IGESIMPORT_EXPORT
         MESSAGE("ImportIGES : count of shapes produced = " << aReader.NbShapes());
         aResShape = aReader.OneShape();
 
+        // BEGIN: Store names of sub-shapes from file
+        Handle(Interface_InterfaceModel) Model = aReader.WS()->Model();
+        Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader();
+        if (!TR.IsNull()) {
+          Handle(Transfer_TransientProcess) TP = /*TransientProcess();*/TR->TransientProcess();
+          Standard_Integer nb = Model->NbEntities();
+          for (Standard_Integer i = 1; i <= nb; i++) {
+            Handle(IGESData_IGESEntity) ent = Handle(IGESData_IGESEntity)::DownCast(Model->Value(i));
+            if (ent.IsNull() || ! ent->HasName()) continue;
+
+            // find target shape
+            Handle(Transfer_Binder) binder = TP->Find(ent);
+            if (binder.IsNull()) continue;
+            TopoDS_Shape S = TransferBRep::ShapeResult(binder);
+            if (S.IsNull()) continue;
+
+            // create label and set shape
+            TDF_Label L;
+            TDF_TagSource aTag;
+            L = aTag.NewChild(theShapeLabel);
+            TNaming_Builder tnBuild (L);
+            tnBuild.Generated(S);
+
+            // set a name
+            TCollection_AsciiString string = ent->NameValue()->String();
+            string.LeftAdjust();
+            string.RightAdjust();
+            TCollection_ExtendedString str (string);
+            TDataStd_Name::Set(L, str);
+          }
+        }
+        // END: Store names
       } else {
 //        switch (status) {
 //        case IFSelect_RetVoid:
index 3f3b3815d8f725e077672e6854f0618af8d0dd98..7613b4c16108caca37ebcb780072fc8871822cf6 100644 (file)
 #
 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
-
 #  File   : Makefile.in
 #  Author : Pavel TELKOV
 #  Modified by : Alexander BORODIN (OCN) - autotools usage
 #  Module : GEOM
 #  $Header$
-#
+
 include $(top_srcdir)/adm_local/unix/make_common_starter.am
 
 # Libraries targets
@@ -37,7 +36,7 @@ libIGESImport_la_CPPFLAGS =   \
        $(CAS_CPPFLAGS)         \
        $(KERNEL_CXXFLAGS)
 
-libIGESImport_la_LDFLAGS  =    \
-       $(STDLIB)               \
-       $(CAS_LDPATH) -lTKIGES  \
+libIGESImport_la_LDFLAGS  =            \
+       $(STDLIB)                       \
+       $(CAS_LDPATH) -lTKIGES -lTKCAF -lTKLCAF \
        $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics
index 761e3d6a96154abd12341be156597b0fee46abbf..968fbdd33ea9c85208ffaf10b75e1b0e7a6d0573 100644 (file)
 # Author  : Alexander BORODIN, Open CASCADE S.A.S. (alexander.borodin@opencascade.com)
 # Package : src (source files directory)
 #
-SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo SKETCHER GEOM BREPExport   \
-          BREPImport IGESExport IGESImport STEPExport STEPImport       \
-          STLExport ShHealOper GEOMImpl GEOM_I GEOMClient GEOM_I_Superv        \
-          GEOM_SWIG
+SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo SKETCHER OCC2VTK GEOM      \
+          BREPExport BREPImport IGESExport IGESImport STEPExport       \
+          STEPImport STLExport VTKExport ShHealOper GEOMImpl GEOM_I    \
+          GEOMClient GEOM_I_Superv GEOM_SWIG GEOM_PY
 
 if GEOM_ENABLE_GUI
   SUBDIRS += OBJECT DlgRef GEOMFiltersSelection GEOMGUI GEOMBase GEOMToolsGUI  \
@@ -33,10 +33,11 @@ if GEOM_ENABLE_GUI
              GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM
 endif
 
-DIST_SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo SKETCHER GEOM BREPExport      \
+DIST_SUBDIRS = ARCHIMEDE NMTDS NMTTools GEOMAlgo SKETCHER OCC2VTK GEOM BREPExport\
                BREPImport IGESExport IGESImport STEPExport STEPImport STLExport \
-               ShHealOper GEOMImpl GEOM_I GEOMClient GEOM_I_Superv GEOM_SWIG   \
-               OBJECT DlgRef GEOMFiltersSelection GEOMGUI GEOMBase GEOMToolsGUI        \
-               DisplayGUI BasicGUI PrimitiveGUI GenerationGUI EntityGUI                \
-               BuildGUI BooleanGUI TransformationGUI OperationGUI RepairGUI    \
-               MeasureGUI GroupGUI BlocksGUI AdvancedGUI GEOM_SWIG_WITHIHM
+               VTKExport ShHealOper GEOMImpl GEOM_I GEOMClient GEOM_I_Superv   \
+               GEOM_SWIG OBJECT DlgRef GEOMFiltersSelection GEOMGUI GEOMBase   \
+               GEOMToolsGUI DisplayGUI BasicGUI PrimitiveGUI GenerationGUI     \
+               EntityGUI BuildGUI BooleanGUI TransformationGUI OperationGUI    \
+               RepairGUI MeasureGUI GroupGUI BlocksGUI AdvancedGUI             \
+               GEOM_SWIG_WITHIHM GEOM_PY
index d495ab36b990d89d738654645dd83a4f88f3a16a..e555d2d2f0ea57119ec07de7dd664287f94da3c2 100644 (file)
@@ -118,5 +118,5 @@ libMeasureGUI_la_CPPFLAGS =         \
 
 libMeasureGUI_la_LDFLAGS  =            \
        $(CAS_LDFLAGS) -lTKGeomBase \
-       ../GEOMBase/libGEOMBase.la
+       ../GEOMBase/libGEOMBase.la ../DlgRef/libDlgRef.la
 
index e59a4498e61c630829c18010b85272cd80d6b010..b49a522841e6547944a700d5a027ed863df7822c 100644 (file)
@@ -196,7 +196,9 @@ void MeasureGUI_AngleDlg::processObject()
 
   double anAngle = 0.;
   if (getParameters(anAngle)) {
-    myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(anAngle));
+    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+    int aPrecision = resMgr->integerValue( "Geometry", "angle_precision", 6 );
+    myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(anAngle, aPrecision));
     redisplayPreview();
   }
   else {
index 5794fae1f545965707609cdaac12b40bd4d35cf8..20d7d7674a7ee60b133ff5f52ab0175b86a2711f 100644 (file)
@@ -30,6 +30,7 @@
 #include "GeometryGUI.h"
 
 #include <GEOMBase.h>
+#include <DlgRef.h>
 
 #include <GEOM_Function.hxx>
 #include <GEOM_Object.hxx>
@@ -143,14 +144,17 @@ void MeasureGUI_BndBoxDlg::processObject()
     myGrp->LineEdit32->setText( "" );
   }
   else {
-    myGrp->LineEdit11->setText( tr( "%1" ).arg( aXMin, 12, 'f', 6 ) );
-    myGrp->LineEdit12->setText( tr( "%1" ).arg( aXMax, 12, 'f', 6 ) );
+    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+    int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
 
-    myGrp->LineEdit21->setText( tr( "%1" ).arg( aYMin, 12, 'f', 6 ) );
-    myGrp->LineEdit22->setText( tr( "%1" ).arg( aYMax, 12, 'f', 6 ) );
+    myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aXMin, aPrecision ) );
+    myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aXMax, aPrecision ) );
 
-    myGrp->LineEdit31->setText( tr( "%1" ).arg( aZMin, 12, 'f', 6 ) );
-    myGrp->LineEdit32->setText( tr( "%1" ).arg( aZMax, 12, 'f', 6 ) );            
+    myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aYMin, aPrecision ) );
+    myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aYMax, aPrecision ) );
+
+    myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aZMin, aPrecision ) );
+    myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aZMax, aPrecision ) );
   }
 }
 
@@ -173,8 +177,8 @@ bool MeasureGUI_BndBoxDlg::getParameters( double& theXmin, double& theXmax,
       if ( CORBA::is_nil(aGeomGen) )
         return false;
 
-      char* IOR = GEOMBase::GetIORFromObject( myObj );
-      GEOM::GEOM_Object_var anObject = aGeomGen->GetIORFromString(IOR);
+      QString IOR = GEOMBase::GetIORFromObject( myObj );
+      GEOM::GEOM_Object_var anObject = aGeomGen->GetIORFromString( IOR.toLatin1().constData() );
       if ( CORBA::is_nil(anObject) )
         return false;
 
index 451743a533419136e8e6142d12ccf247a1da3a0d..b4a909c68166db0360d3025be501fd6c7868a506 100644 (file)
@@ -244,9 +244,12 @@ void MeasureGUI_CenterMassDlg::processObject()
     getParameters( x, y, z );
     
     myGrp->LineEdit1->setText( GEOMBase::GetName( myObj ) );
-    myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( x ) );
-    myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( y ) );
-    myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( z ) );
+
+    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+    int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+    myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( x, aPrecision ) );
+    myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( y, aPrecision ) );
+    myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( z, aPrecision ) );
 
     displayPreview();
   }
index 3be5f624a6cb648ab155b6ae2d30502874bfc9fa..baf8a589733c09e5baf2c6f24d33ea030ee221f0 100644 (file)
@@ -180,12 +180,15 @@ void MeasureGUI_DistanceDlg::processObject()
   gp_Pnt aPnt1, aPnt2;
   double aDist = 0.;
   if (getParameters(aDist, aPnt1, aPnt2)) {
-    myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist));
+    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+    int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+
+    myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist, aPrecision));
 
     gp_XYZ aVec = aPnt2.XYZ() - aPnt1.XYZ();
-    myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X()));
-    myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y()));
-    myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z()));
+    myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X(), aPrecision));
+    myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y(), aPrecision));
+    myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z(), aPrecision));
 
     redisplayPreview();
   }
index 9d2c323c43210dca43893ff1bb4638fc4ed5e9da..f6beab88aed351e9bb608125164b5d3eed000f38 100644 (file)
@@ -28,6 +28,7 @@
 #include "MeasureGUI_Widgets.h"
 
 #include <GEOMBase.h>
+#include <DlgRef.h>
 
 #include <gp_XYZ.hxx>
 
@@ -142,21 +143,21 @@ void MeasureGUI_InertiaDlg::processObject()
     myGrp->LineEdit43->setText( "" );
   }
   else {
-    myGrp->LineEdit11->setText( QString( "%1" ).arg( aMat( 1, 1 ), 12, 'e', 4 ) );
-    myGrp->LineEdit12->setText( QString( "%1" ).arg( aMat( 1, 2 ), 12, 'e', 4 ) );
-    myGrp->LineEdit13->setText( QString( "%1" ).arg( aMat( 1, 3 ), 12, 'e', 4 ) );
+    myGrp->LineEdit11->setText( DlgRef::PrintDoubleValue( aMat( 1, 1 ), -6 ) );
+    myGrp->LineEdit12->setText( DlgRef::PrintDoubleValue( aMat( 1, 2 ), -6 ) );
+    myGrp->LineEdit13->setText( DlgRef::PrintDoubleValue( aMat( 1, 3 ), -6 ) );
     
-    myGrp->LineEdit21->setText( QString( "%1" ).arg( aMat( 2, 1 ), 12, 'e', 4 ) );
-    myGrp->LineEdit22->setText( QString( "%1" ).arg( aMat( 2, 2 ), 12, 'e', 4 ) );
-    myGrp->LineEdit23->setText( QString( "%1" ).arg( aMat( 2, 3 ), 12, 'e', 4 ) );
+    myGrp->LineEdit21->setText( DlgRef::PrintDoubleValue( aMat( 2, 1 ), -6 ) );
+    myGrp->LineEdit22->setText( DlgRef::PrintDoubleValue( aMat( 2, 2 ), -6 ) );
+    myGrp->LineEdit23->setText( DlgRef::PrintDoubleValue( aMat( 2, 3 ), -6 ) );
     
-    myGrp->LineEdit31->setText( QString( "%1" ).arg( aMat( 3, 1 ), 12, 'e', 4 ) );
-    myGrp->LineEdit32->setText( QString( "%1" ).arg( aMat( 3, 2 ), 12, 'e', 4 ) );
-    myGrp->LineEdit33->setText( QString( "%1" ).arg( aMat( 3, 3 ), 12, 'e', 4 ) );
+    myGrp->LineEdit31->setText( DlgRef::PrintDoubleValue( aMat( 3, 1 ), -6 ) );
+    myGrp->LineEdit32->setText( DlgRef::PrintDoubleValue( aMat( 3, 2 ), -6 ) );
+    myGrp->LineEdit33->setText( DlgRef::PrintDoubleValue( aMat( 3, 3 ), -6 ) );
     
-    myGrp->LineEdit41->setText( QString( "%1" ).arg( anIXYZ.X(), 12, 'e', 4 ) );
-    myGrp->LineEdit42->setText( QString( "%1" ).arg( anIXYZ.Y(), 12, 'e', 4 ) );
-    myGrp->LineEdit43->setText( QString( "%1" ).arg( anIXYZ.Z(), 12, 'e', 4 ) );
+    myGrp->LineEdit41->setText( DlgRef::PrintDoubleValue( anIXYZ.X(), -6 ) );
+    myGrp->LineEdit42->setText( DlgRef::PrintDoubleValue( anIXYZ.Y(), -6 ) );
+    myGrp->LineEdit43->setText( DlgRef::PrintDoubleValue( anIXYZ.Z(), -6 ) );
   }
 }
 
index b9a04fd2a99144d14017e9176935fdde6b33f9f0..f3a6d0d46cc9350b8e778e51fc38c2922657ee58 100644 (file)
@@ -26,6 +26,7 @@
 //
 #include "MeasureGUI_MaxToleranceDlg.h"
 #include "MeasureGUI_Widgets.h"
+#include "DlgRef.h"
 
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
@@ -131,14 +132,17 @@ void MeasureGUI_MaxToleranceDlg::processObject()
   double invalidMin = RealLast();
   double invalidMax = -RealLast();
 
-  myGrp->LineEdit11->setText( aMinFaceToler != invalidMin ? QString( "%1" ).arg( aMinFaceToler, 5, 'e', 8 ) : QString("") );
-  myGrp->LineEdit12->setText( aMaxFaceToler != invalidMax ? QString( "%1" ).arg( aMaxFaceToler, 5, 'e', 8 ) : QString("") );
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  int aPrecision = resMgr->integerValue( "Geometry", "len_tol_precision", -9);
 
-  myGrp->LineEdit21->setText( aMinEdgeToler != invalidMin ? QString( "%1" ).arg( aMinEdgeToler, 5, 'e', 8 ) : QString("") );
-  myGrp->LineEdit22->setText( aMaxEdgeToler != invalidMax ? QString( "%1" ).arg( aMaxEdgeToler, 5, 'e', 8 ) : QString("") );
+  myGrp->LineEdit11->setText( aMinFaceToler != invalidMin ? DlgRef::PrintDoubleValue( aMinFaceToler, aPrecision ) : QString("") );
+  myGrp->LineEdit12->setText( aMaxFaceToler != invalidMax ? DlgRef::PrintDoubleValue( aMaxFaceToler, aPrecision ) : QString("") );
 
-  myGrp->LineEdit31->setText( aMinVertexToler != invalidMin ? QString( "%1" ).arg( aMinVertexToler, 5, 'e', 8 ) : QString("") );
-  myGrp->LineEdit32->setText( aMaxVertexToler != invalidMax ? QString( "%1" ).arg( aMaxVertexToler, 5, 'e', 8 ) : QString("") );
+  myGrp->LineEdit21->setText( aMinEdgeToler != invalidMin ? DlgRef::PrintDoubleValue( aMinEdgeToler, aPrecision ) : QString("") );
+  myGrp->LineEdit22->setText( aMaxEdgeToler != invalidMax ? DlgRef::PrintDoubleValue( aMaxEdgeToler, aPrecision ) : QString("") );
+
+  myGrp->LineEdit31->setText( aMinVertexToler != invalidMin ? DlgRef::PrintDoubleValue( aMinVertexToler, aPrecision ) : QString("") );
+  myGrp->LineEdit32->setText( aMaxVertexToler != invalidMax ? DlgRef::PrintDoubleValue( aMaxVertexToler, aPrecision ) : QString("") );
 }
 
 //=================================================================================
index c7ea535f04af1dda8c907dfa8e05f3b779b1c2aa..c7064a96b0d1b88312b07b5baa3efcb8b40d21ed 100644 (file)
@@ -172,9 +172,11 @@ void MeasureGUI_PointDlg::SelectionIntoArgument()
     if ( !aPoint.IsNull() ) {
       gp_Pnt aPnt = BRep_Tool::Pnt( aPoint );
       myGrp->LineEdit1->setText( aName );
-      myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( aPnt.X() ) );
-      myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( aPnt.Y() ) );
-      myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( aPnt.Z() ) );
+      SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+      int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+      myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( aPnt.X(), aPrecision ) );
+      myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( aPnt.Y(), aPrecision ) );
+      myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( aPnt.Z(), aPrecision ) );
     }
   }
   catch( ... )
index 861658e28a5eb187e82d80343051cb06eb122630..9621487ed258d851f111f026a57c8593e2a6915b 100644 (file)
@@ -139,9 +139,11 @@ void MeasureGUI_PropertiesDlg::processObject()
     myGrp->LineEdit4->setText( "" );
   }
   else {
-    myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( aLength ) );
-    myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( anArea ) );
-    myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( aVolume ) );
+    SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+    int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+    myGrp->LineEdit2->setText( DlgRef::PrintDoubleValue( aLength, aPrecision ) );
+    myGrp->LineEdit3->setText( DlgRef::PrintDoubleValue( anArea,  aPrecision ) );
+    myGrp->LineEdit4->setText( DlgRef::PrintDoubleValue( aVolume, aPrecision ) );
   }
 }
 
index 04f91fb9eae26cc2ac708a027ae435c8b9c2e1b0..b0d9695d60ef53d82712a92a2ed98b67aa020e70 100644 (file)
@@ -232,6 +232,9 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   QString aKindStr("");
   theParameters = "";
 
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  int aLenPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+
   if ( myObj->_is_nil() )
     return aKindStr;
 
@@ -253,7 +256,7 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   if ( !anOper->IsDone() )
     return aKindStr;
 
-#define PRINT_DOUBLE(val) QString(" %1").arg( DlgRef::PrintDoubleValue( val ) )
+#define PRINT_DOUBLE(val, tol) DlgRef::PrintDoubleValue( val, tol )
   switch ( aKind )
   {
   case GEOM::GEOM_IKindOfShape::COMPOUND:
@@ -284,84 +287,84 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   case GEOM::GEOM_IKindOfShape::SPHERE:
     aKindStr = tr( "GEOM_SPHERE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[3] );
+      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[3], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::CYLINDER:
     aKindStr = tr( "GEOM_CYLINDER" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )         +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_HEIGHT" )       + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_HEIGHT" )       + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::BOX:
     aKindStr = tr( "GEOM_BOX" );
     theParameters = tr( "GEOM_CENTER") +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        "Ax :"                    + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        "Ay :"                    + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        "Az :"                    + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        "Ax :"                    + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        "Ay :"                    + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        "Az :"                    + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::ROTATED_BOX:
     aKindStr = tr( "GEOM_BOX" );
     theParameters = tr( "GEOM_CENTER" )         +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\nZ Axis:"                               +
-      "\n" +        "Zx :"                      + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        "Zy :"                      + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        "Zz :"                      + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        "Zx :"                      + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        "Zy :"                      + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        "Zz :"                      + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\nX Axis:"                               +
-      "\n" +        tr( "GEOM_X_I" ).arg( "x" ) + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( "y" ) + PRINT_DOUBLE( aDbls[7] ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( "z" ) + PRINT_DOUBLE( aDbls[8] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( "x" ) + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( "y" ) + PRINT_DOUBLE( aDbls[7], aLenPrecision ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( "z" ) + PRINT_DOUBLE( aDbls[8], aLenPrecision ) +
       "\nDimensions along local axes:"          +
-      "\n" +        "Ax :"                      + PRINT_DOUBLE( aDbls[9] ) +
-      "\n" +        "Ay :"                      + PRINT_DOUBLE( aDbls[10] ) +
-      "\n" +        "Az :"                      + PRINT_DOUBLE( aDbls[11] );
+      "\n" +        "Ax :"                      + PRINT_DOUBLE( aDbls[9],  aLenPrecision ) +
+      "\n" +        "Ay :"                      + PRINT_DOUBLE( aDbls[10], aLenPrecision ) +
+      "\n" +        "Az :"                      + PRINT_DOUBLE( aDbls[11], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::TORUS:
     aKindStr = tr( "GEOM_TORUS" );
     theParameters = tr( "GEOM_CENTER" )            +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )              +
-      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )        +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::CONE:
     aKindStr = tr( "GEOM_CONE" );
     theParameters = tr( "GEOM_CENTER" )            +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )              +
-      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )        +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7] ) +
-      "\n" +        tr( "GEOM_HEIGHT" )            + PRINT_DOUBLE( aDbls[8] );
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7], aLenPrecision ) +
+      "\n" +        tr( "GEOM_HEIGHT" )            + PRINT_DOUBLE( aDbls[8], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::POLYHEDRON:
     aKindStr = tr( "GEOM_POLYHEDRON" );
@@ -373,114 +376,114 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   case GEOM::GEOM_IKindOfShape::SPHERE2D:
     aKindStr = tr( "GEOM_SURFSPHERE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[3] );
+      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[3], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::CYLINDER2D:
     aKindStr = tr( "GEOM_SURFCYLINDER" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )         +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_HEIGHT" )       + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_HEIGHT" )       + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::TORUS2D:
     aKindStr = tr( "GEOM_SURFTORUS" );
     theParameters = tr( "GEOM_CENTER" )            +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )              +
-      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )        +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::CONE2D:
     aKindStr = tr( "GEOM_SURFCONE" );
     theParameters = tr( "GEOM_CENTER" )            +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )      + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_AXIS" )              +
-      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )                + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )                + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )                + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )        +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7] ) +
-      "\n" +        tr( "GEOM_HEIGHT" )            + PRINT_DOUBLE( aDbls[8] );
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 1 ) + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_I" ).arg( 2 ) + PRINT_DOUBLE( aDbls[7], aLenPrecision ) +
+      "\n" +        tr( "GEOM_HEIGHT" )            + PRINT_DOUBLE( aDbls[8], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::DISK_CIRCLE:
     aKindStr = tr( "GEOM_DISK_CIRCLE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )       +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )      + PRINT_DOUBLE( aDbls[6] );
+      "\n" +        tr( "GEOM_RADIUS" )      + PRINT_DOUBLE( aDbls[6], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::DISK_ELLIPSE:
     aKindStr = tr( "GEOM_DISK_ELLIPSE" );
     theParameters = tr( "GEOM_CENTER" )         +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )         +
-      "\n" +        tr( "GEOM_DX" )             + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )             + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )             + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )             + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )             + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )             + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )     +
-      "\n" +        tr( "GEOM_RADIUS_MAJOR" )   + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_MINOR" )   + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS_MAJOR" )   + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_MINOR" )   + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::POLYGON:
     aKindStr = tr( "GEOM_POLYGON" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )       +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::PLANE:
     aKindStr = tr( "GEOM_PLANE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )       +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::PLANAR:
     aKindStr = tr( "GEOM_PLANAR_FACE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )       +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::FACE:
     aKindStr = tr( "GEOM_FACE" );
@@ -489,94 +492,94 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   case GEOM::GEOM_IKindOfShape::CIRCLE:
     aKindStr = tr( "GEOM_CIRCLE" );
     theParameters = tr( "GEOM_CENTER" )       +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )       +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )   +
-      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6] );
+      "\n" +        tr( "GEOM_RADIUS" )       + PRINT_DOUBLE( aDbls[6], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::ARC_CIRCLE:
     aKindStr = tr( "GEOM_ARC" );
     theParameters = tr( "GEOM_CENTER" )           +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )           +
-      "\n" +        tr( "GEOM_DX" )               + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )               + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )               + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )               + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )               + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )               + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )       +
-      "\n" +        tr( "GEOM_RADIUS" )           + PRINT_DOUBLE( aDbls[6] ) +
+      "\n" +        tr( "GEOM_RADIUS" )           + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
       "\n" +        tr( "GEOM_POINT_I" ).arg( 1 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[7] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[8] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[9] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[7], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[8], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[9], aLenPrecision ) +
       "\n" +        tr( "GEOM_POINT_I" ).arg( 2 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[10] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[11] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[12] );
+      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[10], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[11], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[12], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::ELLIPSE:
     aKindStr = tr( "GEOM_ELLIPSE" );
     theParameters = tr( "GEOM_CENTER" )         +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )   + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )         +
-      "\n" +        tr( "GEOM_DX" )             + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )             + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )             + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )             + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )             + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )             + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )     +
-      "\n" +        tr( "GEOM_RADIUS_MAJOR" )   + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_MINOR" )   + PRINT_DOUBLE( aDbls[7] );
+      "\n" +        tr( "GEOM_RADIUS_MAJOR" )   + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_MINOR" )   + PRINT_DOUBLE( aDbls[7], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::ARC_ELLIPSE:
     aKindStr = tr( "GEOM_ARC_ELLIPSE" );
     theParameters = tr( "GEOM_CENTER" )           +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 )     + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_NORMAL" )           +
-      "\n" +        tr( "GEOM_DX" )               + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )               + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )               + PRINT_DOUBLE( aDbls[5] ) +
+      "\n" +        tr( "GEOM_DX" )               + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )               + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )               + PRINT_DOUBLE( aDbls[5], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIMENSIONS" )       +
-      "\n" +        tr( "GEOM_RADIUS_MAJOR" )     + PRINT_DOUBLE( aDbls[6] ) +
-      "\n" +        tr( "GEOM_RADIUS_MINOR" )     + PRINT_DOUBLE( aDbls[7] ) +
+      "\n" +        tr( "GEOM_RADIUS_MAJOR" )     + PRINT_DOUBLE( aDbls[6], aLenPrecision ) +
+      "\n" +        tr( "GEOM_RADIUS_MINOR" )     + PRINT_DOUBLE( aDbls[7], aLenPrecision ) +
       "\n" +        tr( "GEOM_POINT_I" ).arg( 1 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[8] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[9] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[10] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[8], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[9], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[10], aLenPrecision ) +
       "\n" +        tr( "GEOM_POINT_I" ).arg( 2 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[11] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[12] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[13] );
+      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[11], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[12], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[13], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::LINE:
     aKindStr = tr( "GEOM_LINE" );
     theParameters = tr( "GEOM_POSITION" )     +
-      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 0 ) + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_DIRECTION" )    +
-      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        tr( "GEOM_DX" )           + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DY" )           + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_DZ" )           + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::SEGMENT:
     aKindStr = tr( "GEOM_SEGMENT" );
     theParameters = tr( "GEOM_POINT_I" ).arg( 1 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[2] ) +
+      "\n" +        tr( "GEOM_X_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 1 )     + PRINT_DOUBLE( aDbls[2], aLenPrecision ) +
       "\n" +        tr( "GEOM_POINT_I" ).arg( 2 ) +
-      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[3] ) +
-      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[4] ) +
-      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[5] );
+      "\n" +        tr( "GEOM_X_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[3], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[4], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z_I" ).arg( 2 )     + PRINT_DOUBLE( aDbls[5], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::EDGE:
     aKindStr = tr( "GEOM_EDGE" );
@@ -584,9 +587,9 @@ QString MeasureGUI_WhatisDlg::getKindOfShape( QString& theParameters )
   case GEOM::GEOM_IKindOfShape::VERTEX:
     aKindStr = tr( "GEOM_VERTEX" );
     theParameters = tr( "GEOM_COORDINATES" ) +
-      "\n" +        tr( "GEOM_X" )           + PRINT_DOUBLE( aDbls[0] ) +
-      "\n" +        tr( "GEOM_Y" )           + PRINT_DOUBLE( aDbls[1] ) +
-      "\n" +        tr( "GEOM_Z" )           + PRINT_DOUBLE( aDbls[2] );
+      "\n" +        tr( "GEOM_X" )           + PRINT_DOUBLE( aDbls[0], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Y" )           + PRINT_DOUBLE( aDbls[1], aLenPrecision ) +
+      "\n" +        tr( "GEOM_Z" )           + PRINT_DOUBLE( aDbls[2], aLenPrecision );
     break;
   case GEOM::GEOM_IKindOfShape::ADVANCED:
     {
index b205c9fc4e0e1a75eaed696c59bfc8ff38b1f06b..ce2eeff797015acc098c311c4a7a46b03d322bc4 100755 (executable)
 {
   Standard_Boolean bFlag;
   Standard_Integer aNb, i, aNbB, aNbR, iFlag;
-  Standard_Integer i1, i2, aNbSD, iX, j, iDS, jB, iR, k, aNbLV;
+  Standard_Integer i1, i2, aNbSD, iX, j, iDS, jB, iR, k, aNbLV, aNbLV1;
   TColStd_ListIteratorOfListOfInteger aIt;
   TColStd_DataMapOfIntegerInteger aMII;
-  //modified by NIZNHY-PKV Mon Jan 22 15:08:00 2007f
-  //TColStd_MapOfInteger aMFence;
   TColStd_DataMapOfIntegerListOfInteger aMVSD;
   TColStd_DataMapIteratorOfDataMapOfIntegerListOfInteger aItVSD;
-  //modified by NIZNHY-PKV Mon Jan 22 10:21:50 2007t
   TopTools_DataMapOfShapeInteger aMSI;
   TopAbs_ShapeEnum aTi, aTj;
   NMTDS_PassKeyBoolean aPKXB; 
             aMPKXB.Remove(aPKXB);
           }
         }
-        aMVSD.Bind(i, aLV1);
+       //
+       //modified by NIZNHY-PKV Mon Sep 27 08:31:04 2010f
+       aNbLV1=aLV1.Extent();
+       if (aNbLV1) {
+         aMVSD.Bind(i, aLV1);
+       }
+       //aMVSD.Bind(i, aLV1);
+       //modified by NIZNHY-PKV Mon Sep 27 08:31:21 2010t
       }
     }//for (i=i1; i<=i2; ++i) {
   }//for (iR=1; iR<aNbR; ++iR) {
index 336c8057e62e238e98097b3627d5f1e4d1c5e5cb..42ffb20bef442c258b87bc71921b57d75e70a9fc 100644 (file)
   const BOPTools_SplitShapesPool& aSplitShapesPool=myFiller->SplitShapesPool();
   const BOPTools_ListOfPaveBlock& aSplitEdges=aSplitShapesPool(myDS->RefEdge(nED));
 
-  Standard_Integer nV1, nV2, aNewShapeIndex;
-  Standard_Real    t1, t2;
+  Standard_Integer nV1, nV2, aNbPB, aNewShapeIndex;
+  Standard_Real t1, t2;
   TopoDS_Edge aE, aESplit;
   TopoDS_Vertex aV1, aV2;
-
+  BOPTools_ListIteratorOfListOfPaveBlock aPBIt;
+  //
   const TopoDS_Edge aDE=TopoDS::Edge(myDS->Shape(nED));
   const TopoDS_Face aDF=TopoDS::Face(myDS->Shape(nFD));
-
-  BOPTools_ListIteratorOfListOfPaveBlock aPBIt(aSplitEdges);
-
+  //
+  //modified by NIZNHY-PKV Wed Oct 20 13:20:37 2010f
+  aNbPB=aSplitEdges.Extent();
+  if (aNbPB==1) {
+    Standard_Real aT1, aT2, dT1, dT2, aDT;
+    Handle(Geom2d_Curve) aC2D;
+    //
+    BOPTools_PaveBlock& aPB=aSplitEdges.First();
+    //
+    const BOPTools_Pave& aPave1=aPB.Pave1();
+    t1=aPave1.Param();
+    const BOPTools_Pave& aPave2=aPB.Pave2();
+    t2=aPave2.Param();
+    ////
+    nV1=aPave1.Index();
+    aV1=*((TopoDS_Vertex*)&myDS->GetShape(nV1));
+    //
+    aV2=TopExp::FirstVertex(aDE);
+    if (aV2.IsSame(aV1)) {
+      aC2D=BRep_Tool::CurveOnSurface(aDE, aDF, aT1, aT2);
+      dT1=aT1-t1;
+      if (dT1<0.) {
+       dT1=-dT1;
+      }
+      //
+      dT2=aT2-t2;
+      if (dT2<0.) {
+       dT2=-dT2;
+      }
+      aDT=Precision::PConfusion();
+      if(dT1<aDT && dT2<aDT) {
+       BOPTools_ListOfPaveBlock* pLPB=(BOPTools_ListOfPaveBlock*)&aSplitEdges;
+       pLPB->Clear();
+       return;
+      }
+    }
+  }
+  //modified by NIZNHY-PKV Wed Oct 20 13:20:39 2010t
+  //
+  aPBIt.Initialize(aSplitEdges);
   for (; aPBIt.More(); aPBIt.Next()) {
     BOPTools_PaveBlock& aPB=aPBIt.Value();
     
index 0a32c9c5b875d4e6cf6ba5b69aba36ecccafe7cf..40c73982968fb209aace6832cb2ec52e211b99b8 100644 (file)
@@ -1,24 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Value)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #include <NMTTools_MapIteratorOfMapOfPaveBlock.hxx>
 
index 7963a1f98ce35e96b899d50a7fcf4b52692770b2..50007afee6f33fe25d5fa153ec010dbbdbf6af94 100644 (file)
@@ -1,24 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Value)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #ifndef _NMTTools_MapOfPaveBlock_HeaderFile
 #define _NMTTools_MapOfPaveBlock_HeaderFile
index 6f9d7d8a38a3109ab77e6eb7eb790f83a74347fb..e1e5db0c88f2c2bc5e1932cfe8eb9f3ad1e4b921 100644 (file)
@@ -1,24 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Value)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #include <NMTTools_MapOfPaveBlock.hxx>
 
index 1bc4c8e726b767d3fcccd6cadce95ee0236bd053..d21a19edf63a772785532cabcc5d4d9f753419f8 100644 (file)
@@ -1,4 +1,4 @@
---  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+--  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 --
 --  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 --  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -19,7 +19,6 @@
 --
 --  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 --
-
 -- File:       NMTTools_PaveFiller.cdl
 -- Created:    Fri Dec  5 14:35:00 2003
 -- Author:     Peter KURNEV
@@ -36,13 +35,10 @@ uses
     Vertex     from  TopoDS, 
     Face       from  TopoDS,  
     Shape      from TopoDS, 
-    -- Modified to add new definitions Thu Sep 14 14:35:18 2006 
-    -- Contribution of Samtech www.samcef.com BEGIN 
     Edge       from  TopoDS, 
     ListOfShape from TopTools,  
     DataMapOfShapeShape from TopTools,
     ListOfInteger from TColStd,  
-    -- Contribution of Samtech www.samcef.com END 
     
     Context     from IntTools, 
     ShrunkRange from IntTools,
@@ -68,12 +64,9 @@ uses
    
     ShapesDataStructure  from NMTDS,  
 
-    -- Modified to add new definitions Thu Sep 14 14:35:18 2006 
-    -- Contribution of Samtech www.samcef.com BEGIN
     PShapesDataStructure from NMTDS, 
     Iterator             from NMTDS, 
     IndexedDataMapOfIndexedMapOfInteger from NMTTools,  
-    -- Contribution of Samtech www.samcef.com END
      
     PIterator from NMTDS, 
     PInterfPool from NMTDS
@@ -104,12 +97,8 @@ is
     IP(me:out)  
        returns PInterfPool from NMTDS; 
     --  
-    --  Perform the algo  
-    -- Modified to add new method Thu Sep 14 14:35:18 2006 
-    -- Contribution of Samtech www.samcef.com BEGIN      
     Init       (me:out) 
        is virtual  protected; 
-    -- Contribution of Samtech www.samcef.com END
         
     Clear   (me:out) 
        is virtual  protected;
@@ -369,14 +358,12 @@ is
        returns PaveBlock from BOPTools; 
     ---C++: return const &        
     
-    --modified by NIZNHY-PKV Fri Nov 30 10:30:54 2007  f
     RealPaveBlock(me:out;   
            aPB:PaveBlock from BOPTools; 
            aLB:out ListOfInteger from TColStd; 
            aIsCommonBlock:out  Integer from Standard) 
        returns PaveBlock from BOPTools; 
     ---C++: return const &      
-    --modified by NIZNHY-PKV Fri Nov 30 10:30:58 2007  t 
      
     RealSplitsFace  (me:out;  
                 nF2 :Integer from Standard;  
@@ -457,8 +444,6 @@ is
          
     MakePCurves (me:out); 
      
-    -- Modified to add new methods Thu Sep 14 14:35:18 2006 
-    -- Contribution of Samtech www.samcef.com BEGIN
     PerformVF1(me:out) 
        is protected;  
         
@@ -468,7 +453,6 @@ is
     AloneVertices(me)  
        returns IndexedDataMapOfIndexedMapOfInteger from NMTTools; 
     ---C++: return const & 
-    -- Contribution of Samtech www.samcef.com END 
      
     IsExistingPaveBlock (me:out; 
                    aPB : PaveBlock   from BOPTools; 
@@ -489,19 +473,30 @@ is
                    aTol: Real  from  Standard) 
        returns Integer from Standard;   
 
-    -- Modified to add new method Thu Sep 14 14:35:18 2006 
-    -- Contribution of Samtech www.samcef.com BEGIN
     SharedEdges(me:out;  
                 nF1  :Integer from Standard;  
                 nF2  :Integer from Standard;  
                 aLNE :out ListOfInteger from TColStd; 
                 aLSE :out ListOfShape   from TopTools); 
-    -- Contribution of Samtech www.samcef.com END 
 
     FuseVertices(me; 
        aC:Shape from TopoDS; 
        aDMVV:  out  DataMapOfShapeShape from TopTools);  
-     
+    --
+    TreatPaveBlocks(me:out; 
+           theLCB:out ListOfCommonBlock from NMTTools); 
+            
+    ChangePavePoolNew(me:out) 
+       returns PavePool from BOPTools; 
+    ---C++:return &  
+
+    --modified by NIZNHY-PKV Thu Nov 11 08:12:50 2010f 
+    CheckCoincidence (me:out; 
+                   aPB1 : PaveBlock   from BOPTools; 
+                   aPB2 : PaveBlock   from BOPTools) 
+       returns Boolean from Standard;   
+    --modified by NIZNHY-PKV Thu Nov 11 08:12:54 2010t
+
 fields 
     myDS               :  PShapesDataStructure from NMTDS      is protected;   
     myIsDone           :  Boolean from Standard                 is protected; 
index 13e147c878f7cbde113884faae283c50007a76f5..ba8dbd41943621d10dd9e229b4c57e31046c73aa 100644 (file)
@@ -1,35 +1,27 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Value)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #ifndef _NMTTools_PaveFiller_HeaderFile
 #define _NMTTools_PaveFiller_HeaderFile
 
-#ifndef _Standard_HeaderFile
-#include <Standard.hxx>
-#endif
-#ifndef _Standard_Macro_HeaderFile
-#include <Standard_Macro.hxx>
-#endif
-
 #ifndef _NMTDS_PShapesDataStructure_HeaderFile
 #include <NMTDS_PShapesDataStructure.hxx>
 #endif
@@ -102,134 +94,204 @@ class TopoDS_Edge;
 class TopTools_DataMapOfShapeShape;
 
 
+#ifndef _Standard_HeaderFile
+#include <Standard.hxx>
+#endif
+#ifndef _Standard_Macro_HeaderFile
+#include <Standard_Macro.hxx>
+#endif
+
 
 class NMTTools_PaveFiller  {
+
 public:
 
-  void* operator new(size_t,void* anAddress) 
-  {
-    return anAddress;
-  }
-  void* operator new(size_t size) 
-  {
-    return Standard::Allocate(size); 
-  }
-  void  operator delete(void *anAddress) 
-  {
-    if (anAddress) Standard::Free((Standard_Address&)anAddress); 
-  }
-
-  
-  Standard_EXPORT   NMTTools_PaveFiller();
+    void* operator new(size_t,void* anAddress) 
+      {
+        return anAddress;
+      }
+    void* operator new(size_t size) 
+      { 
+        return Standard::Allocate(size); 
+      }
+    void  operator delete(void *anAddress) 
+      { 
+        if (anAddress) Standard::Free((Standard_Address&)anAddress); 
+      }
+ // Methods PUBLIC
+ // 
+
+
+Standard_EXPORT NMTTools_PaveFiller();
 Standard_EXPORT virtual ~NMTTools_PaveFiller();
-  
-  Standard_EXPORT     void SetCompositeShape(const TopoDS_Shape& aS) ;
-  
-  Standard_EXPORT    const TopoDS_Shape& CompositeShape() const;
-  
-  Standard_EXPORT     NMTDS_PShapesDataStructure DS() ;
-  
-  Standard_EXPORT     NMTDS_PIterator DSIt() ;
-  
-  Standard_EXPORT     NMTDS_PInterfPool IP() ;
-  
-  Standard_EXPORT   virtual  void Perform() ;
-  
-  Standard_EXPORT     Standard_Boolean IsDone() const;
-  
-  Standard_EXPORT    const IntTools_Context& Context() const;
-  
-  Standard_EXPORT     IntTools_Context& ChangeContext() ;
-  
-  Standard_EXPORT    const BOPTools_PavePool& PavePool() const;
-  
-  Standard_EXPORT     BOPTools_PavePool& ChangePavePool() ;
-  
-  Standard_EXPORT     BOPTools_PavePool& ChangePavePoolNew() ;
-  
-  Standard_EXPORT    const NMTTools_CommonBlockPool& CommonBlockPool() const;
-  
-  Standard_EXPORT     NMTTools_CommonBlockPool& ChangeCommonBlockPool() ;
-  
-  Standard_EXPORT    const BOPTools_SplitShapesPool& SplitShapesPool() const;
-  
-  Standard_EXPORT     BOPTools_SplitShapesPool& ChangeSplitShapesPool() ;
-  
-  Standard_EXPORT     Standard_Integer FindSDVertex(const Standard_Integer nV) const;
-  
-  Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer SplitsFace(const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
-  
-  Standard_EXPORT     Standard_Integer CommonBlocksFace(const Standard_Integer nF,NMTTools_ListOfCommonBlock& aLCB) ;
-  
-  Standard_EXPORT     void PrepareFace(const Standard_Integer nF,TopoDS_Face& aF) ;
-  
-  Standard_EXPORT    const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB) ;
-  
-  Standard_EXPORT    const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB,TColStd_ListOfInteger& aLB,Standard_Integer& aIsCommonBlock) ;
-  
-  Standard_EXPORT     void RealSplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     Standard_Boolean HasRealSplitsInOnFace(const Standard_Integer nF1,const Standard_Integer nF2) ;
-  
-  Standard_EXPORT     void RealSplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     void RealSplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     void RealSplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     void RealSplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     void RealSplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
-  
-  Standard_EXPORT     void PrepareSetForFace(const Standard_Integer nF1,const Standard_Integer nF2,const BOPTools_ListOfPaveBlock& aLPB,BOPTools_PaveSet& aPSF) ;
-  
-  Standard_EXPORT     void PutPaveOnCurve(const BOPTools_PaveSet& aPSF,const Standard_Real aTol,BOPTools_Curve& aBC) ;
-  
-  Standard_EXPORT     void PutBoundPaveOnCurve(BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
-  
-  Standard_EXPORT     void PutBoundPaveOnCurve(const gp_Pnt& aP,const Standard_Real aT,BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
-  
-  Standard_EXPORT     Standard_Boolean FindPave(const gp_Pnt& aP,const Standard_Real aTpV,const BOPTools_PaveSet& aPS,BOPTools_Pave& aPV) ;
-  
-  Standard_EXPORT     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const BOPTools_PaveBlock& aPBR,const Standard_Real aTol) ;
-  
-  Standard_EXPORT     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB,const Standard_Real aTol) ;
-  
-  Standard_EXPORT     void MakePCurves() ;
-  
-  Standard_EXPORT    const NMTTools_IndexedDataMapOfIndexedMapOfInteger& AloneVertices() const;
-  
-  Standard_EXPORT     Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const TopTools_ListOfShape& aLPB,const Standard_Real aTol) ;
-  
-  Standard_EXPORT     Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB) ;
-  
-  Standard_EXPORT     Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const TopoDS_Edge& aE,const Standard_Real aTol) ;
-  
-  Standard_EXPORT     void SharedEdges(const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLNE,TopTools_ListOfShape& aLSE) ;
-  
-  Standard_EXPORT     void FuseVertices(const TopoDS_Shape& aC,TopTools_DataMapOfShapeShape& aDMVV) const;
+
+
+Standard_EXPORT   void SetCompositeShape(const TopoDS_Shape& aS) ;
+
+
+Standard_EXPORT  const TopoDS_Shape& CompositeShape() const;
+
+
+Standard_EXPORT   NMTDS_PShapesDataStructure DS() ;
+
+
+Standard_EXPORT   NMTDS_PIterator DSIt() ;
+
+
+Standard_EXPORT   NMTDS_PInterfPool IP() ;
+
+
+Standard_EXPORT virtual  void Perform() ;
+
+
+Standard_EXPORT   Standard_Boolean IsDone() const;
+
+
+Standard_EXPORT  const IntTools_Context& Context() const;
+
+
+Standard_EXPORT   IntTools_Context& ChangeContext() ;
+
+
+Standard_EXPORT  const BOPTools_PavePool& PavePool() const;
+
+
+Standard_EXPORT   BOPTools_PavePool& ChangePavePool() ;
+
+
+Standard_EXPORT  const NMTTools_CommonBlockPool& CommonBlockPool() const;
+
+
+Standard_EXPORT   NMTTools_CommonBlockPool& ChangeCommonBlockPool() ;
+
+
+Standard_EXPORT  const BOPTools_SplitShapesPool& SplitShapesPool() const;
+
+
+Standard_EXPORT   BOPTools_SplitShapesPool& ChangeSplitShapesPool() ;
+
+
+Standard_EXPORT   Standard_Integer FindSDVertex(const Standard_Integer nV) const;
+
+
+Standard_EXPORT   Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer SplitsFace(const Standard_Integer nF2,TColStd_ListOfInteger& aLs) ;
+
+
+Standard_EXPORT   Standard_Integer CommonBlocksFace(const Standard_Integer nF,NMTTools_ListOfCommonBlock& aLCB) ;
+
+
+Standard_EXPORT   void PrepareFace(const Standard_Integer nF,TopoDS_Face& aF) ;
+
+
+Standard_EXPORT  const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB) ;
+
+
+Standard_EXPORT  const BOPTools_PaveBlock& RealPaveBlock(const BOPTools_PaveBlock& aPB,TColStd_ListOfInteger& aLB,Standard_Integer& aIsCommonBlock) ;
+
+
+Standard_EXPORT   void RealSplitsFace(const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   Standard_Boolean HasRealSplitsInOnFace(const Standard_Integer nF1,const Standard_Integer nF2) ;
+
+
+Standard_EXPORT   void RealSplitsInFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   void RealSplitsInFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   void RealSplitsOnEdge(const Standard_Integer nE1,const Standard_Integer nE2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   void RealSplitsOnFace(const Standard_Integer nE1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   void RealSplitsOnFace(const Standard_Integer aBid,const Standard_Integer nF1,const Standard_Integer nF2,BOPTools_ListOfPaveBlock& aLs) ;
+
+
+Standard_EXPORT   void PrepareSetForFace(const Standard_Integer nF1,const Standard_Integer nF2,const BOPTools_ListOfPaveBlock& aLPB,BOPTools_PaveSet& aPSF) ;
+
+
+Standard_EXPORT   void PutPaveOnCurve(const BOPTools_PaveSet& aPSF,const Standard_Real aTol,BOPTools_Curve& aBC) ;
+
+
+Standard_EXPORT   void PutBoundPaveOnCurve(BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
+
+
+Standard_EXPORT   void PutBoundPaveOnCurve(const gp_Pnt& aP,const Standard_Real aT,BOPTools_Curve& aBC,BOPTools_SSInterference& aFF) ;
+
+
+Standard_EXPORT   Standard_Boolean FindPave(const gp_Pnt& aP,const Standard_Real aTpV,const BOPTools_PaveSet& aPS,BOPTools_Pave& aPV) ;
+
+
+Standard_EXPORT   Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const BOPTools_PaveBlock& aPBR,const Standard_Real aTol) ;
+
+
+Standard_EXPORT   Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB,const Standard_Real aTol) ;
+
+
+Standard_EXPORT   void MakePCurves() ;
+
+
+Standard_EXPORT  const NMTTools_IndexedDataMapOfIndexedMapOfInteger& AloneVertices() const;
+
+
+Standard_EXPORT   Standard_Boolean IsExistingPaveBlock(const BOPTools_PaveBlock& aPB,const TopTools_ListOfShape& aLPB,const Standard_Real aTol) ;
+
+
+Standard_EXPORT   Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB,const BOPTools_ListOfPaveBlock& aLPB) ;
+
+
+Standard_EXPORT   Standard_Integer CheckIntermediatePoint(const BOPTools_PaveBlock& aPB,const TopoDS_Edge& aE,const Standard_Real aTol) ;
+
+
+Standard_EXPORT   void SharedEdges(const Standard_Integer nF1,const Standard_Integer nF2,TColStd_ListOfInteger& aLNE,TopTools_ListOfShape& aLSE) ;
+
+
+Standard_EXPORT   void FuseVertices(const TopoDS_Shape& aC,TopTools_DataMapOfShapeShape& aDMVV) const;
+
+
+Standard_EXPORT   void TreatPaveBlocks(NMTTools_ListOfCommonBlock& theLCB) ;
+
+
+Standard_EXPORT   BOPTools_PavePool& ChangePavePoolNew() ;
+
+
+Standard_EXPORT   Standard_Boolean CheckCoincidence(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) ;
 
 
 
@@ -237,76 +299,111 @@ Standard_EXPORT virtual ~NMTTools_PaveFiller();
 
 protected:
 
-  
-  Standard_EXPORT   virtual  void Init() ;
-  
-  Standard_EXPORT   virtual  void Clear() ;
-  
-  Standard_EXPORT   virtual  void PerformVV() ;
-  
-  Standard_EXPORT   virtual  void PerformVE() ;
-  
-  Standard_EXPORT   virtual  void PerformVF() ;
-  
-  Standard_EXPORT   virtual  void PerformEE() ;
-  
-  Standard_EXPORT   virtual  void PerformEF() ;
-  
-  Standard_EXPORT   virtual  void PerformFF() ;
-  
-  Standard_EXPORT     void MakeSplitEdges() ;
-  
-  Standard_EXPORT   virtual  void PreparePaveBlocks(const TopAbs_ShapeEnum aType1,const TopAbs_ShapeEnum aType2) ;
-  
-  Standard_EXPORT     void CorrectShrunkRanges(const Standard_Integer aSide,const BOPTools_Pave& aPave,IntTools_ShrunkRange& aSR) ;
-  
-  Standard_EXPORT   virtual  void PreparePaveBlocks(const Standard_Integer anE) ;
-  
-  Standard_EXPORT   virtual  void PrepareEdges() ;
-  
-  Standard_EXPORT     Standard_Boolean IsSuccessorsComputed(const Standard_Integer iF1,const Standard_Integer iF2) const;
-  
-  Standard_EXPORT     Standard_Boolean IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) const;
-  
-  Standard_EXPORT     void RefinePavePool() ;
-  
-  Standard_EXPORT     Standard_Integer CheckFacePaves(const TopoDS_Vertex& aV,const Standard_Integer nF) ;
-  
-  Standard_EXPORT     void ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
-  
-  Standard_EXPORT     void RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
-  
-  Standard_EXPORT     void SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
-  
-  Standard_EXPORT     void SplitCommonBlock(const NMTTools_CommonBlock& aCB,NMTTools_ListOfCommonBlock& aLCB) ;
-  
-  Standard_EXPORT     void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aM) ;
-  
-  Standard_EXPORT     void EFCommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfInteger& aMapCB) ;
-  
-  Standard_EXPORT     void EENewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
-  
-  Standard_EXPORT     void EENewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
-  
-  Standard_EXPORT     void EFNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
-  
-  Standard_EXPORT     void EFNewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
-  
-  Standard_EXPORT     void UpdateCommonBlocks() ;
-  
-  Standard_EXPORT     void UpdatePaveBlocks() ;
-  
-  Standard_EXPORT     Standard_Integer SplitIndex(const BOPTools_PaveBlock& aPB) const;
-  
-  Standard_EXPORT     void MakeBlocks() ;
-  
-  Standard_EXPORT     void PerformVF1() ;
-  
-  Standard_EXPORT     void MakeAloneVertices() ;
-  
-  Standard_EXPORT     void TreatPaveBlocks(NMTTools_ListOfCommonBlock& theLCB) ;
+ // Methods PROTECTED
+ // 
+
+
+Standard_EXPORT virtual  void Init() ;
+
+
+Standard_EXPORT virtual  void Clear() ;
+
+
+Standard_EXPORT virtual  void PerformVV() ;
+
+
+Standard_EXPORT virtual  void PerformVE() ;
+
+
+Standard_EXPORT virtual  void PerformVF() ;
+
+
+Standard_EXPORT virtual  void PerformEE() ;
+
+
+Standard_EXPORT virtual  void PerformEF() ;
+
+
+Standard_EXPORT virtual  void PerformFF() ;
+
 
+Standard_EXPORT   void MakeSplitEdges() ;
 
+
+Standard_EXPORT virtual  void PreparePaveBlocks(const TopAbs_ShapeEnum aType1,const TopAbs_ShapeEnum aType2) ;
+
+
+Standard_EXPORT   void CorrectShrunkRanges(const Standard_Integer aSide,const BOPTools_Pave& aPave,IntTools_ShrunkRange& aSR) ;
+
+
+Standard_EXPORT virtual  void PreparePaveBlocks(const Standard_Integer anE) ;
+
+
+Standard_EXPORT virtual  void PrepareEdges() ;
+
+
+Standard_EXPORT   Standard_Boolean IsSuccessorsComputed(const Standard_Integer iF1,const Standard_Integer iF2) const;
+
+
+Standard_EXPORT   Standard_Boolean IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,const BOPTools_PaveBlock& aPB2) const;
+
+
+Standard_EXPORT   void RefinePavePool() ;
+
+
+Standard_EXPORT   Standard_Integer CheckFacePaves(const TopoDS_Vertex& aV,const Standard_Integer nF) ;
+
+
+Standard_EXPORT   void ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
+
+
+Standard_EXPORT   void RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
+
+
+Standard_EXPORT   void SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB) ;
+
+
+Standard_EXPORT   void SplitCommonBlock(const NMTTools_CommonBlock& aCB,NMTTools_ListOfCommonBlock& aLCB) ;
+
+
+Standard_EXPORT   void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aM) ;
+
+
+Standard_EXPORT   void EFCommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfInteger& aMapCB) ;
+
+
+Standard_EXPORT   void EENewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
+
+
+Standard_EXPORT   void EENewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
+
+
+Standard_EXPORT   void EFNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
+
+
+Standard_EXPORT   void EFNewVertices(const TopoDS_Vertex& aV,const BooleanOperations_IndexedDataMapOfShapeInteger& aM) ;
+
+
+Standard_EXPORT   void UpdateCommonBlocks() ;
+
+
+Standard_EXPORT   void UpdatePaveBlocks() ;
+
+
+Standard_EXPORT   Standard_Integer SplitIndex(const BOPTools_PaveBlock& aPB) const;
+
+
+Standard_EXPORT   void MakeBlocks() ;
+
+
+Standard_EXPORT   void PerformVF1() ;
+
+
+Standard_EXPORT   void MakeAloneVertices() ;
+
+
+ // Fields PROTECTED
+ //
 NMTDS_PShapesDataStructure myDS;
 Standard_Boolean myIsDone;
 Standard_Integer myNbSources;
@@ -324,10 +421,14 @@ TopoDS_Shape myCompositeShape;
 NMTDS_PInterfPool myIP;
 
 
-private:
+private: 
 
+ // Methods PRIVATE
+ // 
 
 
+ // Fields PRIVATE
+ //
 
 
 };
@@ -337,6 +438,7 @@ private:
 
 
 // other Inline functions and methods (like "C++: function call" methods)
+//
 
 
 #endif
index e23ee2202248aeb6c524da3473e2187f0b8f4855..22288863add42aaac4ac7e3ca24a26e78320944a 100644 (file)
@@ -1,4 +1,4 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//  Copyright (C) 2007-2008  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 //  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  File:        NMTTools_PaveFiller_4.cxx
+//  Created:     Mon Dec  8 17:08:58 2003
+//  Author:      Peter KURNEV
 
-// File:        NMTTools_PaveFiller_4.cxx
-// Created:     Mon Dec  8 17:08:58 2003
-// Author:      Peter KURNEV
-//              <pkv@irinox>
-//
 #include <NMTTools_PaveFiller.ixx>
-//
+
 #include <stdio.h>
 #include <Precision.hxx>
 
@@ -34,6 +32,8 @@
 #include <gp_Pnt.hxx>
 #include <Bnd_Box.hxx>
 
+#include <GeomAPI_ProjectPointOnCurve.hxx>
+
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
@@ -64,6 +64,7 @@
 #include <IntTools_SequenceOfRanges.hxx>
 #include <IntTools_EdgeEdge.hxx>
 #include <IntTools_SequenceOfCommonPrts.hxx>
+#include <IntTools_Tools.hxx>
 
 #include <BOPTools_Pave.hxx>
 #include <BOPTools_PaveSet.hxx>
 #include <NMTTools_CommonBlock.hxx>
 #include <NMTTools_ListIteratorOfListOfCommonBlock.hxx>
 
-
 #include <TColStd_ListOfInteger.hxx>
 #include <TColStd_ListIteratorOfListOfInteger.hxx>
 #include <BRepBndLib.hxx>
 #include <TColStd_MapOfInteger.hxx>
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
 
-
 static
   void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI,
                         TopTools_DataMapOfShapeListOfShape& myImages,
                         TopTools_DataMapOfShapeShape& myOrigins);
 
 static
-  void MakeNewVertex(const TopTools_ListOfShape& aLV, 
+  void MakeNewVertex(const TopTools_ListOfShape& aLV,
                      TopoDS_Vertex& aNewVertex);
 
-
-static 
+static
   void VertexParameters(const IntTools_CommonPrt& aCPart,
-                        Standard_Real& aT1, 
+                        Standard_Real& aT1,
                         Standard_Real& aT2);
+
 static
   Standard_Boolean IsOnPave(const Standard_Real& aT1,
                             const IntTools_Range& aRange,
                             const Standard_Real& aTolerance);
+
 static
   void EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB);
 
@@ -135,15 +135,16 @@ static
                     const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
                     BOPTools_IMapOfPaveBlock& aProcessedBlocks,
                     BOPTools_IMapOfPaveBlock& aChain);
+
 static
   void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
                   NMTTools_ListOfCommonBlock& aLCB);
 
 //=======================================================================
 // function: PerformEE
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::PerformEE() 
+void NMTTools_PaveFiller::PerformEE()
 {
   myIsDone=Standard_False;
   //
@@ -153,7 +154,7 @@ static
   Standard_Integer aNbLPB1, aNbLPB2;
   Standard_Real aTolE1, aTolE2, aDeflection=0.01;
   BOPTools_ListIteratorOfListOfPaveBlock anIt1, anIt2;
-  TopoDS_Edge aEWhat, aEWith; 
+  TopoDS_Edge aEWhat, aEWith;
   TopoDS_Vertex aNewVertex;
   BooleanOperations_IndexedDataMapOfShapeInteger aMapVI;
   BOPTools_IDMapOfPaveBlockIMapOfPaveBlock aMapCB;
@@ -172,22 +173,15 @@ static
   for (; myDSIt->More(); myDSIt->Next()) {
     myDSIt->Current(n1, n2, bJustAdd);
     anIndexIn = 0;
-    //
-    //if (myIntrPool->IsComputed(n1, n2)) {
-    //  continue;
-    //}
-    //
-    nE1=n1; 
-    nE2=n2; 
+    nE1=n1;
+    nE2=n2;
     //
     if(bJustAdd) {
-      //myIntrPool->AddInterference (nE1, nE2, BooleanOperations_EdgeEdge, anIndexIn);
       continue;
     }
     //
     const TopoDS_Edge aE1=TopoDS::Edge(myDS->Shape(nE1));//mpv
     const TopoDS_Edge aE2=TopoDS::Edge(myDS->Shape(nE2));//mpv
-    
     //
     if (BRep_Tool::Degenerated(aE1) || BRep_Tool::Degenerated(aE2)){
       continue;
@@ -199,12 +193,12 @@ static
     BOPTools_ListOfPaveBlock& aLPB1=mySplitShapesPool(myDS->RefEdge(nE1));
     BOPTools_ListOfPaveBlock& aLPB2=mySplitShapesPool(myDS->RefEdge(nE2));
     //
-    // Modified  Thu Sep 14 14:35:18 2006 
+    // Modified  Thu Sep 14 14:35:18 2006
     // Contribution of Samtech www.samcef.com BEGIN
     aNbLPB1=aLPB1.Extent();
     aNbLPB2=aLPB2.Extent();
-    
-    //if (aE1.IsSame(aE2) && aNbLPB1==1 && aNbLPB2==1) { 
+    //
+    //if (aE1.IsSame(aE2) && aNbLPB1==1 && aNbLPB2==1) {
     //  continue;
     //}
     // Contribution of Samtech www.samcef.com END
@@ -219,14 +213,14 @@ static
       for (anIt2.Initialize(aLPB2); anIt2.More(); anIt2.Next()) {
         BOPTools_PaveBlock& aPB2=anIt2.Value();
         const IntTools_ShrunkRange& aShrunkRange2=aPB2.ShrunkRange();
-      
+        //
         const IntTools_Range& aSR2=aShrunkRange2.ShrunkRange();
         const Bnd_Box&        aBB2=aShrunkRange2.BndBox();
         //
         if (aBB1.IsOut (aBB2)) {
           continue;
         }
-        // 
+        //
         // EE
         IntTools_EdgeEdge aEE;
         aEE.SetEdge1 (aE1);
@@ -244,7 +238,7 @@ static
         //
         aEE.SetRange1(anewSR1);
         aEE.SetRange2(anewSR2);
-          
+        //
         aEE.Perform();
         //
         anIndexIn=0;
@@ -279,11 +273,12 @@ static
                 IntTools_Range aR1, aR2;
                 //
                 VertexParameters(aCPart, aT1, aT2);
-                // 
+                //
                 //decide to keep the pave or not
                 aR1 = (aEE.Order()) ? anewSR2 : anewSR1;
                 aR2 = (aEE.Order()) ? anewSR1 : anewSR2;
                 //
+                aTol=0.8*aTol;
                 bIsOnPave1=IsOnPave(aT1, aR1, aTol);
                 bIsOnPave2=IsOnPave(aT2, aR2, aTol);
                 //
@@ -353,7 +348,7 @@ static
                 aMapVI.Add(aNewVertex, anIndexIn);
               }
                 break;
-                
+
               case TopAbs_EDGE: {
                 Standard_Integer aNbComPrt2;
                 Standard_Boolean aCoinsideFlag;
@@ -362,32 +357,31 @@ static
                 aCoinsideFlag=IsBlocksCoinside(aPB1, aPB2);
                 //
                 if (aNbComPrt2>1 || !aCoinsideFlag) {
-                  //myIntrPool->AddInterference (aWhat, aWith, BooleanOperations_EdgeEdge, anIndexIn);
                   break;
                 }
                 //
                 // Fill aMapCB
                 if (aMapCB.Contains(aPB1)) {
                   BOPTools_IMapOfPaveBlock& aMapPB=aMapCB.ChangeFromKey(aPB1);
-                  aMapPB.Add(aPB1); 
-                  aMapPB.Add(aPB2); 
+                  aMapPB.Add(aPB1);
+                  aMapPB.Add(aPB2);
                 }
                 else {
                   BOPTools_IMapOfPaveBlock aMapPB;
-                  aMapPB.Add(aPB1); 
-                  aMapPB.Add(aPB2); 
+                  aMapPB.Add(aPB1);
+                  aMapPB.Add(aPB2);
                   aMapCB.Add(aPB1, aMapPB);
                 }
                 //
                 if (aMapCB.Contains(aPB2)) {
                   BOPTools_IMapOfPaveBlock& aMapPB=aMapCB.ChangeFromKey(aPB2);
-                  aMapPB.Add(aPB1); 
-                  aMapPB.Add(aPB2); 
+                  aMapPB.Add(aPB1);
+                  aMapPB.Add(aPB2);
                 }
                 else {
                   BOPTools_IMapOfPaveBlock aMapPB;
-                  aMapPB.Add(aPB1); 
-                  aMapPB.Add(aPB2); 
+                  aMapPB.Add(aPB1);
+                  aMapPB.Add(aPB2);
                   aMapCB.Add(aPB2, aMapPB);
                 }
                 // qqf
@@ -399,18 +393,13 @@ static
                 break;
             default:
               break;
-            } // switch (aType) 
-          } // for (i=1; i<=aNbCPrts; i++) 
+            } // switch (aType)
+          } // for (i=1; i<=aNbCPrts; i++)
         }// if (aEE.IsDone())
-      } // for (; anIt2.More(); anIt2.Next()) 
-    } // for (; anIt1.More(); anIt1.Next()) 
-  }// for (; myDSIt.More(); myDSIt.Next()) 
+      } // for (; anIt2.More(); anIt2.Next())
+    } // for (; anIt1.More(); anIt1.Next())
+  }// for (; myDSIt.More(); myDSIt.Next())
   //
-  //modified by NIZNHY-PKV Thu Mar 19 14:13:34 2009f
-  //
-  //EENewVertices (aMapVI);
-  //EECommonBlocks(aMapCB);
-  
   {
     NMTTools_ListOfCommonBlock aLCB;
     //
@@ -420,18 +409,17 @@ static
     TreatPaveBlocks(aLCB);
     ReplaceCommonBlocks(aLCB);
   }
-  //modified by NIZNHY-PKV Thu Mar 19 14:13:42 2009t
   //
   PerformVF1();
   //
   myIsDone=Standard_True;
 }
-//modified by NIZNHY-PKV Thu Mar 19 14:13:52 2009f
+
 //=======================================================================
 // function:TreatPaveBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::TreatPaveBlocks (NMTTools_ListOfCommonBlock& theLCB)
+void NMTTools_PaveFiller::TreatPaveBlocks (NMTTools_ListOfCommonBlock& theLCB)
 {
   Standard_Boolean bFound;
   Standard_Integer nE, nV, nVp, iFlag;
@@ -506,27 +494,28 @@ static
     }//for (; anItLPB.More(); anItLPB.Next()) {
   }
 }
-//modified by NIZNHY-PKV Thu Mar 19 14:14:13 2009t
+
 //=======================================================================
 // function:EECommonBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB)
+void NMTTools_PaveFiller::EECommonBlocks(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB)
 {
   NMTTools_ListOfCommonBlock aLCB;
   //
   FindChains(aMapCB, aLCB);
   ReplaceCommonBlocks(aLCB);
 }
+
 //=======================================================================
 // function:EENewVertices
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::EENewVertices (const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) 
+void NMTTools_PaveFiller::EENewVertices (const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI)
 {
   Standard_Integer aNb, aNbVSD, nVnew, nIEE, nE[2], j, iFlag;
   Standard_Real aT;
-  TopoDS_Edge aE; 
+  TopoDS_Edge aE;
   TopTools_DataMapOfShapeListOfShape myImages;
   TopTools_DataMapOfShapeShape myOrigins;
   TopTools_DataMapIteratorOfDataMapOfShapeListOfShape aItIm;
@@ -538,11 +527,11 @@ static
   BOPTools_CArray1OfEEInterference& aEEs=myIP->EEInterferences();
   //
   aNb=aMapVI.Extent();
-  if (!aNb) { // no new vertices, no new problems 
+  if (!aNb) { // no new vertices, no new problems
     return;
   }
   //
-  // 0. 
+  // 0.
   if (aNb==1) {
     TopoDS_Vertex aV1=TopoDS::Vertex(aMapVI.FindKey(1));
     EENewVertices(aV1, aMapVI);
@@ -600,11 +589,11 @@ static
 // completely rewritten
 //=======================================================================
 //function : TreatNewVertices
-//purpose  : 
+//purpose  :
 //=======================================================================
 void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI,
-                   TopTools_DataMapOfShapeListOfShape& myImages,
-                   TopTools_DataMapOfShapeShape& myOrigins)
+                      TopTools_DataMapOfShapeListOfShape& myImages,
+                      TopTools_DataMapOfShapeShape& myOrigins)
 {
   Standard_Integer j, i, aNbV, aNbVSD;
   Standard_Real aTol;
@@ -636,13 +625,13 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
     Bnd_Box aBox;
     //
     aTol=BRep_Tool::Tolerance(TopoDS::Vertex(aV));
-    aBox.SetGap(aTol); 
+    aBox.SetGap(aTol);
     BRepBndLib::Add(aV, aBox);
     //
     aTreeFiller.Add(i, aBox);
     //
     aMIS.Add(i, aV);
-    aMSB.Add(aV, aBox); 
+    aMSB.Add(aV, aBox);
   }
   //
   aTreeFiller.Fill();
@@ -678,7 +667,7 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
         //
         aNbVSD=aBBTree.Select(aSelector);
         if (!aNbVSD) {
-          continue;  // it must not be 
+          continue;  // it must not be
         }
         //
         const TColStd_ListOfInteger& aLI=aSelector.Indices();
@@ -775,12 +764,12 @@ void TreatNewVertices(const BooleanOperations_IndexedDataMapOfShapeInteger& aMap
     }
   }
 }
-//
+
 //=======================================================================
 //function : MakeNewVertex
-//purpose  : 
+//purpose  :
 //=======================================================================
-void MakeNewVertex(const TopTools_ListOfShape& aLV, 
+void MakeNewVertex(const TopTools_ListOfShape& aLV,
                    TopoDS_Vertex& aNewVertex)
 {
   Standard_Integer aNbV;
@@ -822,16 +811,17 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   //
   aBB.MakeVertex (aNewVertex, aPGC, aDmax);
 }
+
 //=======================================================================
 // function:EENewVertices
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::EENewVertices (const TopoDS_Vertex& aNewVertex,
-                                           const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI) 
+void NMTTools_PaveFiller::EENewVertices (const TopoDS_Vertex& aNewVertex,
+                                         const BooleanOperations_IndexedDataMapOfShapeInteger& aMapVI)
 {
   Standard_Integer  i, aNewShape, nE1, nE2;
   Standard_Real  aT1, aT2;
-  BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq;       
+  BooleanOperations_AncestorsSeqAndSuccessorsSeq anASSeq;
   BOPTools_Pave aPave;
   //
   BOPTools_CArray1OfEEInterference& aEEs=myIP->EEInterferences();
@@ -864,11 +854,12 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   BOPTools_PaveSet& aPaveSet2=myPavePoolNew(myDS->RefEdge(nE2));
   aPaveSet2.Append(aPave);
 }
+
 //=======================================================================
 // function: RefinePavePool
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::RefinePavePool()
+void NMTTools_PaveFiller::RefinePavePool()
 {
   Standard_Integer  i, aNbNew;
 
@@ -897,19 +888,20 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     }
   }
 }
+
 //=======================================================================
 // function: PreparePaveBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::PreparePaveBlocks(const TopAbs_ShapeEnum aType1, 
-                                              const TopAbs_ShapeEnum aType2)
+void NMTTools_PaveFiller::PreparePaveBlocks(const TopAbs_ShapeEnum aType1,
+                                            const TopAbs_ShapeEnum aType2)
 {
   myIsDone=Standard_False;
   //
   Standard_Boolean bOk1, bOk2, bOk3, bFlag;
   Standard_Integer i, aNb, nE[2], n1, n2, aNbSplits;
   TColStd_MapOfInteger aMap;
-  
+  //
   bOk1= (aType1==TopAbs_VERTEX) &&  (aType2==TopAbs_EDGE) ;
   bOk2= (aType1==TopAbs_EDGE)   &&  (aType2==TopAbs_EDGE) ;
   bOk3= (aType1==TopAbs_EDGE)   &&  (aType2==TopAbs_FACE) ;
@@ -923,10 +915,10 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   for (; myDSIt->More(); myDSIt->Next()) {
     myDSIt->Current(n1, n2, bFlag);
     //
-    nE[0]=n1; 
-    nE[1]=n2; 
+    nE[0]=n1;
+    nE[1]=n2;
     if (myDS->GetShapeType(n1)!=TopAbs_EDGE) {
-      nE[0]=n2; 
+      nE[0]=n2;
       nE[1]=n1;
     }
     //
@@ -934,7 +926,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
       BOPTools_ListOfPaveBlock& aLPB=mySplitShapesPool(myDS->RefEdge(nE[i]));
       aNbSplits=aLPB.Extent();
       if (!aNbSplits) {
-        if (aMap.Add(nE[i])) { 
+        if (aMap.Add(nE[i])) {
           PreparePaveBlocks(nE[i]);
           if (!myIsDone) {
             return;
@@ -942,14 +934,15 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
         }
       }
     }
-  }// for (; myDSIt.More(); myDSIt.Next()) 
+  }// for (; myDSIt.More(); myDSIt.Next())
   myIsDone=Standard_True;
 }
+
 //=======================================================================
 // function: PreparePaveBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::PreparePaveBlocks(const Standard_Integer nE)
+void NMTTools_PaveFiller::PreparePaveBlocks(const Standard_Integer nE)
 {
   myIsDone=Standard_False;
   //
@@ -959,7 +952,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   TopoDS_Vertex aV1, aV2;
   //
   BOPTools_ListOfPaveBlock& aLPB=mySplitShapesPool(myDS->RefEdge(nE));
-  // Edge 
+  // Edge
   aE=TopoDS::Edge(myDS->Shape(nE));
   if (BRep_Tool::Degenerated(aE)) {
     myIsDone=Standard_True;
@@ -967,7 +960,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   }
   //
   BOPTools_PaveSet& aPS=myPavePool(myDS->RefEdge(nE));
-  
+  //
   BOPTools_PaveBlockIterator aPBIt(nE, aPS);
   for (; aPBIt.More(); aPBIt.Next()) {
     BOPTools_PaveBlock& aPB=aPBIt.Value();
@@ -988,7 +981,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
       sprintf (buf, "Can not obtain ShrunkRange for Edge %d\n", nE);
       BOPTColStd_Dump::PrintMessage(buf);
       sprintf (buf, "Can not obtain ShrunkRange for Edge %d", nE);
-      throw 
+      throw
         BOPTColStd_Failure(buf) ;
     }
     //
@@ -1005,16 +998,17 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     //
     aPB.SetShrunkRange(aSR);
     aLPB.Append(aPB);
-  } //for (; aPBIt.More(); aPBIt.Next()) 
+  } //for (; aPBIt.More(); aPBIt.Next())
   myIsDone=Standard_True;
 }
+
 //=======================================================================
 // function: CorrectShrunkRanges
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::CorrectShrunkRanges(const Standard_Integer aSide,
-                                                const BOPTools_Pave& aPave,
-                                                IntTools_ShrunkRange& aShrunkRange)
+void NMTTools_PaveFiller::CorrectShrunkRanges(const Standard_Integer aSide,
+                                              const BOPTools_Pave& aPave,
+                                              IntTools_ShrunkRange& aShrunkRange)
 {
   BooleanOperations_KindOfInterference aType;
   Standard_Integer anIndexInterf ;
@@ -1039,7 +1033,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
 
   const IntTools_Range& aSR=aShrunkRange.ShrunkRange();
   const TopoDS_Edge& aE=aShrunkRange.Edge();
+
   IntTools_Range aNewRange;
   IntTools_Range aCPRange;
 
@@ -1079,13 +1073,13 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     }
   }
 }
+
 //=======================================================================
 // function:  IsBlocksCoinside
-// purpose: 
+// purpose:
 //=======================================================================
-  Standard_Boolean 
-    NMTTools_PaveFiller::IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,
-                                          const BOPTools_PaveBlock& aPB2) const
+Standard_Boolean NMTTools_PaveFiller::IsBlocksCoinside(const BOPTools_PaveBlock& aPB1,
+                                                       const BOPTools_PaveBlock& aPB2) const
 {
   Standard_Boolean bRetFlag=Standard_True;
   Standard_Real aTolV11, aTolV12, aTolV21, aTolV22;
@@ -1101,7 +1095,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   aTolV12=BRep_Tool::Tolerance(aV12);
   aTolV21=BRep_Tool::Tolerance(aV21);
   aTolV22=BRep_Tool::Tolerance(aV22);
-  
+
   aP11=BRep_Tool::Pnt(aV11);
   aP12=BRep_Tool::Pnt(aV12);
   aP21=BRep_Tool::Pnt(aV21);
@@ -1128,20 +1122,22 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   }
   return !bRetFlag;
 }
+
 //=======================================================================
 // function: ReplaceCommonBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
+void NMTTools_PaveFiller::ReplaceCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
 {
   RemoveCommonBlocks(aLCB);
   SplitCommonBlocks(aLCB);
 }
+
 //=======================================================================
 // function: SplitCommonBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
+void NMTTools_PaveFiller::SplitCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
 {
   Standard_Integer nE;
   NMTTools_ListOfCommonBlock aLCBx;
@@ -1171,10 +1167,10 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
       }
     }
   }
-  // Modified to provide the order of edges 
-  // in common block where the edge with max 
+  // Modified to provide the order of edges
+  // in common block where the edge with max
   // tolerance value will be the first
-  //  Thu Sep 14 14:35:18 2006 
+  //  Thu Sep 14 14:35:18 2006
   // Contribution of Samtech www.samcef.com BEGIN
   Standard_Integer i, iMax, aNb, aNbCB, nSp;
   Standard_Real aTolSp, aTolMax;
@@ -1231,11 +1227,12 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
   }//for (nE=1; nE<=aNb; ++nE) {
   // Contribution of Samtech www.samcef.com END
 }
+
 //=======================================================================
 // function: RemoveCommonBlocks
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
+void NMTTools_PaveFiller::RemoveCommonBlocks(const NMTTools_ListOfCommonBlock& aLCB)
 {
   Standard_Integer nE;
   NMTTools_ListOfCommonBlock aLCBx;
@@ -1247,7 +1244,7 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     const NMTTools_CommonBlock& aCB=anItCB.Value();
     const BOPTools_ListOfPaveBlock& aLPB=aCB.PaveBlocks();
     //
-    // Remove aCB from each edge 
+    // Remove aCB from each edge
     anItLPB.Initialize(aLPB);
     for (; anItLPB.More(); anItLPB.Next()) {
       const BOPTools_PaveBlock& aPB=anItLPB.Value();
@@ -1265,24 +1262,25 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     }
   }
 }
+
 //=======================================================================
 // function: SplitCommonBlock
-// purpose: 
+// purpose:
 //=======================================================================
-  void NMTTools_PaveFiller::SplitCommonBlock(const NMTTools_CommonBlock& aCB,
-                                             NMTTools_ListOfCommonBlock& aLCBx)
+void NMTTools_PaveFiller::SplitCommonBlock(const NMTTools_CommonBlock& aCB,
+                                           NMTTools_ListOfCommonBlock& aLCBx)
 {
-  Standard_Integer i, j, k, nE, aNbE, aNbSPBx, aNbPB; 
+  Standard_Boolean bIsCoincided;
+  Standard_Integer i, j,nE, aNbE, aNbSPBx, aNbPB, k;
   BOPTools_SequenceOfPaveBlock aSPBx;
   BOPTools_ListIteratorOfListOfPaveBlock anItLPB;
   BOPTools_ListIteratorOfListOfPave anIt;
-  
-  BOPTools_PaveBlockIterator anPBIt; 
+  BOPTools_PaveBlockIterator anPBIt;
   //
   const BOPTools_ListOfPaveBlock& aLPB=aCB.PaveBlocks();
   aNbE=aLPB.Extent();
   //
-  // 1. Whether we realy need to split the common block ?
+  // 1. Checking: Whether we realy need to split the common block ?
   anItLPB.Initialize(aLPB);
   for (; anItLPB.More(); anItLPB.Next()) {
     const BOPTools_PaveBlock& aPB=anItLPB.Value();
@@ -1346,21 +1344,44 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
     }
   }
   //
-  // 3. Do new common blocks 
+  // 3. Do new common blocks
   //
   const TColStd_ListOfInteger& aLF=aCB.Faces();
   aNbSPBx=aSPBx.Length();
   aNbPB=aNbSPBx/aNbE;
   //
+  Standard_Integer k1, k2, n11, n12, n21, n22;
+  //
   for (i=1; i<=aNbPB; ++i) {
     NMTTools_CommonBlock aCBx;
     //
     aCBx.AddFaces(aLF);
     //
-    for (j=1; j<=aNbE; ++j) {
-      k=i+(j-1)*aNbPB;
-      const BOPTools_PaveBlock& aPB=aSPBx(k);
-      aCBx.AddPaveBlock(aPB);
+    const BOPTools_PaveBlock& aPB1=aSPBx(i);
+    n11=aPB1.Pave1().Index();
+    n12=aPB1.Pave2().Index();
+    //
+    aCBx.AddPaveBlock(aPB1);
+    //
+    for (j=2; j<=aNbE; ++j) {
+      k1=(j-1)*aNbPB+1;
+      k2=k1+aNbPB-1;
+      for(k=k1; k<=k2; ++k) {
+        const BOPTools_PaveBlock& aPB2=aSPBx(k);
+        n21=aPB2.Pave1().Index();
+        n22=aPB2.Pave2().Index();
+        if ((n21==n11 && n22==n12) || (n21==n12 && n22==n11)) {
+         //modified by NIZNHY-PKV Thu Nov 11 08:13:24 2010f
+         bIsCoincided=CheckCoincidence(aPB2, aPB1);
+         if (bIsCoincided) {
+           aCBx.AddPaveBlock(aPB2);
+           break;
+         }
+         //aCBx.AddPaveBlock(aPB2);
+         //break;
+         //modified by NIZNHY-PKV Thu Nov 11 08:13:31 2010t
+        }
+      }
     }
     aLCBx.Append(aCBx);
   }
@@ -1368,10 +1389,10 @@ void MakeNewVertex(const TopTools_ListOfShape& aLV,
 
 //=======================================================================
 // function: VertexParameters
-// purpose: 
+// purpose:
 //=======================================================================
 void VertexParameters(const IntTools_CommonPrt& aCPart,
-                      Standard_Real& aT1, 
+                      Standard_Real& aT1,
                       Standard_Real& aT2)
 {
   const IntTools_Range& aR1=aCPart.Range1();
@@ -1391,9 +1412,10 @@ void VertexParameters(const IntTools_CommonPrt& aCPart,
     aT2 = aCPart.VertexParameter2();
   }
 }
+
 //=======================================================================
 // function: KeepPave
-// purpose: 
+// purpose:
 //=======================================================================
 Standard_Boolean IsOnPave(const Standard_Real& aT1,
                           const IntTools_Range& aRange,
@@ -1409,7 +1431,7 @@ Standard_Boolean IsOnPave(const Standard_Real& aT1,
 
 //=======================================================================
 // function:FindChains
-// purpose: 
+// purpose:
 //=======================================================================
 void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
                 NMTTools_ListOfCommonBlock& aLCB)
@@ -1445,9 +1467,10 @@ void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
     aChain.Clear();
   }
 }
+
 //=======================================================================
 // function:ProcessBlock
-// purpose: 
+// purpose:
 //=======================================================================
 void ProcessBlock(const BOPTools_PaveBlock& aPB,
                   const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
@@ -1471,11 +1494,11 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB,
 }
 // Modified  to provide VS interference between
 // vertex as result of EE and a Face of argument
-// Thu Sep 14 14:35:18 2006 
+// Thu Sep 14 14:35:18 2006
 // Contribution of Samtech www.samcef.com BEGIN
 //=======================================================================
-// function: PerformVF1  
-// purpose: 
+// function: PerformVF1
+// purpose:
 //=======================================================================
   void NMTTools_PaveFiller::PerformVF1()
 {
@@ -1511,7 +1534,7 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB,
     const TopoDS_Shape& aSnew=myDS->Shape(nNewShape);
     if (aSnew.ShapeType()!=TopAbs_VERTEX) {
       continue;
-    } 
+    }
     //
     const TopoDS_Vertex& aVnew=TopoDS::Vertex(aSnew);
     //
@@ -1540,5 +1563,50 @@ void ProcessBlock(const BOPTools_PaveBlock& aPB,
       }
     }
   }
-} 
+}
 // Contribution of Samtech www.samcef.com END
+//modified by NIZNHY-PKV Thu Nov 11 08:13:48 2010f
+//=======================================================================
+// function: CheckCoincidence
+// purpose:
+//=======================================================================
+Standard_Boolean NMTTools_PaveFiller::CheckCoincidence(const BOPTools_PaveBlock& aPB1,
+                                                      const BOPTools_PaveBlock& aPB2)
+{
+  Standard_Boolean bRet;
+  Standard_Integer nE1, nE2, aNbPoints;
+  Standard_Real aT11, aT12, aT21, aT22, aT1m, aD, aTol, aT2x;
+  gp_Pnt aP1m;
+  //
+  bRet=Standard_False;
+  //
+  aT11=aPB1.Pave1().Param();
+  aT12=aPB1.Pave2().Param();
+  aT1m=IntTools_Tools::IntermediatePoint (aT11, aT12);
+  nE1=aPB1.OriginalEdge();
+  const TopoDS_Edge& aE1=(*(TopoDS_Edge*)(&myDS->Shape(nE1)));
+  BOPTools_Tools::PointOnEdge(aE1, aT1m, aP1m);
+  //
+  aT21=aPB2.Pave1().Param();
+  aT22=aPB2.Pave2().Param();
+  nE2=aPB2.OriginalEdge();
+  const TopoDS_Edge& aE2=(*(TopoDS_Edge*)(&myDS->Shape(nE2)));
+  //
+  GeomAPI_ProjectPointOnCurve& aPPC=myContext.ProjPC(aE2);
+  aPPC.Perform(aP1m);
+  aNbPoints=aPPC.NbPoints();
+  if (aNbPoints) {
+    aD=aPPC.LowerDistance();
+    //
+    aTol=BRep_Tool::Tolerance(aE1);
+    aTol=aTol+BRep_Tool::Tolerance(aE2);
+    if (aD<aTol) {
+      aT2x=aPPC.LowerDistanceParameter();
+      if (aT2x>aT21 && aT2x<aT22) {
+       return !bRet;
+      }
+    }
+  }
+  return bRet;
+}
+//modified by NIZNHY-PKV Thu Nov 11 08:13:55 2010t
index fe82300d115df32eaf7d476c3659747ad09cdf7e..330f49bfe59b64d35d7bab64c5d93fee16de1cbc 100644 (file)
@@ -1,24 +1,24 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Transient)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #ifndef _NMTTools_StdMapNodeOfMapOfPaveBlock_HeaderFile
 #define _NMTTools_StdMapNodeOfMapOfPaveBlock_HeaderFile
@@ -63,7 +63,7 @@ NMTTools_StdMapNodeOfMapOfPaveBlock(const BOPTools_PaveBlock& K,const TCollectio
  // Type management
  //
  Standard_EXPORT const Handle(Standard_Type)& DynamicType() const;
- //Standard_EXPORT Standard_Boolean            IsKind(const Handle(Standard_Type)&) const;
+ //Standard_EXPORT Standard_Boolean           IsKind(const Handle(Standard_Type)&) const;
 
 protected:
 
index 8c60c9bb76a0feda45bb7167c2c24371f29ab35d..cae43049a777849a6850fda7b837f44236f0b143 100644 (file)
@@ -1,24 +1,23 @@
-//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+// File generated by CPPExt (Transient)
 //
-//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
-//
-//  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
+//                     Copyright (C) 1991 - 2000 by  
+//                      Matra Datavision SA.  All rights reserved.
+//  
+//                     Copyright (C) 2001 - 2004 by
+//                     Open CASCADE SA.  All rights reserved.
+// 
+// This file is part of the Open CASCADE Technology software.
 //
+// This software may be distributed and/or modified under the terms and
+// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
+// and appearing in the file LICENSE included in the packaging of this file.
+//  
+// This software is distributed on an "AS IS" basis, without warranty of any
+// kind, and Open CASCADE SA hereby disclaims all such warranties,
+// including without limitation, any warranties of merchantability, fitness
+// for a particular purpose or non-infringement. Please see the License for
+// the specific terms and conditions governing rights and limitations under the
+// License.
 
 #include <NMTTools_StdMapNodeOfMapOfPaveBlock.hxx>
 
@@ -52,10 +51,10 @@ Standard_EXPORT Handle_Standard_Type& NMTTools_StdMapNodeOfMapOfPaveBlock_Type_(
 
   static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
   static Handle_Standard_Type _aType = new Standard_Type("NMTTools_StdMapNodeOfMapOfPaveBlock",
-                                                         sizeof(NMTTools_StdMapNodeOfMapOfPaveBlock),
-                                                         1,
-                                                         (Standard_Address)_Ancestors,
-                                                         (Standard_Address)NULL);
+                                                        sizeof(NMTTools_StdMapNodeOfMapOfPaveBlock),
+                                                        1,
+                                                        (Standard_Address)_Ancestors,
+                                                        (Standard_Address)NULL);
 
   return _aType;
 }
index b152bafd2b357d2d40dce3af3f218ac26e0ff1eb..c80f2d121766a057b9a40e289aa4426cf666cb31 100644 (file)
@@ -39,6 +39,8 @@
 #include "GEOM_ShadingFace.h"
 #include "SVTK_Actor.h"
 
+#include <OCC2VTK_Tools.h>
+
 #include <vtkObjectFactory.h> 
 #include <vtkRenderer.h> 
 #include <vtkProperty.h> 
  
 #include <TopAbs_ShapeEnum.hxx>
 #include <TopExp_Explorer.hxx>
-#include <Poly_Triangulation.hxx>
-#include <BRepMesh_IncrementalMesh.hxx>
-#include <Bnd_Box.hxx>
 #include <TopoDS.hxx>
 #include <BRep_Tool.hxx>
-#include <BRepBndLib.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopoDS_Iterator.hxx>
 #include <TopExp.hxx>
  
 #include <vtkPolyDataWriter.h> 
@@ -354,35 +350,6 @@ GEOM_Actor
   return myVectorMode;
 }
 
-static 
-void 
-MeshShape(const TopoDS_Shape& theShape,
-          float& theDeflection, 
-          bool theIsRelative)
-{ 
-  static Standard_Real RELATIVE_DEFLECTION = 0.0001; 
-  Standard_Real aDeflection = theDeflection; 
-
-  if(theDeflection <= 0) { // Compute default theDeflection
-    Bnd_Box B;
-    BRepBndLib::Add(theShape, B);
-    Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
-    B.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
-    Standard_Real aDiagonal = (aXmax-aXmin)*(aXmax-aXmin) +
-                              (aYmax-aYmin)*(aYmax-aYmin) +
-                              (aZmax-aZmin)*(aZmax-aZmin);
-    aDiagonal = sqrt(aDiagonal); 
-    aDeflection = aDiagonal*RELATIVE_DEFLECTION; 
-    if(theIsRelative) 
-      theDeflection = RELATIVE_DEFLECTION; 
-    else 
-      theDeflection = aDeflection; 
-  }
-  
-  BRepMesh_IncrementalMesh aMesh(theShape,aDeflection);
-}
-
 void  
 GEOM_Actor:: 
 SetDeflection(float theDeflection, bool theIsRelative) 
@@ -390,7 +357,7 @@ SetDeflection(float theDeflection, bool theIsRelative)
   myDeflection = theDeflection; 
   myIsRelative = theIsRelative; 
  
-  MeshShape(myShape,myDeflection,myIsRelative); 
+  GEOM::MeshShape2(myShape,myDeflection,myIsRelative); 
  
   SetModified(); 
 } 
@@ -421,7 +388,12 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape,
   TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap;
   TopExp::MapShapesAndAncestors(theShape,TopAbs_EDGE,TopAbs_FACE,anEdgeMap);
   
-  SetShape(theShape,anEdgeMap,theIsVector);
+  GEOM::SetShape(theShape,anEdgeMap,theIsVector,
+                 myIsolatedEdgeSource.Get(),
+                 myOneFaceEdgeSource.Get(),
+                 mySharedEdgeSource.Get(),
+                 myWireframeFaceSource.Get(),
+                 myShadingFaceSource.Get());
   isOnlyVertex =  
     myIsolatedEdgeSource->IsEmpty() &&
     myOneFaceEdgeSource->IsEmpty() &&
@@ -436,65 +408,6 @@ void GEOM_Actor::SetShape (const TopoDS_Shape& theShape,
   }
 }
 
-void GEOM_Actor::SetShape (const TopoDS_Shape& theShape,
-                           const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
-                           bool theIsVector)
-{
-  if (theShape.ShapeType() == TopAbs_COMPOUND) {
-    TopoDS_Iterator anItr(theShape);
-    for (; anItr.More(); anItr.Next()) {
-      SetShape(anItr.Value(),theEdgeMap,theIsVector);
-    }
-  }
-
-  switch (theShape.ShapeType()) {
-    case TopAbs_WIRE: {
-      TopExp_Explorer anEdgeExp(theShape,TopAbs_EDGE);
-      for (; anEdgeExp.More(); anEdgeExp.Next()){
-        const TopoDS_Edge& anEdge = TopoDS::Edge(anEdgeExp.Current());
-        if (!BRep_Tool::Degenerated(anEdge))
-          myIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
-      }
-      break;
-    }
-    case TopAbs_EDGE: {
-      const TopoDS_Edge& anEdge = TopoDS::Edge(theShape);
-      if (!BRep_Tool::Degenerated(anEdge))
-        myIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
-      break;
-    }
-    case TopAbs_VERTEX: {
-      break;
-    }
-    default: {
-      TopExp_Explorer aFaceExp (theShape,TopAbs_FACE);
-      for(; aFaceExp.More(); aFaceExp.Next()) {
-        const TopoDS_Face& aFace = TopoDS::Face(aFaceExp.Current());
-        myWireframeFaceSource->AddFace(aFace);
-        myShadingFaceSource->AddFace(aFace);
-        TopExp_Explorer anEdgeExp(aFaceExp.Current(), TopAbs_EDGE);
-        for(; anEdgeExp.More(); anEdgeExp.Next()) {
-          const TopoDS_Edge& anEdge = TopoDS::Edge(anEdgeExp.Current());
-          if(!BRep_Tool::Degenerated(anEdge)){
-            // compute the number of faces
-            int aNbOfFaces = theEdgeMap.FindFromKey(anEdge).Extent();
-            switch(aNbOfFaces){
-            case 0:  // isolated edge
-              myIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
-              break;
-            case 1:  // edge in only one face
-              myOneFaceEdgeSource->AddEdge(anEdge,theIsVector);
-              break;
-            default: // edge shared by at least two faces
-              mySharedEdgeSource->AddEdge(anEdge,theIsVector);
-            }
-          }
-        }
-      }
-    }
-  }
-}
-
 // OLD METHODS
 void GEOM_Actor::setDeflection(double adef) {
 #ifdef MYDEBUG
index e8e0864644b8d3f845e44bf9685c012b63718134..e31ea1990c431eb3d378a2ea97752f7396beea37 100644 (file)
@@ -51,7 +51,6 @@ typedef GEOM_SmartPtr<GEOM_WireframeFace> PWFaceSource;
 class GEOM_ShadingFace;
 typedef GEOM_SmartPtr<GEOM_ShadingFace> PSFaceSource;
 
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 class vtkRenderer;
 
 class vtkAppendPolyData;
@@ -174,10 +173,6 @@ public:
   GetVectorMode();
 
 protected:
-  void SetShape(const TopoDS_Shape& theShape,
-                const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
-                bool theIsVector = false);
-
   void SetModified();
 
   void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result);
index 6c0f52833657a37b40fc4c1bf3a9bdccb7624b2a..ebad1a415349a98c381bfc7c17fec04d4115c788 100644 (file)
@@ -34,6 +34,8 @@
 #include "GEOM_AssemblyBuilder.h"
 #include "GEOM_Actor.h"
 
+#include <OCC2VTK_Tools.h>
+
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
 
 
 // Open CASCADE Includes
 #include <TopExp_Explorer.hxx>
-#include <Bnd_Box.hxx>
-#include <BRepMesh_IncrementalMesh.hxx>
-#include <Poly_Triangulation.hxx>
-#include <BRepBndLib.hxx>
 #include <BRep_Tool.hxx>
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopExp.hxx>
-#include <TopTools_ListOfShape.hxx>
 #include <TopoDS_Iterator.hxx>
 
 // Qt includes
 
 #include "utilities.h"
 
-// SALOME
-
-#define MAX2(X, Y)      (  Abs(X) > Abs(Y)? Abs(X) : Abs(Y) )
-#define MAX3(X, Y, Z)   ( MAX2 ( MAX2(X,Y) , Z) )
-
-
-
-
-
 void GEOM_AssemblyBuilder::InitProperties(vtkProperty* IsoProp,
                                           vtkProperty* FaceProp,
                                           vtkProperty* EdgeFProp,
@@ -159,37 +147,6 @@ void GEOM_AssemblyBuilder::InitProperties(vtkProperty* IsoProp,
 }
 
 
-void GEOM_AssemblyBuilder::MeshShape(const TopoDS_Shape myShape,
-                                         Standard_Real deflection,
-                                         Standard_Boolean forced)
-{
-  // Mesh the shape if necessary
-  Standard_Boolean alreadymesh = Standard_True;
-  TopExp_Explorer ex;
-  TopLoc_Location aLoc;
-
-  for (ex.Init(myShape, TopAbs_FACE); ex.More(); ex.Next()) {
-    const TopoDS_Face& aFace = TopoDS::Face(ex.Current());
-    Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc);
-    if(aPoly.IsNull()) { alreadymesh = Standard_False; break; }
-  }
-
-  if(!alreadymesh || forced) {
-    if(deflection<=0) {
-      // Compute default deflection
-      Bnd_Box B;
-      BRepBndLib::Add(myShape, B);
-      if ( B.IsVoid() ) return; // NPAL15983 (Bug when displaying empty groups) 
-      Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
-      B.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
-      deflection = MAX3( aXmax-aXmin , aYmax-aYmin , aZmax-aZmin) * 0.001 *4;
-    }
-    BRepMesh_IncrementalMesh MESH(myShape,deflection);
-  }
-}
-
-
-
 vtkActorCollection* GEOM_AssemblyBuilder::BuildActors(const TopoDS_Shape& myShape,
                                                       Standard_Real    deflection,
                                                       Standard_Integer mode,
@@ -210,7 +167,7 @@ vtkActorCollection* GEOM_AssemblyBuilder::BuildActors(const TopoDS_Shape& myShap
   */
 
   vtkActorCollection* AISActors = vtkActorCollection::New();
-  MeshShape(myShape,deflection,forced);
+  GEOM::MeshShape(myShape,deflection,forced);
   GEOM_Actor* aGeomActor = GEOM_Actor::New();
   aGeomActor->SetShape(myShape,(float)deflection,false,isVector);
   AISActors->AddItem(aGeomActor);
index 73fadc31dce5ebe97219465719cb3102652089c4..1f8bd88fb8dc1945f3a70e561541d1fbc165ba9e 100644 (file)
@@ -50,11 +50,6 @@ class GEOM_OBJECT_EXPORT GEOM_AssemblyBuilder {
                              vtkProperty* EdgePVProp,
                              vtkProperty* VertePVProp);
 
-  static void MeshShape(const TopoDS_Shape myShape,
-                        Standard_Real deflection,
-                        Standard_Boolean forced);
-
-
  public:
 
 
diff --git a/src/OBJECT/GEOM_EdgeSource.cxx b/src/OBJECT/GEOM_EdgeSource.cxx
deleted file mode 100755 (executable)
index e44cc81..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#include "GEOM_EdgeSource.h" 
-#include <vtkObjectFactory.h> 
-
-#include <vtkPoints.h> 
-#include <vtkCellArray.h> 
-
-#include <BRep_Tool.hxx>
-#include <Poly_Polygon3D.hxx>
-#include <Poly_Triangulation.hxx>
-#include <TColStd_Array1OfInteger.hxx>
-#include <Poly_PolygonOnTriangulation.hxx>
-#include <GeomAdaptor_Curve.hxx>
-#include <GCPnts_AbscissaPoint.hxx>
-#include <vtkStripper.h>  
-#include <vtkPolyData.h>  
-
-vtkStandardNewMacro(GEOM_EdgeSource);
-GEOM_EdgeSource::GEOM_EdgeSource() :
-  myIsVector(false)
-{ 
-} 
-GEOM_EdgeSource::~GEOM_EdgeSource() 
-{ 
-} 
-
-void GEOM_EdgeSource::AddEdge (const TopoDS_Edge& theEdge,
-                               bool theIsVector)
-{
-  myEdgeSet.Add(theEdge);
-  myIsVector = theIsVector;
-}
-
-void
-GEOM_EdgeSource:: 
-Execute()
-{
-  vtkPolyData* aPolyData = GetOutput();
-  aPolyData->Allocate();
-  vtkPoints* aPts = vtkPoints::New();
-  aPolyData->SetPoints(aPts);
-  aPts->Delete();
-
-  TEdgeSet::Iterator anIter (myEdgeSet);
-  for (; anIter.More(); anIter.Next()) {
-    const TopoDS_Edge& anEdge = anIter.Value();
-    OCC2VTK(anEdge,aPolyData,aPts,myIsVector);
-  }
-}
-
-void GEOM_EdgeSource::OCC2VTK (const TopoDS_Edge& theEdge,  
-                               vtkPolyData* thePolyData, 
-                               vtkPoints* thePts,
-                               bool theIsVector) 
-{
-  Handle(Poly_PolygonOnTriangulation) aEdgePoly;
-  Standard_Integer i = 1;
-  Handle(Poly_Triangulation) T;
-  TopLoc_Location aEdgeLoc;
-  BRep_Tool::PolygonOnTriangulation(theEdge, aEdgePoly, T, aEdgeLoc, i);
-
-  Handle(Poly_Polygon3D) P;
-  if(aEdgePoly.IsNull())
-    P = BRep_Tool::Polygon3D(theEdge, aEdgeLoc);
-
-  if(P.IsNull() && aEdgePoly.IsNull())
-    return;
-  
-  // Location edges
-  //---------------
-  gp_Trsf edgeTransf;
-  Standard_Boolean isidtrsf = true;
-  if(!aEdgeLoc.IsIdentity())  {
-    isidtrsf = false;
-    edgeTransf = aEdgeLoc.Transformation();
-  }
-
-  gp_Pnt aP1, aP2;
-
-  if (aEdgePoly.IsNull()) {
-    Standard_Integer aNbNodes = P->NbNodes();
-    const TColgp_Array1OfPnt& aNodesP = P->Nodes();
-
-    aP1 = aNodesP(1);
-    aP2 = aNodesP(aNbNodes);
-
-    for (int j = 1; j < aNbNodes; j++) {
-      gp_Pnt pt1 = aNodesP(j);
-      gp_Pnt pt2 = aNodesP(j+1);
-
-      if (!isidtrsf) {
-        // apply edge transformation
-        pt1.Transform(edgeTransf);
-        pt2.Transform(edgeTransf);
-      }
-
-      float aCoord1[3] = {pt1.X(), pt1.Y(), pt1.Z()};
-      vtkIdType anIds[2];
-      anIds[0] = thePts->InsertNextPoint(aCoord1);
-
-      float aCoord2[3] = {pt2.X(), pt2.Y(), pt2.Z()};
-      anIds[1] = thePts->InsertNextPoint(aCoord2);
-
-      thePolyData->InsertNextCell(VTK_LINE,2,anIds);
-    }
-  } else {
-    Standard_Integer aNbNodes = aEdgePoly->NbNodes();
-    const TColStd_Array1OfInteger& aNodeIds = aEdgePoly->Nodes();
-    const TColgp_Array1OfPnt& anId2Pnts = T->Nodes();
-
-    aP1 = anId2Pnts(aNodeIds(1));
-    aP2 = anId2Pnts(aNodeIds(aNbNodes));
-
-    for(int j = 1; j < aNbNodes; j++) {
-      Standard_Integer id1 = aNodeIds(j);
-      Standard_Integer id2 = aNodeIds(j+1);
-      
-      gp_Pnt pt1 = anId2Pnts(id1);
-      gp_Pnt pt2 = anId2Pnts(id2);
-          
-      if(!isidtrsf) {
-        // apply edge transformation
-        pt1.Transform(edgeTransf);
-        pt2.Transform(edgeTransf);
-      }
-      
-      float aCoord1[3] = {pt1.X(), pt1.Y(), pt1.Z()};
-      vtkIdType anIds[2];
-      anIds[0] = thePts->InsertNextPoint(aCoord1);
-
-      float aCoord2[3] = {pt2.X(), pt2.Y(), pt2.Z()};
-      anIds[1] = thePts->InsertNextPoint(aCoord2);
-
-      thePolyData->InsertNextCell(VTK_LINE,2,anIds);
-    }
-  }
-
-  
-  // vector representation has an arrow on its end
-  if (theIsVector)
-  {
-    if (!isidtrsf) {
-      // apply edge transformation
-      aP1.Transform(edgeTransf);
-      aP2.Transform(edgeTransf);
-    }
-
-    // draw an arrow
-
-    double fp,lp;
-    gp_Vec aDirVec;
-    Handle(Geom_Curve) C = BRep_Tool::Curve(theEdge,fp,lp);
-    if ( theEdge.Orientation() == TopAbs_FORWARD ) {
-      C->D1(lp, aP2, aDirVec);
-    } else {
-      C->D1(fp, aP1, aDirVec);
-      aP2 = aP1;
-    }
-
-    GeomAdaptor_Curve aAdC;
-    aAdC.Load(C, fp, lp);
-    Standard_Real aDist = GCPnts_AbscissaPoint::Length(aAdC, fp, lp); 
-    if (aDist < gp::Resolution()) return;
-
-    gp_Dir aDirection;
-
-    if ( theEdge.Orientation() == TopAbs_FORWARD )
-      aDirection = aDirVec;
-    else
-      aDirection = -aDirVec;
-
-    Standard_Real anAngle = PI/180.*5.;
-    Standard_Real aLength = aDist/10.;
-
-    Standard_Real dx,dy,dz;
-    aDirection.Coord(dx,dy,dz);
-
-    // Arrow Point
-    Standard_Real xo,yo,zo;
-    aP2.Coord(xo,yo,zo);
-
-    // Center of circle that arrow based
-    gp_XYZ aPc = aP2.XYZ() - aDirection.XYZ() * aLength;
-
-    // Construction of the base vectors for the arrow circle
-    gp_Dir aDirN;
-    if      (Abs(dx) <= Abs(dy) && Abs(dx) <= Abs(dz)) aDirN = gp::DX();
-    else if (Abs(dy) <= Abs(dz) && Abs(dy) <= Abs(dx)) aDirN = gp::DY();
-    else aDirN = gp::DZ();
-
-    gp_Dir aDirI = aDirection ^ aDirN;
-    gp_Dir aDirJ = aDirection ^ aDirI;
-
-    // Add points and segments, composing the arrow
-    Standard_Real cosinus, sinus, Tg = tan(anAngle);
-
-    float coord[3] = {xo, yo, zo};
-
-    vtkIdType ptLoc = thePts->InsertNextPoint(coord);
-    vtkIdType ptFirst = 0;
-    vtkIdType ptPrev = 0;
-    vtkIdType ptCur = 0;
-
-    vtkIdType pts[2];
-
-    int NbPoints = 15;
-    for (int i = 1; i <= NbPoints; i++, ptPrev = ptCur)
-    {
-      cosinus = cos(2. * PI / NbPoints * (i-1));   
-      sinus   = sin(2. * PI / NbPoints * (i-1));
-
-      gp_XYZ aP = aPc + (aDirI.XYZ() * cosinus + aDirJ.XYZ() * sinus) * aLength * Tg;
-      coord[0] = aP.X();
-      coord[1] = aP.Y();
-      coord[2] = aP.Z();
-
-      // insert pts
-      ptCur = thePts->InsertNextPoint(coord);
-      pts[0] = ptCur;
-
-      if (i == 1) {
-        ptFirst = ptCur;
-      }
-      else {
-        // insert line (ptCur,ptPrev)
-        pts[1] = ptPrev;
-        thePolyData->InsertNextCell(VTK_LINE,2,pts);
-      }
-
-      // insert line (ptCur,ptLoc)
-      pts[1] = ptLoc;
-      thePolyData->InsertNextCell(VTK_LINE,2,pts);
-    }
-
-    // insert line (ptCur,ptFirst)
-    pts[0] = ptCur;
-    pts[1] = ptFirst;
-    thePolyData->InsertNextCell(VTK_LINE,2,pts);
-  }
-}
-
-void GEOM_EdgeSource::SetVectorMode (bool theMode)
-{
-  myIsVector = theMode;
-}
-
-bool GEOM_EdgeSource::GetVectorMode ()
-{
-  return myIsVector;
-}
diff --git a/src/OBJECT/GEOM_EdgeSource.h b/src/OBJECT/GEOM_EdgeSource.h
deleted file mode 100755 (executable)
index 82383a6..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#ifndef GEOM_EDGESOURCE_H 
-#define GEOM_EDGESOURCE_H 
-#include "GEOM_DeviceActor.h" 
-#include <TopoDS_Edge.hxx> 
-#include <NCollection_Set.hxx> 
-typedef NCollection_Set<TopoDS_Edge> TEdgeSet; 
-#include <vtkPolyDataSource.h> 
-class VTK_EXPORT GEOM_EdgeSource: public vtkPolyDataSource 
-{ 
-public: 
-  vtkTypeMacro(GEOM_EdgeSource,vtkPolyDataSource); 
-  static GEOM_EdgeSource* New(); 
-  void AddEdge (const TopoDS_Edge& theEdge,
-                bool theIsVector = false);
-  void Clear(){ myEdgeSet.Clear();}
-  
-  void SetVectorMode(bool);
-
-  bool GetVectorMode();
-  static  
-  void OCC2VTK(const TopoDS_Edge& theEdge,  
-               vtkPolyData* thePolyData, 
-               vtkPoints* thePts,
-               bool theIsVector = false); 
-
-  bool IsEmpty(){return myEdgeSet.IsEmpty();}
-
-protected: 
-  TEdgeSet myEdgeSet;
-  // The <myIsVector> flag is common for all edges, because the shape,
-  // representing a vector, can have only one edge.
-  bool myIsVector;
-  void Execute(); 
-  GEOM_EdgeSource(); 
-  ~GEOM_EdgeSource(); 
-private: 
-  // Not implememnted 
-  GEOM_EdgeSource(const GEOM_EdgeSource&); 
-  void operator=(const GEOM_EdgeSource&); 
-}; 
-#endif //GEOM_EDGESOURCE_H 
diff --git a/src/OBJECT/GEOM_FaceSource.cxx b/src/OBJECT/GEOM_FaceSource.cxx
deleted file mode 100755 (executable)
index 7035ef8..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#include "GEOM_FaceSource.h" 
-#include <vtkObjectFactory.h> 
-
-#include <vtkPoints.h>
-#include <vtkCellArray.h>
-#include <vtkPolyDataMapper.h>  
-#include <vtkPolyData.h>  
-GEOM_FaceSource::GEOM_FaceSource() 
-{ 
-} 
-GEOM_FaceSource::~GEOM_FaceSource() 
-{ 
-} 
-void  
-GEOM_FaceSource:: 
-AddFace(const TopoDS_Face& theFace) 
-{ 
-  myFaceSet.Add(theFace); 
-} 
-void 
-GEOM_FaceSource::
-MoveTo(gp_Pnt thePnt, 
-       vtkPoints* thePts)
-{    
-  thePts->InsertNextPoint(thePnt.X(), thePnt.Y(), thePnt.Z());
-} 
-
-void 
-GEOM_FaceSource::
-DrawTo(gp_Pnt thePnt,
-       vtkPolyData* thePolyData,
-       vtkPoints* thePts)
-{
-  vtkIdType anId = 
-    thePts->InsertNextPoint(thePnt.X(), thePnt.Y(), thePnt.Z());
-  vtkIdType anIds[2] = {anId-1, anId};
-  thePolyData->InsertNextCell(VTK_LINE,2,anIds);
-}
diff --git a/src/OBJECT/GEOM_FaceSource.h b/src/OBJECT/GEOM_FaceSource.h
deleted file mode 100755 (executable)
index 2fed7cb..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#ifndef GEOM_FACESOURCE_H 
-#define GEOM_FACESOURCE_H 
-#include "GEOM_DeviceActor.h" 
-#include <gp_Pnt.hxx>
-#include <TopoDS_Face.hxx> 
-#include <NCollection_Set.hxx> 
-typedef NCollection_Set<TopoDS_Face> TFaceSet; 
-#include <vtkPolyDataSource.h> 
-class GEOM_FaceSource; 
-typedef GEOM_SmartPtr<GEOM_FaceSource> PFaceSource; 
-class VTK_EXPORT GEOM_FaceSource: public vtkPolyDataSource 
-{ 
-public: 
-  vtkTypeMacro(GEOM_FaceSource,vtkPolyDataSource); 
-  void AddFace(const TopoDS_Face& theFace); 
-  void Clear(){ myFaceSet.Clear();} 
-  bool IsEmpty(){return myFaceSet.IsEmpty();}
-protected: 
-  TFaceSet myFaceSet; 
-  static 
-  void MoveTo(gp_Pnt thePnt, 
-              vtkPoints* thePts);
-  static 
-  void DrawTo(gp_Pnt thePnt,
-              vtkPolyData* thePolyData,
-              vtkPoints* thePts); 
-  GEOM_FaceSource(); 
-  ~GEOM_FaceSource(); 
-private: 
-  // Not implememnted 
-  GEOM_FaceSource(const GEOM_FaceSource&); 
-  void operator=(const GEOM_FaceSource&); 
-}; 
-#endif //GEOM_FACESOURCE_H 
diff --git a/src/OBJECT/GEOM_ShadingFace.cxx b/src/OBJECT/GEOM_ShadingFace.cxx
deleted file mode 100755 (executable)
index 704db5b..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#include "GEOM_ShadingFace.h" 
-#include <vtkObjectFactory.h> 
-#include <vtkPoints.h> 
-#include <vtkCellArray.h> 
-
-#include <vtkPolyDataMapper.h>  
-#include <vtkPolyData.h>  
-
-#include <BRep_Tool.hxx>
-#include <Poly_Triangulation.hxx>
-
-vtkStandardNewMacro(GEOM_ShadingFace);
-GEOM_ShadingFace::GEOM_ShadingFace() 
-{ 
-} 
-GEOM_ShadingFace::~GEOM_ShadingFace() 
-{ 
-} 
-void
-GEOM_ShadingFace:: 
-Execute()
-{
-  vtkPolyData* aPolyData = GetOutput();
-  aPolyData->Allocate();
-  vtkPoints* aPts = vtkPoints::New();
-  aPolyData->SetPoints(aPts);
-  aPts->Delete();
-
-  TFaceSet::Iterator anIter(myFaceSet);
-  for(; anIter.More(); anIter.Next()){
-    const TopoDS_Face& aFace = anIter.Value();
-    OCC2VTK(aFace,aPolyData,aPts);
-  }
-}
-
-void  
-GEOM_ShadingFace:: 
-OCC2VTK(const TopoDS_Face& theFace,  
-        vtkPolyData* thePolyData, 
-        vtkPoints* thePts) 
-{
-  TopLoc_Location aLoc;
-  Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(theFace,aLoc);
-  if(aPoly.IsNull()) 
-    return;
-  else{
-    gp_Trsf myTransf;
-    Standard_Boolean identity = true;
-    if(!aLoc.IsIdentity()){
-      identity = false;
-      myTransf = aLoc.Transformation();
-    }           
-      
-    Standard_Integer i; 
-    int aNbOfNodes = thePts->GetNumberOfPoints();
-    const TColgp_Array1OfPnt& Nodes = aPoly->Nodes();
-    Standard_Integer nbNodesInFace = aPoly->NbNodes(); 
-    for(i = 1; i <= nbNodesInFace; i++) {
-      gp_Pnt P = Nodes(i);
-      if(!identity) 
-        P.Transform(myTransf);
-      thePts->InsertNextPoint(P.X(),P.Y(),P.Z());
-    }
-
-    const Poly_Array1OfTriangle& Triangles = aPoly->Triangles();
-    Standard_Integer nbTriInFace = aPoly->NbTriangles();
-    for(i = 1; i <= nbTriInFace; i++){
-      // Get the triangle
-      Standard_Integer N1,N2,N3;
-      Triangles(i).Get(N1,N2,N3);
-      N1 += aNbOfNodes - 1;
-      N2 += aNbOfNodes - 1;
-      N3 += aNbOfNodes - 1;
-      vtkIdType anIds[3] = {N1, N2, N3};
-      thePolyData->InsertNextCell(VTK_TRIANGLE,3,anIds);
-    }
-  } 
-}
diff --git a/src/OBJECT/GEOM_ShadingFace.h b/src/OBJECT/GEOM_ShadingFace.h
deleted file mode 100755 (executable)
index ee1f7a9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#ifndef GEOM_SHADINGFACE_H 
-#define GEOM_SHADINGFACE_H 
-#include "GEOM_FaceSource.h" 
-class VTK_EXPORT GEOM_ShadingFace: public GEOM_FaceSource 
-{ 
-public: 
-  vtkTypeMacro(GEOM_ShadingFace,GEOM_FaceSource); 
-  static GEOM_ShadingFace* New(); 
-  static  
-  void OCC2VTK(const TopoDS_Face& theFace,  
-               vtkPolyData* theCells, 
-               vtkPoints* thePts); 
-protected: 
-  void Execute(); 
-  GEOM_ShadingFace(); 
-  ~GEOM_ShadingFace(); 
-private: 
-  // Not implememnted 
-  GEOM_ShadingFace(const GEOM_ShadingFace&); 
-  void operator=(const GEOM_ShadingFace&); 
-}; 
-#endif //GEOM_SHADINGFACE_H 
diff --git a/src/OBJECT/GEOM_VertexSource.cxx b/src/OBJECT/GEOM_VertexSource.cxx
deleted file mode 100755 (executable)
index c565896..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#include "GEOM_VertexSource.h" 
-#include <vtkObjectFactory.h> 
-
-#include <vtkPoints.h> 
-#include <vtkCellArray.h> 
-#include <vtkPolyData.h> 
-#include <vtkPolyDataMapper.h> 
-#include <gp_Pnt.hxx>
-#include <BRep_Tool.hxx>
-vtkStandardNewMacro(GEOM_VertexSource);
-GEOM_VertexSource::GEOM_VertexSource() 
-{ 
-} 
-GEOM_VertexSource::~GEOM_VertexSource() 
-{ 
-} 
-void  
-GEOM_VertexSource:: 
-AddVertex(const TopoDS_Vertex& theVertex) 
-{ 
-  myVertexSet.Add(theVertex); 
-} 
-void
-GEOM_VertexSource:: 
-Execute()
-{
-  vtkPolyData* aPolyData = GetOutput();
-  aPolyData->Allocate();
-  vtkPoints* aPts = vtkPoints::New();
-  aPolyData->SetPoints(aPts);
-  aPts->Delete();
-
-  TVertexSet::Iterator anIter(myVertexSet);
-  for(; anIter.More(); anIter.Next()){
-    const TopoDS_Vertex& aVertex = anIter.Value();
-    OCC2VTK(aVertex,aPolyData,aPts);
-  }
-}
-
-void  
-GEOM_VertexSource:: 
-OCC2VTK(const TopoDS_Vertex& theVertex,  
-        vtkPolyData* thePolyData, 
-        vtkPoints* thePts) 
-{ 
-  gp_Pnt aPnt = BRep_Tool::Pnt(theVertex);
-  vtkIdType anId = thePts->InsertNextPoint(aPnt.X(),aPnt.Y(),aPnt.Z());
-  thePolyData->InsertNextCell(VTK_VERTEX,1,&anId);
-}
diff --git a/src/OBJECT/GEOM_VertexSource.h b/src/OBJECT/GEOM_VertexSource.h
deleted file mode 100755 (executable)
index 782c528..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#ifndef GEOM_VERTEXSOURCE_H 
-#define GEOM_VERTEXSOURCE_H 
-#include "GEOM_DeviceActor.h" 
-#include <TopoDS_Vertex.hxx> 
-#include <NCollection_Set.hxx> 
-typedef NCollection_Set<TopoDS_Vertex> TVertexSet; 
-#include <vtkPolyDataSource.h> 
-class VTK_EXPORT GEOM_VertexSource: public vtkPolyDataSource 
-{ 
-public: 
-  vtkTypeMacro(GEOM_VertexSource,vtkPolyDataSource); 
-  static GEOM_VertexSource* New(); 
-  void AddVertex(const TopoDS_Vertex& theVertex); 
-  void Clear(){ myVertexSet.Clear();} 
-  static  
-  void OCC2VTK(const TopoDS_Vertex& theVertex,  
-               vtkPolyData* thePolyData, 
-               vtkPoints* thePts); 
-protected: 
-  TVertexSet myVertexSet; 
-  void Execute(); 
-  GEOM_VertexSource(); 
-  ~GEOM_VertexSource(); 
-private: 
-  // Not implememnted 
-  GEOM_VertexSource(const GEOM_VertexSource&); 
-  void operator=(const GEOM_VertexSource&); 
-}; 
-#endif //GEOM_VERTEXSOURCE_H 
diff --git a/src/OBJECT/GEOM_WireframeFace.cxx b/src/OBJECT/GEOM_WireframeFace.cxx
deleted file mode 100755 (executable)
index c3d3b4b..0000000
+++ /dev/null
@@ -1,509 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#include "GEOM_WireframeFace.h" 
-#include <vtkObjectFactory.h> 
-#include <vtkPoints.h> 
-#include <vtkCellArray.h> 
-
-#include <vtkPolyDataMapper.h>  
-#include <vtkPolyData.h>  
-#include <Precision.hxx>
-#include <BRepTools.hxx>
-#include <TopExp_Explorer.hxx>
-#include <Geom2dHatch_Hatcher.hxx>
-#include <Geom2dHatch_Intersector.hxx>
-#include <TColStd_Array1OfReal.hxx>
-#include <TColStd_Array1OfInteger.hxx>
-#include <TopoDS.hxx> 
-#include <TopoDS_Edge.hxx> 
-#include <BRep_Tool.hxx>
-#include <Geom2d_TrimmedCurve.hxx>
-#include <Geom2d_Line.hxx>
-#include <gp_Dir2d.hxx>
-#include <gp_Pnt2d.hxx>
-#include <Geom2dHatch_Hatcher.hxx>
-#include <HatchGen_Domain.hxx>
-
-#include <Adaptor3d_HCurve.hxx>
-
-vtkStandardNewMacro(GEOM_WireframeFace);
-GEOM_WireframeFace::GEOM_WireframeFace(): 
-  Discret(15)
-{ 
-  NbIso[0] = 1;
-  NbIso[1] = 1;
-} 
-GEOM_WireframeFace::~GEOM_WireframeFace() 
-{ 
-} 
-void
-GEOM_WireframeFace:: 
-Execute()
-{
-  vtkPolyData* aPolyData = GetOutput();
-  aPolyData->Allocate();
-  vtkPoints* aPts = vtkPoints::New();
-  aPolyData->SetPoints(aPts);
-  aPts->Delete();
-
-  TFaceSet::Iterator anIter(myFaceSet);
-  for(; anIter.More(); anIter.Next()){
-    const TopoDS_Face& aFace = anIter.Value();
-    OCC2VTK(aFace,aPolyData,aPts,NbIso,Discret);
-  }
-}
-
-void GEOM_WireframeFace::SetNbIso(const int theNb[2])
-{
-  if ( theNb[0] == NbIso[0] && theNb[1] == NbIso[1])
-    return;
-
-  NbIso[0] = theNb[0];
-  NbIso[1] = theNb[1];
-
-  Modified();
-}
-
-void GEOM_WireframeFace::GetNbIso(int &theNbU,int &theNbV)
-{
-  theNbU = NbIso[0];
-  theNbV = NbIso[1];
-}
-
-void  
-GEOM_WireframeFace:: 
-OCC2VTK(const TopoDS_Face& theFace,
-        vtkPolyData* thePolyData,
-                    vtkPoints* thePts,  
-        const int theNbIso[2], 
-        const int theDiscret) 
-{ 
-  TopoDS_Face aFace = theFace; 
-  aFace.Orientation(TopAbs_FORWARD);
-  CreateIso(aFace,theNbIso,theDiscret,thePolyData,thePts);
-}
-
-void 
-GEOM_WireframeFace:: 
-CreateIso(const TopoDS_Face& theFace,
-          const int theNbIso[2], 
-          const int theDiscret, 
-          vtkPolyData* thePolyData,
-          vtkPoints* thePts)
-{
-  // Constants for iso building
-  static Standard_Real INTERSECTOR_CONFUSION = 1.e-10 ; // -8 ;
-  static Standard_Real INTERSECTOR_TANGENCY  = 1.e-10 ; // -8 ;
-
-  static Standard_Real HATHCER_CONFUSION_2D = 1.e-8 ;
-  static Standard_Real HATHCER_CONFUSION_3D = 1.e-8 ;
-
-  Geom2dHatch_Hatcher 
-    aHatcher(Geom2dHatch_Intersector(INTERSECTOR_CONFUSION,
-                                     INTERSECTOR_TANGENCY),
-                         HATHCER_CONFUSION_2D,
-                         HATHCER_CONFUSION_3D,
-                                     Standard_True,
-                                     Standard_False);
-  
-  Standard_Real anUMin, anUMax, aVMin, aVMax;
-  TColStd_Array1OfReal anUPrm(1, theNbIso[0]), aVPrm(1, theNbIso[1]);
-  TColStd_Array1OfInteger anUInd(1, theNbIso[0]), aVInd(1, theNbIso[1]);
-
-  anUInd.Init(0);
-  aVInd.Init(0);
-
-  //-----------------------------------------------------------------------
-  // If the Min Max bounds are infinite, there are bounded to Infinite
-  // value.
-  //-----------------------------------------------------------------------
-  BRepTools::UVBounds(theFace, anUMin, anUMax, aVMin, aVMax) ;
-  Standard_Boolean InfiniteUMin = Precision::IsNegativeInfinite (anUMin) ;
-  Standard_Boolean InfiniteUMax = Precision::IsPositiveInfinite (anUMax) ;
-  Standard_Boolean InfiniteVMin = Precision::IsNegativeInfinite (aVMin) ;
-  Standard_Boolean InfiniteVMax = Precision::IsPositiveInfinite (aVMax) ;
-
-  static float VTKINFINITE = 1.0E38;
-  if(InfiniteUMin && InfiniteUMax){
-    anUMin = - VTKINFINITE ;
-    anUMax =   VTKINFINITE ;
-  }else if(InfiniteUMin){
-    anUMin = anUMax - VTKINFINITE ;
-  }else if(InfiniteUMax){
-    anUMax = anUMin + VTKINFINITE ;
-  }
-
-  if(InfiniteVMin && InfiniteVMax){
-    aVMin = - VTKINFINITE ;
-    aVMax =   VTKINFINITE ;
-  }else if(InfiniteVMin){
-    aVMin = aVMax - VTKINFINITE ;
-  }else if(InfiniteVMax){
-    aVMax = aVMin + VTKINFINITE ;
-  }
-
-  //-----------------------------------------------------------------------
-  // Retreiving the edges and loading them into the hatcher.
-  //-----------------------------------------------------------------------
-  TopExp_Explorer ExpEdges(theFace, TopAbs_EDGE);
-  for(; ExpEdges.More(); ExpEdges.Next()){
-    const TopoDS_Edge& anEdge = TopoDS::Edge(ExpEdges.Current());
-    Standard_Real U1, U2 ;
-    const Handle(Geom2d_Curve) PCurve = 
-      BRep_Tool::CurveOnSurface(anEdge, theFace, U1, U2) ;
-
-    if(PCurve.IsNull() || U1 == U2)
-      return;
-
-    //-- Test if a TrimmedCurve is necessary
-    if(Abs(PCurve->FirstParameter()-U1) <= Precision::PConfusion() &&
-             Abs(PCurve->LastParameter()-U2) <= Precision::PConfusion())
-    { 
-      aHatcher.AddElement(PCurve, anEdge.Orientation()) ;      
-    }else{ 
-      if(!PCurve->IsPeriodic()){
-              Handle(Geom2d_TrimmedCurve) TrimPCurve =
-          Handle(Geom2d_TrimmedCurve)::DownCast(PCurve);
-              if(!TrimPCurve.IsNull()){
-          Handle_Geom2d_Curve aBasisCurve = TrimPCurve->BasisCurve();
-                if(aBasisCurve->FirstParameter()-U1 > Precision::PConfusion() ||
-                   U2-aBasisCurve->LastParameter() > Precision::PConfusion()) 
-          {
-                  aHatcher.AddElement(PCurve, anEdge.Orientation()) ;      
-                  return;
-                }
-              }else{
-                if(PCurve->FirstParameter()-U1 > Precision::PConfusion()){
-                  U1=PCurve->FirstParameter();
-                }
-                if(U2-PCurve->LastParameter()  > Precision::PConfusion()){
-                  U2=PCurve->LastParameter();
-                }
-              }
-      }
-      Handle(Geom2d_TrimmedCurve) TrimPCurve = 
-        new Geom2d_TrimmedCurve(PCurve, U1, U2);
-      aHatcher.AddElement(TrimPCurve, anEdge.Orientation());
-    }
-  }
-
-
-  //-----------------------------------------------------------------------
-  // Loading and trimming the hatchings.
-  //-----------------------------------------------------------------------
-  Standard_Integer IIso;
-  Standard_Real DeltaU = Abs(anUMax - anUMin) ;
-  Standard_Real DeltaV = Abs(aVMax - aVMin) ;
-  Standard_Real confusion = Min(DeltaU, DeltaV) * HATHCER_CONFUSION_3D ;
-  aHatcher.Confusion3d (confusion) ;
-
-  if ( theNbIso[0] ) {
-    Standard_Real StepU = DeltaU / (Standard_Real)theNbIso[0];
-    if(StepU > confusion){
-      Standard_Real UPrm = anUMin + StepU / 2.;
-      gp_Dir2d Dir(0., 1.) ;
-      for(IIso = 1 ; IIso <= theNbIso[0] ; IIso++) {
-        anUPrm(IIso) = UPrm ;
-        gp_Pnt2d Ori (UPrm, 0.) ;
-        Geom2dAdaptor_Curve HCur (new Geom2d_Line (Ori, Dir)) ;
-        anUInd(IIso) = aHatcher.AddHatching (HCur) ;
-        UPrm += StepU ;
-      }
-    }
-  }
-
-  if ( theNbIso[1] ) {
-    Standard_Real StepV = DeltaV / (Standard_Real) theNbIso[1] ;
-    if(StepV > confusion){
-      Standard_Real VPrm = aVMin + StepV / 2.;
-      gp_Dir2d Dir(1., 0.);
-      for(IIso = 1 ; IIso <= theNbIso[1] ; IIso++){
-        aVPrm(IIso) = VPrm;
-        gp_Pnt2d Ori (0., VPrm);
-        Geom2dAdaptor_Curve HCur(new Geom2d_Line (Ori, Dir));
-        aVInd(IIso) = aHatcher.AddHatching (HCur) ;
-        VPrm += StepV ;
-      }
-    }
-  }
-
-  //-----------------------------------------------------------------------
-  // Computation.
-  //-----------------------------------------------------------------------
-  aHatcher.Trim() ;
-
-  Standard_Integer aNbDom = 0 ; // for debug purpose
-  Standard_Integer Index ;
-
-  for(IIso = 1 ; IIso <= theNbIso[0] ; IIso++){
-    Index = anUInd(IIso) ;
-    if(Index != 0){
-      if(aHatcher.TrimDone(Index) && !aHatcher.TrimFailed(Index)){
-              aHatcher.ComputeDomains(Index);
-              if(aHatcher.IsDone (Index)) 
-          aNbDom = aHatcher.NbDomains (Index);
-      }
-    }
-  }
-
-  for(IIso = 1 ; IIso <= theNbIso[1] ; IIso++){
-    Index = aVInd(IIso);
-    if(Index != 0){
-      if(aHatcher.TrimDone (Index) && !aHatcher.TrimFailed(Index)){
-              aHatcher.ComputeDomains (Index);
-              if(aHatcher.IsDone (Index)) 
-          aNbDom = aHatcher.NbDomains (Index);
-      }
-    }
-  }
-
-  //-----------------------------------------------------------------------
-  // Push iso lines in vtk kernel
-  //-----------------------------------------------------------------------
-  for(Standard_Integer UIso = anUPrm.Lower() ; UIso <= anUPrm.Upper(); UIso++){
-    Standard_Integer UInd = anUInd.Value(UIso);
-    if(UInd != 0){
-      Standard_Real UPrm = anUPrm.Value(UIso);
-      if(aHatcher.IsDone(UInd)){
-              Standard_Integer NbDom = aHatcher.NbDomains(UInd);
-              for(Standard_Integer IDom = 1 ; IDom <= NbDom ; IDom++){
-                const HatchGen_Domain& Dom = aHatcher.Domain(UInd, IDom) ;
-                Standard_Real V1 = Dom.HasFirstPoint()? Dom.FirstPoint().Parameter(): aVMin - VTKINFINITE;
-                Standard_Real V2 = Dom.HasSecondPoint()? Dom.SecondPoint().Parameter(): aVMax + VTKINFINITE;
-                CreateIso_(theFace, GeomAbs_IsoU, UPrm, V1, V2, theDiscret, thePolyData, thePts);
-        }
-            }
-    }
-  }
-
-  for(Standard_Integer VIso = aVPrm.Lower() ; VIso <= aVPrm.Upper(); VIso++){
-    Standard_Integer VInd = aVInd.Value(VIso);
-    if(VInd != 0){
-      Standard_Real VPrm = aVPrm.Value(VIso);
-      if(aHatcher.IsDone (VInd)){
-              Standard_Integer NbDom = aHatcher.NbDomains(VInd);
-              for (Standard_Integer IDom = 1 ; IDom <= NbDom ; IDom++){
-                const HatchGen_Domain& Dom = aHatcher.Domain(VInd, IDom);
-                Standard_Real U1 = Dom.HasFirstPoint()? Dom.FirstPoint().Parameter(): aVMin - VTKINFINITE;
-                Standard_Real U2 = Dom.HasSecondPoint()? Dom.SecondPoint().Parameter(): aVMax + VTKINFINITE;
-            CreateIso_(theFace, GeomAbs_IsoV, VPrm, U1, U2, theDiscret, thePolyData, thePts);
-              }
-      }
-    }
-  }
-}
-
-
-void 
-GEOM_WireframeFace:: 
-CreateIso_(const TopoDS_Face& theFace,
-           GeomAbs_IsoType theIsoType, 
-           Standard_Real Par, 
-           Standard_Real T1,
-           Standard_Real T2,
-           const int theDiscret, 
-           vtkPolyData* thePolyData,
-           vtkPoints* thePts)
-{
-  Standard_Real U1, U2, V1, V2, stepU=0., stepV=0.;
-  Standard_Integer j;
-  gp_Pnt P;
-
-  TopLoc_Location aLoc;
-  const Handle(Geom_Surface)& S = BRep_Tool::Surface(theFace,aLoc);
-
-  if(!S.IsNull()){
-    BRepAdaptor_Surface S(theFace,Standard_False);
-      
-    GeomAbs_SurfaceType SurfType = S.GetType();
-
-    GeomAbs_CurveType CurvType = GeomAbs_OtherCurve;
-
-    Standard_Integer Intrv, nbIntv;
-    Standard_Integer nbUIntv = S.NbUIntervals(GeomAbs_CN);
-    Standard_Integer nbVIntv = S.NbVIntervals(GeomAbs_CN);
-    TColStd_Array1OfReal TI(1,Max(nbUIntv, nbVIntv)+1);
-
-    if(theIsoType == GeomAbs_IsoU){
-      S.VIntervals(TI, GeomAbs_CN);
-      V1 = Max(T1, TI(1));
-      V2 = Min(T2, TI(2));
-      U1 = Par;
-      U2 = Par;
-      stepU = 0;
-      nbIntv = nbVIntv;
-    }else{
-      S.UIntervals(TI, GeomAbs_CN);
-      U1 = Max(T1, TI(1));
-      U2 = Min(T2, TI(2));
-      V1 = Par;
-      V2 = Par;
-      stepV = 0;
-      nbIntv = nbUIntv;
-    }   
-        
-    S.D0(U1,V1,P);
-    MoveTo(P,thePts);
-
-    for(Intrv = 1; Intrv <= nbIntv; Intrv++){
-      if(TI(Intrv) <= T1 && TI(Intrv + 1) <= T1)
-        continue;
-      if(TI(Intrv) >= T2 && TI(Intrv + 1) >= T2)
-              continue;
-      if(theIsoType == GeomAbs_IsoU){
-              V1 = Max(T1, TI(Intrv));
-              V2 = Min(T2, TI(Intrv + 1));
-              stepV = (V2 - V1) / theDiscret;
-      }else{
-              U1 = Max(T1, TI(Intrv));
-              U2 = Min(T2, TI(Intrv + 1));
-              stepU = (U2 - U1) / theDiscret;
-      }
-
-      switch (SurfType) {
-      case GeomAbs_Plane :
-              break;
-      case GeomAbs_Cylinder :
-      case GeomAbs_Cone :
-        if(theIsoType == GeomAbs_IsoV){
-                for(j = 1; j < theDiscret; j++){
-                  U1 += stepU;
-                  V1 += stepV;
-                  S.D0(U1,V1,P);
-                  DrawTo(P,thePolyData,thePts);
-                }
-              }
-              break;
-      case GeomAbs_Sphere :
-      case GeomAbs_Torus :
-      case GeomAbs_OffsetSurface :
-      case GeomAbs_OtherSurface :
-        for(j = 1; j < theDiscret; j++){
-                U1 += stepU;
-                V1 += stepV;
-                S.D0(U1,V1,P);
-                DrawTo(P,thePolyData,thePts);
-              }
-              break;
-      case GeomAbs_BezierSurface :
-      case GeomAbs_BSplineSurface :
-        for(j = 1; j <= theDiscret/2; j++){
-          Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
-                CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
-                U1 += stepU*2.;
-                V1 += stepV*2.;
-              }
-              break;
-      case GeomAbs_SurfaceOfExtrusion :
-      case GeomAbs_SurfaceOfRevolution :
-        if((theIsoType == GeomAbs_IsoV && SurfType == GeomAbs_SurfaceOfRevolution) ||
-                 (theIsoType == GeomAbs_IsoU && SurfType == GeomAbs_SurfaceOfExtrusion)) 
-        {
-                if(SurfType == GeomAbs_SurfaceOfExtrusion) 
-            break;
-                for(j = 1; j < theDiscret; j++){
-                  U1 += stepU;
-                  V1 += stepV;
-                  S.D0(U1,V1,P);
-                  DrawTo(P,thePolyData,thePts);
-                }
-              }else{
-                CurvType = (S.BasisCurve())->GetType();
-                switch(CurvType){
-                case GeomAbs_Line :
-                  break;
-                case GeomAbs_Circle :
-                case GeomAbs_Ellipse :
-                  for (j = 1; j < theDiscret; j++) {
-                    U1 += stepU;
-                    V1 += stepV;
-                    S.D0(U1,V1,P);
-                    DrawTo(P,thePolyData,thePts);
-                  }
-                  break;
-                case GeomAbs_Parabola :
-                case GeomAbs_Hyperbola :
-                case GeomAbs_BezierCurve :
-                case GeomAbs_BSplineCurve :
-                case GeomAbs_OtherCurve :
-                  for(j = 1; j <= theDiscret/2; j++){
-              Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
-                  CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
-                    U1 += stepU*2.;
-                    V1 += stepV*2.;
-                  }
-                  break;
-                }
-              }
-      }
-    }
-    S.D0(U2,V2,P);
-    DrawTo(P,thePolyData,thePts);
-  }  
-}
-void 
-GEOM_WireframeFace:: 
-CreateIso__(const BRepAdaptor_Surface& theSurface, 
-            GeomAbs_IsoType theIsoType,
-                                    Standard_Real& theU, 
-                                    Standard_Real& theV, 
-                                    Standard_Real theStep, 
-            vtkPolyData* thePolyData,
-            vtkPoints* thePts)
-{
-  gp_Pnt Pl, Pr, Pm;
-  if (theIsoType == GeomAbs_IsoU) {
-    theSurface.D0(theU, theV, Pl);
-    theSurface.D0(theU, theV + theStep/2., Pm);
-    theSurface.D0(theU, theV + theStep, Pr);
-  } else {
-    theSurface.D0(theU, theV, Pl);
-    theSurface.D0(theU + theStep/2., theV, Pm);
-    theSurface.D0(theU + theStep, theV, Pr);
-  }
-
-  static Standard_Real ISO_RATIO = 1.001;
-  if (Pm.Distance(Pl) + Pm.Distance(Pr) <= ISO_RATIO*Pl.Distance(Pr)) {
-    DrawTo(Pr,thePolyData,thePts);
-  } else {
-    if (theIsoType == GeomAbs_IsoU) {
-      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
-      Standard_Real aLocalV = theV + theStep/2 ;
-      CreateIso__(theSurface, theIsoType, theU, aLocalV , theStep/2, thePolyData, thePts);
-    } else {
-      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
-      Standard_Real aLocalU = theU + theStep/2 ;
-      CreateIso__(theSurface, theIsoType, aLocalU , theV, theStep/2, thePolyData, thePts);
-    }
-  }
-}
diff --git a/src/OBJECT/GEOM_WireframeFace.h b/src/OBJECT/GEOM_WireframeFace.h
deleted file mode 100755 (executable)
index d34bf96..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-//  Copyright (C) 2007-2010  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
-//  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
-//
-
-#ifndef GEOM_WIREFRAME_FACE_H 
-#define GEOM_WIREFRAME_FACE_H 
-#include "GEOM_FaceSource.h" 
-
-#include <GeomAbs_IsoType.hxx>
-#include <BRepAdaptor_Surface.hxx>
-#include <vtkPolyDataSource.h> 
-class VTK_EXPORT GEOM_WireframeFace: public GEOM_FaceSource 
-{ 
-public: 
-  vtkTypeMacro(GEOM_WireframeFace,GEOM_FaceSource); 
-  static GEOM_WireframeFace* New(); 
-  /*  vtkSetMacro(NbIso,int); 
-      vtkGetMacro(NbIso,int);*/
-  vtkSetMacro(Discret,int); 
-  vtkGetMacro(Discret,int); 
-  static  
-  void OCC2VTK(const TopoDS_Face& theFace,  
-               vtkPolyData* thePolyData, 
-               vtkPoints* thePts, 
-               const int theNbIso[2], 
-               const int theDiscret = 15);
-
-  //! IsoLines management
-  // theNb[0] - number of U lines
-  // theNb[1] - number of V lines
-  virtual void SetNbIso(const int theNb[2]);
-  virtual void GetNbIso(int &theNbU,int &theNbV);
-
-protected: 
-  int NbIso[2], Discret; 
-  static  
-  void 
-  CreateIso(const TopoDS_Face& theFace,
-            const int theNbIso[2], 
-            const int theDiscret, 
-            vtkPolyData* thePolyData,
-            vtkPoints* thePts);
-  static  
-  void 
-  CreateIso_(const TopoDS_Face& theFace,
-             GeomAbs_IsoType theIsoType, 
-             Standard_Real Par, 
-             Standard_Real T1,
-             Standard_Real T2,
-             const int theDiscret, 
-             vtkPolyData* thePolyData,
-             vtkPoints* thePts);
-  static  
-  void 
-  CreateIso__(const BRepAdaptor_Surface& theSurface, 
-              GeomAbs_IsoType theIsoType,
-                                    Standard_Real& theU, 
-                                    Standard_Real& theV, 
-                                      Standard_Real theStep, 
-              vtkPolyData* thePolyData,
-              vtkPoints* thePts);
-
-  void Execute(); 
-  GEOM_WireframeFace(); 
-  ~GEOM_WireframeFace(); 
-private: 
-  // Not implememnted 
-  GEOM_WireframeFace(const GEOM_WireframeFace&); 
-  void operator=(const GEOM_WireframeFace&); 
-}; 
-#endif //GEOM_WFACEACTOR_H 
index 52fbad34bdd85fc4294f58de8fd1ad41cff9d3fc..454f6c0f8202038ab26611abf886287ec24d4da3 100644 (file)
@@ -43,12 +43,7 @@ salomeinclude_HEADERS =                              \
        GEOM_OBJECT_defs.hxx                    \
        GEOM_OCCReader.h                        \
        GEOM_SmartPtr.h                         \
-       GEOM_DeviceActor.h                      \
-       GEOM_EdgeSource.h                       \
-       GEOM_FaceSource.h                       \
-       GEOM_ShadingFace.h                      \
-       GEOM_VertexSource.h                     \
-       GEOM_WireframeFace.h
+       GEOM_DeviceActor.h
 
 # Libraries targets
 lib_LTLIBRARIES = libGEOMObject.la
@@ -62,12 +57,7 @@ dist_libGEOMObject_la_SOURCES =              \
        GEOM_AISTrihedron.cxx           \
        GEOM_VTKTrihedron.cxx           \
        GEOM_AISVector.cxx              \
-       GEOM_DeviceActor.cxx            \
-       GEOM_EdgeSource.cxx             \
-       GEOM_FaceSource.cxx             \
-       GEOM_ShadingFace.cxx            \
-       GEOM_VertexSource.cxx           \
-       GEOM_WireframeFace.cxx
+       GEOM_DeviceActor.cxx
 
 
 libGEOMObject_la_CPPFLAGS =    \
@@ -78,9 +68,11 @@ libGEOMObject_la_CPPFLAGS =  \
        $(CAS_CPPFLAGS)         \
        $(VTK_INCLUDES)         \
        $(KERNEL_CXXFLAGS)      \
-       $(GUI_CXXFLAGS) 
-       
+       $(GUI_CXXFLAGS)         \
+       -I$(srcdir)/../OCC2VTK
+
 libGEOMObject_la_LDFLAGS  =                    \
+       ../OCC2VTK/libOCC2VTK.la                \
        $(QT_MT_LIBS) \
        $(CAS_KERNEL) -lTKBRep -lTKG2d -lTKG3d -lTKV3d -lTKMesh -lTKGeomBase -lTKGeomAlgo -lTKTopAlgo -lTKService \
        $(VTK_LIBS) \
diff --git a/src/OCC2VTK/GEOM_EdgeSource.cxx b/src/OCC2VTK/GEOM_EdgeSource.cxx
new file mode 100755 (executable)
index 0000000..e44cc81
--- /dev/null
@@ -0,0 +1,272 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "GEOM_EdgeSource.h" 
+#include <vtkObjectFactory.h> 
+
+#include <vtkPoints.h> 
+#include <vtkCellArray.h> 
+
+#include <BRep_Tool.hxx>
+#include <Poly_Polygon3D.hxx>
+#include <Poly_Triangulation.hxx>
+#include <TColStd_Array1OfInteger.hxx>
+#include <Poly_PolygonOnTriangulation.hxx>
+#include <GeomAdaptor_Curve.hxx>
+#include <GCPnts_AbscissaPoint.hxx>
+#include <vtkStripper.h>  
+#include <vtkPolyData.h>  
+
+vtkStandardNewMacro(GEOM_EdgeSource);
+GEOM_EdgeSource::GEOM_EdgeSource() :
+  myIsVector(false)
+{ 
+} 
+GEOM_EdgeSource::~GEOM_EdgeSource() 
+{ 
+} 
+
+void GEOM_EdgeSource::AddEdge (const TopoDS_Edge& theEdge,
+                               bool theIsVector)
+{
+  myEdgeSet.Add(theEdge);
+  myIsVector = theIsVector;
+}
+
+void
+GEOM_EdgeSource:: 
+Execute()
+{
+  vtkPolyData* aPolyData = GetOutput();
+  aPolyData->Allocate();
+  vtkPoints* aPts = vtkPoints::New();
+  aPolyData->SetPoints(aPts);
+  aPts->Delete();
+
+  TEdgeSet::Iterator anIter (myEdgeSet);
+  for (; anIter.More(); anIter.Next()) {
+    const TopoDS_Edge& anEdge = anIter.Value();
+    OCC2VTK(anEdge,aPolyData,aPts,myIsVector);
+  }
+}
+
+void GEOM_EdgeSource::OCC2VTK (const TopoDS_Edge& theEdge,  
+                               vtkPolyData* thePolyData, 
+                               vtkPoints* thePts,
+                               bool theIsVector) 
+{
+  Handle(Poly_PolygonOnTriangulation) aEdgePoly;
+  Standard_Integer i = 1;
+  Handle(Poly_Triangulation) T;
+  TopLoc_Location aEdgeLoc;
+  BRep_Tool::PolygonOnTriangulation(theEdge, aEdgePoly, T, aEdgeLoc, i);
+
+  Handle(Poly_Polygon3D) P;
+  if(aEdgePoly.IsNull())
+    P = BRep_Tool::Polygon3D(theEdge, aEdgeLoc);
+
+  if(P.IsNull() && aEdgePoly.IsNull())
+    return;
+  
+  // Location edges
+  //---------------
+  gp_Trsf edgeTransf;
+  Standard_Boolean isidtrsf = true;
+  if(!aEdgeLoc.IsIdentity())  {
+    isidtrsf = false;
+    edgeTransf = aEdgeLoc.Transformation();
+  }
+
+  gp_Pnt aP1, aP2;
+
+  if (aEdgePoly.IsNull()) {
+    Standard_Integer aNbNodes = P->NbNodes();
+    const TColgp_Array1OfPnt& aNodesP = P->Nodes();
+
+    aP1 = aNodesP(1);
+    aP2 = aNodesP(aNbNodes);
+
+    for (int j = 1; j < aNbNodes; j++) {
+      gp_Pnt pt1 = aNodesP(j);
+      gp_Pnt pt2 = aNodesP(j+1);
+
+      if (!isidtrsf) {
+        // apply edge transformation
+        pt1.Transform(edgeTransf);
+        pt2.Transform(edgeTransf);
+      }
+
+      float aCoord1[3] = {pt1.X(), pt1.Y(), pt1.Z()};
+      vtkIdType anIds[2];
+      anIds[0] = thePts->InsertNextPoint(aCoord1);
+
+      float aCoord2[3] = {pt2.X(), pt2.Y(), pt2.Z()};
+      anIds[1] = thePts->InsertNextPoint(aCoord2);
+
+      thePolyData->InsertNextCell(VTK_LINE,2,anIds);
+    }
+  } else {
+    Standard_Integer aNbNodes = aEdgePoly->NbNodes();
+    const TColStd_Array1OfInteger& aNodeIds = aEdgePoly->Nodes();
+    const TColgp_Array1OfPnt& anId2Pnts = T->Nodes();
+
+    aP1 = anId2Pnts(aNodeIds(1));
+    aP2 = anId2Pnts(aNodeIds(aNbNodes));
+
+    for(int j = 1; j < aNbNodes; j++) {
+      Standard_Integer id1 = aNodeIds(j);
+      Standard_Integer id2 = aNodeIds(j+1);
+      
+      gp_Pnt pt1 = anId2Pnts(id1);
+      gp_Pnt pt2 = anId2Pnts(id2);
+          
+      if(!isidtrsf) {
+        // apply edge transformation
+        pt1.Transform(edgeTransf);
+        pt2.Transform(edgeTransf);
+      }
+      
+      float aCoord1[3] = {pt1.X(), pt1.Y(), pt1.Z()};
+      vtkIdType anIds[2];
+      anIds[0] = thePts->InsertNextPoint(aCoord1);
+
+      float aCoord2[3] = {pt2.X(), pt2.Y(), pt2.Z()};
+      anIds[1] = thePts->InsertNextPoint(aCoord2);
+
+      thePolyData->InsertNextCell(VTK_LINE,2,anIds);
+    }
+  }
+
+  
+  // vector representation has an arrow on its end
+  if (theIsVector)
+  {
+    if (!isidtrsf) {
+      // apply edge transformation
+      aP1.Transform(edgeTransf);
+      aP2.Transform(edgeTransf);
+    }
+
+    // draw an arrow
+
+    double fp,lp;
+    gp_Vec aDirVec;
+    Handle(Geom_Curve) C = BRep_Tool::Curve(theEdge,fp,lp);
+    if ( theEdge.Orientation() == TopAbs_FORWARD ) {
+      C->D1(lp, aP2, aDirVec);
+    } else {
+      C->D1(fp, aP1, aDirVec);
+      aP2 = aP1;
+    }
+
+    GeomAdaptor_Curve aAdC;
+    aAdC.Load(C, fp, lp);
+    Standard_Real aDist = GCPnts_AbscissaPoint::Length(aAdC, fp, lp); 
+    if (aDist < gp::Resolution()) return;
+
+    gp_Dir aDirection;
+
+    if ( theEdge.Orientation() == TopAbs_FORWARD )
+      aDirection = aDirVec;
+    else
+      aDirection = -aDirVec;
+
+    Standard_Real anAngle = PI/180.*5.;
+    Standard_Real aLength = aDist/10.;
+
+    Standard_Real dx,dy,dz;
+    aDirection.Coord(dx,dy,dz);
+
+    // Arrow Point
+    Standard_Real xo,yo,zo;
+    aP2.Coord(xo,yo,zo);
+
+    // Center of circle that arrow based
+    gp_XYZ aPc = aP2.XYZ() - aDirection.XYZ() * aLength;
+
+    // Construction of the base vectors for the arrow circle
+    gp_Dir aDirN;
+    if      (Abs(dx) <= Abs(dy) && Abs(dx) <= Abs(dz)) aDirN = gp::DX();
+    else if (Abs(dy) <= Abs(dz) && Abs(dy) <= Abs(dx)) aDirN = gp::DY();
+    else aDirN = gp::DZ();
+
+    gp_Dir aDirI = aDirection ^ aDirN;
+    gp_Dir aDirJ = aDirection ^ aDirI;
+
+    // Add points and segments, composing the arrow
+    Standard_Real cosinus, sinus, Tg = tan(anAngle);
+
+    float coord[3] = {xo, yo, zo};
+
+    vtkIdType ptLoc = thePts->InsertNextPoint(coord);
+    vtkIdType ptFirst = 0;
+    vtkIdType ptPrev = 0;
+    vtkIdType ptCur = 0;
+
+    vtkIdType pts[2];
+
+    int NbPoints = 15;
+    for (int i = 1; i <= NbPoints; i++, ptPrev = ptCur)
+    {
+      cosinus = cos(2. * PI / NbPoints * (i-1));   
+      sinus   = sin(2. * PI / NbPoints * (i-1));
+
+      gp_XYZ aP = aPc + (aDirI.XYZ() * cosinus + aDirJ.XYZ() * sinus) * aLength * Tg;
+      coord[0] = aP.X();
+      coord[1] = aP.Y();
+      coord[2] = aP.Z();
+
+      // insert pts
+      ptCur = thePts->InsertNextPoint(coord);
+      pts[0] = ptCur;
+
+      if (i == 1) {
+        ptFirst = ptCur;
+      }
+      else {
+        // insert line (ptCur,ptPrev)
+        pts[1] = ptPrev;
+        thePolyData->InsertNextCell(VTK_LINE,2,pts);
+      }
+
+      // insert line (ptCur,ptLoc)
+      pts[1] = ptLoc;
+      thePolyData->InsertNextCell(VTK_LINE,2,pts);
+    }
+
+    // insert line (ptCur,ptFirst)
+    pts[0] = ptCur;
+    pts[1] = ptFirst;
+    thePolyData->InsertNextCell(VTK_LINE,2,pts);
+  }
+}
+
+void GEOM_EdgeSource::SetVectorMode (bool theMode)
+{
+  myIsVector = theMode;
+}
+
+bool GEOM_EdgeSource::GetVectorMode ()
+{
+  return myIsVector;
+}
diff --git a/src/OCC2VTK/GEOM_EdgeSource.h b/src/OCC2VTK/GEOM_EdgeSource.h
new file mode 100755 (executable)
index 0000000..9ef0868
--- /dev/null
@@ -0,0 +1,74 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef GEOM_EDGESOURCE_H 
+#define GEOM_EDGESOURCE_H 
+#include "OCC2VTK.h" 
+#include <TopoDS_Edge.hxx> 
+#include <NCollection_Set.hxx> 
+typedef NCollection_Set<TopoDS_Edge> TEdgeSet; 
+#include <vtkPoints.h> 
+#include <vtkPolyDataSource.h> 
+
+class OCC2VTK_EXPORT GEOM_EdgeSource: public vtkPolyDataSource 
+{ 
+public: 
+  vtkTypeMacro(GEOM_EdgeSource,vtkPolyDataSource); 
+  static GEOM_EdgeSource* New(); 
+  void AddEdge (const TopoDS_Edge& theEdge,
+                bool theIsVector = false);
+  void Clear(){ myEdgeSet.Clear();}
+  
+  void SetVectorMode(bool);
+
+  bool GetVectorMode();
+  static  
+  void OCC2VTK(const TopoDS_Edge& theEdge,  
+               vtkPolyData* thePolyData, 
+               vtkPoints* thePts,
+               bool theIsVector = false); 
+
+  bool IsEmpty(){return myEdgeSet.IsEmpty();}
+
+protected: 
+  TEdgeSet myEdgeSet;
+  // The <myIsVector> flag is common for all edges, because the shape,
+  // representing a vector, can have only one edge.
+  bool myIsVector;
+  void Execute(); 
+  GEOM_EdgeSource(); 
+  ~GEOM_EdgeSource(); 
+private: 
+  // Not implememnted 
+  GEOM_EdgeSource(const GEOM_EdgeSource&); 
+  void operator=(const GEOM_EdgeSource&); 
+}; 
+#endif //GEOM_EDGESOURCE_H 
diff --git a/src/OCC2VTK/GEOM_FaceSource.cxx b/src/OCC2VTK/GEOM_FaceSource.cxx
new file mode 100755 (executable)
index 0000000..7035ef8
--- /dev/null
@@ -0,0 +1,63 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "GEOM_FaceSource.h" 
+#include <vtkObjectFactory.h> 
+
+#include <vtkPoints.h>
+#include <vtkCellArray.h>
+#include <vtkPolyDataMapper.h>  
+#include <vtkPolyData.h>  
+GEOM_FaceSource::GEOM_FaceSource() 
+{ 
+} 
+GEOM_FaceSource::~GEOM_FaceSource() 
+{ 
+} 
+void  
+GEOM_FaceSource:: 
+AddFace(const TopoDS_Face& theFace) 
+{ 
+  myFaceSet.Add(theFace); 
+} 
+void 
+GEOM_FaceSource::
+MoveTo(gp_Pnt thePnt, 
+       vtkPoints* thePts)
+{    
+  thePts->InsertNextPoint(thePnt.X(), thePnt.Y(), thePnt.Z());
+} 
+
+void 
+GEOM_FaceSource::
+DrawTo(gp_Pnt thePnt,
+       vtkPolyData* thePolyData,
+       vtkPoints* thePts)
+{
+  vtkIdType anId = 
+    thePts->InsertNextPoint(thePnt.X(), thePnt.Y(), thePnt.Z());
+  vtkIdType anIds[2] = {anId-1, anId};
+  thePolyData->InsertNextCell(VTK_LINE,2,anIds);
+}
diff --git a/src/OCC2VTK/GEOM_FaceSource.h b/src/OCC2VTK/GEOM_FaceSource.h
new file mode 100755 (executable)
index 0000000..555dcde
--- /dev/null
@@ -0,0 +1,64 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef GEOM_FACESOURCE_H 
+#define GEOM_FACESOURCE_H 
+#include "OCC2VTK.h" 
+
+#include <gp_Pnt.hxx>
+#include <TopoDS_Face.hxx> 
+#include <NCollection_Set.hxx> 
+typedef NCollection_Set<TopoDS_Face> TFaceSet; 
+#include <vtkPoints.h> 
+#include <vtkPolyDataSource.h> 
+
+class OCC2VTK_EXPORT GEOM_FaceSource: public vtkPolyDataSource 
+{ 
+public: 
+  vtkTypeMacro(GEOM_FaceSource,vtkPolyDataSource); 
+  void AddFace(const TopoDS_Face& theFace); 
+  void Clear(){ myFaceSet.Clear();} 
+  bool IsEmpty(){return myFaceSet.IsEmpty();}
+protected: 
+  TFaceSet myFaceSet; 
+  static 
+  void MoveTo(gp_Pnt thePnt, 
+              vtkPoints* thePts);
+  static 
+  void DrawTo(gp_Pnt thePnt,
+              vtkPolyData* thePolyData,
+              vtkPoints* thePts); 
+  GEOM_FaceSource(); 
+  ~GEOM_FaceSource(); 
+private: 
+  // Not implememnted 
+  GEOM_FaceSource(const GEOM_FaceSource&); 
+  void operator=(const GEOM_FaceSource&); 
+}; 
+#endif //GEOM_FACESOURCE_H 
diff --git a/src/OCC2VTK/GEOM_ShadingFace.cxx b/src/OCC2VTK/GEOM_ShadingFace.cxx
new file mode 100755 (executable)
index 0000000..704db5b
--- /dev/null
@@ -0,0 +1,103 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "GEOM_ShadingFace.h" 
+#include <vtkObjectFactory.h> 
+#include <vtkPoints.h> 
+#include <vtkCellArray.h> 
+
+#include <vtkPolyDataMapper.h>  
+#include <vtkPolyData.h>  
+
+#include <BRep_Tool.hxx>
+#include <Poly_Triangulation.hxx>
+
+vtkStandardNewMacro(GEOM_ShadingFace);
+GEOM_ShadingFace::GEOM_ShadingFace() 
+{ 
+} 
+GEOM_ShadingFace::~GEOM_ShadingFace() 
+{ 
+} 
+void
+GEOM_ShadingFace:: 
+Execute()
+{
+  vtkPolyData* aPolyData = GetOutput();
+  aPolyData->Allocate();
+  vtkPoints* aPts = vtkPoints::New();
+  aPolyData->SetPoints(aPts);
+  aPts->Delete();
+
+  TFaceSet::Iterator anIter(myFaceSet);
+  for(; anIter.More(); anIter.Next()){
+    const TopoDS_Face& aFace = anIter.Value();
+    OCC2VTK(aFace,aPolyData,aPts);
+  }
+}
+
+void  
+GEOM_ShadingFace:: 
+OCC2VTK(const TopoDS_Face& theFace,  
+        vtkPolyData* thePolyData, 
+        vtkPoints* thePts) 
+{
+  TopLoc_Location aLoc;
+  Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(theFace,aLoc);
+  if(aPoly.IsNull()) 
+    return;
+  else{
+    gp_Trsf myTransf;
+    Standard_Boolean identity = true;
+    if(!aLoc.IsIdentity()){
+      identity = false;
+      myTransf = aLoc.Transformation();
+    }           
+      
+    Standard_Integer i; 
+    int aNbOfNodes = thePts->GetNumberOfPoints();
+    const TColgp_Array1OfPnt& Nodes = aPoly->Nodes();
+    Standard_Integer nbNodesInFace = aPoly->NbNodes(); 
+    for(i = 1; i <= nbNodesInFace; i++) {
+      gp_Pnt P = Nodes(i);
+      if(!identity) 
+        P.Transform(myTransf);
+      thePts->InsertNextPoint(P.X(),P.Y(),P.Z());
+    }
+
+    const Poly_Array1OfTriangle& Triangles = aPoly->Triangles();
+    Standard_Integer nbTriInFace = aPoly->NbTriangles();
+    for(i = 1; i <= nbTriInFace; i++){
+      // Get the triangle
+      Standard_Integer N1,N2,N3;
+      Triangles(i).Get(N1,N2,N3);
+      N1 += aNbOfNodes - 1;
+      N2 += aNbOfNodes - 1;
+      N3 += aNbOfNodes - 1;
+      vtkIdType anIds[3] = {N1, N2, N3};
+      thePolyData->InsertNextCell(VTK_TRIANGLE,3,anIds);
+    }
+  } 
+}
diff --git a/src/OCC2VTK/GEOM_ShadingFace.h b/src/OCC2VTK/GEOM_ShadingFace.h
new file mode 100755 (executable)
index 0000000..2af0254
--- /dev/null
@@ -0,0 +1,50 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef GEOM_SHADINGFACE_H 
+#define GEOM_SHADINGFACE_H 
+#include "OCC2VTK.h" 
+#include "GEOM_FaceSource.h" 
+
+class OCC2VTK_EXPORT GEOM_ShadingFace: public GEOM_FaceSource 
+{ 
+public: 
+  vtkTypeMacro(GEOM_ShadingFace,GEOM_FaceSource); 
+  static GEOM_ShadingFace* New(); 
+  static  
+  void OCC2VTK(const TopoDS_Face& theFace,  
+               vtkPolyData* theCells, 
+               vtkPoints* thePts); 
+protected: 
+  void Execute(); 
+  GEOM_ShadingFace(); 
+  ~GEOM_ShadingFace(); 
+private: 
+  // Not implememnted 
+  GEOM_ShadingFace(const GEOM_ShadingFace&); 
+  void operator=(const GEOM_ShadingFace&); 
+}; 
+#endif //GEOM_SHADINGFACE_H 
diff --git a/src/OCC2VTK/GEOM_VertexSource.cxx b/src/OCC2VTK/GEOM_VertexSource.cxx
new file mode 100755 (executable)
index 0000000..c565896
--- /dev/null
@@ -0,0 +1,75 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "GEOM_VertexSource.h" 
+#include <vtkObjectFactory.h> 
+
+#include <vtkPoints.h> 
+#include <vtkCellArray.h> 
+#include <vtkPolyData.h> 
+#include <vtkPolyDataMapper.h> 
+#include <gp_Pnt.hxx>
+#include <BRep_Tool.hxx>
+vtkStandardNewMacro(GEOM_VertexSource);
+GEOM_VertexSource::GEOM_VertexSource() 
+{ 
+} 
+GEOM_VertexSource::~GEOM_VertexSource() 
+{ 
+} 
+void  
+GEOM_VertexSource:: 
+AddVertex(const TopoDS_Vertex& theVertex) 
+{ 
+  myVertexSet.Add(theVertex); 
+} 
+void
+GEOM_VertexSource:: 
+Execute()
+{
+  vtkPolyData* aPolyData = GetOutput();
+  aPolyData->Allocate();
+  vtkPoints* aPts = vtkPoints::New();
+  aPolyData->SetPoints(aPts);
+  aPts->Delete();
+
+  TVertexSet::Iterator anIter(myVertexSet);
+  for(; anIter.More(); anIter.Next()){
+    const TopoDS_Vertex& aVertex = anIter.Value();
+    OCC2VTK(aVertex,aPolyData,aPts);
+  }
+}
+
+void  
+GEOM_VertexSource:: 
+OCC2VTK(const TopoDS_Vertex& theVertex,  
+        vtkPolyData* thePolyData, 
+        vtkPoints* thePts) 
+{ 
+  gp_Pnt aPnt = BRep_Tool::Pnt(theVertex);
+  vtkIdType anId = thePts->InsertNextPoint(aPnt.X(),aPnt.Y(),aPnt.Z());
+  thePolyData->InsertNextCell(VTK_VERTEX,1,&anId);
+}
diff --git a/src/OCC2VTK/GEOM_VertexSource.h b/src/OCC2VTK/GEOM_VertexSource.h
new file mode 100755 (executable)
index 0000000..612e112
--- /dev/null
@@ -0,0 +1,62 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef GEOM_VERTEXSOURCE_H 
+#define GEOM_VERTEXSOURCE_H 
+#include "OCC2VTK.h" 
+#include <TopoDS_Vertex.hxx> 
+#include <NCollection_Set.hxx> 
+typedef NCollection_Set<TopoDS_Vertex> TVertexSet; 
+#include <vtkPoints.h> 
+#include <vtkPolyDataSource.h> 
+
+class OCC2VTK_EXPORT GEOM_VertexSource: public vtkPolyDataSource 
+{ 
+public: 
+  vtkTypeMacro(GEOM_VertexSource,vtkPolyDataSource); 
+  static GEOM_VertexSource* New(); 
+  void AddVertex(const TopoDS_Vertex& theVertex); 
+  void Clear(){ myVertexSet.Clear();} 
+  static  
+  void OCC2VTK(const TopoDS_Vertex& theVertex,  
+               vtkPolyData* thePolyData, 
+               vtkPoints* thePts); 
+protected: 
+  TVertexSet myVertexSet; 
+  void Execute(); 
+  GEOM_VertexSource(); 
+  ~GEOM_VertexSource(); 
+private: 
+  // Not implememnted 
+  GEOM_VertexSource(const GEOM_VertexSource&); 
+  void operator=(const GEOM_VertexSource&); 
+}; 
+#endif //GEOM_VERTEXSOURCE_H 
diff --git a/src/OCC2VTK/GEOM_WireframeFace.cxx b/src/OCC2VTK/GEOM_WireframeFace.cxx
new file mode 100755 (executable)
index 0000000..c3d3b4b
--- /dev/null
@@ -0,0 +1,509 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "GEOM_WireframeFace.h" 
+#include <vtkObjectFactory.h> 
+#include <vtkPoints.h> 
+#include <vtkCellArray.h> 
+
+#include <vtkPolyDataMapper.h>  
+#include <vtkPolyData.h>  
+#include <Precision.hxx>
+#include <BRepTools.hxx>
+#include <TopExp_Explorer.hxx>
+#include <Geom2dHatch_Hatcher.hxx>
+#include <Geom2dHatch_Intersector.hxx>
+#include <TColStd_Array1OfReal.hxx>
+#include <TColStd_Array1OfInteger.hxx>
+#include <TopoDS.hxx> 
+#include <TopoDS_Edge.hxx> 
+#include <BRep_Tool.hxx>
+#include <Geom2d_TrimmedCurve.hxx>
+#include <Geom2d_Line.hxx>
+#include <gp_Dir2d.hxx>
+#include <gp_Pnt2d.hxx>
+#include <Geom2dHatch_Hatcher.hxx>
+#include <HatchGen_Domain.hxx>
+
+#include <Adaptor3d_HCurve.hxx>
+
+vtkStandardNewMacro(GEOM_WireframeFace);
+GEOM_WireframeFace::GEOM_WireframeFace(): 
+  Discret(15)
+{ 
+  NbIso[0] = 1;
+  NbIso[1] = 1;
+} 
+GEOM_WireframeFace::~GEOM_WireframeFace() 
+{ 
+} 
+void
+GEOM_WireframeFace:: 
+Execute()
+{
+  vtkPolyData* aPolyData = GetOutput();
+  aPolyData->Allocate();
+  vtkPoints* aPts = vtkPoints::New();
+  aPolyData->SetPoints(aPts);
+  aPts->Delete();
+
+  TFaceSet::Iterator anIter(myFaceSet);
+  for(; anIter.More(); anIter.Next()){
+    const TopoDS_Face& aFace = anIter.Value();
+    OCC2VTK(aFace,aPolyData,aPts,NbIso,Discret);
+  }
+}
+
+void GEOM_WireframeFace::SetNbIso(const int theNb[2])
+{
+  if ( theNb[0] == NbIso[0] && theNb[1] == NbIso[1])
+    return;
+
+  NbIso[0] = theNb[0];
+  NbIso[1] = theNb[1];
+
+  Modified();
+}
+
+void GEOM_WireframeFace::GetNbIso(int &theNbU,int &theNbV)
+{
+  theNbU = NbIso[0];
+  theNbV = NbIso[1];
+}
+
+void  
+GEOM_WireframeFace:: 
+OCC2VTK(const TopoDS_Face& theFace,
+        vtkPolyData* thePolyData,
+                    vtkPoints* thePts,  
+        const int theNbIso[2], 
+        const int theDiscret) 
+{ 
+  TopoDS_Face aFace = theFace; 
+  aFace.Orientation(TopAbs_FORWARD);
+  CreateIso(aFace,theNbIso,theDiscret,thePolyData,thePts);
+}
+
+void 
+GEOM_WireframeFace:: 
+CreateIso(const TopoDS_Face& theFace,
+          const int theNbIso[2], 
+          const int theDiscret, 
+          vtkPolyData* thePolyData,
+          vtkPoints* thePts)
+{
+  // Constants for iso building
+  static Standard_Real INTERSECTOR_CONFUSION = 1.e-10 ; // -8 ;
+  static Standard_Real INTERSECTOR_TANGENCY  = 1.e-10 ; // -8 ;
+
+  static Standard_Real HATHCER_CONFUSION_2D = 1.e-8 ;
+  static Standard_Real HATHCER_CONFUSION_3D = 1.e-8 ;
+
+  Geom2dHatch_Hatcher 
+    aHatcher(Geom2dHatch_Intersector(INTERSECTOR_CONFUSION,
+                                     INTERSECTOR_TANGENCY),
+                         HATHCER_CONFUSION_2D,
+                         HATHCER_CONFUSION_3D,
+                                     Standard_True,
+                                     Standard_False);
+  
+  Standard_Real anUMin, anUMax, aVMin, aVMax;
+  TColStd_Array1OfReal anUPrm(1, theNbIso[0]), aVPrm(1, theNbIso[1]);
+  TColStd_Array1OfInteger anUInd(1, theNbIso[0]), aVInd(1, theNbIso[1]);
+
+  anUInd.Init(0);
+  aVInd.Init(0);
+
+  //-----------------------------------------------------------------------
+  // If the Min Max bounds are infinite, there are bounded to Infinite
+  // value.
+  //-----------------------------------------------------------------------
+  BRepTools::UVBounds(theFace, anUMin, anUMax, aVMin, aVMax) ;
+  Standard_Boolean InfiniteUMin = Precision::IsNegativeInfinite (anUMin) ;
+  Standard_Boolean InfiniteUMax = Precision::IsPositiveInfinite (anUMax) ;
+  Standard_Boolean InfiniteVMin = Precision::IsNegativeInfinite (aVMin) ;
+  Standard_Boolean InfiniteVMax = Precision::IsPositiveInfinite (aVMax) ;
+
+  static float VTKINFINITE = 1.0E38;
+  if(InfiniteUMin && InfiniteUMax){
+    anUMin = - VTKINFINITE ;
+    anUMax =   VTKINFINITE ;
+  }else if(InfiniteUMin){
+    anUMin = anUMax - VTKINFINITE ;
+  }else if(InfiniteUMax){
+    anUMax = anUMin + VTKINFINITE ;
+  }
+
+  if(InfiniteVMin && InfiniteVMax){
+    aVMin = - VTKINFINITE ;
+    aVMax =   VTKINFINITE ;
+  }else if(InfiniteVMin){
+    aVMin = aVMax - VTKINFINITE ;
+  }else if(InfiniteVMax){
+    aVMax = aVMin + VTKINFINITE ;
+  }
+
+  //-----------------------------------------------------------------------
+  // Retreiving the edges and loading them into the hatcher.
+  //-----------------------------------------------------------------------
+  TopExp_Explorer ExpEdges(theFace, TopAbs_EDGE);
+  for(; ExpEdges.More(); ExpEdges.Next()){
+    const TopoDS_Edge& anEdge = TopoDS::Edge(ExpEdges.Current());
+    Standard_Real U1, U2 ;
+    const Handle(Geom2d_Curve) PCurve = 
+      BRep_Tool::CurveOnSurface(anEdge, theFace, U1, U2) ;
+
+    if(PCurve.IsNull() || U1 == U2)
+      return;
+
+    //-- Test if a TrimmedCurve is necessary
+    if(Abs(PCurve->FirstParameter()-U1) <= Precision::PConfusion() &&
+             Abs(PCurve->LastParameter()-U2) <= Precision::PConfusion())
+    { 
+      aHatcher.AddElement(PCurve, anEdge.Orientation()) ;      
+    }else{ 
+      if(!PCurve->IsPeriodic()){
+              Handle(Geom2d_TrimmedCurve) TrimPCurve =
+          Handle(Geom2d_TrimmedCurve)::DownCast(PCurve);
+              if(!TrimPCurve.IsNull()){
+          Handle_Geom2d_Curve aBasisCurve = TrimPCurve->BasisCurve();
+                if(aBasisCurve->FirstParameter()-U1 > Precision::PConfusion() ||
+                   U2-aBasisCurve->LastParameter() > Precision::PConfusion()) 
+          {
+                  aHatcher.AddElement(PCurve, anEdge.Orientation()) ;      
+                  return;
+                }
+              }else{
+                if(PCurve->FirstParameter()-U1 > Precision::PConfusion()){
+                  U1=PCurve->FirstParameter();
+                }
+                if(U2-PCurve->LastParameter()  > Precision::PConfusion()){
+                  U2=PCurve->LastParameter();
+                }
+              }
+      }
+      Handle(Geom2d_TrimmedCurve) TrimPCurve = 
+        new Geom2d_TrimmedCurve(PCurve, U1, U2);
+      aHatcher.AddElement(TrimPCurve, anEdge.Orientation());
+    }
+  }
+
+
+  //-----------------------------------------------------------------------
+  // Loading and trimming the hatchings.
+  //-----------------------------------------------------------------------
+  Standard_Integer IIso;
+  Standard_Real DeltaU = Abs(anUMax - anUMin) ;
+  Standard_Real DeltaV = Abs(aVMax - aVMin) ;
+  Standard_Real confusion = Min(DeltaU, DeltaV) * HATHCER_CONFUSION_3D ;
+  aHatcher.Confusion3d (confusion) ;
+
+  if ( theNbIso[0] ) {
+    Standard_Real StepU = DeltaU / (Standard_Real)theNbIso[0];
+    if(StepU > confusion){
+      Standard_Real UPrm = anUMin + StepU / 2.;
+      gp_Dir2d Dir(0., 1.) ;
+      for(IIso = 1 ; IIso <= theNbIso[0] ; IIso++) {
+        anUPrm(IIso) = UPrm ;
+        gp_Pnt2d Ori (UPrm, 0.) ;
+        Geom2dAdaptor_Curve HCur (new Geom2d_Line (Ori, Dir)) ;
+        anUInd(IIso) = aHatcher.AddHatching (HCur) ;
+        UPrm += StepU ;
+      }
+    }
+  }
+
+  if ( theNbIso[1] ) {
+    Standard_Real StepV = DeltaV / (Standard_Real) theNbIso[1] ;
+    if(StepV > confusion){
+      Standard_Real VPrm = aVMin + StepV / 2.;
+      gp_Dir2d Dir(1., 0.);
+      for(IIso = 1 ; IIso <= theNbIso[1] ; IIso++){
+        aVPrm(IIso) = VPrm;
+        gp_Pnt2d Ori (0., VPrm);
+        Geom2dAdaptor_Curve HCur(new Geom2d_Line (Ori, Dir));
+        aVInd(IIso) = aHatcher.AddHatching (HCur) ;
+        VPrm += StepV ;
+      }
+    }
+  }
+
+  //-----------------------------------------------------------------------
+  // Computation.
+  //-----------------------------------------------------------------------
+  aHatcher.Trim() ;
+
+  Standard_Integer aNbDom = 0 ; // for debug purpose
+  Standard_Integer Index ;
+
+  for(IIso = 1 ; IIso <= theNbIso[0] ; IIso++){
+    Index = anUInd(IIso) ;
+    if(Index != 0){
+      if(aHatcher.TrimDone(Index) && !aHatcher.TrimFailed(Index)){
+              aHatcher.ComputeDomains(Index);
+              if(aHatcher.IsDone (Index)) 
+          aNbDom = aHatcher.NbDomains (Index);
+      }
+    }
+  }
+
+  for(IIso = 1 ; IIso <= theNbIso[1] ; IIso++){
+    Index = aVInd(IIso);
+    if(Index != 0){
+      if(aHatcher.TrimDone (Index) && !aHatcher.TrimFailed(Index)){
+              aHatcher.ComputeDomains (Index);
+              if(aHatcher.IsDone (Index)) 
+          aNbDom = aHatcher.NbDomains (Index);
+      }
+    }
+  }
+
+  //-----------------------------------------------------------------------
+  // Push iso lines in vtk kernel
+  //-----------------------------------------------------------------------
+  for(Standard_Integer UIso = anUPrm.Lower() ; UIso <= anUPrm.Upper(); UIso++){
+    Standard_Integer UInd = anUInd.Value(UIso);
+    if(UInd != 0){
+      Standard_Real UPrm = anUPrm.Value(UIso);
+      if(aHatcher.IsDone(UInd)){
+              Standard_Integer NbDom = aHatcher.NbDomains(UInd);
+              for(Standard_Integer IDom = 1 ; IDom <= NbDom ; IDom++){
+                const HatchGen_Domain& Dom = aHatcher.Domain(UInd, IDom) ;
+                Standard_Real V1 = Dom.HasFirstPoint()? Dom.FirstPoint().Parameter(): aVMin - VTKINFINITE;
+                Standard_Real V2 = Dom.HasSecondPoint()? Dom.SecondPoint().Parameter(): aVMax + VTKINFINITE;
+                CreateIso_(theFace, GeomAbs_IsoU, UPrm, V1, V2, theDiscret, thePolyData, thePts);
+        }
+            }
+    }
+  }
+
+  for(Standard_Integer VIso = aVPrm.Lower() ; VIso <= aVPrm.Upper(); VIso++){
+    Standard_Integer VInd = aVInd.Value(VIso);
+    if(VInd != 0){
+      Standard_Real VPrm = aVPrm.Value(VIso);
+      if(aHatcher.IsDone (VInd)){
+              Standard_Integer NbDom = aHatcher.NbDomains(VInd);
+              for (Standard_Integer IDom = 1 ; IDom <= NbDom ; IDom++){
+                const HatchGen_Domain& Dom = aHatcher.Domain(VInd, IDom);
+                Standard_Real U1 = Dom.HasFirstPoint()? Dom.FirstPoint().Parameter(): aVMin - VTKINFINITE;
+                Standard_Real U2 = Dom.HasSecondPoint()? Dom.SecondPoint().Parameter(): aVMax + VTKINFINITE;
+            CreateIso_(theFace, GeomAbs_IsoV, VPrm, U1, U2, theDiscret, thePolyData, thePts);
+              }
+      }
+    }
+  }
+}
+
+
+void 
+GEOM_WireframeFace:: 
+CreateIso_(const TopoDS_Face& theFace,
+           GeomAbs_IsoType theIsoType, 
+           Standard_Real Par, 
+           Standard_Real T1,
+           Standard_Real T2,
+           const int theDiscret, 
+           vtkPolyData* thePolyData,
+           vtkPoints* thePts)
+{
+  Standard_Real U1, U2, V1, V2, stepU=0., stepV=0.;
+  Standard_Integer j;
+  gp_Pnt P;
+
+  TopLoc_Location aLoc;
+  const Handle(Geom_Surface)& S = BRep_Tool::Surface(theFace,aLoc);
+
+  if(!S.IsNull()){
+    BRepAdaptor_Surface S(theFace,Standard_False);
+      
+    GeomAbs_SurfaceType SurfType = S.GetType();
+
+    GeomAbs_CurveType CurvType = GeomAbs_OtherCurve;
+
+    Standard_Integer Intrv, nbIntv;
+    Standard_Integer nbUIntv = S.NbUIntervals(GeomAbs_CN);
+    Standard_Integer nbVIntv = S.NbVIntervals(GeomAbs_CN);
+    TColStd_Array1OfReal TI(1,Max(nbUIntv, nbVIntv)+1);
+
+    if(theIsoType == GeomAbs_IsoU){
+      S.VIntervals(TI, GeomAbs_CN);
+      V1 = Max(T1, TI(1));
+      V2 = Min(T2, TI(2));
+      U1 = Par;
+      U2 = Par;
+      stepU = 0;
+      nbIntv = nbVIntv;
+    }else{
+      S.UIntervals(TI, GeomAbs_CN);
+      U1 = Max(T1, TI(1));
+      U2 = Min(T2, TI(2));
+      V1 = Par;
+      V2 = Par;
+      stepV = 0;
+      nbIntv = nbUIntv;
+    }   
+        
+    S.D0(U1,V1,P);
+    MoveTo(P,thePts);
+
+    for(Intrv = 1; Intrv <= nbIntv; Intrv++){
+      if(TI(Intrv) <= T1 && TI(Intrv + 1) <= T1)
+        continue;
+      if(TI(Intrv) >= T2 && TI(Intrv + 1) >= T2)
+              continue;
+      if(theIsoType == GeomAbs_IsoU){
+              V1 = Max(T1, TI(Intrv));
+              V2 = Min(T2, TI(Intrv + 1));
+              stepV = (V2 - V1) / theDiscret;
+      }else{
+              U1 = Max(T1, TI(Intrv));
+              U2 = Min(T2, TI(Intrv + 1));
+              stepU = (U2 - U1) / theDiscret;
+      }
+
+      switch (SurfType) {
+      case GeomAbs_Plane :
+              break;
+      case GeomAbs_Cylinder :
+      case GeomAbs_Cone :
+        if(theIsoType == GeomAbs_IsoV){
+                for(j = 1; j < theDiscret; j++){
+                  U1 += stepU;
+                  V1 += stepV;
+                  S.D0(U1,V1,P);
+                  DrawTo(P,thePolyData,thePts);
+                }
+              }
+              break;
+      case GeomAbs_Sphere :
+      case GeomAbs_Torus :
+      case GeomAbs_OffsetSurface :
+      case GeomAbs_OtherSurface :
+        for(j = 1; j < theDiscret; j++){
+                U1 += stepU;
+                V1 += stepV;
+                S.D0(U1,V1,P);
+                DrawTo(P,thePolyData,thePts);
+              }
+              break;
+      case GeomAbs_BezierSurface :
+      case GeomAbs_BSplineSurface :
+        for(j = 1; j <= theDiscret/2; j++){
+          Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
+                CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
+                U1 += stepU*2.;
+                V1 += stepV*2.;
+              }
+              break;
+      case GeomAbs_SurfaceOfExtrusion :
+      case GeomAbs_SurfaceOfRevolution :
+        if((theIsoType == GeomAbs_IsoV && SurfType == GeomAbs_SurfaceOfRevolution) ||
+                 (theIsoType == GeomAbs_IsoU && SurfType == GeomAbs_SurfaceOfExtrusion)) 
+        {
+                if(SurfType == GeomAbs_SurfaceOfExtrusion) 
+            break;
+                for(j = 1; j < theDiscret; j++){
+                  U1 += stepU;
+                  V1 += stepV;
+                  S.D0(U1,V1,P);
+                  DrawTo(P,thePolyData,thePts);
+                }
+              }else{
+                CurvType = (S.BasisCurve())->GetType();
+                switch(CurvType){
+                case GeomAbs_Line :
+                  break;
+                case GeomAbs_Circle :
+                case GeomAbs_Ellipse :
+                  for (j = 1; j < theDiscret; j++) {
+                    U1 += stepU;
+                    V1 += stepV;
+                    S.D0(U1,V1,P);
+                    DrawTo(P,thePolyData,thePts);
+                  }
+                  break;
+                case GeomAbs_Parabola :
+                case GeomAbs_Hyperbola :
+                case GeomAbs_BezierCurve :
+                case GeomAbs_BSplineCurve :
+                case GeomAbs_OtherCurve :
+                  for(j = 1; j <= theDiscret/2; j++){
+              Standard_Real aStep = (theIsoType == GeomAbs_IsoV) ? stepU*2. : stepV*2.;
+                  CreateIso__(S, theIsoType, U1, V1, aStep, thePolyData, thePts);
+                    U1 += stepU*2.;
+                    V1 += stepV*2.;
+                  }
+                  break;
+                }
+              }
+      }
+    }
+    S.D0(U2,V2,P);
+    DrawTo(P,thePolyData,thePts);
+  }  
+}
+void 
+GEOM_WireframeFace:: 
+CreateIso__(const BRepAdaptor_Surface& theSurface, 
+            GeomAbs_IsoType theIsoType,
+                                    Standard_Real& theU, 
+                                    Standard_Real& theV, 
+                                    Standard_Real theStep, 
+            vtkPolyData* thePolyData,
+            vtkPoints* thePts)
+{
+  gp_Pnt Pl, Pr, Pm;
+  if (theIsoType == GeomAbs_IsoU) {
+    theSurface.D0(theU, theV, Pl);
+    theSurface.D0(theU, theV + theStep/2., Pm);
+    theSurface.D0(theU, theV + theStep, Pr);
+  } else {
+    theSurface.D0(theU, theV, Pl);
+    theSurface.D0(theU + theStep/2., theV, Pm);
+    theSurface.D0(theU + theStep, theV, Pr);
+  }
+
+  static Standard_Real ISO_RATIO = 1.001;
+  if (Pm.Distance(Pl) + Pm.Distance(Pr) <= ISO_RATIO*Pl.Distance(Pr)) {
+    DrawTo(Pr,thePolyData,thePts);
+  } else {
+    if (theIsoType == GeomAbs_IsoU) {
+      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
+      Standard_Real aLocalV = theV + theStep/2 ;
+      CreateIso__(theSurface, theIsoType, theU, aLocalV , theStep/2, thePolyData, thePts);
+    } else {
+      CreateIso__(theSurface, theIsoType, theU, theV, theStep/2, thePolyData, thePts);
+      Standard_Real aLocalU = theU + theStep/2 ;
+      CreateIso__(theSurface, theIsoType, aLocalU , theV, theStep/2, thePolyData, thePts);
+    }
+  }
+}
diff --git a/src/OCC2VTK/GEOM_WireframeFace.h b/src/OCC2VTK/GEOM_WireframeFace.h
new file mode 100755 (executable)
index 0000000..1b506f9
--- /dev/null
@@ -0,0 +1,100 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef GEOM_WIREFRAME_FACE_H 
+#define GEOM_WIREFRAME_FACE_H 
+#include "OCC2VTK.h" 
+#include "GEOM_FaceSource.h" 
+
+#include <GeomAbs_IsoType.hxx>
+#include <BRepAdaptor_Surface.hxx>
+#include <vtkPolyDataSource.h> 
+
+class OCC2VTK_EXPORT GEOM_WireframeFace: public GEOM_FaceSource 
+{ 
+public: 
+  vtkTypeMacro(GEOM_WireframeFace,GEOM_FaceSource); 
+  static GEOM_WireframeFace* New(); 
+  /*  vtkSetMacro(NbIso,int); 
+      vtkGetMacro(NbIso,int);*/
+  vtkSetMacro(Discret,int); 
+  vtkGetMacro(Discret,int); 
+  static  
+  void OCC2VTK(const TopoDS_Face& theFace,  
+               vtkPolyData* thePolyData, 
+               vtkPoints* thePts, 
+               const int theNbIso[2], 
+               const int theDiscret = 15);
+
+  //! IsoLines management
+  // theNb[0] - number of U lines
+  // theNb[1] - number of V lines
+  virtual void SetNbIso(const int theNb[2]);
+  virtual void GetNbIso(int &theNbU,int &theNbV);
+
+protected: 
+  int NbIso[2], Discret; 
+  static  
+  void 
+  CreateIso(const TopoDS_Face& theFace,
+            const int theNbIso[2], 
+            const int theDiscret, 
+            vtkPolyData* thePolyData,
+            vtkPoints* thePts);
+  static  
+  void 
+  CreateIso_(const TopoDS_Face& theFace,
+             GeomAbs_IsoType theIsoType, 
+             Standard_Real Par, 
+             Standard_Real T1,
+             Standard_Real T2,
+             const int theDiscret, 
+             vtkPolyData* thePolyData,
+             vtkPoints* thePts);
+  static  
+  void 
+  CreateIso__(const BRepAdaptor_Surface& theSurface, 
+              GeomAbs_IsoType theIsoType,
+                                    Standard_Real& theU, 
+                                    Standard_Real& theV, 
+                                      Standard_Real theStep, 
+              vtkPolyData* thePolyData,
+              vtkPoints* thePts);
+
+  void Execute(); 
+  GEOM_WireframeFace(); 
+  ~GEOM_WireframeFace(); 
+private: 
+  // Not implememnted 
+  GEOM_WireframeFace(const GEOM_WireframeFace&); 
+  void operator=(const GEOM_WireframeFace&); 
+}; 
+#endif //GEOM_WFACEACTOR_H 
diff --git a/src/OCC2VTK/Makefile.am b/src/OCC2VTK/Makefile.am
new file mode 100644 (file)
index 0000000..9dcbaa4
--- /dev/null
@@ -0,0 +1,51 @@
+#  Copyright (C) 2007-2010  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
+#  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
+#
+
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS =                \
+       OCC2VTK.h               \
+       OCC2VTK_Tools.h         \
+       GEOM_EdgeSource.h       \
+       GEOM_FaceSource.h       \
+       GEOM_ShadingFace.h      \
+       GEOM_VertexSource.h     \
+       GEOM_WireframeFace.h
+
+# Libraries targets
+lib_LTLIBRARIES = libOCC2VTK.la
+
+dist_libOCC2VTK_la_SOURCES =   \
+       OCC2VTK_Tools.cxx       \
+       GEOM_EdgeSource.cxx     \
+       GEOM_FaceSource.cxx     \
+       GEOM_ShadingFace.cxx    \
+       GEOM_VertexSource.cxx   \
+       GEOM_WireframeFace.cxx
+
+libOCC2VTK_la_CPPFLAGS =       \
+       $(CAS_CPPFLAGS)         \
+       $(VTK_INCLUDES)         \
+       $(KERNEL_CXXFLAGS)
+
+libOCC2VTK_la_LDFLAGS  =       \
+       $(CAS_KERNEL) -lTKBRep -lTKG2d -lTKG3d -lTKV3d -lTKMesh -lTKGeomBase -lTKGeomAlgo -lTKTopAlgo -lTKService \
+       $(VTK_LIBS) \
+       $(KERNEL_LDFLAGS)  -lSALOMELocalTrace
diff --git a/src/OCC2VTK/OCC2VTK.h b/src/OCC2VTK/OCC2VTK.h
new file mode 100755 (executable)
index 0000000..603942a
--- /dev/null
@@ -0,0 +1,36 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  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
+//
+
+#ifndef OCC2VTK_H
+#define OCC2VTK_H
+
+#if defined WIN32
+#  if defined OCC2VTK_EXPORTS
+#    define OCC2VTK_EXPORT __declspec( dllexport )
+#  else
+#    define OCC2VTK_EXPORT __declspec( dllimport )
+#  endif
+#else
+#  define OCC2VTK_EXPORT
+#endif
+
+#endif // OCC2VTK_H
diff --git a/src/OCC2VTK/OCC2VTK_Tools.cxx b/src/OCC2VTK/OCC2VTK_Tools.cxx
new file mode 100755 (executable)
index 0000000..ef0e4ce
--- /dev/null
@@ -0,0 +1,165 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#include "OCC2VTK_Tools.h" 
+
+#include "GEOM_VertexSource.h" 
+#include "GEOM_EdgeSource.h" 
+#include "GEOM_WireframeFace.h" 
+#include "GEOM_ShadingFace.h"
+
+#include <Bnd_Box.hxx>
+#include <BRep_Tool.hxx>
+#include <BRepBndLib.hxx>
+#include <BRepMesh_IncrementalMesh.hxx>
+#include <Poly_Triangulation.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopTools_ListOfShape.hxx>
+
+#define MAX2(X, Y)    (Abs(X) > Abs(Y) ? Abs(X) : Abs(Y))
+#define MAX3(X, Y, Z) (MAX2(MAX2(X,Y), Z))
+
+namespace GEOM
+{
+  void MeshShape(const TopoDS_Shape theShape,
+                 Standard_Real theDeflection,
+                 Standard_Boolean theForced)
+  {
+    // Mesh the shape if necessary
+    Standard_Boolean alreadymesh = Standard_True;
+    TopExp_Explorer ex;
+    TopLoc_Location aLoc;
+
+    for (ex.Init(theShape, TopAbs_FACE); ex.More(); ex.Next()) {
+      const TopoDS_Face& aFace = TopoDS::Face(ex.Current());
+      Handle(Poly_Triangulation) aPoly = BRep_Tool::Triangulation(aFace,aLoc);
+      if(aPoly.IsNull()) { alreadymesh = Standard_False; break; }
+    }
+
+    if(!alreadymesh || theForced) {
+      if(theDeflection<=0) {
+        // Compute default deflection
+        Bnd_Box B;
+        BRepBndLib::Add(theShape, B);
+        if ( B.IsVoid() ) return; // NPAL15983 (Bug when displaying empty groups) 
+        Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
+        B.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
+        theDeflection = MAX3(aXmax-aXmin, aYmax-aYmin, aZmax-aZmin) * 0.001 * 4;
+      }
+      BRepMesh_IncrementalMesh MESH(theShape,theDeflection);
+    }
+  }
+
+  void MeshShape2(const TopoDS_Shape& theShape,
+                  float& theDeflection, 
+                  bool theIsRelative)
+  {
+    static Standard_Real RELATIVE_DEFLECTION = 0.0001;
+    Standard_Real aDeflection = theDeflection;
+
+    if(theDeflection <= 0) { // Compute default theDeflection
+      Bnd_Box B;
+      BRepBndLib::Add(theShape, B);
+      Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
+      B.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
+      Standard_Real aDiagonal = (aXmax-aXmin)*(aXmax-aXmin) +
+                                (aYmax-aYmin)*(aYmax-aYmin) +
+                                (aZmax-aZmin)*(aZmax-aZmin);
+      aDiagonal = sqrt(aDiagonal);
+      aDeflection = aDiagonal*RELATIVE_DEFLECTION;
+
+      if(theIsRelative)
+        theDeflection = RELATIVE_DEFLECTION;
+      else
+        theDeflection = aDeflection;
+    }
+    BRepMesh_IncrementalMesh aMesh(theShape,aDeflection);
+  }
+
+  void SetShape(const TopoDS_Shape& theShape,
+                const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
+                bool theIsVector,
+                GEOM_EdgeSource* theIsolatedEdgeSource,
+                GEOM_EdgeSource* theOneFaceEdgeSource,
+                GEOM_EdgeSource* theSharedEdgeSource,
+                GEOM_WireframeFace* theWireframeFaceSource,
+                GEOM_ShadingFace* theShadingFaceSource)
+  {
+    if (theShape.ShapeType() == TopAbs_COMPOUND) {
+      TopoDS_Iterator anItr(theShape);
+      for (; anItr.More(); anItr.Next()) {
+        SetShape(anItr.Value(),theEdgeMap,theIsVector,
+                 theIsolatedEdgeSource,
+                 theOneFaceEdgeSource,
+                 theSharedEdgeSource,
+                 theWireframeFaceSource,
+                 theShadingFaceSource);
+      }
+    }
+
+    switch (theShape.ShapeType()) {
+      case TopAbs_WIRE: {
+        TopExp_Explorer anEdgeExp(theShape,TopAbs_EDGE);
+        for (; anEdgeExp.More(); anEdgeExp.Next()){
+          const TopoDS_Edge& anEdge = TopoDS::Edge(anEdgeExp.Current());
+          if (!BRep_Tool::Degenerated(anEdge))
+            theIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
+        }
+        break;
+      }
+      case TopAbs_EDGE: {
+        const TopoDS_Edge& anEdge = TopoDS::Edge(theShape);
+        if (!BRep_Tool::Degenerated(anEdge))
+          theIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
+        break;
+      }
+      case TopAbs_VERTEX: {
+        break;
+      }
+      default: {
+        TopExp_Explorer aFaceExp (theShape,TopAbs_FACE);
+        for(; aFaceExp.More(); aFaceExp.Next()) {
+          const TopoDS_Face& aFace = TopoDS::Face(aFaceExp.Current());
+          theWireframeFaceSource->AddFace(aFace);
+          theShadingFaceSource->AddFace(aFace);
+          TopExp_Explorer anEdgeExp(aFaceExp.Current(), TopAbs_EDGE);
+          for(; anEdgeExp.More(); anEdgeExp.Next()) {
+            const TopoDS_Edge& anEdge = TopoDS::Edge(anEdgeExp.Current());
+            if(!BRep_Tool::Degenerated(anEdge)){
+              // compute the number of faces
+              int aNbOfFaces = theEdgeMap.FindFromKey(anEdge).Extent();
+              switch(aNbOfFaces){
+              case 0:  // isolated edge
+                theIsolatedEdgeSource->AddEdge(anEdge,theIsVector);
+                break;
+              case 1:  // edge in only one face
+                theOneFaceEdgeSource->AddEdge(anEdge,theIsVector);
+                break;
+              default: // edge shared by at least two faces
+                theSharedEdgeSource->AddEdge(anEdge,theIsVector);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/src/OCC2VTK/OCC2VTK_Tools.h b/src/OCC2VTK/OCC2VTK_Tools.h
new file mode 100755 (executable)
index 0000000..c019154
--- /dev/null
@@ -0,0 +1,55 @@
+//  Copyright (C) 2007-2010  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
+//  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
+//
+
+#ifndef OCC2VTK_TOOLS_H
+#define OCC2VTK_TOOLS_H
+
+#include "OCC2VTK.h" 
+
+#include <TopoDS_Shape.hxx>
+#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
+
+class GEOM_EdgeSource;
+class GEOM_WireframeFace;
+class GEOM_ShadingFace;
+
+namespace GEOM
+{
+  // moved from GEOM_AssemblyBuilder
+  OCC2VTK_EXPORT void MeshShape(const TopoDS_Shape theShape,
+                                Standard_Real theDeflection,
+                                Standard_Boolean theForced);
+
+  // moved from GEOM_Actor
+  OCC2VTK_EXPORT void MeshShape2(const TopoDS_Shape& theShape,
+                                 float& theDeflection, 
+                                 bool theIsRelative);
+
+  // moved from GEOM_Actor
+  OCC2VTK_EXPORT void SetShape(const TopoDS_Shape& theShape,
+                               const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
+                               bool theIsVector,
+                               GEOM_EdgeSource* theIsolatedEdgeSource,
+                               GEOM_EdgeSource* theOneFaceEdgeSource,
+                               GEOM_EdgeSource* theSharedEdgeSource,
+                               GEOM_WireframeFace* theWireframeFaceSource,
+                               GEOM_ShadingFace* theShadingFaceSource);
+}
+
+#endif // OCC2VTK_TOOLS_H
index a10babc449274f88ab2aff1975a299b32adeed64..71a6e290c634b823686d7af3b2bc53c4c961a56f 100644 (file)
@@ -526,6 +526,19 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument()
   default:
     break;
   }
+
+  //rnv: To fix the bug IPAL22041 TC5.1.5: "Fillet Construcion" dialog loses current selection.
+  // Restore selection of the main shape, if need,
+  // because it was canceled.
+  aSelMgr->selectedObjects(aSelList);
+  if (aSelList.Extent() == 0 && !myShape->_is_nil()) {
+    disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+    ObjectList list;
+       list.push_back(myShape);
+    selectObjects(list);
+    connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+            this, SLOT(SelectionIntoArgument()));
+  }
 }
 
 //=================================================================================
index 51e9fbacfdf12cf297dea94d9a67ab86f46d9515..f7aea996cfc2c1b2f5801c87807ca56bd82a73f8 100644 (file)
@@ -205,7 +205,7 @@ void OperationGUI_Fillet1d2dDlg::SelectionIntoArgument()
             //Find SubShape Object in Father
             GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( anObj, aName );
             
-            if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+            if ( aFindedObject->_is_nil()) { // Object not found in study
               GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
               anObj = aShapesOp->GetSubShape( anObj, anIndex );
             }
@@ -370,9 +370,12 @@ GEOM::GEOM_IOperations_ptr OperationGUI_Fillet1d2dDlg::createOperation()
 // function : isValid()
 // purpose  : Verify validity of input data
 //=================================================================================
-bool OperationGUI_Fillet1d2dDlg::isValid (QString&)
+bool OperationGUI_Fillet1d2dDlg::isValid (QString& msg)
 {
-  return !myShape->_is_nil() && (myIs1D || myVertexes.Extent() > 0);
+  bool ok = !myShape->_is_nil();
+  ok = GroupVertexes->SpinBox_DX->isValid( msg, !IsPreview() ) && ok;
+  ok = (myIs1D || myVertexes.Extent() > 0) && ok;
+  return ok;
 }
 
 //=================================================================================
index 6cd07c94a6d6d9bd7b0be08938e19ff035f483aa..e18e1cb4c0466facc01b2dc689dd0fe7f3fce3b3 100644 (file)
@@ -298,7 +298,6 @@ void OperationGUI_FilletDlg::ConstructorsClicked (int constructorId)
   qApp->processEvents();
   updateGeometry();
   resize(minimumSizeHint());
-  SelectionIntoArgument();
 }
 
 //=================================================================================
@@ -398,7 +397,7 @@ void OperationGUI_FilletDlg::SelectionIntoArgument()
     }
   }
 
-  // clear selection
+  // clear selection of the faces or edges
   if (!(myEditCurrentArgument == Group2->LineEdit2 ||
         myEditCurrentArgument == Group3->LineEdit2)) {
     disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
@@ -423,6 +422,19 @@ void OperationGUI_FilletDlg::SelectionIntoArgument()
   default:
     break;
   }
+
+  //rnv: To fix the bug IPAL22041 TC5.1.5: "Fillet Construcion" dialog loses current selection.
+  // Restore selection of the main shape, if need,
+  // because it was canceled.
+  aSelMgr->selectedObjects(aSelList);
+  if (aSelList.Extent() == 0 && !myShape->_is_nil()) {
+    disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+    ObjectList list;
+       list.push_back(myShape);
+    selectObjects(list);
+    connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+            this, SLOT(SelectionIntoArgument()));
+  }
 }
 
 //=================================================================================
index ef7fc756a89d538baf422510af0dacba65c9ebe0..6c4ad4bda12e58796508dc768ab6c80d13c48773 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
-//  GEOM GEOMGUI : GUI for Geometry component
-//  File   : OperationGUI_PartitionDlg.cxx
-//  Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
 
+// GEOM GEOMGUI : GUI for Geometry component
+// File   : OperationGUI_PartitionDlg.cxx
+// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
+//
 #include "OperationGUI_PartitionDlg.h"
 
 #include <DlgRef.h>
 
 //=================================================================================
 // class    : OperationGUI_PartitionDlg()
-// purpose  : Constructs a OperationGUI_PartitionDlg which is a child of 'parent', with the
+// purpose  : Constructs a OperationGUI_PartitionDlg which is a child of 'parent', with the 
 //            name 'name' and widget flags set to 'f'.
 //            The dialog will by default be modeless, unless you set 'modal' to
 //            TRUE to construct a modal dialog.
 //=================================================================================
-OperationGUI_PartitionDlg::OperationGUI_PartitionDlg(GeometryGUI* theGeometryGUI, QWidget* parent)
-  : GEOMBase_Skeleton(theGeometryGUI, parent, false)
+OperationGUI_PartitionDlg::OperationGUI_PartitionDlg( GeometryGUI* theGeometryGUI, QWidget* parent )
+  : GEOMBase_Skeleton( theGeometryGUI, parent, false )
 {
   SUIT_ResourceMgr* aResMgr = myGeomGUI->getApp()->resourceMgr();
-  QPixmap image0(aResMgr->loadPixmap("GEOM", tr("ICON_DLG_PARTITION")));
-  QPixmap image1(aResMgr->loadPixmap("GEOM", tr("ICON_DLG_PARTITION_PLANE")));
-  QPixmap image2(aResMgr->loadPixmap("GEOM", tr("ICON_SELECT")));
+  QPixmap image0( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_PARTITION" ) ) );
+  QPixmap image1( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_PARTITION_PLANE" ) ) );
+  QPixmap image2( aResMgr->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
 
-  setWindowTitle(tr("GEOM_PARTITION_TITLE"));
+  setWindowTitle( tr( "GEOM_PARTITION_TITLE" ) );
 
   /***************************************************************/
-  mainFrame()->GroupConstructors->setTitle(tr("GEOM_PARTITION"));
-  mainFrame()->RadioButton1->setIcon(image0);
-  mainFrame()->RadioButton2->setIcon(image1);
-  mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->GroupConstructors->setTitle( tr( "GEOM_PARTITION" ) );
+  mainFrame()->RadioButton1->setIcon( image0 );
+  mainFrame()->RadioButton2->setIcon( image1 );
+  mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
   mainFrame()->RadioButton3->close();
 
   // Full partition (contains half-space partition)
-  GroupPoints = new DlgRef_2Sel1List1Check(centralWidget());
-  GroupPoints->GroupBox1->setTitle(tr("GEOM_PARTITION"));
-  GroupPoints->TextLabel1->setText(tr("GEOM_OBJECTS"));
-  GroupPoints->TextLabel2->setText(tr("GEOM_TOOL_OBJECTS"));
-  GroupPoints->TextLabel3->setText(tr("GEOM_RECONSTRUCTION_LIMIT"));
-  GroupPoints->PushButton1->setIcon(image2);
-  GroupPoints->PushButton2->setIcon(image2);
-  GroupPoints->LineEdit1->setReadOnly(true);
-  GroupPoints->LineEdit2->setReadOnly(true);
-  GroupPoints->LineEdit1->setEnabled(true);
-  GroupPoints->LineEdit2->setEnabled(false);
-  GroupPoints->CheckButton1->setText(tr("GEOM_KEEP_NONLIMIT_SHAPES"));
-
-  QVBoxLayout* layout = new QVBoxLayout(centralWidget());
-  layout->setMargin(0); layout->setSpacing(6);
-  layout->addWidget(GroupPoints);
+  GroupPoints = new DlgRef_2Sel1List2Check( centralWidget() );
+  GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION" ) );
+  GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
+  GroupPoints->TextLabel2->setText( tr( "GEOM_TOOL_OBJECTS" ) );
+  GroupPoints->TextLabel3->setText( tr( "GEOM_RECONSTRUCTION_LIMIT" ) );
+  GroupPoints->PushButton1->setIcon( image2 );
+  GroupPoints->PushButton2->setIcon( image2 );
+  GroupPoints->LineEdit1->setReadOnly( true );
+  GroupPoints->LineEdit2->setReadOnly( true );
+  GroupPoints->LineEdit1->setEnabled( true );
+  GroupPoints->LineEdit2->setEnabled( false );
+  GroupPoints->CheckButton1->setText( tr( "GEOM_KEEP_NONLIMIT_SHAPES" ) );
+  GroupPoints->CheckButton2->setText( tr( "GEOM_NO_SELF_INTERSECTION" ) );
+
+  QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
+  layout->setMargin( 0 ); layout->setSpacing( 6 );
+  layout->addWidget( GroupPoints );
 
   /***************************************************************/
 
-  setHelpFileName("partition_page.html");
-
+  setHelpFileName( "partition_page.html" );
   Init();
 }
 
@@ -100,14 +102,14 @@ OperationGUI_PartitionDlg::~OperationGUI_PartitionDlg()
   // no need to delete child widgets, Qt does it all for us
 }
 
-void OperationGUI_PartitionDlg::SetListMaterials(GEOM::ListOfLong ListMaterials)
+void OperationGUI_PartitionDlg::SetListMaterials( GEOM::ListOfLong ListMaterials )
 {
-  myListMaterials = ListMaterials;
+  myListMaterials = ListMaterials; 
 }
-
+  
 GEOM::ListOfLong OperationGUI_PartitionDlg::GetListMaterials()
-{
-  return myListMaterials;
+{ 
+  return myListMaterials; 
 }
 
 //=================================================================================
@@ -117,36 +119,42 @@ GEOM::ListOfLong OperationGUI_PartitionDlg::GetListMaterials()
 void OperationGUI_PartitionDlg::Init()
 {
   /* type for sub shape selection */
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_SOLID"));
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_SHELL"));
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_FACE"));
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_WIRE"));
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_EDGE"));
-  GroupPoints->ComboBox1->addItem(tr("GEOM_RECONSTRUCTION_LIMIT_VERTEX"));
-  GroupPoints->CheckButton1->setChecked(false);
-
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SOLID" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SOLID);
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_SHELL" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::SHELL);
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_FACE" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::FACE);
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_WIRE" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::WIRE);
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_EDGE" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::EDGE);
+  GroupPoints->ComboBox1->addItem( tr( "GEOM_RECONSTRUCTION_LIMIT_VERTEX" ) );
+  GroupPoints->ComboBox1->setItemData(GroupPoints->ComboBox1->count()-1, GEOM::VERTEX);
+  GroupPoints->CheckButton1->setChecked( false );
+  
   mainFrame()->GroupBoxPublish->show();
 
   /* signals and slots connections */
-  connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
-  connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
-
-  connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
-
-  connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
-  connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
-
-  connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
-  connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
-
-  connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(ComboTextChanged()));
-
-  connect(myGeomGUI->getApp()->selectionMgr(),
-           SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
-
-  initName(tr("GEOM_PARTITION"));
-
-  ConstructorsClicked(0);
+  connect( buttonOk(),    SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
+  connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
+
+  connect( this, SIGNAL( constructorsClicked( int ) ), this, SLOT( ConstructorsClicked( int ) ) );
+  
+  connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
+  connect( GroupPoints->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
+  
+  connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
+  connect( GroupPoints->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
+  
+  connect( GroupPoints->ComboBox1, SIGNAL( activated( int ) ), this, SLOT( ComboTextChanged() ) );
+
+  connect( myGeomGUI->getApp()->selectionMgr(),
+           SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
+  
+  initName( tr( "GEOM_PARTITION" ) );
+
+  ConstructorsClicked( 0 );
   GroupPoints->PushButton1->click();
 }
 
@@ -155,40 +163,44 @@ void OperationGUI_PartitionDlg::Init()
 // function : ConstructorsClicked()
 // purpose  : Radio button management
 //=================================================================================
-void OperationGUI_PartitionDlg::ConstructorsClicked(int constructorId)
+void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId )
 {
-  disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+  disconnect( myGeomGUI->getApp()->selectionMgr(), 0, this, 0 );
   globalSelection();
-
-  myListShapes.length(0);
-  myListTools.length(0);
-  myListKeepInside.length(0);
-  myListRemoveInside.length(0);
-  myListMaterials.length(0);
-
-  switch (constructorId) {
+  
+  //myListShapes.length( 0 );
+  //myListTools.length( 0 );  
+  //myListKeepInside.length( 0 );   // obsolete
+  //myListRemoveInside.length( 0 ); // obsolete
+  //myListMaterials.length( 0 );    // obsolete
+  
+  switch ( constructorId ) {
   case 0: /*Full partition */
-    GroupPoints->GroupBox1->setTitle(tr("GEOM_PARTITION"));
-    GroupPoints->TextLabel2->setText(tr("GEOM_TOOL_OBJECTS"));
+    GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION" ) );
+    GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECTS" ) );
+    GroupPoints->TextLabel2->setText( tr( "GEOM_TOOL_OBJECTS" ) );
     GroupPoints->TextLabel3->show();
     GroupPoints->ComboBox1->show();
-    GroupPoints->ComboBox1->setCurrentIndex(0);
+    GroupPoints->ComboBox1->setCurrentIndex( 0 );
     GroupPoints->CheckButton1->show();
-    GroupPoints->PushButton1->setDown(true);
-    GroupPoints->PushButton2->setDown(false);
+    GroupPoints->CheckButton2->show();
+    GroupPoints->PushButton1->setDown( true );
+    GroupPoints->PushButton2->setDown( false );
     GroupPoints->LineEdit1->setEnabled(true);
     GroupPoints->LineEdit2->setEnabled(false);
     break;
   case 1: /*Half-space partition */
-    GroupPoints->GroupBox1->setTitle(tr("GEOM_PARTITION_HALFSPACE"));
+    GroupPoints->GroupBox1->setTitle( tr( "GEOM_PARTITION_HALFSPACE" ) );
     GroupPoints->TextLabel3->hide();
     GroupPoints->ComboBox1->hide();
-    GroupPoints->TextLabel2->setText(tr("GEOM_PLANE"));
+    GroupPoints->TextLabel1->setText( tr( "GEOM_OBJECT" ) );
+    GroupPoints->TextLabel2->setText( tr( "GEOM_PLANE" ) );
     GroupPoints->CheckButton1->hide();
-    GroupPoints->PushButton1->setDown(true);
+    GroupPoints->CheckButton2->hide();
+    GroupPoints->PushButton1->setDown( true );
     GroupPoints->LineEdit1->setEnabled(true);
     break;
-  }
+  } 
 
   myEditCurrentArgument = GroupPoints->LineEdit1;
   GroupPoints->LineEdit1->clear();
@@ -196,11 +208,11 @@ void OperationGUI_PartitionDlg::ConstructorsClicked(int constructorId)
 
   qApp->processEvents();
   updateGeometry();
-  resize(minimumSizeHint());
+  resize( minimumSizeHint() );
 
   myEditCurrentArgument->setFocus();
-  connect(myGeomGUI->getApp()->selectionMgr(),
-           SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  connect( myGeomGUI->getApp()->selectionMgr(), 
+           SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
   SelectionIntoArgument();
 }
 
@@ -211,7 +223,7 @@ void OperationGUI_PartitionDlg::ConstructorsClicked(int constructorId)
 //=================================================================================
 void OperationGUI_PartitionDlg::ClickOnOk()
 {
-  if (ClickOnApply())
+  if ( ClickOnApply() )
     ClickOnCancel();
 }
 
@@ -222,12 +234,13 @@ void OperationGUI_PartitionDlg::ClickOnOk()
 //=================================================================================
 bool OperationGUI_PartitionDlg::ClickOnApply()
 {
-  if (!onAccept())
+  if ( !onAccept() )
     return false;
+  
 
   initName();
-  //  0020854: EDF 1398 GEOM: Ergonomy of Partition GUI window
-  //  ConstructorsClicked(getConstructorId());
+  //  0020854: EDF 1398 GEOM: Ergonomy of Partition GUI window 
+  //  ConstructorsClicked( getConstructorId() );
   return true;
 }
 
@@ -238,46 +251,75 @@ bool OperationGUI_PartitionDlg::ClickOnApply()
 //=================================================================================
 void OperationGUI_PartitionDlg::SelectionIntoArgument()
 {
-  myEditCurrentArgument->setText("");
+  myEditCurrentArgument->setText( "" );
   QString aString = "";
-
+  
   LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
   SALOME_ListIO aSelList;
   aSelMgr->selectedObjects(aSelList);
 
   int nbSel = GEOMBase::GetNameOfSelectedIObjects(aSelList, aString, true);
-
-  if (nbSel < 1) {
-    if (myEditCurrentArgument == GroupPoints->LineEdit1) {
-      myListShapes.length(0);
-      myListMaterials.length(0);
+    
+  if ( getConstructorId() == 1 ) {
+    // for half-selection, only one shape can be selected as an object
+    // and only one plane as a tool
+    if ( nbSel != 1 ) {
+      if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
+       myListShapes.length( 0 );
+       // myListMaterials.length( 0 ); // obsolete
+       return;
+      }
+      else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
+       myListTools.length( 0 );
+       return;
+      }
     }
-    else if (myEditCurrentArgument == GroupPoints->LineEdit2)
-      myListTools.length(0);
   }
-
-  // One and only one plane can be selected
-
-  if (getConstructorId() == 1 &&
-       myEditCurrentArgument == GroupPoints->LineEdit2 &&
-       nbSel != 1) {
-    myListTools.length(0);
-    return;
+  else {
+    if ( nbSel < 1 ) {
+      if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
+       myListShapes.length( 0 );
+       //myListMaterials.length( 0 ); // obsolete
+       return;
+      }
+      else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
+       myListTools.length( 0 );
+       return;
+      }
+    }
   }
-
-  if (myEditCurrentArgument == GroupPoints->LineEdit1) {
+  
+  if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
     GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListShapes, true);
-    myListMaterials.length(0);
-    if (!myListShapes.length())
+    //myListMaterials.length( 0 ); // obsolete
+    
+    GEOM::shape_type type = GEOM::SOLID;
+    for (int i = 0; i < myListShapes.length(); i++)
+      type = qMax( type, myListShapes[i]->GetMinShapeType() );
+    int idx = qMax( 0, GroupPoints->ComboBox1->findData( type ) );
+    GroupPoints->ComboBox1->setCurrentIndex( idx );
+
+    if ( !myListShapes.length() )
       return;
   }
-  else if (myEditCurrentArgument == GroupPoints->LineEdit2) {
+  else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
     GEOMBase::ConvertListOfIOInListOfGO(aSelList, myListTools, true);
-    if (!myListTools.length())
+    if ( !myListTools.length() )
       return;
+    else if ( myListTools.length() == 1 && getConstructorId() == 1 ) {
+      GEOM::GEOM_IMeasureOperations_var mOp = getGeomEngine()->GetIMeasureOperations( getStudyId() );
+      GEOM::ListOfLong_var   intList;
+      GEOM::ListOfDouble_var dblList;
+      GEOM::GEOM_IKindOfShape::shape_kind kind = mOp->KindOfShape( myListTools[0].in(), intList.out(), dblList.out() );
+      mOp->Destroy();
+      if ( kind < GEOM::GEOM_IKindOfShape::DISK_CIRCLE || kind > GEOM::GEOM_IKindOfShape::PLANAR ) {
+       myListTools.length( 0 );
+       return;
+      }
+    }
   }
 
-  myEditCurrentArgument->setText(aString);
+  myEditCurrentArgument->setText( aString );
 }
 
 
@@ -288,25 +330,25 @@ void OperationGUI_PartitionDlg::SelectionIntoArgument()
 void OperationGUI_PartitionDlg::SetEditCurrentArgument()
 {
   QPushButton* send = (QPushButton*)sender();
-
-  if (send == GroupPoints->PushButton1) {
+  
+  if ( send == GroupPoints->PushButton1 ) {
     myEditCurrentArgument = GroupPoints->LineEdit1;
     GroupPoints->PushButton2->setDown(false);
     GroupPoints->LineEdit1->setEnabled(true);
     GroupPoints->LineEdit2->setEnabled(false);
   }
-  else if (send == GroupPoints->PushButton2) {
+  else if ( send == GroupPoints->PushButton2 ) {
     myGeomGUI->getApp()->selectionMgr()->clearSelected(); //clear prewious selection
     myEditCurrentArgument = GroupPoints->LineEdit2;
     GroupPoints->PushButton1->setDown(false);
     GroupPoints->LineEdit1->setEnabled(false);
     GroupPoints->LineEdit2->setEnabled(true);
-    if (getConstructorId() == 1)
-      globalSelection(GEOM_PLANE);
+    if ( getConstructorId() == 1 )
+      globalSelection( GEOM_PLANE  );
   }
-
-  globalSelection(GEOM_ALLSHAPES);
-
+  globalSelection( GEOM_ALLSHAPES );
+      
   myEditCurrentArgument->setFocus();
   SelectionIntoArgument();
   send->setDown(true);
@@ -321,8 +363,8 @@ void OperationGUI_PartitionDlg::LineEditReturnPressed()
 {
   QLineEdit* send = (QLineEdit*)sender();
 
-  if (send == GroupPoints->LineEdit1 ||
-       send == GroupPoints->LineEdit2) {
+  if ( send == GroupPoints->LineEdit1 || 
+       send == GroupPoints->LineEdit2 ) {
       myEditCurrentArgument = send;
       GEOMBase_Skeleton::LineEditReturnPressed();
   }
@@ -336,10 +378,10 @@ void OperationGUI_PartitionDlg::LineEditReturnPressed()
 void OperationGUI_PartitionDlg::ActivateThisDialog()
 {
   GEOMBase_Skeleton::ActivateThisDialog();
-  connect(myGeomGUI->getApp()->selectionMgr(),
-           SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
+  connect( myGeomGUI->getApp()->selectionMgr(), 
+           SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
 
-  ConstructorsClicked(getConstructorId());
+  ConstructorsClicked( getConstructorId() ); 
 }
 
 
@@ -347,9 +389,9 @@ void OperationGUI_PartitionDlg::ActivateThisDialog()
 // function : enterEvent()
 // purpose  :
 //=================================================================================
-void OperationGUI_PartitionDlg::enterEvent(QEvent*)
+void OperationGUI_PartitionDlg::enterEvent( QEvent* )
 {
-  if (!mainFrame()->GroupConstructors->isEnabled())
+  if ( !mainFrame()->GroupConstructors->isEnabled() )
     this->ActivateThisDialog();
 }
 
@@ -360,7 +402,7 @@ void OperationGUI_PartitionDlg::enterEvent(QEvent*)
 //=================================================================================
 GEOM::GEOM_IOperations_ptr OperationGUI_PartitionDlg::createOperation()
 {
-  return getGeomEngine()->GetIBooleanOperations(getStudyId());
+  return getGeomEngine()->GetIBooleanOperations( getStudyId() );
 }
 
 
@@ -368,10 +410,11 @@ GEOM::GEOM_IOperations_ptr OperationGUI_PartitionDlg::createOperation()
 // function : isValid
 // purpose  :
 //=================================================================================
-bool OperationGUI_PartitionDlg::isValid(QString&)
+bool OperationGUI_PartitionDlg::isValid( QString& )
 {
-  return (myListShapes.length()     || myListTools.length() ||
-          myListKeepInside.length() || myListRemoveInside.length());
+  printf("OperationGUI_PartitionDlg::isValid:myListShapes.length()=%d\n",myListShapes.length());
+  printf("OperationGUI_PartitionDlg::isValid:myListTools.length()=%d\n",myListTools.length());
+  return ( myListShapes.length() || myListTools.length() ); // || myListKeepInside.length() || myListRemoveInside.length()  // obsolete
 }
 
 
@@ -379,53 +422,50 @@ bool OperationGUI_PartitionDlg::isValid(QString&)
 // function : execute
 // purpose  :
 //=================================================================================
-bool OperationGUI_PartitionDlg::execute(ObjectList& objects)
+bool OperationGUI_PartitionDlg::execute( ObjectList& objects )
 {
   bool res = false;
-
   GEOM::GEOM_Object_var anObj;
-  QString msg;
-
-  int aLimit = GetLimit();
-  int aConstructorId = getConstructorId();
-  int aKeepNonlimitShapes = 0;
-
-  if (aConstructorId == 1) {
-    aLimit = GEOM::SHAPE;
-  }
-  else {
-    if (GroupPoints->CheckButton1->isChecked()) {
-      aKeepNonlimitShapes = 1;
-    }
-    else {
-      aKeepNonlimitShapes = 0;
-    }
-  }
 
-  if (isValid(msg)) {
-    GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow(getOperation());
-    anObj = anOper->MakePartition(myListShapes, myListTools,
-                                  myListKeepInside, myListRemoveInside,
-                                  aLimit, false, myListMaterials, aKeepNonlimitShapes);
+  int aLimit               = GetLimit();
+  int aKeepNonlimitShapes  = GroupPoints->CheckButton1->isChecked();
+  bool aNoSelfIntersection = GroupPoints->CheckButton2->isChecked();
+
+  GEOM::GEOM_IBooleanOperations_var anOper = GEOM::GEOM_IBooleanOperations::_narrow( getOperation() );
+
+  switch ( getConstructorId() ) {
+  case 0:
+    anObj = aNoSelfIntersection ?
+      anOper->MakePartitionNonSelfIntersectedShape( myListShapes, myListTools,
+                                                   myListKeepInside, myListRemoveInside,
+                                                   aLimit, false, myListMaterials, aKeepNonlimitShapes ) :
+      anOper->MakePartition( myListShapes, myListTools,
+                            myListKeepInside, myListRemoveInside,
+                            aLimit, false, myListMaterials, aKeepNonlimitShapes );
     res = true;
+    break;
+  case 1:
+    anObj = anOper->MakeHalfPartition( myListShapes[0].in(), myListTools[0].in() );
+    res = true;
+    break;
   }
 
-  if (!anObj->_is_nil()) {
+  if ( !anObj->_is_nil() ) {
     TopoDS_Shape aShape;
-    GEOMBase::GetShape(anObj, aShape, TopAbs_SHAPE);
-    TopoDS_Iterator It (aShape, Standard_True, Standard_True);
-    int nbSubshapes=0;
-    for (; It.More(); It.Next())
+    GEOMBase::GetShape( anObj, aShape, TopAbs_SHAPE );
+    TopoDS_Iterator It( aShape, Standard_True, Standard_True );
+    int nbSubshapes = 0;
+    for ( ; It.More(); It.Next() )
       nbSubshapes++;
 
-    if (nbSubshapes)
-      objects.push_back(anObj._retn());
+    if ( nbSubshapes )
+      objects.push_back( anObj._retn() );
     else
-      SUIT_MessageBox::warning(this,
-                               QObject::tr("GEOM_ERROR"),
-                               QObject::tr("GEOM_WRN_PARTITION_RESULT_EMPTY"));
+      SUIT_MessageBox::warning( this,
+                               QObject::tr( "GEOM_ERROR" ),
+                               QObject::tr( "GEOM_WRN_PARTITION_RESULT_EMPTY" ) );
   }
-
+  
   return res;
 }
 
@@ -433,21 +473,21 @@ bool OperationGUI_PartitionDlg::execute(ObjectList& objects)
 // function : restoreSubShapes
 // purpose  :
 //=================================================================================
-void OperationGUI_PartitionDlg::restoreSubShapes(SALOMEDS::Study_ptr   theStudy,
-                                                 SALOMEDS::SObject_ptr theSObject)
+void OperationGUI_PartitionDlg::restoreSubShapes( SALOMEDS::Study_ptr   theStudy,
+                                                  SALOMEDS::SObject_ptr theSObject )
 {
-  if (mainFrame()->CheckBoxRestoreSS->isChecked()) {
+  if ( mainFrame()->CheckBoxRestoreSS->isChecked() ) {
     // empty list of arguments means that all arguments should be restored
-    getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, GEOM::ListOfGO(),
-                                        /*theFindMethod=*/GEOM::FSM_GetInPlaceByHistory,
-                                        /*theInheritFirstArg=*/myListShapes.length() == 1,
-                                        mainFrame()->CheckBoxAddPrefix->isChecked()); // ? false
+    getGeomEngine()->RestoreSubShapesSO( theStudy, theSObject, GEOM::ListOfGO(),
+                                         /*theFindMethod=*/GEOM::FSM_GetInPlaceByHistory,
+                                         /*theInheritFirstArg=*/myListShapes.length() == 1,
+                                         mainFrame()->CheckBoxAddPrefix->isChecked() ); // ? false
   }
 }
 
 //=======================================================================
 //function : ComboTextChanged
-//purpose  :
+//purpose  : 
 //=======================================================================
 void OperationGUI_PartitionDlg::ComboTextChanged()
 {
@@ -462,13 +502,13 @@ void OperationGUI_PartitionDlg::ComboTextChanged()
 
 //=================================================================================
 // function : GetLimit()
-// purpose  :
+// purpose  : 
 //=================================================================================
 int OperationGUI_PartitionDlg::GetLimit() const
 {
   int aLimit = GroupPoints->ComboBox1->currentIndex();
 
-  switch (aLimit) {
+  switch ( aLimit ) {
   case 0:  aLimit = GEOM::SOLID ; break;
   case 1:  aLimit = GEOM::SHELL ; break;
   case 2:  aLimit = GEOM::FACE  ; break;
index 0acf131b2f50ea298963c845741965607556598f..53f48c8b7d6625b9dbe0d9b95f5b1aae87983106 100644 (file)
@@ -28,7 +28,7 @@
 
 #include <GEOMBase_Skeleton.h>
 
-class DlgRef_2Sel1List1Check;
+class DlgRef_2Sel1List2Check;
 
 //=================================================================================
 // class    : OperationGUI_PartitionDlg
@@ -64,7 +64,7 @@ private:
   GEOM::ListOfGO                     myListRemoveInside;
   GEOM::ListOfGO                     myListKeepInside;
 
-  DlgRef_2Sel1List1Check*            GroupPoints;
+  DlgRef_2Sel1List2Check*            GroupPoints;
 
 private slots:
   void                               ClickOnOk();
index b797fc1bf9c5ae700dcac0bde428e8f5364b00b6..b7899baebbe257a23e416e915dae70cf974a1362 100644 (file)
@@ -270,7 +270,7 @@ void PrimitiveGUI_BoxDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index bef1293eb9da31949363e0c97733e0d430128f33..6e7138640a56763feaa2e604a8bb657965616a5c 100644 (file)
@@ -292,7 +292,7 @@ void PrimitiveGUI_ConeDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index cea029cf658d02de07fba0a60fcab06d796fce17..45905b643aa7bda629c3cb3d2db818c217ff7901 100644 (file)
@@ -285,7 +285,7 @@ void PrimitiveGUI_CylinderDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index 8aa1a6aee465f74383ac4d31db558c54c2ae7407..264dee77249910239517f7574727e49d32476beb 100755 (executable)
@@ -337,7 +337,7 @@ void PrimitiveGUI_DiskDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
       }
index 96d0f7d04bf683436c2b937035d017589ad1be4a..c803419d7c9f3b30f9f203e72508790c41997f2e 100755 (executable)
@@ -352,7 +352,7 @@ void PrimitiveGUI_FaceDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather( aSelectedObject, aName );
 
-        if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+        if ( aFindedObject->_is_nil() ) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp = getGeomEngine()->GetIShapesOperations( getStudyId() );
           aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
         }
index 44dd44ca0a36ff5bdec82f71df5cf99affd0a74d..9821190d98045672df588c3c1839cb7535d7462f 100644 (file)
@@ -264,7 +264,7 @@ void PrimitiveGUI_SphereDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName );
 
-      if ( aFindedObject == GEOM::GEOM_Object::_nil() ) { // Object not found in study
+      if ( aFindedObject->_is_nil() ) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations( getStudyId() );
         aSelectedObject = aShapesOp->GetSubShape( aSelectedObject, anIndex );
index f6a47130a2c194d813672e816970acc3ac12d8bb..e331a0c305e3afd9d5ece1187c3f5764fe737c33 100644 (file)
@@ -281,7 +281,7 @@ void PrimitiveGUI_TorusDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
 
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index c59c1505699b4134630dbceddb345e67fac5484e..7f8a4fcbe9c0cc9422546fae4aefff65ee976143 100644 (file)
@@ -38,6 +38,7 @@ salomeinclude_HEADERS =                               \
        RepairGUI_FreeFacesDlg.h                \
        RepairGUI_ChangeOrientationDlg.h        \
        RepairGUI_GlueDlg.h                     \
+       RepairGUI_LimitToleranceDlg.h           \
        RepairGUI_RemoveExtraEdgesDlg.h
 
 # Libraries targets
@@ -56,6 +57,7 @@ dist_libRepairGUI_la_SOURCES =                        \
        RepairGUI_FreeFacesDlg.h                \
        RepairGUI_ChangeOrientationDlg.h        \
        RepairGUI_GlueDlg.h                     \
+       RepairGUI_LimitToleranceDlg.h           \
        RepairGUI_RemoveExtraEdgesDlg.h         \
                                                \
        RepairGUI.cxx                           \
@@ -70,6 +72,7 @@ dist_libRepairGUI_la_SOURCES =                        \
        RepairGUI_FreeFacesDlg.cxx              \
        RepairGUI_ChangeOrientationDlg.cxx      \
        RepairGUI_GlueDlg.cxx                   \
+       RepairGUI_LimitToleranceDlg.cxx         \
        RepairGUI_RemoveExtraEdgesDlg.cxx
 
 MOC_FILES =                                    \
@@ -84,6 +87,7 @@ MOC_FILES =                                   \
        RepairGUI_FreeFacesDlg_moc.cxx          \
        RepairGUI_ChangeOrientationDlg_moc.cxx  \
        RepairGUI_GlueDlg_moc.cxx               \
+       RepairGUI_LimitToleranceDlg_moc.cxx     \
        RepairGUI_RemoveExtraEdgesDlg_moc.cxx
 
 nodist_libRepairGUI_la_SOURCES =               \
index 652cdb63a2eeea82943202d7c028b382d3e79d7b..ebfc75fb4326cbb0819cf16de5f01108e7f86623 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  GEOM GEOMGUI : GUI for Geometry component
+//  File   : RepairGUI.cxx
+//  Author : Damien COQUERET, Open CASCADE S.A.S.
 
-// GEOM GEOMGUI : GUI for Geometry component
-// File   : RepairGUI.cxx
-// Author : Damien COQUERET, Open CASCADE S.A.S.
-//
 #include "RepairGUI.h"
 
 #include <GeometryGUI.h>
@@ -43,8 +42,9 @@
 #include "RepairGUI_FreeBoundDlg.h"     // Method FREE BOUNDARIES
 #include "RepairGUI_FreeFacesDlg.h"     // Method FREE FACES
 #include "RepairGUI_GlueDlg.h"          // Method GLUE FACES
+#include "RepairGUI_LimitToleranceDlg.h"    // Method LIMIT TOLERANCE
 #include "RepairGUI_ChangeOrientationDlg.h" // Method CHANGE ORIENTATION
-#include "RepairGUI_RemoveExtraEdgesDlg.h" // Method REMOVE EXTRA EDGES
+#include "RepairGUI_RemoveExtraEdgesDlg.h"  // Method REMOVE EXTRA EDGES
 
 //=======================================================================
 // function : RepairGUI()
@@ -66,7 +66,7 @@ RepairGUI::~RepairGUI()
 
 //=======================================================================
 // function : OnGUIEvent()
-// purpose  : 
+// purpose  :
 //=======================================================================
 bool RepairGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
 {
@@ -77,18 +77,19 @@ bool RepairGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
 
   QDialog* aDlg = NULL;
   switch ( theCommandID ) {
-  case GEOMOp::OpSewing:           aDlg = new RepairGUI_SewingDlg            ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpGlueFaces:        aDlg = new RepairGUI_GlueDlg              ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpSuppressFaces:    aDlg = new RepairGUI_SuppressFacesDlg     ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpSuppressHoles:    aDlg = new RepairGUI_RemoveHolesDlg       ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpShapeProcess:     aDlg = new RepairGUI_ShapeProcessDlg      ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpCloseContour:     aDlg = new RepairGUI_CloseContourDlg      ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpRemoveIntWires:   aDlg = new RepairGUI_RemoveIntWiresDlg    ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpAddPointOnEdge:   aDlg = new RepairGUI_DivideEdgeDlg        ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpFreeBoundaries:   aDlg = new RepairGUI_FreeBoundDlg         ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpFreeFaces:        aDlg = new RepairGUI_FreeFacesDlg         ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpOrientation:      aDlg = new RepairGUI_ChangeOrientationDlg ( getGeometryGUI(), parent ); break;
-  case GEOMOp::OpRemoveExtraEdges: aDlg = new RepairGUI_RemoveExtraEdgesDlg  ( getGeometryGUI(), parent ); break;  
+  case GEOMOp::OpSewing:           aDlg = new RepairGUI_SewingDlg            (getGeometryGUI(), parent); break;
+  case GEOMOp::OpGlueFaces:        aDlg = new RepairGUI_GlueDlg              (getGeometryGUI(), parent); break;
+  case GEOMOp::OpLimitTolerance:   aDlg = new RepairGUI_LimitToleranceDlg    (getGeometryGUI(), parent); break;
+  case GEOMOp::OpSuppressFaces:    aDlg = new RepairGUI_SuppressFacesDlg     (getGeometryGUI(), parent); break;
+  case GEOMOp::OpSuppressHoles:    aDlg = new RepairGUI_RemoveHolesDlg       (getGeometryGUI(), parent); break;
+  case GEOMOp::OpShapeProcess:     aDlg = new RepairGUI_ShapeProcessDlg      (getGeometryGUI(), parent); break;
+  case GEOMOp::OpCloseContour:     aDlg = new RepairGUI_CloseContourDlg      (getGeometryGUI(), parent); break;
+  case GEOMOp::OpRemoveIntWires:   aDlg = new RepairGUI_RemoveIntWiresDlg    (getGeometryGUI(), parent); break;
+  case GEOMOp::OpAddPointOnEdge:   aDlg = new RepairGUI_DivideEdgeDlg        (getGeometryGUI(), parent); break;
+  case GEOMOp::OpFreeBoundaries:   aDlg = new RepairGUI_FreeBoundDlg         (getGeometryGUI(), parent); break;
+  case GEOMOp::OpFreeFaces:        aDlg = new RepairGUI_FreeFacesDlg         (getGeometryGUI(), parent); break;
+  case GEOMOp::OpOrientation:      aDlg = new RepairGUI_ChangeOrientationDlg (getGeometryGUI(), parent); break;
+  case GEOMOp::OpRemoveExtraEdges: aDlg = new RepairGUI_RemoveExtraEdgesDlg  (getGeometryGUI(), parent); break;
     default:
       app->putInfo( tr( "GEOM_PRP_COMMAND" ).arg( theCommandID ) );
       break;
index 60e8bef02ff5f39952021a5273b685070a25b0a0..87b6d503dadd4443ae16931fe774b5e534e6c8ab 100644 (file)
@@ -118,6 +118,7 @@ void RepairGUI_ChangeOrientationDlg::Init()
 
   initName( tr( "CHANGE_ORIENTATION_NEW_OBJ_NAME" ) );
   resize(100,100);
+  SelectionIntoArgument();
 }
 
 
index 0d315e37d91e17b01fae2bfbb913d68357cf6039..7423d3b94bd499c13f2444ac8933d237e425e613 100644 (file)
@@ -147,6 +147,7 @@ void RepairGUI_DivideEdgeDlg::Init()
 
   initName( tr( "DEVIDE_EDGE_NEW_OBJECT_NAME" ) );
   resize(100,100);
+  SelectionIntoArgument();
 }
 
 //=================================================================================
diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx b/src/RepairGUI/RepairGUI_LimitToleranceDlg.cxx
new file mode 100644 (file)
index 0000000..19cfe7a
--- /dev/null
@@ -0,0 +1,441 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  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
+//
+//  GEOM RepairGUI : GUI for Geometry component
+//  File   : RepairGUI_LimitToleranceDlg.cxx
+
+#include "RepairGUI_LimitToleranceDlg.h"
+
+#include <DlgRef.h>
+#include <GeometryGUI.h>
+#include <GEOMBase.h>
+#include <SalomeApp_DoubleSpinBox.h>
+
+#include <SalomeApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+#include <SalomeApp_Study.h>
+#include <SalomeApp_Tools.h>
+#include <SUIT_Session.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_ViewWindow.h>
+#include <SUIT_ViewManager.h>
+#include <OCCViewer_ViewModel.h>
+#include <SALOME_ListIteratorOfListIO.hxx>
+
+#include <GEOMImpl_Types.hxx>
+
+#include <TCollection_AsciiString.hxx>
+
+#define DEFAULT_TOLERANCE_VALUE 1e-07
+
+//=================================================================================
+// class    : RepairGUI_LimitToleranceDlg()
+// purpose  : Constructs a RepairGUI_LimitToleranceDlg  which is a child of 'parent', with the
+//            name 'name' and widget flags set to 'f'.
+//            The dialog will by default be modeless, unless you set 'modal' to
+//            TRUE to construct a modal dialog.
+//=================================================================================
+RepairGUI_LimitToleranceDlg::RepairGUI_LimitToleranceDlg(GeometryGUI* theGeometryGUI,
+                                                         QWidget* parent, bool modal)
+  : GEOMBase_Skeleton(theGeometryGUI, parent, modal)
+{
+  QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_LIMIT_TOLERANCE")));
+  QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
+
+  setWindowTitle(tr("GEOM_LIMIT_TOLERANCE_TITLE"));
+
+  /***************************************************************/
+  mainFrame()->GroupConstructors->setTitle(tr("GEOM_LIMIT_TOLERANCE_TITLE"));
+  mainFrame()->RadioButton1->setIcon(image0);
+  mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
+  mainFrame()->RadioButton2->close();
+  mainFrame()->RadioButton3->close();
+
+  GroupPoints = new DlgRef_1SelExt(centralWidget());
+  GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
+  GroupPoints->TextLabel1->setText(tr("GEOM_SELECTED_SHAPE"));
+  GroupPoints->PushButton1->setIcon(image1);
+  GroupPoints->LineEdit1->setReadOnly(true);
+
+  QLabel* aTolLab = new QLabel(tr("GEOM_TOLERANCE"), GroupPoints->Box);
+  myTolEdt = new SalomeApp_DoubleSpinBox(GroupPoints->Box);
+  initSpinBox(myTolEdt, 0., 100., DEFAULT_TOLERANCE_VALUE, "len_tol_precision");
+  myTolEdt->setValue(DEFAULT_TOLERANCE_VALUE);
+
+  QGridLayout* boxLayout = new QGridLayout(GroupPoints->Box);
+  boxLayout->setMargin(0); boxLayout->setSpacing(6);
+  boxLayout->addWidget(aTolLab,  0, 0);
+  boxLayout->addWidget(myTolEdt, 0, 2);
+
+  QVBoxLayout* layout = new QVBoxLayout(centralWidget());
+  layout->setMargin(0); layout->setSpacing(6);
+  layout->addWidget(GroupPoints);
+
+  setHelpFileName("limit_tolerance_operation_page.html");
+
+  Init();
+}
+
+
+//=================================================================================
+// function : ~RepairGUI_LimitToleranceDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+RepairGUI_LimitToleranceDlg::~RepairGUI_LimitToleranceDlg()
+{
+}
+
+
+//=================================================================================
+// function : Init()
+// purpose  :
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::Init()
+{
+  /* init variables */
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+
+  myObject = GEOM::GEOM_Object::_nil();
+
+  //myGeomGUI->SetState(0);
+  //globalSelection(GEOM_COMPOUND);
+
+  mainFrame()->GroupBoxPublish->show();
+
+  /* signals and slots connections */
+  connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
+  connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
+
+  connect(GroupPoints->PushButton1,  SIGNAL(clicked()),       this, SLOT(SetEditCurrentArgument()));
+  connect(GroupPoints->LineEdit1,    SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+
+  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+          this, SLOT(SelectionIntoArgument()));
+
+  initName(tr("LIMIT_TOLERANCE_NEW_OBJ_NAME"));
+
+  ConstructorsClicked(0);
+
+  activateSelection();
+  updateButtonState();
+}
+
+
+//=================================================================================
+// function : ConstructorsClicked()
+// purpose  : Radio button management
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::ConstructorsClicked(int constructorId)
+{
+  disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
+
+  GroupPoints->show();
+  GroupPoints->LineEdit1->setText("");
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+  myEditCurrentArgument->setFocus();
+
+  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+           this, SLOT(SelectionIntoArgument()));
+
+  qApp->processEvents();
+  updateGeometry();
+  resize(minimumSizeHint());
+
+  updateButtonState();
+  activateSelection();
+  SelectionIntoArgument();
+}
+
+
+//=================================================================================
+// function : ClickOnOk()
+// purpose  : Same than click on apply but close this dialog.
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::ClickOnOk()
+{
+  if (ClickOnApply())
+    ClickOnCancel();
+}
+
+//=================================================================================
+// function : ClickOnApply()
+// purpose  :
+//=================================================================================
+bool RepairGUI_LimitToleranceDlg::ClickOnApply()
+{
+  if (!onAcceptLocal())
+    return false;
+
+  initName();
+
+  ConstructorsClicked(0);
+
+  return true;
+}
+
+//=================================================================================
+// function : SelectionIntoArgument()
+// purpose  : Called when selection
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::SelectionIntoArgument()
+{
+  myEditCurrentArgument->setText("");
+  myObject = GEOM::GEOM_Object::_nil();
+
+  LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
+  SALOME_ListIO aSelList;
+  aSelMgr->selectedObjects(aSelList);
+
+  if (aSelList.Extent() == 1) {
+    Handle(SALOME_InteractiveObject) anIO = aSelList.First();
+    Standard_Boolean aRes;
+    myObject = GEOMBase::ConvertIOinGEOMObject(anIO, aRes);
+    if (aRes)
+      myEditCurrentArgument->setText(GEOMBase::GetName(myObject));
+  }
+  updateButtonState();
+}
+
+//=================================================================================
+// function : SetEditCurrentArgument()
+// purpose  :
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::SetEditCurrentArgument()
+{
+  const QObject* send = sender();
+  if (send == GroupPoints->PushButton1)  {
+    myEditCurrentArgument->setFocus();
+    SelectionIntoArgument();
+  }
+}
+
+//=================================================================================
+// function : LineEditReturnPressed()
+// purpose  :
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::LineEditReturnPressed()
+{
+  const QObject* send = sender();
+  if (send == GroupPoints->LineEdit1) {
+    myEditCurrentArgument = GroupPoints->LineEdit1;
+    GEOMBase_Skeleton::LineEditReturnPressed();
+  }
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::ActivateThisDialog()
+{
+  GEOMBase_Skeleton::ActivateThisDialog();
+  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+           this, SLOT(SelectionIntoArgument()));
+  activateSelection();
+}
+
+//=================================================================================
+// function : enterEvent()
+// purpose  : Mouse enter onto the dialog to activate it
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::enterEvent(QEvent*)
+{
+  if (!mainFrame()->GroupConstructors->isEnabled())
+    ActivateThisDialog();
+}
+
+//=================================================================================
+// function : createOperation
+// purpose  :
+//=================================================================================
+GEOM::GEOM_IOperations_ptr RepairGUI_LimitToleranceDlg::createOperation()
+{
+  return getGeomEngine()->GetIHealingOperations(getStudyId());
+}
+
+//=================================================================================
+// function : isValid
+// purpose  :
+//=================================================================================
+bool RepairGUI_LimitToleranceDlg::isValid(QString& msg)
+{
+  double v = myTolEdt->value();
+  bool ok = myTolEdt->isValid(msg, true);
+  return !myObject->_is_nil() && (v > 0.) && ok;
+}
+
+//=================================================================================
+// function : execute
+// purpose  :
+//=================================================================================
+bool RepairGUI_LimitToleranceDlg::execute(ObjectList& objects)
+{
+  bool aResult = false;
+  objects.clear();
+
+  GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation());
+  GEOM::GEOM_Object_var anObj = anOper->LimitTolerance(myObject, myTolEdt->value());
+  aResult = !anObj->_is_nil();
+  if (aResult) {
+    QStringList aParameters;
+    aParameters << myTolEdt->text();
+    anObj->SetParameters(aParameters.join(":").toLatin1().constData());
+    objects.push_back(anObj._retn());
+  }
+
+  return aResult;
+}
+
+//================================================================
+// Function : onAccept
+// Purpose  : This method should be called from dialog's slots onOk() and onApply()
+//            It perfroms user input validation, then it
+//            performs a proper operation and manages transactions, etc.
+//================================================================
+bool RepairGUI_LimitToleranceDlg::onAcceptLocal()
+{
+  if (!getStudy() || !(getStudy()->studyDS()))
+    return false;
+
+  _PTR(Study) aStudy = getStudy()->studyDS();
+
+  bool aLocked = aStudy->GetProperties()->IsLocked();
+  if (aLocked) {
+    MESSAGE("GEOMBase_Helper::onAccept - ActiveStudy is locked");
+    SUIT_MessageBox::warning(this, tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"), tr("BUT_OK"));
+    return false;
+  }
+
+  QString msg;
+  if (!isValid(msg)) {
+    showError(msg);
+    return false;
+  }
+
+  try {
+    if (openCommand()) {
+      SUIT_OverrideCursor wc;
+
+      myGeomGUI->getApp()->putInfo("");
+      ObjectList objects;
+
+      if (!execute(objects)) {
+        wc.suspend();
+        abortCommand();
+        showError();
+      }
+      else {
+        const int nbObjs = objects.size();
+        for (ObjectList::iterator it = objects.begin(); it != objects.end(); ++it) {
+          QString aName = getNewObjectName();
+          if (nbObjs > 1) {
+            if (aName.isEmpty())
+              aName = getPrefix(*it);
+            aName = GEOMBase::GetDefaultName(aName);
+          }
+          else {
+            // PAL6521: use a prefix, if some dialog box doesn't reimplement getNewObjectName()
+            if (aName.isEmpty())
+              aName = GEOMBase::GetDefaultName(getPrefix(*it));
+          }
+          addInStudy(*it, aName.toLatin1().data());
+          display(*it, false);
+        }
+
+        if (nbObjs) {
+          commitCommand();
+          updateObjBrowser();
+          myGeomGUI->getApp()->putInfo(QObject::tr("GEOM_PRP_DONE"));
+        }
+        else {
+          abortCommand();
+        }
+
+        // JFA 28.12.2004 BEGIN // To enable warnings
+        GEOM::GEOM_IHealingOperations_var anOper = GEOM::GEOM_IHealingOperations::_narrow(getOperation());
+        if (!CORBA::is_nil(anOper) && !anOper->IsDone()) {
+          wc.suspend();
+          QString msgw = QObject::tr(anOper->GetErrorCode());
+          SUIT_MessageBox::warning(this, tr("WRN_WARNING"), msgw, tr("BUT_OK"));
+        }
+        // JFA 28.12.2004 END
+      }
+    }
+  }
+  catch(const SALOME::SALOME_Exception& e) {
+    SalomeApp_Tools::QtCatchCorbaException(e);
+    abortCommand();
+  }
+
+  updateViewer();
+  activateSelection();
+  updateButtonState();
+
+  return true;
+}
+
+//=================================================================================
+// function : activateSelection
+// purpose  : Activate selection
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::activateSelection()
+{
+  disconnect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+             this, SLOT(SelectionIntoArgument()));
+
+  globalSelection(GEOM_ALLSHAPES);
+  if (myObject->_is_nil())
+    SelectionIntoArgument();
+
+  connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
+          this, SLOT(SelectionIntoArgument()));
+  updateViewer();
+}
+
+//=================================================================================
+// function : updateButtonState
+// purpose  : Update button state
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::updateButtonState()
+{
+  bool hasMainObj = !myObject->_is_nil();
+  buttonOk()->setEnabled(hasMainObj);
+  buttonApply()->setEnabled(hasMainObj);
+}
+
+//=================================================================================
+// function : restoreSubShapes
+// purpose  :
+//=================================================================================
+void RepairGUI_LimitToleranceDlg::restoreSubShapes(SALOMEDS::Study_ptr   theStudy,
+                                                   SALOMEDS::SObject_ptr theSObject)
+{
+  if (mainFrame()->CheckBoxRestoreSS->isChecked()) {
+    // empty list of arguments means that all arguments should be restored
+    getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, GEOM::ListOfGO(),
+                                        GEOM::FSM_GetInPlace, /*theInheritFirstArg=*/true,
+                                        mainFrame()->CheckBoxAddPrefix->isChecked());
+  }
+}
diff --git a/src/RepairGUI/RepairGUI_LimitToleranceDlg.h b/src/RepairGUI/RepairGUI_LimitToleranceDlg.h
new file mode 100644 (file)
index 0000000..bba1dbf
--- /dev/null
@@ -0,0 +1,83 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  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
+//
+//  GEOM GEOMGUI : GUI for Geometry component
+//  File   : RepairGUI_LimitToleranceDlg.h
+
+#ifndef REPAIRGUI_LIMITTOLERANCEDLG_H
+#define REPAIRGUI_LIMITTOLERANCEDLG_H
+
+#include <GEOMBase_Skeleton.h>
+
+class DlgRef_1SelExt;
+class SalomeApp_DoubleSpinBox;
+class QPushButton;
+class QCheckBox;
+
+//=================================================================================
+// class    : RepairGUI_LimitToleranceDlg
+// purpose  :
+//=================================================================================
+class RepairGUI_LimitToleranceDlg : public GEOMBase_Skeleton
+{
+  Q_OBJECT
+
+public:
+  RepairGUI_LimitToleranceDlg (GeometryGUI*, QWidget* = 0, bool = false);
+  ~RepairGUI_LimitToleranceDlg();
+
+protected:
+  // redefined from GEOMBase_Helper
+  virtual GEOM::GEOM_IOperations_ptr createOperation();
+  virtual bool                       isValid (QString&);
+  virtual bool                       execute (ObjectList&);
+  virtual void                       restoreSubShapes (SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr);
+
+private:
+  void                               Init();
+  void                               enterEvent (QEvent*);
+  void                               initSelection();
+
+  bool                               onAcceptLocal();
+
+  void                               activateSelection();
+  void                               updateButtonState();
+
+private:
+  GEOM::GEOM_Object_var              myObject;
+
+  DlgRef_1SelExt*                    GroupPoints;
+  SalomeApp_DoubleSpinBox*           myTolEdt;
+
+private slots:
+  void                               ClickOnOk();
+  bool                               ClickOnApply();
+
+  void                               ActivateThisDialog();
+
+  void                               LineEditReturnPressed();
+  void                               SelectionIntoArgument();
+  void                               SetEditCurrentArgument();
+
+  void                               ConstructorsClicked( int );
+};
+
+#endif // REPAIRGUI_LIMITTOLERANCEDLG_H
index 51afbd167b736c2dff6c66e770cefdce89e0872b..1a654d7c0ac64bfcc1311c3d25e3dc6f90f45a82 100644 (file)
@@ -120,6 +120,7 @@ void RepairGUI_RemoveExtraEdgesDlg::Init()
 
   initName( tr( "REMOVE_EXTRA_EDGES_NEW_OBJ_NAME" ) );
   resize(100,100);
+  SelectionIntoArgument();
 }
 
 
@@ -252,6 +253,7 @@ void RepairGUI_RemoveExtraEdgesDlg::enterEvent(QEvent* e)
 void RepairGUI_RemoveExtraEdgesDlg::activateSelection()
 {
   TColStd_MapOfInteger aTypes;
+  aTypes.Add( GEOM_SHELL );
   aTypes.Add( GEOM_SOLID );
   aTypes.Add( GEOM_COMPOUND );
   globalSelection( aTypes );
index 8e533506886898dc0984d198917001e3cd659703..006a929b809661185c17dfe51d03e5b4a39f18ff 100644 (file)
@@ -137,6 +137,7 @@ void RepairGUI_SewingDlg::Init()
 
   initName( tr( "SEWING_NEW_OBJ_NAME" ) );
   resize(100,100);
+  SelectionIntoArgument();
 }
 
 
index cabf3749ab9c777e7281d8c23ec0e279f25952ec..5e2871f1b16a34bd4790aceb62f8ded448230d18 100755 (executable)
@@ -224,7 +224,7 @@ void RepairGUI_ShapeProcessDlg::init()
       myBSpline2DCurveChk = new QCheckBox( tr("GEOM_2D_CURVE_MODE"), w );
 
       myBSplineTol3D = new SalomeApp_DoubleSpinBox( w );
-      initSpinBox( mySplitContTol3D, 0., 100., 1e-7, "len_tol_precision" );
+      initSpinBox( myBSplineTol3D, 0., 100., 1e-7, "len_tol_precision" );
       
       myBSplineTol2D = new SalomeApp_DoubleSpinBox( w );
       initSpinBox( myBSplineTol2D, 0., 100., 1e-7, "param_tol_precision" );      
@@ -322,6 +322,7 @@ void RepairGUI_ShapeProcessDlg::init()
   reset();
 
   initName( tr( "PROCESS_SHAPE_NEW_OBJ_NAME" ) );
+  selectionChanged();
 }
 
 //=================================================================================
index 15796bc2f95ed019a3d4c723d831e4acbee89f57..2469cefe6d7b2e301fc240c1f1ff98ce07be1f01 100644 (file)
@@ -246,9 +246,8 @@ void RepairGUI_SuppressFacesDlg::SelectionIntoArgument()
         aSelMgr->clearSelected();
 
         Standard_Boolean isOk;
-        char* objIOR = GEOMBase::GetIORFromObject(myObject);
-        Handle(GEOM_AISShape) aSh = GEOMBase::ConvertIORinGEOMAISShape(objIOR, isOk, true);
-        free(objIOR);
+        QString objIOR = GEOMBase::GetIORFromObject(myObject);
+        Handle(GEOM_AISShape) aSh = GEOMBase::ConvertIORinGEOMAISShape(objIOR.toLatin1().constData(), isOk, true);
         if (!isOk || aSh.IsNull())
           return;
 
index 6a912182e6b1b0b1e087a2a2c94ff0d16908d800..06b1224ba299893a1c3e7d0df92c8e081d39d0dd 100644 (file)
@@ -43,4 +43,4 @@ libSTEPImport_la_CPPFLAGS =   \
 libSTEPImport_la_LDFLAGS  =                    \
        $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics \
        $(STDLIB)                               \
-       $(CAS_LDPATH) -lTKSTEP
+       $(CAS_LDPATH) -lTKSTEP -lTKCAF -lTKLCAF -lTKSTEPBase
index e6819dcb2e0a2c5600b2fdf22adee4603ef6a7b5..1983470bca3bb3a38cb6ad135c33f29e0dee8cd1 100644 (file)
 //
 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
+//  File:        STEPImport.cxx
+//  Created:     Wed May 19 14:41:10 2004
+//  Author:      Pavel TELKOV
 
-// File:        STEPImport.cxx
-// Created:     Wed May 19 14:41:10 2004
-// Author:      Pavel TELKOV
-//              <ptv@mutex.nnov.opencascade.com>
-//
 #include "utilities.h"
 
 #include <Basics_Utils.hxx>
 #include <IFSelect_ReturnStatus.hxx>
 
 #include <STEPControl_Reader.hxx>
+#include <StepBasic_ProductDefinition.hxx>
+#include <StepBasic_ProductDefinitionFormation.hxx>
+#include <StepBasic_Product.hxx>
+#include <Interface_InterfaceModel.hxx>
+#include <XSControl_TransferReader.hxx>
+#include <XSControl_WorkSession.hxx>
+
+#include <Transfer_Binder.hxx>
+#include <TNaming_Builder.hxx>
+#include <TDataStd_Name.hxx>
+#include <Transfer_TransientProcess.hxx>
+#include <TransferBRep.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <TopoDS_Compound.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TDF_Label.hxx>
+#include <TDF_Tool.hxx>
 #include <Interface_Static.hxx>
 
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopExp.hxx>
+#include <TopoDS_Iterator.hxx>
+#include <BRepTools.hxx>
+
 #include <Standard_Failure.hxx>
 #include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
 
 
 extern "C"
 {
-STEPIMPORT_EXPORT
+  STEPIMPORT_EXPORT
   TopoDS_Shape Import (const TCollection_AsciiString& theFileName,
                        const TCollection_AsciiString& /*theFormatName*/,
                        TCollection_AsciiString&       theError,
-                       const TDF_Label&)
+                       const TDF_Label&               theShapeLabel)
   {
     MESSAGE("Import STEP model from file " << theFileName.ToCString());
     // Set "C" numeric locale to save numbers correctly
@@ -87,7 +103,7 @@ STEPIMPORT_EXPORT
     //VRV: OCC 4.0 migration
     TopoDS_Compound compound;
     BRep_Builder B;
-    B.MakeCompound( compound );
+    B.MakeCompound(compound);
     try {
 #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
       OCC_CATCH_SIGNALS;
@@ -95,13 +111,13 @@ STEPIMPORT_EXPORT
       IFSelect_ReturnStatus status = aReader.ReadFile(theFileName.ToCString());
 
       if (status == IFSelect_RetDone) {
-        Standard_Boolean failsonly = Standard_False ;
-        aReader.PrintCheckLoad (failsonly, IFSelect_ItemsByEntity);
+        Standard_Boolean failsonly = Standard_False;
+        aReader.PrintCheckLoad(failsonly, IFSelect_ItemsByEntity);
         /* Root transfers */
         Standard_Integer nbr = aReader.NbRootsForTransfer();
-        aReader.PrintCheckTransfer (failsonly, IFSelect_ItemsByEntity);
+        aReader.PrintCheckTransfer(failsonly, IFSelect_ItemsByEntity);
 
-        for ( Standard_Integer n=1; n <= nbr; n++) {
+        for (Standard_Integer n = 1; n <= nbr; n++) {
           Standard_Boolean ok = aReader.TransferRoot(n);
           /* Collecting resulting entities */
           Standard_Integer nbs = aReader.NbShapes();
@@ -116,22 +132,83 @@ STEPIMPORT_EXPORT
             break;
           }
 
-          for ( Standard_Integer i=1; i<=nbs; i++ ) {
+          for (Standard_Integer i = 1; i <= nbs; i++) {
             TopoDS_Shape aShape = aReader.Shape(i);
-            if ( aShape.IsNull() ) {
+            if (aShape.IsNull()) {
               // THROW_SALOME_CORBA_EXCEPTION("Null shape in GEOM_Gen_i::ImportStep", SALOME::BAD_PARAM) ;
               //return aResShape;
               continue;
             }
             else {
-              B.Add( compound, aShape ) ;
+              B.Add(compound, aShape);
             }
           }
         }
-        if ( aResShape.IsNull() )
+        if (aResShape.IsNull())
           aResShape = compound;
 
-      } else {
+        // BEGIN: Store names of sub-shapes from file
+        TopTools_IndexedMapOfShape anIndices;
+        TopExp::MapShapes(aResShape, anIndices);
+
+        Handle(Interface_InterfaceModel) Model = aReader.WS()->Model();
+        Handle(XSControl_TransferReader) TR = aReader.WS()->TransferReader();
+        if (!TR.IsNull()) {
+          Handle(Transfer_TransientProcess) TP = TR->TransientProcess();
+          Handle(Standard_Type) tPD  = STANDARD_TYPE(StepBasic_ProductDefinition);
+
+          Standard_Integer nb = Model->NbEntities();
+          for (Standard_Integer ie = 1; ie <= nb; ie++) {
+            Handle(Standard_Transient) enti = Model->Value(ie);
+            if (enti->DynamicType() != tPD) continue;
+
+            Handle(StepBasic_ProductDefinition) PD =
+              Handle(StepBasic_ProductDefinition)::DownCast(enti);
+            if (PD.IsNull()) continue;
+
+            Handle(StepBasic_Product) Prod = PD->Formation()->OfProduct();
+            if (Prod->Name()->UsefullLength() <= 0) continue;
+
+            Handle(TCollection_HAsciiString) aName = Prod->Name();
+            TCollection_ExtendedString aNameExt (aName->ToCString());
+
+            // special check to pass names like "Open CASCADE STEP translator 6.3 1"
+            TCollection_AsciiString aSkipName ("Open CASCADE STEP translator");
+            if (aName->Length() >= aSkipName.Length()) {
+              if (aName->String().SubString(1, aSkipName.Length()).IsEqual(aSkipName))
+                continue;
+            }
+
+            // find target shape
+            Handle(Transfer_Binder) binder = TP->Find(enti);
+            if (binder.IsNull()) continue;
+            TopoDS_Shape S = TransferBRep::ShapeResult(binder);
+            if (S.IsNull()) continue;
+
+            // as PRODUCT can be included in the main shape
+            // several times, we look here for all iclusions.
+            Standard_Integer isub, nbSubs = anIndices.Extent();
+            for (isub = 1; isub <= nbSubs; isub++)
+            {
+              TopoDS_Shape aSub = anIndices.FindKey(isub);
+              if (aSub.IsPartner(S)) {
+                // create label and set shape
+                TDF_Label L;
+                TDF_TagSource aTag;
+                L = aTag.NewChild(theShapeLabel);
+                TNaming_Builder tnBuild (L);
+                //tnBuild.Generated(S);
+                tnBuild.Generated(aSub);
+
+                // set a name
+                TDataStd_Name::Set(L, aNameExt);
+              }
+            }
+          }
+        }
+        // END: Store names
+      }
+      else {
 //        switch (status) {
 //        case IFSelect_RetVoid:
 //          theError = "Nothing created or No data to process";
index 92153168d7410575474d9e3f6ef266e13fb549c2..1038e49558b2d3577419a519bb63fef315f5032e 100644 (file)
@@ -97,4 +97,6 @@ libTransformationGUI_la_CPPFLAGS =            \
 
 libTransformationGUI_la_LDFLAGS  =                             \
        ../GEOMFiltersSelection/libGEOMFiltersSelection.la      \
-       ../GEOMBase/libGEOMBase.la
+       ../GEOMBase/libGEOMBase.la                              \
+       $(CAS_LDPATH) -lTKShHealing
+
index 5034aee88f278b6994f1136057351adce7fa4f58..18c96f017577190d37f2b56f90e92b52372f8c71 100644 (file)
@@ -197,6 +197,12 @@ bool TransformationGUI_MirrorDlg::ClickOnApply()
     return false;
 
   initName();
+
+  myObjects.length(0);
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+  myEditCurrentArgument->setText("");
+  myGeomGUI->getApp()->selectionMgr()->clearSelected();
+
   // activate selection and connect selection manager
   ConstructorsClicked(getConstructorId());
   return true;
@@ -266,7 +272,7 @@ void TransformationGUI_MirrorDlg::SelectionIntoArgument()
           //Find SubShape Object in Father
           GEOM::GEOM_Object_var aFindedObject = findObjectInFather(myArgument, aName);
 
-          if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+          if (aFindedObject->_is_nil()) { // Object not found in study
             GEOM::GEOM_IShapesOperations_var aShapesOp =
               getGeomEngine()->GetIShapesOperations(getStudyId());
             myArgument = aShapesOp->GetSubShape(myArgument, anIndex);
@@ -524,5 +530,5 @@ void TransformationGUI_MirrorDlg::addSubshapesToStudy()
       return;
     }
     addSubshapesToFather(objMap);
-  }
+    }
 }
index 643c5c8d84f322f36a213d2e11c32a06cf64a60a..aebe44d8263eac9c331907aa82a957eb605486bf 100644 (file)
@@ -153,6 +153,8 @@ void TransformationGUI_MultiRotationDlg::Init()
 
   myBase = myVector = GEOM::GEOM_Object::_nil();
 
+  mainFrame()->GroupBoxPublish->show();
+
   // signals and slots connections
   connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
@@ -332,7 +334,7 @@ void TransformationGUI_MultiRotationDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           myVector = aShapesOp->GetSubShape(aSelectedObject, anIndex);
@@ -620,3 +622,24 @@ void TransformationGUI_MultiRotationDlg::addSubshapesToStudy()
   }
   addSubshapesToFather(objMap);
 }
+
+//=================================================================================
+// function : restoreSubShapes
+// purpose  :
+//=================================================================================
+void TransformationGUI_MultiRotationDlg::restoreSubShapes (SALOMEDS::Study_ptr   theStudy,
+                                                           SALOMEDS::SObject_ptr theSObject)
+{
+  if (mainFrame()->CheckBoxRestoreSS->isChecked()) {
+    // we pass here the first operation argument (object) through the list of arguments
+    // because the rotation operation place its arguments in the data structure in another order,
+    // and we need to point the first argument directly
+    GEOM::ListOfGO_var anArgs = new GEOM::ListOfGO;
+    anArgs->length(1);
+    anArgs[0] = myBase;
+    getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, anArgs,
+                                        /*theFindMethod=*/GEOM::FSM_Transformed,
+                                        /*theInheritFirstArg=*/true,
+                                        mainFrame()->CheckBoxAddPrefix->isChecked());
+  }
+}
index c8f05b819a231a6df2fe1d3d088a246a4af4b189..b0874fa41d69d7e97dd31924c8f6c19d3784d5e8 100644 (file)
@@ -51,6 +51,7 @@ protected:
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );
   virtual void                       addSubshapesToStudy();
+  virtual void                       restoreSubShapes( SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr );
 
 private:
   void                               Init();
index fc0ddd472dc663d465fed548d020e277ddcf8f84..36f2a54dc729fe47e58df0d638710f19079b1806 100644 (file)
 
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_ViewWindow.h>
+#include <SUIT_ViewManager.h>
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
+#include <GEOM_AISVector.hxx>
+#include <SOCC_Prs.h>
+#include <SOCC_ViewModel.h>
 
 // OCCT Includes
 #include <TopoDS_Shape.hxx>
 #include <TopExp.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
+#include <ShapeAnalysis_Edge.hxx>
+#include <BRep_Tool.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRep_Builder.hxx>
 
 #include <GEOMImpl_Types.hxx>
 
@@ -160,6 +170,8 @@ void TransformationGUI_MultiTranslationDlg::Init()
 
   myBase = myVectorU = myVectorV = GEOM::GEOM_Object::_nil();
 
+  mainFrame()->GroupBoxPublish->show();
+
   // signals and slots connections
   connect(buttonOk(),    SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
@@ -353,7 +365,7 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           if (myEditCurrentArgument == GroupDimensions->LineEdit3)
@@ -678,6 +690,7 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects)
   switch (getConstructorId()) {
   case 0:
     if (!CORBA::is_nil(myBase) && !CORBA::is_nil(myVectorU)) {
+      createPathPreview ( myVectorU );
       anObj = anOper->MultiTranslate1D(myBase, myVectorU, myStepU, myNbTimesU);
       if(!IsPreview()) {
         aParameters<<GroupPoints->SpinBox_DX->text();
@@ -689,6 +702,8 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects)
   case 1:
     if (!CORBA::is_nil(myBase) && !CORBA::is_nil(myVectorU) &&
         !CORBA::is_nil(myVectorV)) {
+      createPathPreview ( myVectorU );
+      createPathPreview ( myVectorV );
       anObj = anOper->MultiTranslate2D(myBase,
                                        myVectorU, myStepU, myNbTimesU,
                                        myVectorV, myStepV, myNbTimesV);
@@ -731,3 +746,50 @@ void TransformationGUI_MultiTranslationDlg::addSubshapesToStudy()
   }
   addSubshapesToFather(objMap);
 }
+
+//=================================================================================
+// function : restoreSubShapes
+// purpose  :
+//=================================================================================
+void TransformationGUI_MultiTranslationDlg::restoreSubShapes (SALOMEDS::Study_ptr   theStudy,
+                                                              SALOMEDS::SObject_ptr theSObject)
+{
+  if (mainFrame()->CheckBoxRestoreSS->isChecked()) {
+    // we pass here the first operation argument (object) through the list of arguments
+    // because the rotation operation place its arguments in the data structure in another order,
+    // and we need to point the first argument directly
+    GEOM::ListOfGO_var anArgs = new GEOM::ListOfGO;
+    anArgs->length(1);
+    anArgs[0] = myBase;
+    getGeomEngine()->RestoreSubShapesSO(theStudy, theSObject, anArgs,
+                                        /*theFindMethod=*/GEOM::FSM_Transformed,
+                                        /*theInheritFirstArg=*/true,
+                                        mainFrame()->CheckBoxAddPrefix->isChecked());
+  }
+}
+
+//=================================================================================
+// function : createPathPreview
+// purpose  :
+//=================================================================================
+void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Object_var thePath )
+{
+  if ( IsPreview() ) {
+    TopoDS_Shape aShape;
+    GEOMBase::GetShape( thePath, aShape, TopAbs_SHAPE );
+    TopoDS_Edge anEdge = TopoDS::Edge( aShape );
+    ShapeAnalysis_Edge aShapeAnal;
+    TopoDS_Vertex aFirst = aShapeAnal.FirstVertex( anEdge );
+    TopoDS_Vertex aLast = aShapeAnal.LastVertex( anEdge );
+    TopoDS_Shape aVector = BRepBuilderAPI_MakeEdge(BRep_Tool::Pnt(aFirst), BRep_Tool::Pnt(aLast)).Shape();
+    const char* aName = "tmpVector";
+    Handle(GEOM_AISVector) anIO = new GEOM_AISVector( aVector, aName );
+    
+    // add Prs to preview
+    SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
+    SOCC_Prs* aPrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));
+    if (aPrs)
+      aPrs->AddObject(anIO);
+    GEOMBase_Helper::displayPreview( aPrs, false, true );
+  }
+}
index 3e1f146d8f9bf1b0edc6d8259b5d835c514ce8d0..ec4904819321c2da667fb34ff003a0d537cd8817 100644 (file)
@@ -51,10 +51,12 @@ protected:
   virtual bool                       isValid( QString& );
   virtual bool                       execute( ObjectList& );
   virtual void                       addSubshapesToStudy();
+  virtual void                       restoreSubShapes( SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr );
 
 private:
   void                               Init();
   void                               enterEvent( QEvent* );
+  void                               createPathPreview( GEOM::GEOM_Object_var );
   
 private:
   GEOM::GEOM_Object_var              myBase, myVectorU, myVectorV;
index 288eae6c05aaf506a26193c9e7778ee5888258c7..da9067e0f7cb2327f3fd754d5b41747bee0f7e43 100644 (file)
@@ -91,7 +91,6 @@ TransformationGUI_PositionDlg::TransformationGUI_PositionDlg
 
   // Activate Create a Copy mode
   Group1->CheckButton1->setChecked(true);
-  Group1->CheckButton1->setChecked(false);
   CreateCopyModeChanged(true);
 
   Init();
@@ -300,6 +299,12 @@ bool TransformationGUI_PositionDlg::ClickOnApply()
     return false;
 
   initName();
+
+  myObjects.length(0);
+  myEditCurrentArgument = Group1->LineEdit1;
+  myEditCurrentArgument->setText("");
+  myGeomGUI->getApp()->selectionMgr()->clearSelected();
+
   // activate selection and connect selection manager
   ConstructorsClicked(getConstructorId());
   return true;
@@ -340,8 +345,8 @@ void TransformationGUI_PositionDlg::SelectionIntoArgument()
     else
       myEditCurrentArgument->setText(aName);
 
-    if (getConstructorId() == 2)
-      Group1->PushButton5->click();
+    /*    if (getConstructorId() == 2)
+          Group1->PushButton5->click();*/
   }
   else if (myEditCurrentArgument == Group1->LineEdit2) {
     if (aSelList.Extent() != 1)
@@ -401,7 +406,7 @@ void TransformationGUI_PositionDlg::SelectionIntoArgument()
       //Find SubShape Object in Father
       GEOM::GEOM_Object_var aFindedObject = GEOMBase_Helper::findObjectInFather(aSelectedObject, aName);
       
-      if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+      if (aFindedObject->_is_nil()) { // Object not found in study
         GEOM::GEOM_IShapesOperations_var aShapesOp =
           getGeomEngine()->GetIShapesOperations(getStudyId());
         aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
@@ -628,7 +633,6 @@ bool TransformationGUI_PositionDlg::execute (ObjectList& objects)
   case 1:
     {
       for (int i = 0; i < myObjects.length(); i++) {
-        if (toCreateCopy)
           anObj = toCreateCopy ? 
             anOper->PositionShapeCopy(myObjects[i], myStartLCS, myEndLCS) :
             anOper->PositionShape(myObjects[i], myStartLCS, myEndLCS);
index deeeabc6e8e58b31615a1e996930f011092fd73e..c999df5a2c5499a2ca63b317dddde9a8fa435af6 100644 (file)
@@ -236,6 +236,12 @@ bool TransformationGUI_RotationDlg::ClickOnApply()
     return false;
 
   initName();
+
+  myObjects.length(0);
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+  myEditCurrentArgument->setText("");
+  myGeomGUI->getApp()->selectionMgr()->clearSelected();
+
   // activate selection and connect selection manager
   ConstructorsClicked(getConstructorId());
   return true;
@@ -311,7 +317,7 @@ void TransformationGUI_RotationDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index 5dd32300b9664d578bf6ea9fd59726da5ccffc71..17023381f3bebe2b3796e7119284742cc7515df6 100644 (file)
@@ -202,6 +202,9 @@ void TransformationGUI_ScaleDlg::ConstructorsClicked (int constructorId)
 {
   disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
 
+  myPoint = GEOM::GEOM_Object::_nil();
+  LineEdit2->clear();
+  
   switch (constructorId) {
   case 0: // translation an object by dx, dy, dz
     TextLabel3->setText(tr("GEOM_SCALE_FACTOR"));
@@ -258,6 +261,12 @@ bool TransformationGUI_ScaleDlg::ClickOnApply()
     return false;
 
   initName(tr("GEOM_SCALE"));
+
+  myObjects.length(0);
+  myEditCurrentArgument = LineEdit1;
+  myEditCurrentArgument->setText("");
+  myGeomGUI->getApp()->selectionMgr()->clearSelected();
+
   // activate selection and connect selection manager
   ConstructorsClicked(getConstructorId());
   return true;
@@ -319,7 +328,7 @@ void TransformationGUI_ScaleDlg::SelectionIntoArgument()
             //Find SubShape Object in Father
             GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-            if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+            if (aFindedObject->_is_nil()) { // Object not found in study
               GEOM::GEOM_IShapesOperations_var aShapesOp =
                 getGeomEngine()->GetIShapesOperations(getStudyId());
               aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
index 73a7694b2c933bd96da7bc64a3f911bf3f44d01a..292af61f67eaa5dd3b0346bb054fe925ca423005 100644 (file)
 
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_ViewWindow.h>
+#include <SUIT_ViewManager.h>
 #include <SalomeApp_Application.h>
 #include <LightApp_SelectionMgr.h>
+#include <GEOM_AISVector.hxx>
+#include <SOCC_Prs.h>
+#include <SOCC_ViewModel.h>
 
 // OCCT Includes
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Edge.hxx>
+#include <TopoDS_Vertex.hxx>
 #include <TopoDS.hxx>
 #include <TopExp.hxx>
 #include <TColStd_IndexedMapOfInteger.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
+#include <ShapeAnalysis_Edge.hxx>
+#include <BRep_Tool.hxx>
+#include <BRepBuilderAPI_MakeEdge.hxx>
+#include <BRep_Builder.hxx>
 
 #include <GEOMImpl_Types.hxx>
 
@@ -272,6 +283,12 @@ bool TransformationGUI_TranslationDlg::ClickOnApply()
     return false;
 
   initName();
+
+  myObjects.length(0);
+  myEditCurrentArgument = GroupPoints->LineEdit1;
+  myEditCurrentArgument->setText("");
+  myGeomGUI->getApp()->selectionMgr()->clearSelected();
+
   // activate selection and connect selection manager
   ConstructorsClicked(getConstructorId());
   return true;
@@ -359,7 +376,7 @@ void TransformationGUI_TranslationDlg::SelectionIntoArgument()
         //Find SubShape Object in Father
         GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aSelectedObject, aName);
 
-        if (aFindedObject == GEOM::GEOM_Object::_nil()) { // Object not found in study
+        if (aFindedObject->_is_nil()) { // Object not found in study
           GEOM::GEOM_IShapesOperations_var aShapesOp =
             getGeomEngine()->GetIShapesOperations(getStudyId());
           aSelectedObject = aShapesOp->GetSubShape(aSelectedObject, anIndex);
@@ -623,6 +640,8 @@ bool TransformationGUI_TranslationDlg::execute (ObjectList& objects)
       QStringList aParameters;
       aParameters<<GroupPoints->SpinBox3->text();
       bool byDistance = GroupPoints->CheckBox1->isChecked();
+      createPathPreview( myVector );
+
       if (byDistance) {
         double aDistance = GroupPoints->SpinBox3->value();
         for (int i = 0; i < myObjects.length(); i++) {
@@ -727,3 +746,29 @@ void TransformationGUI_TranslationDlg::addSubshapesToStudy()
     addSubshapesToFather(objMap);
   }
 }
+
+//=================================================================================
+// function : createPathPreview
+// purpose  :
+//=================================================================================
+void TransformationGUI_TranslationDlg::createPathPreview ( GEOM::GEOM_Object_var thePath )
+{
+  if ( IsPreview() ) {
+    TopoDS_Shape aShape;
+    GEOMBase::GetShape( thePath, aShape, TopAbs_SHAPE );
+    TopoDS_Edge anEdge = TopoDS::Edge( aShape );
+    ShapeAnalysis_Edge aShapeAnal;
+    TopoDS_Vertex aFirst = aShapeAnal.FirstVertex( anEdge );
+    TopoDS_Vertex aLast = aShapeAnal.LastVertex( anEdge );
+    TopoDS_Shape aVector = BRepBuilderAPI_MakeEdge(BRep_Tool::Pnt(aFirst), BRep_Tool::Pnt(aLast)).Shape();
+    const char* aName = "tmpVector";
+    Handle(GEOM_AISVector) anIO = new GEOM_AISVector( aVector, aName );
+    
+    // add Prs to preview
+    SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
+    SOCC_Prs* aPrs = dynamic_cast<SOCC_Prs*>(((SOCC_Viewer*)(vw->getViewManager()->getViewModel()))->CreatePrs(0));
+    if (aPrs)
+      aPrs->AddObject(anIO);
+    GEOMBase_Helper::displayPreview( aPrs, false, true );
+  }
+}
index 2d064dabb0913f7e1dfd0749e60b2d4eed008c8c..02c437fd5819510dd0ccdc63f463ce4152b973ea 100644 (file)
@@ -55,6 +55,7 @@ protected:
 private:
   void                               Init();
   void                               enterEvent( QEvent* );
+  void                               createPathPreview( GEOM::GEOM_Object_var );
 
 private:
   GEOM::ListOfGO                     myObjects;
diff --git a/src/VTKExport/Makefile.am b/src/VTKExport/Makefile.am
new file mode 100644 (file)
index 0000000..31c22b3
--- /dev/null
@@ -0,0 +1,45 @@
+#  Copyright (C) 2007-2010  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
+#  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
+#
+
+#  $Header$
+#
+include $(top_srcdir)/adm_local/unix/make_common_starter.am
+
+# header files 
+salomeinclude_HEADERS =
+
+# Libraries targets
+lib_LTLIBRARIES = libVTKExport.la
+
+dist_libVTKExport_la_SOURCES = \
+       VTKExport.cxx
+
+# additional information to compile and link file
+
+libVTKExport_la_CPPFLAGS =     \
+       $(CAS_CPPFLAGS)         \
+       $(VTK_INCLUDES)         \
+       $(KERNEL_CXXFLAGS)      \
+       -I$(srcdir)/../OCC2VTK
+
+libVTKExport_la_LDFLAGS  =                     \
+       ../OCC2VTK/libOCC2VTK.la                \
+       $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics     \
+       $(STDLIB)                               \
+       $(CAS_LDPATH)
diff --git a/src/VTKExport/VTKExport.cxx b/src/VTKExport/VTKExport.cxx
new file mode 100644 (file)
index 0000000..4d0f3ac
--- /dev/null
@@ -0,0 +1,144 @@
+//  Copyright (C) 2007-2010  CEA/DEN, EDF R&D, OPEN CASCADE
+//
+//  Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
+//
+//  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
+//
+
+// File:        VTKExport.cxx
+// Author:      Oleg UVAROV
+//
+#include "utilities.h"
+
+#include <Basics_Utils.hxx>
+
+#include <OCC2VTK_Tools.h>
+
+#include <GEOM_VertexSource.h>
+#include <GEOM_EdgeSource.h>
+#include <GEOM_WireframeFace.h>
+#include <GEOM_ShadingFace.h>
+
+#include <vtkAppendPolyData.h>  
+#include <vtkPolyDataWriter.h>  
+
+#include <TCollection_AsciiString.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Shape.hxx>
+
+#ifdef WIN32
+# if defined VTKEXPORT_EXPORTS || defined VTKExport_EXPORTS
+#  define VTKEXPORT_EXPORT __declspec( dllexport )
+# else
+#  define VTKEXPORT_EXPORT __declspec( dllimport )
+# endif
+#else
+# define VTKEXPORT_EXPORT
+#endif
+
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+
+extern "C"
+{
+  VTKEXPORT_EXPORT
+  int Export(const TopoDS_Shape& theShape,
+             const TCollection_AsciiString& theFileName,
+             const TCollection_AsciiString& theFormatName)
+  {
+    MESSAGE("Export VTK into file " << theFileName.ToCString());
+
+    try
+    {
+      GEOM_VertexSource* myVertexSource = GEOM_VertexSource::New();
+      GEOM_EdgeSource* myIsolatedEdgeSource = GEOM_EdgeSource::New();
+      GEOM_EdgeSource* myOneFaceEdgeSource = GEOM_EdgeSource::New();
+      GEOM_EdgeSource* mySharedEdgeSource = GEOM_EdgeSource::New();
+      GEOM_WireframeFace* myWireframeFaceSource = GEOM_WireframeFace::New();
+      GEOM_ShadingFace* myShadingFaceSource = GEOM_ShadingFace::New();
+
+      vtkAppendPolyData* myAppendFilter = vtkAppendPolyData::New();
+      myAppendFilter->AddInput( myVertexSource->GetOutput() );
+      myAppendFilter->AddInput( myIsolatedEdgeSource->GetOutput() );
+      myAppendFilter->AddInput( myOneFaceEdgeSource->GetOutput() );
+      myAppendFilter->AddInput( mySharedEdgeSource->GetOutput() );
+      //myAppendFilter->AddInput( myWireframeFaceSource->GetOutput() ); // iso-lines are unnecessary
+      myAppendFilter->AddInput( myShadingFaceSource->GetOutput() );
+
+      float aDeflection = 1.0;
+      bool anIsForced = true;
+      bool anIsRelative = false;
+      bool anIsVector = false;
+
+      GEOM::MeshShape( theShape, aDeflection, anIsForced );
+
+      TopExp_Explorer aVertexExp( theShape, TopAbs_VERTEX );
+      for( ; aVertexExp.More(); aVertexExp.Next() )
+      {
+        const TopoDS_Vertex& aVertex = TopoDS::Vertex( aVertexExp.Current() );
+        myVertexSource->AddVertex( aVertex );
+      }
+
+      GEOM::MeshShape2( theShape, aDeflection, anIsRelative );
+
+      TopTools_IndexedDataMapOfShapeListOfShape anEdgeMap;
+      TopExp::MapShapesAndAncestors( theShape, TopAbs_EDGE, TopAbs_FACE, anEdgeMap );
+  
+      GEOM::SetShape( theShape,
+                      anEdgeMap,
+                      anIsVector,
+                      myIsolatedEdgeSource,
+                      myOneFaceEdgeSource,
+                      mySharedEdgeSource,
+                      myWireframeFaceSource,
+                      myShadingFaceSource );
+
+      myAppendFilter->Update();
+
+      // Set "C" numeric locale to save numbers correctly
+      Kernel_Utils::Localizer loc;
+
+      vtkPolyDataWriter* aWriter = vtkPolyDataWriter::New(); 
+      aWriter->SetInput( myAppendFilter->GetOutput() );
+      aWriter->SetFileName( theFileName.ToCString() );
+      aWriter->Write();
+      aWriter->Delete();
+
+      myVertexSource->Delete();
+      myIsolatedEdgeSource->Delete();
+      myOneFaceEdgeSource->Delete();
+      mySharedEdgeSource->Delete();
+      myWireframeFaceSource->Delete();
+      myShadingFaceSource->Delete();
+
+      myAppendFilter->Delete();
+
+      return 1;
+    }
+    catch(Standard_Failure)
+    {
+      //THROW_SALOME_CORBA_EXCEPTION("Exception catched in VTKExport", SALOME::BAD_PARAM);
+    }
+    return 0;
+  }
+}
diff --git a/src/VTKExport/VTKExport.pro b/src/VTKExport/VTKExport.pro
new file mode 100644 (file)
index 0000000..ddc34fe
--- /dev/null
@@ -0,0 +1,47 @@
+#  Copyright (C) 2007-2010  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
+#  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
+#
+
+TEMPLATE = lib
+TARGET = VTKExport
+DESTDIR = ../../lib
+MOC_DIR = ../../moc
+OBJECTS_DIR = ../../obj/$$TARGET
+
+CASROOT = $$(CASROOT)
+CAS_CPPFLAGS = $${CASROOT}/inc
+
+KERNEL_CXXFLAGS = $$(KERNEL_ROOT_DIR)/include/salome
+
+KERNEL_LDFLAGS = -L$$(KERNEL_ROOT_DIR)/lib/salome
+
+STDLIB = -lstdc++
+
+CAS_LDPATH = -L$$(CASROOT)/Linux/lib
+
+INCLUDEPATH += $${CAS_CPPFLAGS} $${KERNEL_CXXFLAGS}
+
+LIBS += $${STDLIB} $${CAS_LDPATH} $${KERNEL_LDFLAGS} -lSALOMELocalTrace 
+
+CONFIG -= debug release debug_and_release
+CONFIG += qt thread debug dll shared
+
+win32:DEFINES += WIN32 
+DEFINES += OCC_VERSION_MAJOR=6 OCC_VERSION_MINOR=1 OCC_VERSION_MAINTENANCE=1 LIN LINTEL CSFDB No_exception HAVE_CONFIG_H HAVE_LIMITS_H HAVE_WOK_CONFIG_H OCC_CONVERT_SIGNALS
+
+SOURCES  = VTKExport.cxx