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)
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)
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)
# python files
dist_salomescript_PYTHON = \
+ addvars2notebook_GEOM.py \
geom_setenv.py
# distributed files
--- /dev/null
+
+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
# 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
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 ---------------------------------------------
CHECK_HTML_GENERATORS
+echo
+echo ---------------------------------------------
+echo testing sphinx
+echo ---------------------------------------------
+echo
+CHECK_SPHINX
+
echo
echo ---------------------------------------------
echo Testing Kernel
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
# 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.
bin/Makefile \
GEOM_version.h \
doc/Makefile \
+ doc/docutils/Makefile \
doc/salome/Makefile \
doc/salome/gui/Makefile \
doc/salome/gui/GEOM/Makefile \
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 \
src/NMTDS/Makefile \
src/NMTTools/Makefile \
src/OBJECT/Makefile \
+ src/OCC2VTK/Makefile \
src/OperationGUI/Makefile \
src/PrimitiveGUI/Makefile \
src/RepairGUI/Makefile \
src/STLExport/Makefile \
src/ShHealOper/Makefile \
src/TransformationGUI/Makefile \
+ src/VTKExport/Makefile \
resources/Makefile \
resources/GEOMCatalog.xml \
idl/Makefile \
# $Header$
# source path
#
-SUBDIRS = salome
+SUBDIRS = salome docutils
usr_docs:
(cd salome && $(MAKE) $(AM_MAKEFLAGS) usr_docs)
--- /dev/null
+# -*- 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)
--- /dev/null
+# -*- 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
--- /dev/null
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ 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:
--- /dev/null
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ Documentation of the GEOM python packages
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+Main documentation
+==================
+
+.. toctree::
+ :maxdepth: 3
+
+ overview.rst
+ docapi.rst
+
--- /dev/null
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+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``.
@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 ;
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 ;
#---------------------------------------------------------------------------
TAGFILES = geompy_doc.tag=geompy_doc
ALLEXTERNALS = NO
+SEARCHENGINE = YES
#---------------------------------------------------------------------------
GENERATE_TAGFILE = geompy_doc.tag
TAGFILES = tui_examples.tag=..
+SEARCHENGINE = YES
HTML_STYLESHEET = @srcdir@/static/doxygen.css
TOC_EXPAND = YES
DISABLE_INDEX = NO
-GENERATE_TREEVIEW = YES
+GENERATE_TREEVIEW = NO
TREEVIEW_WIDTH = 300
#---------------------------------------------------------------------------
#External reference options
#---------------------------------------------------------------------------
GENERATE_TAGFILE = tui_examples.tag
+SEARCHENGINE = YES
\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.
\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
+*/
\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
\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
<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
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
\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.
\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.
\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.
\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.
--- /dev/null
+/*!
+
+\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"
+
+*/
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"
--- /dev/null
+/*!
+
+\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".
+
+*/
\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
\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
\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".
*/
<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" -
\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.
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.
\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>
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.)
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
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>
\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
#---------------------------------------------------------------------------
# Configuration::additions related to the search engine
#---------------------------------------------------------------------------
-SEARCHENGINE = YES
+SEARCHENGINE = NO
//
// 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__
* 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.
*/
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.
* \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.
* \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
* \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
* \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.
* \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.
* \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.
* \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
* \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.
* \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.
* \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.
* \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.
* \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.
* \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.
* \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
* \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
* \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
* \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);
/*!
* \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
* \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);
/*!
* \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,
* \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,
* \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
* 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.
* 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.
* \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);
/*!
* \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.
* \return theObject.
*/
GEOM_Object Rotate (in GEOM_Object theObject,
- in GEOM_Object theAxis,
- in double theAngle);
+ in GEOM_Object theAxis,
+ in double theAngle);
/*!
* \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);
/*!
* 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
* 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,
* \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.
* \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.
* \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,
* \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.
* \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,
* \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
* \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.
* \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.
* \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.
* \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.
* \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.
* \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);
* \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.
* \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);
* \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);
/*!
* \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
* \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
* \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
* \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);
};
*/
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.
* \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.
* 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.
* \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.
* \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.
* \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);
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \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
* \return found sub-shape.
*/
GEOM_Object GetSame (in GEOM_Object theShapeWhere,
- in GEOM_Object theShapeWhat);
+ in GEOM_Object theShapeWhat);
};
/*!
* \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.
* \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.
* \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
* \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.
* \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
* \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.
* \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.
* \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.
* \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.
* \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.
* \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.
* \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.
* \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
* \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.
* \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
* \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.
* \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.
* \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.
* \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.
* \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
* \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.
* \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
* \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.
* \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.
* \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
* \return New GEOM_Object, containing the result shape.
*/
GEOM_Object MakeHalfPartition (in GEOM_Object theShape,
- in GEOM_Object thePlane);
+ in GEOM_Object thePlane);
};
/*!
* \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.
* \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.
* \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.
* \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.
* \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
* \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);
/*!
* \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
* \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.
* \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.
* \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.
* \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.
* \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.
* \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.
* \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,
* \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.
* 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>.
* \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
* 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
* 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).
* \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).
* \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),
* \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.
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);
+
};
/*!
* \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.
* \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
*/
//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.
* \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,
* \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.
* \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
* \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.
* \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
* \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
* \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.
* \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.
* \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
* \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.
* \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
* \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
* \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).
* \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
* \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
* \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
* \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
* \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.
* 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
* \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.
* \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);
/*!
* \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);
};
};
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
ACIS.Import: libACISImport
ACIS.Export: libACISExport
ACIS.Pattern: ACIS Files ( *.sat )
+
+VTK.Export: libVTKExport
+VTK.Pattern: VTK Files ( *.vtk )
boxdxyz.png \
build_compound.png \
build_edge.png \
+build_edge_wire.png \
build_face.png \
build_shell.png \
build_solid.png \
filling.png \
fuse.png \
geometry.png \
+limit_tolerance.png \
line.png \
line2points.png \
line2faces.png \
multitranslationsimple.png \
normale.png \
offset.png \
+origin_and_vectors.png \
partition.png \
partitionkeep.png \
partitionplane.png \
<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" />
//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);
//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);
}
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 );
//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 );
}
//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);
}
//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 );
}
//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 );
}
//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 );
}
//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);
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( "" );
GEOM::GEOM_Object_var myLine2;
bool myBusy;
-
+
DlgRef_3Spin* GroupXYZ;
DlgRef_1Sel3Spin* GroupRefPoint;
DlgRef_1Sel1Spin* GroupOnCurve;
//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);
}
//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);
}
//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);
}
globalSelection( GEOM_ALLSHAPES );
initName( tr( "GEOM_COMPOUND" ) );
+ SelectionIntoArgument();
}
#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();
}
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 );
}
//=================================================================================
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
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();
void BuildGUI_EdgeDlg::SetEditCurrentArgument()
{
QPushButton* send = (QPushButton*)sender();
- //globalSelection();//??
if (send == GroupPoints->PushButton1) {
myEditCurrentArgument = GroupPoints->LineEdit1;
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();
}
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();
}
connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
this, SLOT( SelectionIntoArgument() ) );
- displayPreview();
+ ConstructorsClicked( getConstructorId() );
}
//=================================================================================
// 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;
}
//=================================================================================
//=================================================================================
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 );
}
#include <GEOMBase_Skeleton.h>
+class DlgRef_1Sel2Spin;
class DlgRef_2Sel;
//=================================================================================
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();
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_SOLID" ) );
+ SelectionIntoArgument();
}
#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>
//=================================================================================
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 );
QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
layout->setMargin( 0 ); layout->setSpacing( 6 );
+ layout->addWidget( GroupType );
layout->addWidget( GroupArgs );
/***************************************************************/
/* 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() ) );
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();
//=================================================================================
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()
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;
if ( send != GroupArgs->PushButton1 )
return;
- TColStd_MapOfInteger aMap;
- aMap.Add( GEOM_WIRE );
- aMap.Add( GEOM_EDGE );
- globalSelection( aMap );
+ TypeButtonClicked();
myEditCurrentArgument = GroupArgs->LineEdit1;
myEditCurrentArgument->setFocus();
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()
return true;
}
+
+//=================================================================================
+// function : addSubshapeToStudy
+// purpose : virtual method to add new SubObjects if local selection
+//=================================================================================
+void BuildGUI_WireDlg::addSubshapesToStudy()
+{
+ addSubshapesToFather( myMapToStudy );
+}
#include <GEOMBase_Skeleton.h>
class DlgRef_1Sel1Spin;
+class DlgRef_3Radio;
//=================================================================================
// class : BuildGUI_WireDlg
// 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();
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
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();
}
ic->SetDisplayMode( newmode, Standard_False );
+ GeometryGUI::Modified();
}
}
}
}
}
+ GeometryGUI::Modified();
}
else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
viewWindow->setCustomData( "VectorsMode", QVariant( mode ) );
}
ite.Next();
}
+ GeometryGUI::Modified();
}
}
}
}
aView->Repaint();
+ GeometryGUI::Modified();
}
else if ( viewWindow->getViewManager()->getType() == OCCViewer_Viewer::Type() ) {
OCCViewer_Viewer* v3d = ((OCCViewer_ViewManager*)(viewWindow->getViewManager()))->getOCCViewer();
}
}
ic->UpdateCurrentViewer();
+ GeometryGUI::Modified();
}
}
{
}
+//////////////////////////////////////////
+// DlgRef_2Sel1List2Check
+//////////////////////////////////////////
+
+DlgRef_2Sel1List2Check::DlgRef_2Sel1List2Check( QWidget* parent, Qt::WindowFlags f )
+: QWidget( parent, f )
+{
+ setupUi( this );
+}
+
+DlgRef_2Sel1List2Check::~DlgRef_2Sel1List2Check()
+{
+}
+
//////////////////////////////////////////
// DlgRef_2Sel1List
//////////////////////////////////////////
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 )
}
// 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;
}
~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
//////////////////////////////////////////
--- /dev/null
+<?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>
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 \
#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
{
// 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;
else if ( !theLastSegment.IsNull() ) {
TopExp_Explorer vertexExp( theLastSegment, TopAbs_VERTEX );
theApplyedWire = vertexExp.Current();
- }
+ }
+ */
return true;
}
//=================================================================================
void EntityGUI_SketcherDlg::enterEvent( QEvent* )
{
- if ( !MainWidget->GroupConstructors->isEnabled() )
+ if ( !isEnabled() )
ActivateThisDialog();
}
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())
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());
// 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];
}
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);
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) {
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();
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);
// 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;
}
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;
// 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 <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>
#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))
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());
}
}
+//=============================================================================
+/*!
+ * 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
return aHistoryCurLabel;
}
+//=============================================================================
+/*!
+ * GetNamingEntry
+ */
+//=============================================================================
+TDF_Label GEOM_Function::GetNamingEntry (const Standard_Boolean create)
+{
+ return _label.FindChild(NAMING_LABEL, create);
+}
+
//=======================================================================
//function : GEOM_Function_Type_
//purpose :
{
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",
}
}
- return _anOtherObject ;
+ return _anOtherObject;
}
// 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
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)
{
}
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);
};
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:
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();
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();
//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
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);
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
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
//
// 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
{
libGEOMbasic_la_LDFLAGS = \
$(CORBA_LIBS) \
- $(KERNEL_LDFLAGS) -lSALOMELocalTrace \
+ $(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics \
$(STDLIB) \
$(CAS_LDPATH) -lTKXSBase \
$(CAS_OCAF) \
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;
// 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 {
}
}
- 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);
}
}
} // 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);
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);
--
-- 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:
deferred class Clsf;
class ClsfSurf;
class ClsfBox;
- class FinderShapeOn2;
+ --class FinderShapeOn2;
class PassKeyShapeMapHasher;
--
-- classes
-- gluer
class Gluer;
class Gluer1;
- class GlueAnalyser;
+ class GlueAnalyser;
+
class CoupleOfShapes;
class PassKey;
class PassKeyMapHasher;
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;
class WireSplitter;
class WireEdgeSet;
class WESCorrector;
+ class WESScaler;
--
-- Pointers
--
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;
-// 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
--- /dev/null
+// 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
--- /dev/null
+// 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>
+
--- /dev/null
+// 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
--- /dev/null
+// 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>
+
--- /dev/null
+// 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
--- /dev/null
+// 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>
+
--- 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
-// 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
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;
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);
aDNF.Reverse();
}
//
+ //modified by NIZNHY-PKV Wed Sep 22 10:52:54 2010f
+ /*
GeomAPI_ProjectPointOnSurf& aProjector=aCtx.ProjPS(aF);
//
aProjector.Perform(aPFx);
aDNF.Reverse();
}
}
+ */
+ //modified by NIZNHY-PKV Wed Sep 22 10:52:59 2010t
}
+// 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>
#include <TopTools_DataMapOfShapeListOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
+#include <BRepTools.hxx>
static
inline Standard_Boolean IsEqual(const TopoDS_Shape& aS1,
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());
//
// 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>
#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:
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) {
//
//=======================================================================
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);
//
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
}
}
//=======================================================================
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;
+}
+
--- /dev/null
+-- 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;
+
--- /dev/null
+// 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);
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+// 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>
+
+
+
+
--- /dev/null
+// 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
--- /dev/null
+// 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
#
# 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
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 \
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 \
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 \
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 = \
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 \
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 \
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 \
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 \
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 \
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) \
GEOMAlgo_Tools3D.cdl \
GEOMAlgo_VertexSolid.cdl \
GEOMAlgo_WESCorrector.cdl \
+ GEOMAlgo_WESScaler.cdl \
GEOMAlgo_WireEdgeSet.cdl \
GEOMAlgo_WireSolid.cdl \
GEOMAlgo_WireSplitter.cdl
// 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;
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);
//================================================================
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() )
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 );
}
}
// 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 ) {
(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 );
}
}
}
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 );
// 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 "";
}
//================================================================
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 );
}
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;
}
if (inStudy)
return aReturnObject._retn();
-
+
return GEOM::GEOM_Object::_nil();
}
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 );
}
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:
#include <Standard_Stream.hxx>
-#include <strstream>
+#include <sstream>
#include "GEOM_Client.hxx"
#include <SALOMEconfig.h>
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);
#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
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));
}
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 ) );
+ }
}
}
}
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
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() );
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 );
}
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;
}
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;
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*>
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;
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;
#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>
}
}
+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
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 );
}
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 );
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 );
<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>
+<?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'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>&Apply</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_CANCEL</source>
+ <translation>&Cancel</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_CLOSE</source>
+ <translation>&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>&Explode</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_HELP</source>
+ <translation>&Help</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_NO</source>
+ <translation>&No</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_OK</source>
+ <translation>O&k</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_APPLY_AND_CLOSE</source>
+ <translation>A&pply and Close</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_YES</source>
+ <translation>&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'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'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 & IY & 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><< 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>&Apply</translation>
- </message>
- <message>
- <source>GEOM_BUT_CANCEL</source>
- <translation>&Cancel</translation>
- </message>
- <message>
- <source>GEOM_BUT_CLOSE</source>
- <translation>&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>&Explode</translation>
- </message>
- <message>
- <source>GEOM_BUT_HELP</source>
- <translation>&Help</translation>
- </message>
- <message>
- <source>GEOM_BUT_NO</source>
- <translation>&No</translation>
- </message>
- <message>
- <source>GEOM_BUT_OK</source>
- <translation>O&k</translation>
- </message>
- <message>
- <source>GEOM_BUT_APPLY_AND_CLOSE</source>
- <translation>A&pply and Close</translation>
- </message>
- <message>
- <source>GEOM_BUT_YES</source>
- <translation>&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 & IY & 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><< 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'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
+'%1' 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>&OK</translation>
- </message>
- <message>
- <source>CANCEL_BTN</source>
- <translation>&Cancel</translation>
- </message>
- <message>
- <source>HELP_BTN</source>
- <translation>&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>&OK</translation>
+ </message>
+ <message>
+ <source>CANCEL_BTN</source>
+ <translation>&Cancel</translation>
+ </message>
+ <message>
+ <source>HELP_BTN</source>
+ <translation>&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>
+<?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>&Appliquer</translation>
- </message>
- <message>
- <source>GEOM_BUT_CANCEL</source>
- <translation>&Annuler</translation>
- </message>
- <message>
- <source>GEOM_BUT_CLOSE</source>
- <translation>&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>&Exploser</translation>
- </message>
- <message>
- <source>GEOM_BUT_HELP</source>
- <translation>&Aide</translation>
- </message>
- <message>
- <source>GEOM_BUT_NO</source>
- <translation>&Non</translation>
- </message>
- <message>
- <source>GEOM_BUT_OK</source>
- <translation>&Ok</translation>
- </message>
- <message>
- <source>GEOM_BUT_YES</source>
- <translation>&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 & IY & 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><< 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'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'objet choisi a été utilisé pour créer un autre objet.
+Il n'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'objet choisi n'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'objet non autoriqé</translation>
+ </message>
+ <message>
+ <source> iErr : 13</source>
+ <translation>Cet état n'est pas autorisé</translation>
+ </message>
+ <message>
+ <source> iErr : 15</source>
+ <translation>Ce type de surface n'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'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'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'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'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'Origine</translation>
+ </message>
+ <message>
+ <source>GEOM_BOX_TITLE</source>
+ <translation>Construction d'une Boîte </translation>
+ </message>
+ <message>
+ <source>GEOM_BSplineRestriction</source>
+ <translation>BSplineLimitation</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_APPLY</source>
+ <translation>&Appliquer</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_CANCEL</source>
+ <translation>A&nnuler</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_CLOSE</source>
+ <translation>&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'esquisse</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_EXPLODE</source>
+ <translation>&Eclater</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_HELP</source>
+ <translation>&Aide</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_NO</source>
+ <translation>&Non</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_OK</source>
+ <translation>&Oui</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_APPLY_AND_CLOSE</source>
+ <translation>A&ppliquer et Fermer</translation>
+ </message>
+ <message>
+ <source>GEOM_BUT_YES</source>
+ <translation>&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'est pas possible de calculer un chanfrein avec %1 et %2</translation>
+ </message>
+ <message>
+ <source>GEOM_CHAMFER_ALL</source>
+ <translation>Chanfrein sur l'Objet tout entier</translation>
+ </message>
+ <message>
+ <source>GEOM_CHAMFER_EDGES</source>
+ <translation>Chanfrein sur les arêtes d'un Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_CHAMFER_FACES</source>
+ <translation>Chanfrein sur les Faces d'un Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_CHAMFER_TITLE</source>
+ <translation>Construction d'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'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'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'Assemblage de Blocs contient des erreurs</translation>
+ </message>
+ <message>
+ <source>GEOM_CHECK_BLOCKS_COMPOUND_HAS_NO_ERRORS</source>
+ <translation>L'Assemblage de Blocs n'a pas d'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'objet</translation>
+ </message>
+ <message>
+ <source>GEOM_CIRCLE</source>
+ <translation>Circle</translation>
+ </message>
+ <message>
+ <source>GEOM_CIRCLE_TITLE</source>
+ <translation>Construction d'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'un Cône </translation>
+ </message>
+ <message>
+ <source>GEOM_CONFIRM</source>
+ <translation>Confirmer l'opération</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>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'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'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'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'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'Opération</translation>
+ </message>
+ <message>
+ <source>GEOM_ERR_GET_ENGINE</source>
+ <translation>Il est impossible d'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'ouvrir la librairie IHM correspondante à l'action de l'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'une Face à partir des contours et/ou arêtes</translation>
+ </message>
+ <message>
+ <source>GEOM_FACE_OPT</source>
+ <translation>Privilégier la création d'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'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'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'est pas possible de calculer un congé avec le rayon %1</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_ALL</source>
+ <translation>Congé sur l'Objet tout entier</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_EDGES</source>
+ <translation>Congé sur les Arêtes de l'Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_WIRES</source>
+ <translation>Congé sur les Contours de l'Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_FACES</source>
+ <translation>Congé sur les Faces de l'Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_VERTEXES</source>
+ <translation>Congé sur les Sommets de l'Objet</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_TITLE</source>
+ <translation>Construction d'un Congé</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_2D_TITLE</source>
+ <translation>Construction d'un Congé 2D </translation>
+ </message>
+ <message>
+ <source>GEOM_FILLET_1D_TITLE</source>
+ <translation>Construction d'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'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'objet n'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'entrée ne sont pas valides!</translation>
+ </message>
+ <message>
+ <source>GEOM_INERTIA_CONSTR</source>
+ <translation>Matrice et Moment d'Inertie</translation>
+ </message>
+ <message>
+ <source>GEOM_INERTIA_I</source>
+ <translation>%1:1 :</translation>
+ </message>
+ <message>
+ <source>GEOM_INERTIA_IXYZ</source>
+ <translation>IX & IY & IZ :</translation>
+ </message>
+ <message>
+ <source>GEOM_INERTIA_TITLE</source>
+ <translation>Calcul de l'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'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'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><< 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'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'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'axe X</translation>
+ </message>
+ <message>
+ <source>GEOM_MEN_SKETCHER_Y</source>
+ <translation>Indiquez la distance selon l'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'Objet n'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'autres solides</translation>
+ </message>
+ <message>
+ <source>GEOM_NB_BLOCKS_SOME_OTHERS</source>
+ <translation>Il y a %1 bloques spécifiés et d'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'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'Orientation et simuler les vecteurs normaux</translation>
+ </message>
+ <message>
+ <source>GEOM_ORIENTATION_TITLE</source>
+ <translation>Changer l'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'Orientation</translation>
+ </message>
+ <message>
+ <source>GEOM_PARTITION_TITLE</source>
+ <translation>Partition d'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'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'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'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'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'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'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'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'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'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'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'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'un objet</translation>
+ </message>
+ <message>
+ <source>GEOM_SCALE</source>
+ <translation>Echelle</translation>
+ </message>
+ <message>
+ <source>GEOM_SCALE_FACTOR</source>
+ <translation>Facteur d'é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'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'é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'une esquisse 2D </translation>
+ </message>
+ <message>
+ <source>GEOM_3DSKETCHER_TITLE</source>
+ <translation>Construction d'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'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'origine)</translation>
+ </message>
+ <message>
+ <source>GEOM_SPHERE_TITLE</source>
+ <translation>Construction d'une sphère</translation>
+ </message>
+ <message>
+ <source>GEOM_SPLINE</source>
+ <translation>Spline</translation>
+ </message>
+ <message>
+ <source>GEOM_SPLINE_TITLE</source>
+ <translation>Construction d'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'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'étude en cours est fermée et il n'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'on traverse le trou)</translation>
+ </message>
+ <message>
+ <source>GEOM_SUPPRESSHOLE_SELECTWIRE</source>
+ <translation>Choisir le contour d'une face</translation>
+ </message>
+ <message>
+ <source>GEOM_SUPPRESSHOLE_SELECTWIRE_END</source>
+ <translation>Choisir le contour final (si l'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'intérieur</translation>
+ </message>
+ <message>
+ <source>GEOM_SUPPRESS_RESULT_OUTSIDE</source>
+ <translation>A l'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'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'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'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'un 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>Sommet</translation>
+ </message>
+ <message>
+ <source>GEOM_VERTEXES</source>
+ <translation>Sommets</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_WIDTH</source>
+ <translation>Largeur :</translation>
+ </message>
+ <message>
+ <source>GEOM_WHATIS</source>
+ <translation>Qu'est-ce que c'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'est-ce que c'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'un contour à partir de contours/arêtes connecté(e)s</translation>
+ </message>
+ <message>
+ <source>GEOM_WIRE_TITLE</source>
+ <translation>Création d'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'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'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'un point </translation>
+ </message>
+ <message>
+ <source>MEN_POINT_ON_EDGE</source>
+ <translation>Ajouter un point sur l'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'orientation de l'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'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'est-ce que c'est ?</translation>
+ </message>
+ <message>
+ <source>MEN_WIRE</source>
+ <translation>Contour</translation>
+ </message>
+ <message>
+ <source>MEN_VECTOR_MODE_ON</source>
+ <translation>Montrer l'orientation de l'arête</translation>
+ </message>
+ <message>
+ <source>MEN_VECTOR_MODE_OFF</source>
+ <translation>Cacher l'orientation de l'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'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'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'ombrage par défaut</translation>
+ </message>
+ <message>
+ <source>PREF_STEP_VALUE</source>
+ <translation>Valeur du pas pour les boîtes d'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'objet</translation>
+ </message>
+ <message>
+ <source>STB_BND_BOX</source>
+ <translation>Calculer la boîte englobante de l'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'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'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'un fichier BREP</translation>
+ </message>
+ <message>
+ <source>STB_INERTIA</source>
+ <translation>Calculer les moments d'intertie de l'objet</translation>
+ </message>
+ <message>
+ <source>STB_ISOS</source>
+ <translation>Définir le nombre d'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'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'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'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'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'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'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'est-ce que c'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'algorithme de traitement de formes n'a pas abouti</translation>
+ </message>
+ <message>
+ <source>ShHealOper_InvalidParameters_msg</source>
+ <translation>Les paramètres de l'algorithme de traitement de formes sont incorrects</translation>
+ </message>
+ <message>
+ <source>ShHealOper_NotError_msg</source>
+ <translation>L'algorithme de traitement de formes n'a pas fait de modifications de la forme d'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'orientation</translation>
+ </message>
+ <message>
+ <source>TOP_CHECK</source>
+ <translation>Valider l'objet</translation>
+ </message>
+ <message>
+ <source>TOP_CHECK_COMPOUND</source>
+ <translation>Valider l'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'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'un fichier BREP</translation>
+ </message>
+ <message>
+ <source>TOP_INERTIA</source>
+ <translation>Moments d'inertie</translation>
+ </message>
+ <message>
+ <source>TOP_ISOS</source>
+ <translation>Définir le nombre d'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'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'un point</translation>
+ </message>
+ <message>
+ <source>TOP_POINT_ON_EDGE</source>
+ <translation>Ajouter un point sur l'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'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'est-ce que c'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'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'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'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'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'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'orientation des arêtes</translation>
+ </message>
+ <message>
+ <source>GEOM_FILLING_AUTO</source>
+ <translation>Auto-corriger l'orientation des arêtes</translation>
+ </message>
+ <message>
+ <source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source>
+ <translation>Pas d'objets appropriés choisis</translation>
+ </message>
+ <message>
+ <source>GEOM_SHAPES_ON_SHAPE</source>
+ <translation>Trouver les éléments d'un objet</translation>
+ </message>
+ <message>
+ <source>GEOM_SHAPES_ON_SHAPE_ESHAPE</source>
+ <translation>L'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'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'est pas défini, si l'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'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'un objet</translation>
+ </message>
+ <message>
+ <source>MEN_GET_SHAPES_ON_SHAPES</source>
+ <translation>Trouver les éléments d'un objet</translation>
+ </message>
+ <message>
+ <source>STB_GET_SHAPES_ON_SHAPES</source>
+ <translation>Trouver les éléments d'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'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'import s'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'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'ajuster la précision de la valeur d'entrée avec
+le paramètre '%1' 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'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'origine</translation>
+ </message>
+ <message>
+ <source>VEC_PARALLEL</source>
+ <translation>Il n'est pas possible que les axes du système de coordonnées soient parallels</translation>
+ </message>
+ <message>
+ <source>XDIR</source>
+ <translation>Direction de l'axe X </translation>
+ </message>
+ <message>
+ <source>YDIR</source>
+ <translation>Direction de l'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'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'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'Objet Secondaire </translation>
+ </message>
+ <message>
+ <source>SUBSHAPES_OF_SHAPE2</source>
+ <translation>Sous-Objets de l'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'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'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'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'opération</translation>
+ </message>
+ <message>
+ <source>TIME_CONSUMING</source>
+ <translation>L'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'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>&OK</translation>
+ </message>
+ <message>
+ <source>CANCEL_BTN</source>
+ <translation>A&nnuler</translation>
+ </message>
+ <message>
+ <source>HELP_BTN</source>
+ <translation>&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'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>
//
// 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"
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
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
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
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
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;
// 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()
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" );
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" );
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 @@//
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 );
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 );
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 );
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 );
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);
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;
}
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++ ){
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 )
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
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!!!
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
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
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
// OpPipeTShapeGroups = 10002, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
//@@ insert new functions before this line @@ do not remove this line @@//
};
-}
+}
#endif // GEOMETRYGUI_OPERATIONS_H
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())
-// 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
-// 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
// 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 );
}
TopoDS_Shape anEdge = anExp.Current();
if ( !anEdgeToEdgeMap.IsBound( anEdge ) )
aListOfNewEdge.Append( anEdge );
- else
+ else if (!anEdgeToEdgeMap.Find( anEdge ).IsNull())
aListOfNewEdge.Append( anEdgeToEdgeMap.Find( anEdge ) );
}
#include <BRepAlgo.hxx>
#include <BRepBuilderAPI_MakeFace.hxx>
#include <BRep_Builder.hxx>
+#include <BRepBuilderAPI_Copy.hxx>
#include <TopAbs.hxx>
#include <TopoDS.hxx>
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();
// 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>
case CHANGE_ORIENTATION:
ChangeOrientation(&HI, anOriginalShape, aShape);
break;
+ case LIMIT_TOLERANCE:
+ LimitTolerance(&HI, anOriginalShape, aShape);
+ break;
default:
return 0;
}
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_
//
// 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
//
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;
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;
};
//
// 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"
#include "GEOMImpl_IBlocksOperations.hxx"
#include "GEOMImpl_I3DPrimOperations.hxx"
#include "GEOMImpl_ILocalOperations.hxx"
+#include "GEOMImpl_IHealingOperations.hxx"
#include "GEOMImpl_Gen.hxx"
*/
//=============================================================================
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());
myBlocksOperations = new GEOMImpl_IBlocksOperations(GetEngine(), GetDocID());
my3DPrimOperations = new GEOMImpl_I3DPrimOperations(GetEngine(), GetDocID());
myLocalOperations = new GEOMImpl_ILocalOperations(GetEngine(), GetDocID());
+ myHealingOperations = new GEOMImpl_IHealingOperations(GetEngine(), GetDocID());
}
//=============================================================================
delete myBlocksOperations;
delete my3DPrimOperations;
delete myLocalOperations;
+ delete myHealingOperations;
}
//=============================================================================
*/
//=============================================================================
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);
*/
//=============================================================================
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()));
//
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 {
//
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;
*/
//=============================================================================
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);
}
gp_Trsf aTrsfInv = aTrsf.Inverted();
-
+
int expectedGroups = 0;
if (shapeType == TSHAPE_BASIC)
if (Abs(theR2+theW2-theR1-theW1) <= Precision::Approximation())
expectedGroups = 11;
else if (shapeType == TSHAPE_CHAMFER || shapeType == TSHAPE_FILLET)
expectedGroups = 12;
-
+
double aR1Ext = theR1 + theW1;
double aR2Ext = theR2 + theW2;
-
+
/////////////////////////
//// Groups of Faces ////
/////////////////////////
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);
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");
}
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");
}
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");
// 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) {
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;
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)
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);
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) {
// 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) {
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;
// 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) {
// 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) {
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;
#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();
#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("");
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) {
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;
+ }
+ }
}
}
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");
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");
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()) {
return false;
}
wire_t->GetLastFunction()->SetDescription("");
-
+
// std::cerr << "Creating face 1" << std::endl;
face_t = myShapesOperations->MakeFace(wire_t, false);
if (face_t.IsNull()) {
}
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();
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()) {
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()) {
}
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;
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;
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);
}
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;
//=============================================================================
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);
SetErrorCode(aFail->GetMessageString());
return NULL;
}
-
+
if (theHexMesh) {
if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2))
return NULL;
/*
* 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
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);
//=============================================================================
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
SetErrorCode(aFail->GetMessageString());
return NULL;
}
-
+
if (theHexMesh) {
if (!MakePipeTShapePartition(aShape, theR1, theW1, theL1, theR2, theW2, theL2))
return NULL;
//
// 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;
}
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
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);
//=============================================================================
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
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) {
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();
}
return NULL;
}
aChamfer->GetLastFunction()->SetDescription("");
-
+
TopoDS_Shape aChamferShape = aChamfer->GetValue();
aFunction->SetValue(aChamferShape);
// END of chamfer
//
// 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
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);
//=============================================================================
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
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) {
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();
}
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;
/*
* 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
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);
//=============================================================================
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
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) {
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();
}
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;
/*
* 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
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;
-
}
//=============================================================================
//=============================================================================
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
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) {
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();
}
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;
/*
* 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
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);
//
// 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_
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;
GEOMImpl_IBlocksOperations* myBlocksOperations;
GEOMImpl_I3DPrimOperations* my3DPrimOperations;
GEOMImpl_ILocalOperations* myLocalOperations;
+ GEOMImpl_IHealingOperations* myHealingOperations;
public:
Standard_EXPORT GEOMImpl_IAdvancedOperations(GEOM_Engine* theEngine, int theDocID);
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
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
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
// 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_
// 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,
};
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);
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
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,
// 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);
// 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>
//
// 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>
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;
};
// 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 )
return theObject;
}
-
//=============================================================================
/*!
* ChangeOrientationCopy
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;
+}
// 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_
// 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,
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);
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
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 =
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) {}
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;
#include <TFunction_Logbook.hxx>
#include <TDataStd_Integer.hxx>
#include <TDataStd_IntegerArray.hxx>
+#include <TDataStd_ListIteratorOfListOfExtendedString.hxx>
#include <TDF_Tool.hxx>
#include <BRepExtrema_ExtCF.hxx>
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
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
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
}
}
}
- } 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()))
}
}
}
- } 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()))
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);
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;
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++ ) {
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;
else BRepGProp::VolumeProperties(Exp_aWhat.Current(), aProps);
aWhat_Mass += aProps.Mass();
}
+ */
// Searching for the sub-shapes inside the ShapeWhere shape
TopTools_MapOfShape map_aWhere;
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
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);
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);
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,
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 {
// 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>
// 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:
//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;
}
}
- return _anOtherObject ;
+ return _anOtherObject;
}
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())
// 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>
//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();
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();
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();
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();
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();
}
PS.SetLimitMode(aCI.GetKeepNonlimitShapes());
- PS.SetLimit( (TopAbs_ShapeEnum)aCI.GetLimit() );
+ PS.SetLimit((TopAbs_ShapeEnum)aCI.GetLimit());
PS.Perform();
//skl PS.Compute();
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();
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();
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);
//=======================================================================
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;
}
}
}
- return _anOtherObject ;
+ return _anOtherObject;
}
// 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>
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;
#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
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;
bool OnGUIEvent( int, SUIT_Desktop* );
virtual void deactivate();
+ enum ActionType { SHOWDLG, INCR, DECR };
+
private:
// Import and export topology methods
bool Import();
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),
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
aView->SetColor( It.Value(), c );
}
+ GeometryGUI::Modified();
}
} // if ( isVTK )
else if ( isOCC ) {
anObject->SetColor( aSColor );
anObject->SetAutoColor( false );
}
+ GeometryGUI::Modified();
}
} // if c.isValid()
} // first IO is not null
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();
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
//
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
}
}
}
}
+ GeometryGUI::Modified();
}
else if (isVTK) { // if is VTKViewer
SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>
anAct = aCollection->GetNextActor();
}
}
+ GeometryGUI::Modified();
} // end vtkviewer
}
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
aView->SetTransparency( It.Value(), newValue );
}
+ GeometryGUI::Modified();
aView->Repaint();
} // if ( isVTK )
}
} // for...
ic->UpdateCurrentViewer();
+ GeometryGUI::Modified();
} // if ( isOCC )
ValueHasChanged();
// 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 )
#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;
// 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)) {
// : 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();
// 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;
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();
}
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
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;
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 += "|";
// 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);
//============================================================================
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;
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());
}
}
}
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();
}
// 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();
// 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();
}
// 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 ");
// 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);
}
// 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);
// 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;
// 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,
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.
// 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;
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;
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 {
}
if (!CORBA::is_nil(aSubO)) {
+ // remember restored objects for Python Dump
+ addToListOfGO(anArgO, anOutArgs);
+
// add to parts list
addToListOfGO( aSubO, aParts );
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)) {
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 );
}
// 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) {
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)) {
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());
// 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;
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
*/
//=============================================================================
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();
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 );
}
if (!aSObj->_is_nil() )
aSObj->Destroy();
-
+
const char* aTypeInfo = "Object";
if ( !aGeomObject->_is_nil() ) {
GEOM::GEOM_IKindOfShape::shape_kind aKind;
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;
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();
// 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__
#include <TopTools_IndexedMapOfShape.hxx>
+#include <set>
+#include <string>
+
//#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
// 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();
//-----------------------------------------------------------------------//
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,
//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);
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 //
//-----------------------------------------------------------------------//
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:
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
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
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);
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,
// 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>
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);
+}
// 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& );
};
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
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();
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
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);
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
#include "utilities.h"
#include <fstream>
-#include <strstream>
-//#include <sstream>
+#include <sstream>
#include <OpUtil.hxx>
#include <Utils_ExceptHandlers.hxx>
#include <BRepTools_ShapeSet.hxx>
#include <BRepTools.hxx>
#include <TopAbs.hxx>
+#include <TopoDS_Iterator.hxx>
#ifdef WNT
#pragma warning( disable:4786 )
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
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();
-
}
virtual GEOM::shape_type GetShapeType();
+ virtual GEOM::shape_type GetTopologyType();
+
+ virtual GEOM::shape_type GetMinShapeType();
+
virtual void SetName(const char* theName);
virtual char* GetName();
--- /dev/null
+# 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
--- /dev/null
+# -*- coding: iso-8859-1 -*-
--- /dev/null
+# -*- 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
--- /dev/null
+# 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
--- /dev/null
+# -*- 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()
--- /dev/null
+# -*- 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
--- /dev/null
+# -*- 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)
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
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)
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)
## 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
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
## @}
# @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)
# @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
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.
# @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)
## @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.
# @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.
# 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)
# 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
#
# @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,
# @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,
# @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,
# @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
# @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.
# @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)
# @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)
# @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)
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
## @}
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
//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);
//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);
//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);
}
//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);
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);
}
}
else { // an attempt to synchronize list box selection with 3d viewer
- if (myBusy) {
+ if ( myBusy || myMainObj->_is_nil() ) {
return;
}
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;
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();
}
}
aDisplayer->UpdateViewer();
+ aDisplayer->SetDisplayMode(prevDisplayMode);
}
globalSelection(GEOM_ALLSHAPES);
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());
//
// 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
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;
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);
}
}
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);
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:
#
# 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
$(CAS_CPPFLAGS) \
$(KERNEL_CXXFLAGS)
-libIGESImport_la_LDFLAGS = \
- $(STDLIB) \
- $(CAS_LDPATH) -lTKIGES \
+libIGESImport_la_LDFLAGS = \
+ $(STDLIB) \
+ $(CAS_LDPATH) -lTKIGES -lTKCAF -lTKLCAF \
$(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics
# 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 \
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
libMeasureGUI_la_LDFLAGS = \
$(CAS_LDFLAGS) -lTKGeomBase \
- ../GEOMBase/libGEOMBase.la
+ ../GEOMBase/libGEOMBase.la ../DlgRef/libDlgRef.la
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 {
#include "GeometryGUI.h"
#include <GEOMBase.h>
+#include <DlgRef.h>
#include <GEOM_Function.hxx>
#include <GEOM_Object.hxx>
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 ) );
}
}
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;
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();
}
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();
}
#include "MeasureGUI_Widgets.h"
#include <GEOMBase.h>
+#include <DlgRef.h>
#include <gp_XYZ.hxx>
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 ) );
}
}
//
#include "MeasureGUI_MaxToleranceDlg.h"
#include "MeasureGUI_Widgets.h"
+#include "DlgRef.h"
#include <SUIT_Session.h>
#include <SUIT_ResourceMgr.h>
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("") );
}
//=================================================================================
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( ... )
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 ) );
}
}
QString aKindStr("");
theParameters = "";
+ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+ int aLenPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
+
if ( myObj->_is_nil() )
return aKindStr;
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:
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" );
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" );
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" );
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:
{
{
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) {
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();
-// 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>
-// 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
-// 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>
--- 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.cdl
-- Created: Fri Dec 5 14:35:00 2003
-- Author: Peter KURNEV
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,
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
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;
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;
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;
AloneVertices(me)
returns IndexedDataMapOfIndexedMapOfInteger from NMTTools;
---C++: return const &
- -- Contribution of Samtech www.samcef.com END
IsExistingPaveBlock (me:out;
aPB : PaveBlock from BOPTools;
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;
-// 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
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) ;
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;
NMTDS_PInterfPool myIP;
-private:
+private:
+ // Methods PRIVATE
+ //
+ // Fields PRIVATE
+ //
};
// other Inline functions and methods (like "C++: function call" methods)
+//
#endif
-// 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>
#include <gp_Pnt.hxx>
#include <Bnd_Box.hxx>
+#include <GeomAPI_ProjectPointOnCurve.hxx>
+
#include <TColStd_MapOfInteger.hxx>
#include <TColStd_IndexedMapOfInteger.hxx>
#include <TColStd_ListIteratorOfListOfInteger.hxx>
#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);
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;
//
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;
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;
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
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);
//
aEE.SetRange1(anewSR1);
aEE.SetRange2(anewSR2);
-
+ //
aEE.Perform();
//
anIndexIn=0;
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);
//
aMapVI.Add(aNewVertex, anIndexIn);
}
break;
-
+
case TopAbs_EDGE: {
Standard_Integer aNbComPrt2;
Standard_Boolean aCoinsideFlag;
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
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;
//
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;
}//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;
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);
// 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;
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();
//
aNbVSD=aBBTree.Select(aSelector);
if (!aNbVSD) {
- continue; // it must not be
+ continue; // it must not be
}
//
const TColStd_ListOfInteger& aLI=aSelector.Indices();
}
}
}
-//
+
//=======================================================================
//function : MakeNewVertex
-//purpose :
+//purpose :
//=======================================================================
-void MakeNewVertex(const TopTools_ListOfShape& aLV,
+void MakeNewVertex(const TopTools_ListOfShape& aLV,
TopoDS_Vertex& aNewVertex)
{
Standard_Integer aNbV;
//
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();
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;
}
}
}
+
//=======================================================================
// 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) ;
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;
}
//
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;
}
}
}
- }// 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;
//
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;
}
//
BOPTools_PaveSet& aPS=myPavePool(myDS->RefEdge(nE));
-
+ //
BOPTools_PaveBlockIterator aPBIt(nE, aPS);
for (; aPBIt.More(); aPBIt.Next()) {
BOPTools_PaveBlock& aPB=aPBIt.Value();
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) ;
}
//
//
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 ;
const IntTools_Range& aSR=aShrunkRange.ShrunkRange();
const TopoDS_Edge& aE=aShrunkRange.Edge();
-
+
IntTools_Range aNewRange;
IntTools_Range aCPRange;
}
}
}
+
//=======================================================================
// 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;
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);
}
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;
}
}
}
- // 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;
}//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;
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();
}
}
}
+
//=======================================================================
// 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();
}
}
//
- // 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);
}
//=======================================================================
// 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();
aT2 = aCPart.VertexParameter2();
}
}
+
//=======================================================================
// function: KeepPave
-// purpose:
+// purpose:
//=======================================================================
Standard_Boolean IsOnPave(const Standard_Real& aT1,
const IntTools_Range& aRange,
//=======================================================================
// function:FindChains
-// purpose:
+// purpose:
//=======================================================================
void FindChains(const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
NMTTools_ListOfCommonBlock& aLCB)
aChain.Clear();
}
}
+
//=======================================================================
// function:ProcessBlock
-// purpose:
+// purpose:
//=======================================================================
void ProcessBlock(const BOPTools_PaveBlock& aPB,
const BOPTools_IDMapOfPaveBlockIMapOfPaveBlock& aMapCB,
}
// 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()
{
const TopoDS_Shape& aSnew=myDS->Shape(nNewShape);
if (aSnew.ShapeType()!=TopAbs_VERTEX) {
continue;
- }
+ }
//
const TopoDS_Vertex& aVnew=TopoDS::Vertex(aSnew);
//
}
}
}
-}
+}
// 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
-// 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
// 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:
-// 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>
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;
}
#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>
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)
myDeflection = theDeflection;
myIsRelative = theIsRelative;
- MeshShape(myShape,myDeflection,myIsRelative);
+ GEOM::MeshShape2(myShape,myDeflection,myIsRelative);
SetModified();
}
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() &&
}
}
-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
class GEOM_ShadingFace;
typedef GEOM_SmartPtr<GEOM_ShadingFace> PSFaceSource;
-#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
class vtkRenderer;
class vtkAppendPolyData;
GetVectorMode();
protected:
- void SetShape(const TopoDS_Shape& theShape,
- const TopTools_IndexedDataMapOfShapeListOfShape& theEdgeMap,
- bool theIsVector = false);
-
void SetModified();
void GetMatrix(vtkCamera* theCam, vtkMatrix4x4 *result);
#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,
}
-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,
*/
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);
vtkProperty* EdgePVProp,
vtkProperty* VertePVProp);
- static void MeshShape(const TopoDS_Shape myShape,
- Standard_Real deflection,
- Standard_Boolean forced);
-
-
public:
+++ /dev/null
-// 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;
-}
+++ /dev/null
-// 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
+++ /dev/null
-// 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);
-}
+++ /dev/null
-// 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
+++ /dev/null
-// 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);
- }
- }
-}
+++ /dev/null
-// 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
+++ /dev/null
-// 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);
-}
+++ /dev/null
-// 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
+++ /dev/null
-// 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);
- }
- }
-}
+++ /dev/null
-// 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
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
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 = \
$(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) \
--- /dev/null
+// 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;
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+ }
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+}
--- /dev/null
+// 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
--- /dev/null
+// 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);
+ }
+ }
+}
--- /dev/null
+// 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
--- /dev/null
+# 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
--- /dev/null
+// 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
--- /dev/null
+// 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);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+// 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
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()));
+ }
}
//=================================================================================
//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 );
}
// 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;
}
//=================================================================================
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
- SelectionIntoArgument();
}
//=================================================================================
}
}
- // clear selection
+ // clear selection of the faces or edges
if (!(myEditCurrentArgument == Group2->LineEdit2 ||
myEditCurrentArgument == Group3->LineEdit2)) {
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
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()));
+ }
}
//=================================================================================
//
// 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();
}
// 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;
}
//=================================================================================
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();
}
// 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();
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();
}
//=================================================================================
void OperationGUI_PartitionDlg::ClickOnOk()
{
- if (ClickOnApply())
+ if ( ClickOnApply() )
ClickOnCancel();
}
//=================================================================================
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;
}
//=================================================================================
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 );
}
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);
{
QLineEdit* send = (QLineEdit*)sender();
- if (send == GroupPoints->LineEdit1 ||
- send == GroupPoints->LineEdit2) {
+ if ( send == GroupPoints->LineEdit1 ||
+ send == GroupPoints->LineEdit2 ) {
myEditCurrentArgument = send;
GEOMBase_Skeleton::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() );
}
// function : enterEvent()
// purpose :
//=================================================================================
-void OperationGUI_PartitionDlg::enterEvent(QEvent*)
+void OperationGUI_PartitionDlg::enterEvent( QEvent* )
{
- if (!mainFrame()->GroupConstructors->isEnabled())
+ if ( !mainFrame()->GroupConstructors->isEnabled() )
this->ActivateThisDialog();
}
//=================================================================================
GEOM::GEOM_IOperations_ptr OperationGUI_PartitionDlg::createOperation()
{
- return getGeomEngine()->GetIBooleanOperations(getStudyId());
+ return getGeomEngine()->GetIBooleanOperations( getStudyId() );
}
// 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
}
// 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;
}
// 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()
{
//=================================================================================
// 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;
#include <GEOMBase_Skeleton.h>
-class DlgRef_2Sel1List1Check;
+class DlgRef_2Sel1List2Check;
//=================================================================================
// class : OperationGUI_PartitionDlg
GEOM::ListOfGO myListRemoveInside;
GEOM::ListOfGO myListKeepInside;
- DlgRef_2Sel1List1Check* GroupPoints;
+ DlgRef_2Sel1List2Check* GroupPoints;
private slots:
void ClickOnOk();
//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);
//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);
//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);
//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);
}
//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 );
}
//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 );
//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);
RepairGUI_FreeFacesDlg.h \
RepairGUI_ChangeOrientationDlg.h \
RepairGUI_GlueDlg.h \
+ RepairGUI_LimitToleranceDlg.h \
RepairGUI_RemoveExtraEdgesDlg.h
# Libraries targets
RepairGUI_FreeFacesDlg.h \
RepairGUI_ChangeOrientationDlg.h \
RepairGUI_GlueDlg.h \
+ RepairGUI_LimitToleranceDlg.h \
RepairGUI_RemoveExtraEdgesDlg.h \
\
RepairGUI.cxx \
RepairGUI_FreeFacesDlg.cxx \
RepairGUI_ChangeOrientationDlg.cxx \
RepairGUI_GlueDlg.cxx \
+ RepairGUI_LimitToleranceDlg.cxx \
RepairGUI_RemoveExtraEdgesDlg.cxx
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 = \
//
// 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>
#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()
//=======================================================================
// function : OnGUIEvent()
-// purpose :
+// purpose :
//=======================================================================
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;
initName( tr( "CHANGE_ORIENTATION_NEW_OBJ_NAME" ) );
resize(100,100);
+ SelectionIntoArgument();
}
initName( tr( "DEVIDE_EDGE_NEW_OBJECT_NAME" ) );
resize(100,100);
+ SelectionIntoArgument();
}
//=================================================================================
--- /dev/null
+// 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());
+ }
+}
--- /dev/null
+// 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
initName( tr( "REMOVE_EXTRA_EDGES_NEW_OBJ_NAME" ) );
resize(100,100);
+ SelectionIntoArgument();
}
void RepairGUI_RemoveExtraEdgesDlg::activateSelection()
{
TColStd_MapOfInteger aTypes;
+ aTypes.Add( GEOM_SHELL );
aTypes.Add( GEOM_SOLID );
aTypes.Add( GEOM_COMPOUND );
globalSelection( aTypes );
initName( tr( "SEWING_NEW_OBJ_NAME" ) );
resize(100,100);
+ SelectionIntoArgument();
}
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" );
reset();
initName( tr( "PROCESS_SHAPE_NEW_OBJ_NAME" ) );
+ selectionChanged();
}
//=================================================================================
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;
libSTEPImport_la_LDFLAGS = \
$(KERNEL_LDFLAGS) -lSALOMELocalTrace -lSALOMEBasics \
$(STDLIB) \
- $(CAS_LDPATH) -lTKSTEP
+ $(CAS_LDPATH) -lTKSTEP -lTKCAF -lTKLCAF -lTKSTEPBase
//
// 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
//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;
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();
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";
libTransformationGUI_la_LDFLAGS = \
../GEOMFiltersSelection/libGEOMFiltersSelection.la \
- ../GEOMBase/libGEOMBase.la
+ ../GEOMBase/libGEOMBase.la \
+ $(CAS_LDPATH) -lTKShHealing
+
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;
//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);
return;
}
addSubshapesToFather(objMap);
- }
+ }
}
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()));
//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);
}
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());
+ }
+}
virtual bool isValid( QString& );
virtual bool execute( ObjectList& );
virtual void addSubshapesToStudy();
+ virtual void restoreSubShapes( SALOMEDS::Study_ptr, SALOMEDS::SObject_ptr );
private:
void Init();
#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>
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()));
//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)
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();
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);
}
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 );
+ }
+}
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;
// Activate Create a Copy mode
Group1->CheckButton1->setChecked(true);
- Group1->CheckButton1->setChecked(false);
CreateCopyModeChanged(true);
Init();
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;
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)
//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);
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);
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;
//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);
{
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"));
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;
//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);
#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>
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;
//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);
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++) {
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 );
+ }
+}
private:
void Init();
void enterEvent( QEvent* );
+ void createPathPreview( GEOM::GEOM_Object_var );
private:
GEOM::ListOfGO myObjects;
--- /dev/null
+# 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)
--- /dev/null
+// 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;
+ }
+}
--- /dev/null
+# 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