Merge from V7_3_BR branch 18/12/2013
@ -30,7 +30,7 @@ CMAKE_POLICY(SET CMP0003 NEW)
|
||||
STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
|
||||
|
||||
SET(${PROJECT_NAME_UC}_MAJOR_VERSION 7)
|
||||
SET(${PROJECT_NAME_UC}_MINOR_VERSION 2)
|
||||
SET(${PROJECT_NAME_UC}_MINOR_VERSION 3)
|
||||
SET(${PROJECT_NAME_UC}_PATCH_VERSION 0)
|
||||
SET(${PROJECT_NAME_UC}_VERSION
|
||||
${${PROJECT_NAME_UC}_MAJOR_VERSION}.${${PROJECT_NAME_UC}_MINOR_VERSION}.${${PROJECT_NAME_UC}_PATCH_VERSION})
|
||||
|
BIN
doc/salome/gui/GEOM/images/isos.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 20 KiB |
@ -2,29 +2,38 @@
|
||||
|
||||
\page common_operation_page Common
|
||||
|
||||
To produce a \b Common operation in the <b>Main Menu</b> select <b>Operations - > Boolean - > Common</b>
|
||||
\b Common operation cuts the common part of a list of shapes and transforms it into an independent geometrical object.
|
||||
|
||||
This operation cuts the common part of a list of shapes and transforms it into an independent geometrical object.
|
||||
|
||||
The \b Result will be a \b GEOM_Object.
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeCommonList(theShapesList, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.\n
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
To produce it, select in the main menu <b>Operations - > Boolean - > Common</b>.
|
||||
|
||||
\image html bool2.png "Common dialog"
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
In this dialog:
|
||||
- Input or accept the default \b Name of the resulting shape.
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the <b>Objects</b> the common part which of should be found.
|
||||
- Activate the corresponding check-box if you wish to <b> Detect Self-intersections </b>
|
||||
- Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
- Press "Apply" or "Apply & Close" button to get the result (GEOM_Object).
|
||||
|
||||
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
all self-intersections use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
For a particular case with two shapes for the Common operation there is the following TUI command:
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeCommon(s1, s2, checkSelfInte)</em>\n
|
||||
This operation can be performed using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeCommonList(theShapesList, checkSelfInte)</em>
|
||||
|
||||
<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.
|
||||
|
||||
There is also a special <b>TUI Command</b> for the Common operation on two shapes :
|
||||
|
||||
<em>geompy.MakeCommon(s1, s2, checkSelfInte)</em>
|
||||
|
||||
<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.
|
||||
|
||||
<b>Example:</b>
|
||||
@ -38,8 +47,7 @@ Our <b>TUI Scripts</b> provide you with useful examples of the use of
|
||||
|
||||
<b> More details </b>
|
||||
|
||||
For a detailed description of the Boolean operations please refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
Please, refer to <a href="SALOME_BOA_PA.pdf">this document</a> for a detailed description of Boolean operations.
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.
|
||||
|
@ -2,21 +2,30 @@
|
||||
|
||||
\page create_isoline_page Isoline
|
||||
|
||||
To create an \b Isoline in the <b>Main Menu</b> select <b>New Entity - >
|
||||
Basic - > Isoline</b>
|
||||
\b Isoline is a 3D curve built on a bounded face limited by <em> [Umin, Umax] </em> and <em> [Vmin, Vmax] </em>
|
||||
values of U and V parameters. For all points of the isoline U or V parameter value is constant.
|
||||
|
||||
\n The \b Result of this operation will be a GEOM_Object.
|
||||
It may be either an edge or a compound of several edges.
|
||||
|
||||
\n You can define an Isoline by a \b Face, \b Type and \b Parameter.
|
||||
\n <b>TUI Command:</b> <em>geompy.MakeIsoline(theFace, IsUIsoline, theParameter)</em>
|
||||
\n <b>Arguments:</b> Name + Face + Type (True for U-Isoline; False for V-Isoline) + Parameter.
|
||||
To create an \b Isoline of a face in the <b>Main Menu</b> select <b>New Entity - > Basic - > Isoline</b>.
|
||||
|
||||
\image html isoline1.png
|
||||
|
||||
In this dialog:
|
||||
- Input or accept the default \b Name of the resulting shape.
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the \b Face, for which the Isoline is built.
|
||||
- Select along which coordinate: \b U-Isoline or \b V-Isoline the Isoline is built;
|
||||
- Set \b Parameter (ranging from 0 to 1), which defines the proportion, at which a face is divided by the isoline.
|
||||
If Parameter=0.5, the isoline is a median.
|
||||
- Press "Apply" or "Apply & Close" button to get the result (an edge or a compound of several edges).
|
||||
|
||||
This operation can be performed using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeIsoline(theFace, IsUIsoline, theParameter)</em>
|
||||
|
||||
<b>Arguments:</b> Name + Face + Type (True for U-Isoline; False for V-Isoline) + Parameter.
|
||||
|
||||
<b>Example:</b>
|
||||
|
||||
\image html isoline2.png "Isoline on face"
|
||||
\image html isoline2.png "Isoline on a rectangle face"
|
||||
|
||||
Our <b>TUI Scripts</b> provide you with useful examples of creation of
|
||||
\ref tui_creation_curve "Basic Geometric Objects".
|
||||
|
@ -1,18 +1,15 @@
|
||||
/*!
|
||||
|
||||
\page create_smoothingsurface_page SmoothingSurface
|
||||
\page create_smoothingsurface_page Smoothing Surface
|
||||
|
||||
To create a \b SmoothingSurface in the <b>Main Menu</b> select <b>New Entity - >
|
||||
To create a <b> Smoothing Surface</b> in the <b>Main Menu</b> select <b>New Entity - >
|
||||
Advanced - > SmoothingSurface </b>
|
||||
|
||||
Specify the parameters of the SmoothingSurface object creation in the opened dialog
|
||||
box and press "Apply" or "Apply & Close" button.
|
||||
Result of each operation will be a GEOM_Object.
|
||||
Specify the \b Name of the surface and the list of \b Points, from which it is approximated and press "Apply" or "Apply & Close" button.
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeSmoothingSurface(lPoints)</em>
|
||||
The result of the operation will be a GEOM_Object(Surface).
|
||||
|
||||
<b>Arguments:</b>
|
||||
- \b Points - list of points
|
||||
<b>TUI Command:</b> <em>geompy.MakeSmoothingSurface(Points)</em>
|
||||
|
||||
\image html smoothingsurface_dlg.png
|
||||
|
||||
|
@ -2,29 +2,37 @@
|
||||
|
||||
\page cut_operation_page Cut
|
||||
|
||||
To produce a \b Cut operation in the <b>Main Menu</b> select <b>Operations - > Boolean - > Cut</b>
|
||||
\b Cut operation cuts a shape with a list of other shapes.
|
||||
|
||||
This operation cuts a shape with a list of other shapes.
|
||||
|
||||
The \b Result will be a \b GEOM_Object.
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeCutList(theMainShape, theShapesList, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + a main shape + a list of other shapes + an optional flag for self-intersection check.\n
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
To produce it, select in the main menu <b>Operations - > Boolean - > Cut</b>
|
||||
|
||||
\image html bool3.png "Cut dialog"
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
In this dialog:
|
||||
- Input or accept the default \b Name of the resulting shape.
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the <b>Main Object</b>, which will be cut by tool objects.
|
||||
- Select the <b>Tool objects</b>, which will cut the main object.
|
||||
- Activate the corresponding check-box if you wish to <b> Detect Self-intersections </b>.
|
||||
- Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
- Press "Apply" or "Apply & Close" button to get the result (GEOM_Object).
|
||||
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
all self-intersections use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
For a particular case with two shapes (object and tool) for the Cut operation there is the following TUI command:
|
||||
This operation can be performed using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeCutList(theMainShape, theShapesList, checkSelfInte)</em>
|
||||
|
||||
<b>Arguments:</b> Name + a main shape + a list of other shapes + an optional flag for self-intersection check.
|
||||
|
||||
There is also a special <b>TUI Command:</b> for the Cut operation on two shapes (object and tool) :
|
||||
|
||||
<em>geompy.MakeCut(s1, s2, checkSelfInte)</em>
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeCut(s1, s2, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + the object + the tool + an optional flag for self-intersection check.
|
||||
|
||||
<b>Example:</b>
|
||||
@ -38,8 +46,7 @@ Our <b>TUI Scripts</b> provide you with useful examples of the use of
|
||||
|
||||
<b> More details </b>
|
||||
|
||||
For a detailed description of the Boolean operations please refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
Please refer to <a href="SALOME_BOA_PA.pdf">this document</a> for a detailed description of Boolean operations.
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.
|
||||
|
@ -2,30 +2,36 @@
|
||||
|
||||
\page fuse_operation_page Fuse
|
||||
|
||||
To produce a \b Fuse operation in the <b>Main Menu</b> select
|
||||
<b>Operations - > Boolean - > Fuse</b>.
|
||||
\b Fuse operation creates one shape from a list of shapes.
|
||||
|
||||
This operation creates one shape from a list of shapes.
|
||||
|
||||
The \b Result will be a \b GEOM_Object.
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeFuseList(theShapesList, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.\n
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
To produce it, select in the Main Menu <b>Operations - > Boolean - > Fuse</b>.
|
||||
|
||||
\image html bool1.png "Fuse dialog"
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
In this dialog:
|
||||
- Input or accept the default \b Name of the resulting shape.
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the <b>Objects</b> to be fused.
|
||||
- Activate the corresponding check-box if you wish to <b> Detect Self-intersections </b>.
|
||||
- Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
- Press "Apply" or "Apply & Close" button to get the result (GEOM_Object).
|
||||
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
all self-intersections use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
For a particular case with two shapes to be fused there is the following TUI command:
|
||||
This operation can be performed using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeFuseList(theShapesList, checkSelfInte)</em>
|
||||
|
||||
<b>Arguments:</b> Name + a list of shapes + an optional flag for self-intersection check.
|
||||
|
||||
There is also a special <b>TUI Command</b> for \b Fuse operation on two shapes :
|
||||
|
||||
<em>geompy.MakeFuse(s1, s2, checkSelfInte)</em>
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeFuse(s1, s2, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.
|
||||
|
||||
<b>Example:</b>
|
||||
@ -38,13 +44,13 @@ Our <b>TUI Scripts</b> provide you with useful examples of the use of
|
||||
\ref tui_fuse "Boolean Operations".
|
||||
|
||||
<b> More details </b>
|
||||
<ul>
|
||||
<li>For a detailed description of the Boolean operations please refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
|
||||
Please, refer to <a href="SALOME_BOA_PA.pdf">this document</a> for a detailed description of Boolean operations.
|
||||
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.</li>
|
||||
<li>Perhaps you also ask yourself : \ref partition_explanation "What is the difference between partition, compounds and fuse operation ?"</li>
|
||||
</ul>
|
||||
major limitations of these operations.
|
||||
|
||||
Perhaps you also ask yourself : \ref partition_explanation "What is the difference between partition, compounds and fuse operation ?"
|
||||
|
||||
*/
|
||||
|
@ -44,32 +44,32 @@ predefined materials.</li>
|
||||
<li><b>Isolines width</b> - allows to define default width of the isolines.</li>
|
||||
<li><b>Preview edges width</b> - allows to define width of the edges for preview.</li>
|
||||
<li><b>Measures line width</b> - allows to define lines width of measurements tools.</li>
|
||||
<li><b>Automatic bring to front</b> - when option is ON: the objects selected by the user will be automatically
|
||||
made "top-level".</li>
|
||||
<li><b>Automatic bring to front</b> - when the option is on, the objects selected by the user automatically become "top-level".</li>
|
||||
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>Number of isolines</b></li> - this submenu allows to specify the
|
||||
number of isolines along the axes of coordinates:
|
||||
<ul>
|
||||
<li><b>Along U</b>
|
||||
<li><b>Along V</b>
|
||||
</ul>
|
||||
<li><b>Number of isolines</b> - allows to specify the number of isolines along <b>Along U</b> and <b>Along V</b> coordinate axes. They are shown on each selected face. For example:
|
||||
|
||||
\image html isos.png
|
||||
|
||||
This preference is not related with <b>Create Isoline</b> operation.
|
||||
By default <b>Along U</b> and <b>Along V</b> are null and isolines are not drawn. </li>
|
||||
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li><b>Input fields precision</b></li>
|
||||
<ul>
|
||||
<li><b>Length precision</b> - allows to ajust input precision of coordinates and dimensions.</li>
|
||||
<li><b>Angular precision</b> - allows to ajust input precision of angles.</li>
|
||||
<li><b>Length tolerance precision</b> - allows to ajust input precision of tolerance of coordinates and dimensions.</li>
|
||||
<li><b>Angular tolerance precision</b> - allows to ajust input precision of tolerance of angles.</li>
|
||||
<li><b>Weight precision</b> - allows to ajust input precision of weight and mass.</li>
|
||||
<li><b>Density precision</b> - allows to ajust input precision of density.</li>
|
||||
<li><b>Parametric precision</b> - allows to ajust input precision of parametric values.</li>
|
||||
<li><b>Parametric tolerance precision</b> - allows to ajust input precision of tolerance in parametric space.</li>
|
||||
<li><b>Length precision</b> - allows to adjust input precision of coordinates and dimensions.</li>
|
||||
<li><b>Angular precision</b> - allows to adjust input precision of angles.</li>
|
||||
<li><b>Length tolerance precision</b> - allows to adjust input precision of tolerance of coordinates and dimensions.</li>
|
||||
<li><b>Angular tolerance precision</b> - allows to adjust input precision of tolerance of angles.</li>
|
||||
<li><b>Weight precision</b> - allows to adjust input precision of weight and mass.</li>
|
||||
<li><b>Density precision</b> - allows to a just input precision of density.</li>
|
||||
<li><b>Parametric precision</b> - allows to adjust input precision of parametric values.</li>
|
||||
<li><b>Parametric tolerance precision</b> - allows to adjust input precision of tolerance in parametric space.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
|
@ -8,6 +8,8 @@ are implemented via plug-ins, which gives the opportunity to
|
||||
expand the range of available formats by adding more plug-ins (for
|
||||
example, CATIA 5).
|
||||
|
||||
The \subpage xao_format_page "import and export of shapes in XAO format" is implemented differently.
|
||||
|
||||
<em>To import geometrical objects from a BREP, IGES, STEP, ACIS or STL file:</em>
|
||||
|
||||
\par
|
||||
|
@ -14,17 +14,14 @@
|
||||
- \subpage transform_geom_obj_page "transformation of geometrical objects"
|
||||
using various algorithms;
|
||||
- \subpage repairing_operations_page "optimization of geometrical objects";
|
||||
- viewing \subpage geometrical_obj_prop_page "geometrical object properties"
|
||||
and other information about geometrical objects using
|
||||
- viewing information about geometrical objects using
|
||||
\subpage using_measurement_tools_page "measurement tools";
|
||||
- \subpage pictures_page "designing shapes from pictures";
|
||||
- easily setting parameters via the variables predefined in
|
||||
|
||||
It is possible to easily set parameters via the variables predefined in
|
||||
\subpage using_notebook_geom_page "SALOME notebook".
|
||||
|
||||
The possibility to classify the created geometrical objects by moving it into early created container (folder) is detailed on
|
||||
\subpage arranging_study_objects_page section.
|
||||
|
||||
XAO format describing a shape with its topology, groups and fields is detailed on \subpage xao_format_page section.
|
||||
Also, there is a possibility to customize an
|
||||
\subpage arranging_study_objects_page "arrangement of the geometrical objects in the SALOME study".
|
||||
|
||||
Geometry module preferences are described in the
|
||||
\subpage geometry_preferences_page section of SALOME Geometry Help.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*!
|
||||
|
||||
\page material_page Material properties
|
||||
\page material_page Material
|
||||
|
||||
<ul>
|
||||
<li>\ref material_general_description_anchor "General Description"</li>
|
||||
@ -16,12 +16,11 @@
|
||||
be changed in the future versions of SALOME Geometry module.
|
||||
|
||||
You can change the material properties of the selected shape(s) in
|
||||
the dedicated dialog box. This dialog box can be invoked from the
|
||||
context popup menu. The layout of context menu can be customized via
|
||||
the context menu dialog. The layout of context menu can be customized via
|
||||
"Show predefined materials in popup menu" preferences option.
|
||||
If this option is switched off, only "Material properties" item will
|
||||
be shown in the popup menu. If this option is on (by default), "Material
|
||||
properties" item in the popup menu will open a submenu with list of predefined
|
||||
properties" item in the popup menu will open a sub-menu with a list of predefined
|
||||
materials:
|
||||
|
||||
\image html hide_predef_material.png
|
||||
@ -44,9 +43,9 @@ the materials is different:
|
||||
- shape presentation in OCC and VTK viewers is not fully identical;
|
||||
- some material attributes can affect the presentation in a different way.
|
||||
|
||||
\anchor material_opengl_model_anchor <h2>OpenGL ligthing model</h2>
|
||||
\anchor material_opengl_model_anchor <h2>OpenGL lighting model</h2>
|
||||
|
||||
The material is specifed by several attributes of the lighting
|
||||
The material is specified by several attributes of the lighting
|
||||
model. More details can be found in the documentation related to the
|
||||
OpenGL programming, for example, here: http://www.glprogramming.com/red/chapter05.html.
|
||||
|
||||
@ -54,7 +53,7 @@ In the OpenGL lighting model, the light in a scene comes from several
|
||||
light sources; the light sources have an effect only when there are
|
||||
surfaces that absorb and reflect light. Each surface is assumed to be
|
||||
composed of a material with various properties. A material might emit
|
||||
its own light (like headlights on an automobile), it might scatter
|
||||
its own light (like headlights of a vehicle), it might scatter
|
||||
some incoming light in all directions, and it might reflect a
|
||||
portion of the incoming light in a preferential direction like a
|
||||
mirror or other shiny surface.
|
||||
@ -120,7 +119,7 @@ predefined and custom.
|
||||
models are specified by the user and can be modified at any moment.
|
||||
</li>
|
||||
|
||||
<li>The widgets to the right allow modifyng different properties of the material model:
|
||||
<li>The widgets to the right allow modifying different properties of the material model:
|
||||
- \b Ambient color and coefficient (floating point value between 0 and 1)
|
||||
- \b Diffuse color and coefficient (floating point value between 0 and 1)
|
||||
- \b Specular color and coefficient (floating point value between 0 and 1)
|
||||
@ -143,7 +142,7 @@ to change the name of material model.</li>
|
||||
\image html material.png
|
||||
|
||||
In addition to the functionality of <b>Materials library</b>, this
|
||||
dialog provides objects selection mechanizm and \b Color property.
|
||||
dialog provides objects selection mechanism and \b Color property.
|
||||
|
||||
If the material model is specified as a \em physical (\em Gold,
|
||||
for example), the shape color (more precisely its \em ambient color)
|
||||
@ -151,7 +150,7 @@ cannot be modified. If you assign a physical material model to the
|
||||
shape, the "Color" menu item will not be available in the popup menu.
|
||||
|
||||
If the model is non-physical (\em artificial), the color can be changed
|
||||
to any appopriate one, only other attributes will be constant. In the
|
||||
to any appropriate one, only other attributes will be constant. In the
|
||||
dialog box you will be able to modify the color of the shape via the
|
||||
"Color" button. "Ambient color" button will be disabled to signalize
|
||||
that this attribute of the model is ignored. Also, it will be possible
|
||||
|
@ -2,15 +2,11 @@
|
||||
|
||||
\page partition_page Partition
|
||||
|
||||
<ul>
|
||||
<li>For a detailed description of the Partition operation please refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.</li>
|
||||
For a detailed description of the Partition operation please refer to <a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
It provides a general review of the Partition and Boolean operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.
|
||||
|
||||
<li>Perhaps you also ask yourself : \ref partition_explanation "What's the difference between partition, compounds and fuse operation ?"</li>
|
||||
</ul>
|
||||
Perhaps you also ask yourself : \ref partition_explanation "What's the difference between partition, compounds and fuse operation ?"
|
||||
|
||||
To produce a \b Partition in the <b>Main Menu</b> select <b>Operations - > Partition</b>
|
||||
|
||||
@ -28,7 +24,7 @@ Resulting Type of shape.
|
||||
|
||||
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.
|
||||
preferable result, i.e. a solid, a shell, a list of faces, etc.
|
||||
|
||||
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
|
||||
@ -47,28 +43,27 @@ 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.
|
||||
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>Detect Self-intersections</b> check box is used to check arguments
|
||||
self-intersections. If this option is switched on (default behavior)
|
||||
each input shape is checked for self-intersection. In case of its detection
|
||||
the operation is aborted. If this option is switched off, the partition
|
||||
algorithm is performed without self-intersection checks.
|
||||
<b>Detect Self-intersections</b> check box is used to check self-intersection of arguments.
|
||||
- If this option is switched on (by default), each input shape is checked for self-intersection.
|
||||
If self-intersection is detected, the operation is aborted.
|
||||
- If this option is switched off, the partition algorithm is performed without self-intersection
|
||||
checks.
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
- Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
|
||||
\note Partition is a complex operation, so its result of it depends
|
||||
on the quality of the initial shapes. Sometimes, if partition fails,
|
||||
@ -95,7 +90,7 @@ Here,
|
||||
- \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.
|
||||
- \em checkSelfInte is a flag that tells if the arguments should
|
||||
- \em checkSelfInte is a flag that indicates if the arguments should
|
||||
be checked for self-intersection prior to the operation.
|
||||
- Other parameters are obsolete and kept only for compatibility with
|
||||
previous versions of SALOME.
|
||||
@ -106,15 +101,14 @@ previous versions of SALOME.
|
||||
|
||||
<b>Arguments:</b> Name + 1 shape to be intersected + 1 cutting plane.
|
||||
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
|
||||
<b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeHalfPartition(Shape, Plane, checkSelfInte)</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.
|
||||
- \em checkSelfInte is a flag that tells if the arguments should
|
||||
- \em checkSelfInte is a flag that indicates if the arguments should
|
||||
be checked for self-intersection prior to the operation.
|
||||
|
||||
<b>Examples:</b>
|
||||
|
@ -6,7 +6,7 @@
|
||||
<b>Repair - > Remove internal faces</b>.
|
||||
|
||||
\n This operation removes all shared faces from a compound to obtain
|
||||
one or more bigger solids from the set of smaller solids.
|
||||
one or more bigger solids from a set of smaller solids.
|
||||
|
||||
\image html remove_webs.png
|
||||
|
||||
@ -15,8 +15,8 @@ one or more bigger solids from the set of smaller solids.
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
|
||||
\note Only shared faces will be removed. Coincident but not shared
|
||||
faces will stay as is, use GlueFaces or MakePartition before
|
||||
RemoveInternalFaces if you need to remove them.
|
||||
faces will stay as is, use Glue Faces or Partition before
|
||||
Remove Internal Faces if you need to remove them.
|
||||
|
||||
\n <b>TUI Command:</b> <em>geompy.RemoveInternalFaces(theCompound)</em>,
|
||||
where <em>theCompound</em> is a compound of solids.
|
||||
|
@ -26,15 +26,15 @@ splits an edge in two.</li>
|
||||
<li>\subpage change_orientation_operation_page "Change orientation" -
|
||||
reverses the normals of the selected faces.</li>
|
||||
<li>\subpage remove_webs_operation_page "Remove internal faces" -
|
||||
rebuilds the topology of a compound of solids by removing of the faces
|
||||
that are shared by several solids.</li>
|
||||
rebuilds the topology of a compound of solids by removing the faces
|
||||
are shared by several solids.</li>
|
||||
<li>\subpage remove_extra_edges_operation_page "Remove extra edges" -
|
||||
removes seam and degenerated edges from the given shape.</li>
|
||||
<li>\subpage fuse_edges_operation_page "Fuse Collinear Edges within a Wire" -
|
||||
removes selected vertices from a given wire in case if adjacent edges
|
||||
are C1 continuous.</li>
|
||||
<li>\subpage union_faces_operation_page "Union faces" -
|
||||
unites all faces sharing one surface on a given shape.</li>
|
||||
unites on a given shape all faces sharing the same surface.</li>
|
||||
</ul>
|
||||
|
||||
*/
|
||||
|
@ -2,27 +2,32 @@
|
||||
|
||||
\page section_opeartion_page Section
|
||||
|
||||
To produce a \b Section operation in the <b>Main Menu</b> select
|
||||
<b>Operations - > Boolean - > Section</b>
|
||||
\b Section operation creates an edge or a wire representing the intersection of surfaces of two shapes.
|
||||
|
||||
This operation creates the section between 2 shapes.
|
||||
|
||||
The \b Result will be any \b GEOM_Object (EDGE or WIRE).
|
||||
|
||||
<b>TUI Command:</b> <em>geompy.MakeSection(s1, s2, checkSelfInte)</em>\n
|
||||
<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.\n
|
||||
<b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
To produce it, select in the main menu <b>Operations - > Boolean - > Section</b>
|
||||
|
||||
\image html neo-section.png "Section dialog"
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
In this dialog:
|
||||
- Input or accept the default \b Name of the resulting shape.
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the intersecting <b>Objects</b>.
|
||||
- Activate the corresponding check-box if you wish to <b> Detect Self-intersections </b>.
|
||||
- Activate \ref restore_presentation_parameters_page "Advanced options" if required.
|
||||
- Press "Apply" or "Apply & Close" button to get the result (EDGE or WIRE).
|
||||
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
all self-intersections use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
This operation can be performed using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeSection(s1, s2, checkSelfInte)</em>
|
||||
|
||||
<b>Arguments:</b> Name + 2 shapes + an optional flag for self-intersection check.
|
||||
|
||||
<b>Example:</b>
|
||||
|
||||
\image html fusesn1.png "The initial shapes"
|
||||
@ -34,8 +39,7 @@ Our <b>TUI Scripts</b> provide you with useful examples of the use of
|
||||
|
||||
<b> More details </b>
|
||||
|
||||
For a detailed description of the Boolean operations please refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
Please refer to <a href="SALOME_BOA_PA.pdf">this document</a> for a detailed description of Boolean operations.
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.
|
||||
|
@ -2,26 +2,28 @@
|
||||
|
||||
\page sewing_operation_page Sewing
|
||||
|
||||
\n To produce a \b Sewing operation in the <b>Main Menu</b> select <b>Repair - > Sewing</b>.
|
||||
To produce a \b Sewing operation in the <b>Main Menu</b> select <b>Repair - > Sewing</b>.
|
||||
|
||||
\n It is possible to sew only compounds of faces or shells.
|
||||
|
||||
\n The \b Result will be a \b GEOM_Object.
|
||||
|
||||
\n <b>TUI Command:</b> <em>geompy.MakeSewing(ListOfShape, Precision, AllowNonManifold=False),</em>
|
||||
where \em ListOfShape is list of faces or shells to be sewed, \em Precision is a
|
||||
precision for sewing, \em AllowNonManifold flag that allows non-manifold sewing.
|
||||
The \b Result will be a \b GEOM_Object.
|
||||
|
||||
\image html repair6.png
|
||||
|
||||
\n <b>Arguments:</b> Name + 1 or more shapes + 1 value (sew
|
||||
precision).
|
||||
\n \b Detect button allows to display the number of free boundaries in
|
||||
your shape:
|
||||
|
||||
In this dialog:
|
||||
- Click on the "Arrow" button and select in the Object Browser or in the viewer one or more \b Shapes (faces or shells) to be sewn.
|
||||
- Activate <b>Allow Non Manifold </b> check-box to produce non-manifold sewing, if required.
|
||||
- Define precision for sewing in \b Tolerance field.
|
||||
- Activate <b> Detect Free boundaries</b> button to display the number of free boundaries in the shape:
|
||||
\image html neo-detect2.png
|
||||
- Click \b Apply or <b>Apply and Close</b> button.
|
||||
|
||||
\n <b>Example:</b>
|
||||
This operation can be also launched using a <b>TUI Command:</b>
|
||||
|
||||
<em>geompy.MakeSewing(ListOfShape, Precision, AllowNonManifold=False),</em>
|
||||
|
||||
where \em ListOfShape is a list of faces or shells to be sewn, \em Precision is a
|
||||
precision for sewing, \em AllowNonManifold is a flag that allows non-manifold sewing.
|
||||
|
||||
<b>Example:</b>
|
||||
|
||||
\image html image112.png "The initial faces"
|
||||
|
||||
|
@ -2,20 +2,21 @@
|
||||
|
||||
\page union_faces_operation_page Union Faces
|
||||
|
||||
\n To <b>Union Faces</b> in the <b>Main Menu</b> select
|
||||
<b>Repair - > Union Faces</b>.
|
||||
\n This operation unites all faces sharing one surface on a given
|
||||
shape.
|
||||
This operation unites on a given shape all faces sharing the same surface.
|
||||
|
||||
\n <b>TUI Command:</b> <em>geompy.UnionFaces(theShape)</em>,
|
||||
where <em>theShape</em> is a compound or a single solid.
|
||||
\n <b>Arguments:</b> Name + one shape + a flag.
|
||||
\n <b>Advanced option:</b>
|
||||
\ref restore_presentation_parameters_page "Set presentation parameters and sub-shapes from arguments".
|
||||
To <b>Union Faces</b> in the <b>Main Menu</b> select <b>Repair - > Union Faces</b>.
|
||||
|
||||
\image html union_faces.png
|
||||
|
||||
\n <b>Example:</b>
|
||||
In this dialog:
|
||||
- Click on the "Arrow" button and select in the Object Browser or in the viewer one or more \b Shapes (compounds or single solids).
|
||||
- If necessary, activate \ref restore_presentation_parameters_page "Advanced Transformation Options".
|
||||
- Click \b Apply or <b>Apply and Close</b> button.
|
||||
|
||||
This operation can be also launched using a <b>TUI Command:</b> <em>geompy.UnionFaces(theShape)</em>,
|
||||
where <em>theShape</em> is a compound or a single solid.
|
||||
|
||||
<b>Example:</b>
|
||||
|
||||
\image html union_faces1.png
|
||||
<center><em>Shape with not united faces</em></center>
|
||||
|
@ -2,10 +2,10 @@
|
||||
|
||||
\page using_boolean_operations_page Boolean Operations
|
||||
|
||||
For detail description of the Boolean operations please refer to
|
||||
For a detailed description of Boolean operations refer to
|
||||
<a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||
It provides a general review of the Partition and Boolean
|
||||
operations algorithms, describes the usage methodology and highlighs
|
||||
operations algorithms, describes the usage methodology and highlights
|
||||
major limitations of these operations.
|
||||
|
||||
You can use the following boolean operations for construction of more
|
||||
@ -44,7 +44,7 @@ operation.
|
||||
\par
|
||||
<em>geompy.MakeBoolean(Shape1, Shape2, Operation, checkSelfInte),</em> where \em
|
||||
Shape1 is the first argument and \em Shape2 is the second argument of
|
||||
Boolean operation, \em Operation is a type of the Boolean operation (1
|
||||
a Boolean operation, \em Operation is the type of a Boolean operation (1
|
||||
— Common, 2 — Cut, 3 — Fuse, 4 — Section).
|
||||
|
||||
|
||||
@ -60,17 +60,17 @@ argument and \em Shape2 is the second argument of Common operation;
|
||||
<em>geompy.MakeCut(Shape1, Shape2, checkSelfInte)</em>, where \em Shape1 is the first
|
||||
argument and \em Shape2 is the second argument of Cut operation;
|
||||
|
||||
The flag \em checkSelfInte tells whether arguments should be checked for
|
||||
self-intersection prior to an operation. Its default value is \em False which
|
||||
The flag \em checkSelfInte indicates whether the arguments should be checked for
|
||||
self-intersection prior to an operation. Its default value is \em False, which
|
||||
means that there is no need to check it. This option is provided to ensure that
|
||||
an operation is performed on not self-intersected shapes as these shapes are
|
||||
an operation is performed on not self-intersected shapes as they are
|
||||
not valid for boolean operations.
|
||||
|
||||
\note This algorithm doesn't find all types of self-intersections. It is tuned
|
||||
\note This algorithm does not find all types of self-intersections. It is tuned
|
||||
to detect vertex/vertex, vertex/edge, edge/edge, vertex/face and edge/face
|
||||
intersections. Face/face intersections detection is switched off as it
|
||||
is a time-consuming operation that gives an impact on performance. To find
|
||||
all self-intersections please use \ref check_self_intersections_page
|
||||
all self-intersections use \ref check_self_intersections_page
|
||||
"Detect Self-intersection tool".
|
||||
|
||||
Our <b>TUI Scripts</b> provide you with useful examples of the use of
|
||||
|
@ -1,9 +1,10 @@
|
||||
/*!
|
||||
|
||||
\page using_measurement_tools_page Measuring objects properties
|
||||
\page using_measurement_tools_page Object properties
|
||||
|
||||
\n Measurement tools in GEOM are necessary for getting different data
|
||||
concerning created or imported geometrical objects :
|
||||
\n The key property of an object is its \subpage geometrical_obj_prop_page "Geometrical Type"
|
||||
|
||||
\n There are also various <b> Measurement tools </b> for getting data about created or imported geometrical objects :
|
||||
|
||||
<ul>
|
||||
<li>\subpage point_coordinates_page "Point coordinates"</li>
|
||||
|
@ -101,10 +101,9 @@ and then displays only the children of the selected object(s).
|
||||
Switch the checkbox near the appropriate object and
|
||||
click <b>Publish</b> or <b>Publish And Close</b> button.
|
||||
|
||||
"Eye" icons in this dialog box allow previewing unpublished objects in the viewer. All
|
||||
unpublished objects are by default sorted by the name in ascending order. It is possible
|
||||
to change order of sorting (ascending / descending) by clicking the corresponding title
|
||||
bar of the objects list.
|
||||
"Eye" icons in this dialog box allow previewing unpublished objects in the viewer. By default all
|
||||
unpublished objects are sorted by name in ascending order. It is possible
|
||||
to change the order (ascending / descending) by clicking the corresponding title bar of the objects list.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
@ -115,8 +114,7 @@ window providing some information on a selected geometric object:
|
||||
|
||||
- <b>Creation operation</b> shows a name of the operation
|
||||
used to create the selected object.
|
||||
- In a table under <b>Creation operation</b>, \b Parameter and \b
|
||||
Value are a name and a value of a parameter used to create the
|
||||
selected object.
|
||||
- The table below lists \b Parameters used to create the
|
||||
selected object and their \b Values.
|
||||
|
||||
*/
|
||||
|
@ -1,10 +1,24 @@
|
||||
/*!
|
||||
|
||||
\page xao_format_page The XAO format
|
||||
\page xao_format_page Import and export of shapes in XAO format
|
||||
|
||||
XAO is a file format which describes a shape with its topology, groups and fields.
|
||||
|
||||
- \subpage export_xao_page "Export"
|
||||
- \subpage import_xao_page "Import"
|
||||
To import a shape in the \b XAO format, in the <b>Main Menu</b> select <b>New Entity ->
|
||||
Import / Export -> Import XAO. </b>
|
||||
|
||||
To export a shape in the \b XAO format, in the <b>Main Menu</b> select <b>New Entity ->
|
||||
Import / Export -> Export XAO. </b>
|
||||
|
||||
\image html exportxao_dlg.png
|
||||
|
||||
In this dialog:
|
||||
- Click the arrow button and select in the Object Browser or in the Viewer the <b>Shape</b> to be exported.
|
||||
- Input the <b>File name</b> to create a new file or click browse button to save in an existing file.
|
||||
- Select the \b Groups of the chosen shape to be exported.
|
||||
- Select the \b Fields of the chosen shape to be exported.
|
||||
- Press "Apply" or "Apply & Close" button to get the result.
|
||||
|
||||
It also possible to export a shape using the TUI Command: <em>geompy.MakeExportXAO(Shape, FileName, Groups, Fields)</em>
|
||||
|
||||
*/
|
||||
|
Before Width: | Height: | Size: 855 B After Width: | Height: | Size: 860 B |
@ -871,18 +871,45 @@ bool AdvancedGUI_PipeTShapeDlg::isValid (QString& msg)
|
||||
ok = LReductionGroupParams->SpinBox2->isValid(msg, !IsPreview()) && ok;
|
||||
ok = LReductionGroupParams->SpinBox3->isValid(msg, !IsPreview()) && ok;
|
||||
ok = LReductionGroupParams->SpinBox4->isValid(msg, !IsPreview()) && ok;
|
||||
if(MainTubeGroupParams->SpinBox_DX->value() == LReductionGroupParams->SpinBox1->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
if(MainTubeGroupParams->SpinBox_DX->value() + MainTubeGroupParams->SpinBox_DY->value() ==
|
||||
LReductionGroupParams->SpinBox1->value() + LReductionGroupParams->SpinBox2->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if (RReductionGroupParams->GroupBox1->isChecked()) {
|
||||
ok = RReductionGroupParams->SpinBox1->isValid(msg, !IsPreview()) && ok;
|
||||
ok = RReductionGroupParams->SpinBox2->isValid(msg, !IsPreview()) && ok;
|
||||
ok = RReductionGroupParams->SpinBox3->isValid(msg, !IsPreview()) && ok;
|
||||
ok = RReductionGroupParams->SpinBox4->isValid(msg, !IsPreview()) && ok;
|
||||
if(MainTubeGroupParams->SpinBox_DX->value() == RReductionGroupParams->SpinBox1->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
if(MainTubeGroupParams->SpinBox_DX->value() + MainTubeGroupParams->SpinBox_DY->value() ==
|
||||
RReductionGroupParams->SpinBox1->value() + RReductionGroupParams->SpinBox2->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
if (IReductionGroupParams->GroupBox1->isChecked()) {
|
||||
ok = IReductionGroupParams->SpinBox1->isValid(msg, !IsPreview()) && ok;
|
||||
ok = IReductionGroupParams->SpinBox2->isValid(msg, !IsPreview()) && ok;
|
||||
ok = IReductionGroupParams->SpinBox3->isValid(msg, !IsPreview()) && ok;
|
||||
ok = IReductionGroupParams->SpinBox4->isValid(msg, !IsPreview()) && ok;
|
||||
if(IncidentTubeGroupParams->SpinBox_DX->value() == IReductionGroupParams->SpinBox1->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
if(IncidentTubeGroupParams->SpinBox_DX->value() + IncidentTubeGroupParams->SpinBox_DY->value() ==
|
||||
IReductionGroupParams->SpinBox1->value() + IReductionGroupParams->SpinBox2->value()) {
|
||||
msg += tr("GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I") + "\n";
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
ok = fabs(MainTubeGroupParams->SpinBox_DX->value()) > Precision::Confusion() && ok;
|
||||
|
@ -246,6 +246,30 @@
|
||||
<source>GEOM_PIPETSHAPE_GROUPPOS</source>
|
||||
<translation>Position</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L</source>
|
||||
<translation>Main pipe Radius can't be equal to Left thickness reduction Radius (rL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L</source>
|
||||
<translation>Main pipe external Radius (Radius + Width) can't be equal to Left thickness reduction external Radius (rL + wL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R</source>
|
||||
<translation>Main pipe Radius can't be equal to Right thickness reduction Radius (rR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R</source>
|
||||
<translation>Main pipe external Radius (Radius + Width) can't be equal to Right thickness reduction external Radius (rR + wR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I</source>
|
||||
<translation>Incident pipe Radius can't be equal to Incident pipe thickness reduction Radius (rI)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I</source>
|
||||
<translation>Incident pipe external Radius (Radius + Width) can't be equal to Incident pipe thickness reduction external Radius (rI + wI)!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AdvancedGUI_SmoothingSurfaceDlg</name>
|
||||
|
@ -246,6 +246,30 @@
|
||||
<source>GEOM_PIPETSHAPE_GROUPPOS</source>
|
||||
<translation>Position</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L</source>
|
||||
<translation type="unfinished">Main pipe Radius can't be equal to Left thickness reduction Radius (rL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L</source>
|
||||
<translation type="unfinished">Main pipe external Radius (Radius + Width) can't be equal to Left thickness reduction external Radius (rL + wL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R</source>
|
||||
<translation type="unfinished">Main pipe Radius can't be equal to Right thickness reduction Radius (rR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R</source>
|
||||
<translation type="unfinished">Main pipe external Radius (Radius + Width) can't be equal to Right thickness reduction external Radius (rR + wR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I</source>
|
||||
<translation type="unfinished">Incident pipe Radius can't be equal to Incident pipe thickness reduction Radius (rI)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I</source>
|
||||
<translation type="unfinished">Incident pipe external Radius (Radius + Width) can't be equal to Incident pipe thickness reduction external Radius (rI + wI)!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AdvancedGUI_SmoothingSurfaceDlg</name>
|
||||
|
@ -5,269 +5,293 @@
|
||||
<name>@default</name>
|
||||
<message>
|
||||
<source>GEOM_ADVANCED</source>
|
||||
<translation>GEOM_ADVANCED</translation>
|
||||
<translation>高度な形状: タイプ %1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ADVANCED_201</source>
|
||||
<translation>GEOM_ADVANCED_201</translation>
|
||||
<translation>T型パイプ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ADVANCED_202</source>
|
||||
<translation>GEOM_ADVANCED_202</translation>
|
||||
<translation>カット済みディスク</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ADVANCED_203</source>
|
||||
<translation>GEOM_ADVANCED_203</translation>
|
||||
<translation>カット シリンダー</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_DIVIDEDDISK</source>
|
||||
<translation>GEOM_DIVIDEDDISK</translation>
|
||||
<translation>Divided_Disk</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_DIVIDEDDISK_TITLE</source>
|
||||
<translation>GEOM_DIVIDEDDISK_TITLE</translation>
|
||||
<translation>分割ディスクの構築</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_DIVIDEDCYLINDER</source>
|
||||
<translation>GEOM_DIVIDEDCYLINDER</translation>
|
||||
<translation>Divided_Cylinder</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_DIVIDEDCYLINDER_TITLE</source>
|
||||
<translation>GEOM_DIVIDEDCYLINDER_TITLE</translation>
|
||||
<translation>分割シリンダの構築</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_DIVIDEDCYLINDER</source>
|
||||
<translation>MEN_DIVIDEDCYLINDER</translation>
|
||||
<translation>分割シリンダ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_DIVIDEDCYLINDER</source>
|
||||
<translation>TOP_DIVIDEDCYLINDER</translation>
|
||||
<translation>分割シリンダ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_DIVIDEDCYLINDER</source>
|
||||
<translation>STB_DIVIDEDCYLINDER</translation>
|
||||
<translation>分割シリンダ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_DIVIDEDDISK</source>
|
||||
<translation>MEN_DIVIDEDDISK</translation>
|
||||
<translation>分割ディスク</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_DIVIDEDDISK</source>
|
||||
<translation>TOP_DIVIDEDDISK</translation>
|
||||
<translation>分割ディスク</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_DIVIDEDDISK</source>
|
||||
<translation>STB_DIVIDEDDISK</translation>
|
||||
<translation>分割ディスク</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_PIPETSHAPE</source>
|
||||
<translation>TOP_PIPETSHAPE</translation>
|
||||
<translation>T型パイプを作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_PIPETSHAPE</source>
|
||||
<translation>MEN_PIPETSHAPE</translation>
|
||||
<translation>T型パイプを作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_PIPETSHAPE</source>
|
||||
<translation>STB_PIPETSHAPE</translation>
|
||||
<translation>T型パイプを作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_SMOOTHINGSURFACE</source>
|
||||
<translation>TOP_SMOOTHINGSURFACE</translation>
|
||||
<translation>表面のスムージング</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_SMOOTHINGSURFACE</source>
|
||||
<translation>MEN_SMOOTHINGSURFACE</translation>
|
||||
<translation>表面の平滑化</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_SMOOTHINGSURFACE</source>
|
||||
<translation>STB_SMOOTHINGSURFACE</translation>
|
||||
<translation>表面のスムージング</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>HALF_LENGTH_MAIN_PIPE</source>
|
||||
<translation>HALF_LENGTH_MAIN_PIPE</translation>
|
||||
<translation>半分の長さのパイプを作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>HALF_LENGTH_INCIDENT_PIPE</source>
|
||||
<translation>HALF_LENGTH_INCIDENT_PIPE</translation>
|
||||
<translation>入射管長さ半分</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CIRCULAR_QUARTER_PIPE</source>
|
||||
<translation>CIRCULAR_QUARTER_PIPE</translation>
|
||||
<translation>パイプの1/4形状</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>THICKNESS</source>
|
||||
<translation>THICKNESS</translation>
|
||||
<translation>厚み</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>FLANGE</source>
|
||||
<translation>FLANGE</translation>
|
||||
<translation>フランジ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CHAMFER_OR_FILLET</source>
|
||||
<translation>CHAMFER_OR_FILLET</translation>
|
||||
<translation>面取り 又は フィレット</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CHAMFER</source>
|
||||
<translation>CHAMFER</translation>
|
||||
<translation>面取り</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>FILLET</source>
|
||||
<translation>FILLET</translation>
|
||||
<translation>フィレット</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JUNCTION_FACE_1</source>
|
||||
<translation>JUNCTION_FACE_1</translation>
|
||||
<translation>Junction 1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JUNCTION_FACE_2</source>
|
||||
<translation>JUNCTION_FACE_2</translation>
|
||||
<translation>Junction 2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JUNCTION_FACE_3</source>
|
||||
<translation>JUNCTION_FACE_3</translation>
|
||||
<translation>Junction 3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>INTERNAL_FACES</source>
|
||||
<translation>INTERNAL_FACES</translation>
|
||||
<translation>内部の顔</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AdvancedGUI_PipeTShapeDlg</name>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_I</source>
|
||||
<translation type="unfinished">Incident pipe external Radius (Radius + Width) can't be equal to Incident pipe thickness reduction external Radius (rI + wI)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_I</source>
|
||||
<translation type="unfinished">Incident pipe Radius can't be equal to Incident pipe thickness reduction Radius (rI)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_R</source>
|
||||
<translation type="unfinished">Main pipe external Radius (Radius + Width) can't be equal to Right thickness reduction external Radius (rR + wR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_R</source>
|
||||
<translation type="unfinished">Main pipe Radius can't be equal to Right thickness reduction Radius (rR)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_EXT_RADII_L</source>
|
||||
<translation type="unfinished">Main pipe external Radius (Radius + Width) can't be equal to Left thickness reduction external Radius (rL + wL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_ERR_EQUAL_RADII_L</source>
|
||||
<translation type="unfinished">Main pipe Radius can't be equal to Left thickness reduction Radius (rL)!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_TITLE</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_TITLE</translation>
|
||||
<translation>T型パイプの作成</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE</source>
|
||||
<translation>GEOM_PIPE_TSHAPE</translation>
|
||||
<translation>PipeTShape</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_MPIPE</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_MPIPE</translation>
|
||||
<translation>メインパイプ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_R</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_R</translation>
|
||||
<translation>半径</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_W</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_W</translation>
|
||||
<translation>幅</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_L</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_L</translation>
|
||||
<translation>半分の長さ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_IPIPE</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_IPIPE</translation>
|
||||
<translation>付随パイプ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_CHAMFER</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_CHAMFER</translation>
|
||||
<translation>面取り</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_CHAMFER_H</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_CHAMFER_H</translation>
|
||||
<translation>高さ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_CHAMFER_W</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_CHAMFER_W</translation>
|
||||
<translation>幅</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_FILLET</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_FILLET</translation>
|
||||
<translation>フィレット</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_HEX</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_HEX</translation>
|
||||
<translation>六面体メッシュの準備</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION</translation>
|
||||
<translation>位置を設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION_P1</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION_P1</translation>
|
||||
<translation>接続部 P1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION_P2</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION_P2</translation>
|
||||
<translation>接続部 P2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION_P3</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION_P3</translation>
|
||||
<translation>接続部 P3</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION_LBL_L1</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION_LBL_L1</translation>
|
||||
<translation>New L1</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_POSITION_LBL_L2</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_POSITION_LBL_L2</translation>
|
||||
<translation>New L2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_LEFT_TR</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_LEFT_TR</translation>
|
||||
<translation>左側肉厚変更</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_RIGHT_TR</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_RIGHT_TR</translation>
|
||||
<translation>右側肉厚変更</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_INCI_TR</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_INCI_TR</translation>
|
||||
<translation>付随パイプ肉厚変更</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_TR_R</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_TR_R</translation>
|
||||
<translation>半径 (r%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_TR_W</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_TR_W</translation>
|
||||
<translation>厚み (w%1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_TR_L_TRANS</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_TR_L_TRANS</translation>
|
||||
<translation>拡張部長さ (ltrans %1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPE_TSHAPE_TR_L_THIN</source>
|
||||
<translation>GEOM_PIPE_TSHAPE_TR_L_THIN</translation>
|
||||
<translation>接続部長さ (lthin %1)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_GROUPMAIN</source>
|
||||
<translation>GEOM_PIPETSHAPE_GROUPMAIN</translation>
|
||||
<translation>メインの設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_GROUPREDUCT</source>
|
||||
<translation>GEOM_PIPETSHAPE_GROUPREDUCT</translation>
|
||||
<translation>接続部詳細設定</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_PIPETSHAPE_GROUPPOS</source>
|
||||
<translation>GEOM_PIPETSHAPE_GROUPPOS</translation>
|
||||
<translation>位置による設定</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>AdvancedGUI_SmoothingSurfaceDlg</name>
|
||||
<message>
|
||||
<source>GEOM_SMOOTHINGSURFACE_TITLE</source>
|
||||
<translation>GEOM_SMOOTHINGSURFACE_TITLE</translation>
|
||||
<translation>滑らかな表面の構造</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SMOOTHINGSURFACE</source>
|
||||
<translation>GEOM_SMOOTHINGSURFACE</translation>
|
||||
<translation>表面 lissee</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SMOOTHINGSURFACE_RESULT</source>
|
||||
<translation>GEOM_SMOOTHINGSURFACE_RESULT</translation>
|
||||
<translation>結果の名前</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SMOOTHINGSURFACE_ARG</source>
|
||||
<translation>GEOM_SMOOTHINGSURFACE_ARG</translation>
|
||||
<translation>節点</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SMOOTHINGSURFACE_ARG_POINTS</source>
|
||||
<translation>GEOM_SMOOTHINGSURFACE_ARG_POINTS</translation>
|
||||
<translation>ポイント</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -233,6 +233,41 @@ static Standard_Boolean IsFacesOfSameSolids
|
||||
return isSame;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : IsEdgeValidToMerge
|
||||
//purpose : Edge is valid if it is not seam or if it is a seam and the face
|
||||
// has another seam edge.
|
||||
//=======================================================================
|
||||
static Standard_Boolean IsEdgeValidToMerge(const TopoDS_Edge &theEdge,
|
||||
const TopoDS_Face &theFace)
|
||||
{
|
||||
Standard_Boolean isValid = Standard_True;
|
||||
|
||||
if (BRep_Tool::IsClosed(theEdge, theFace)) {
|
||||
// This is a seam edge. Check if there are another seam edges on the face.
|
||||
TopExp_Explorer anExp(theFace, TopAbs_EDGE);
|
||||
|
||||
for (; anExp.More(); anExp.Next()) {
|
||||
const TopoDS_Shape &aShEdge = anExp.Current();
|
||||
|
||||
// Skip same edge.
|
||||
if (theEdge.IsSame(aShEdge)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if this edge is a seam.
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aShEdge);
|
||||
|
||||
if (BRep_Tool::IsClosed(anEdge, theFace)) {
|
||||
isValid = Standard_False;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : Perform
|
||||
//purpose :
|
||||
@ -302,7 +337,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape)
|
||||
Standard_Integer i;
|
||||
for (i = 1; i <= edges.Length(); i++) {
|
||||
TopoDS_Edge edge = TopoDS::Edge(edges(i));
|
||||
if (BRep_Tool::Degenerated(edge) || BRep_Tool::IsClosed(edge, aFace))
|
||||
if (BRep_Tool::Degenerated(edge) || !IsEdgeValidToMerge(edge, aFace))
|
||||
continue;
|
||||
|
||||
const TopTools_ListOfShape& aList = aMapEdgeFaces.FindFromKey(edge);
|
||||
@ -315,7 +350,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape)
|
||||
if (aProcessed.Contains(anCheckedFace))
|
||||
continue;
|
||||
|
||||
if (BRep_Tool::IsClosed(edge, anCheckedFace)) {
|
||||
if (!IsEdgeValidToMerge(edge, anCheckedFace)) {
|
||||
// Skip seam edge.
|
||||
continue;
|
||||
}
|
||||
|
@ -32,6 +32,7 @@
|
||||
|
||||
#include <GEOMImpl_Types.hxx>
|
||||
|
||||
#include <SUIT_MessageBox.h>
|
||||
#include <SUIT_ResourceMgr.h>
|
||||
#include <SUIT_Session.h>
|
||||
#include <SalomeApp_Application.h>
|
||||
@ -260,8 +261,17 @@ bool BuildGUI_ShellDlg::execute( ObjectList& objects )
|
||||
|
||||
GEOM::GEOM_Object_var anObj = anOper->MakeShell( objlist.in() );
|
||||
|
||||
if ( !anObj->_is_nil() )
|
||||
if ( !anObj->_is_nil() ) {
|
||||
TopoDS_Shape aShell;
|
||||
GEOMBase::GetShape(anObj, aShell, TopAbs_SHELL);
|
||||
|
||||
if (aShell.IsNull()) {
|
||||
SUIT_MessageBox::warning(this,
|
||||
QObject::tr("GEOM_WRN_WARNING"),
|
||||
QObject::tr("GEOM_WRN_FACES_NOT_SHELL"));
|
||||
}
|
||||
objects.push_back( anObj._retn() );
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -105,6 +105,9 @@ bool DisplayGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
|
||||
case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES
|
||||
SetDisplayMode( 2 );
|
||||
break;
|
||||
case GEOMOp::OpDMTexture: // MENU VIEW - DISPLAY MODE - TEXTURE
|
||||
SetDisplayMode( 3 );
|
||||
break;
|
||||
case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
|
||||
getGeometryGUI()->EmitSignalDeactivateDialog();
|
||||
DisplayAll();
|
||||
|
@ -1701,8 +1701,8 @@ Handle(AIS_AngleDimension) EntityGUI_3DSketcherDlg::createAISAngleDimension(doub
|
||||
std::string Angle_str = doubleToString(theAngle);
|
||||
|
||||
// Construction of the plane
|
||||
gce_MakePln gce_MP2(P0, P1, P2);
|
||||
Handle(Geom_Plane) aPlane = new Geom_Plane(gce_MP2.Value());
|
||||
//gce_MakePln gce_MP2(P0, P1, P2);
|
||||
//Handle(Geom_Plane) aPlane = new Geom_Plane(gce_MP2.Value());
|
||||
|
||||
TopoDS_Vertex V0 = BRepBuilderAPI_MakeVertex(P0);
|
||||
TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(P1);
|
||||
@ -1725,7 +1725,7 @@ Handle(AIS_AngleDimension) EntityGUI_3DSketcherDlg::createAISAngleDimension(doub
|
||||
|
||||
// todo : port
|
||||
|
||||
Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( anEdge1, anEdge2, aPlane->Pln() );
|
||||
Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( anEdge1, anEdge2 );
|
||||
|
||||
anIO->SetCustomValue( theAngle );
|
||||
|
||||
|
@ -282,7 +282,16 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
||||
myWidgets.insert( HIST_TYPE, histType );
|
||||
QDoubleSpinBox* thresholdValue = new QDoubleSpinBox();
|
||||
thresholdValue->setRange( 0, 254 );
|
||||
thresholdValue->setValue( 128 );
|
||||
// 1 is a good default value for the threshold. It means that we are very permissive
|
||||
// about what will be considered INSIDE the zone we want to find the frontier of
|
||||
// This makes the algorithm more robust against a bit inhomogeneous parts in the zone
|
||||
// that we want to delimitate.
|
||||
// The drawback is if we want to delimitate a zone wich color is very similar to the zone
|
||||
// we consider as the OUTSIDE, the result will be bad.
|
||||
// The current use cases are more of the first form :
|
||||
// - Strongly contrasted INSIDE and OUTSIDE zones
|
||||
// - Small inhomogenities in each zone
|
||||
thresholdValue->setValue( 1 );
|
||||
myWidgets.insert( THRESHOLD_VALUE, thresholdValue );
|
||||
QDoubleSpinBox* maxThreshold = new QDoubleSpinBox();
|
||||
maxThreshold->setRange( 1, 255 );
|
||||
@ -327,7 +336,7 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
||||
// mainFrame()->GroupBoxName->hide();
|
||||
|
||||
// Build an instance of detection used to perform image processing operations
|
||||
aDetector = new ShapeRec_FeatureDetector();
|
||||
myDetector = new ShapeRec_FeatureDetector();
|
||||
|
||||
setHelpFileName( "shape_recognition_page.html" );
|
||||
|
||||
@ -341,7 +350,7 @@ EntityGUI_FeatureDetectorDlg::EntityGUI_FeatureDetectorDlg( GeometryGUI* theGeom
|
||||
//=================================================================================
|
||||
EntityGUI_FeatureDetectorDlg::~EntityGUI_FeatureDetectorDlg()
|
||||
{
|
||||
|
||||
delete myDetector;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -447,9 +456,9 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
|
||||
return ;
|
||||
|
||||
// Setting the image caracteristics
|
||||
aDetector->SetPath( theImgFileName );
|
||||
height = aDetector->GetImgHeight();
|
||||
width = aDetector->GetImgWidth();
|
||||
myDetector->SetPath( theImgFileName );
|
||||
height = myDetector->GetImgHeight();
|
||||
width = myDetector->GetImgWidth();
|
||||
pictureLeft = -0.5 * width; // X coordinate of the top left corner of the background image in the view
|
||||
pictureTop = 0.5 * height; // Y coordinate of both top corners
|
||||
|
||||
@ -674,7 +683,7 @@ void EntityGUI_FeatureDetectorDlg::setEndPnt(const gp_Pnt& theEndPnt)
|
||||
{
|
||||
myEndPnt = theEndPnt;
|
||||
MESSAGE("myEndPnt = ("<<theEndPnt.X()<<", "<<theEndPnt.Y()<<")")
|
||||
if (setSelectionRect() && aDetector->GetImgHeight() > 0)
|
||||
if (setSelectionRect() && myDetector->GetImgHeight() > 0)
|
||||
showImageSample();
|
||||
}
|
||||
|
||||
@ -705,8 +714,8 @@ bool EntityGUI_FeatureDetectorDlg::setSelectionRect()
|
||||
void EntityGUI_FeatureDetectorDlg::showImageSample()
|
||||
{
|
||||
// Cropp the image to the selection rectangle given by the user
|
||||
aDetector->SetROI( myRect );
|
||||
std::string samplePicturePath = aDetector->CroppImage();
|
||||
myDetector->SetROI( myRect );
|
||||
std::string samplePicturePath = myDetector->CroppImage();
|
||||
|
||||
// Display the result
|
||||
QPixmap pixmap(QString(samplePicturePath.c_str()));
|
||||
@ -753,9 +762,9 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
subPictureLeft = pictureLeft;
|
||||
subPictureTop = pictureTop;
|
||||
}
|
||||
aDetector->ComputeCorners( useROI, parameters );
|
||||
CvPoint2D32f* corners = aDetector->GetCorners();
|
||||
int cornerCount = aDetector->GetCornerCount();
|
||||
myDetector->ComputeCorners( useROI, parameters );
|
||||
CvPoint2D32f* corners = myDetector->GetCorners();
|
||||
int cornerCount = myDetector->GetCornerCount();
|
||||
int i;
|
||||
|
||||
// Build the geom objects associated to the detected corners and returned by execute
|
||||
@ -794,9 +803,9 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
{
|
||||
GEOM::GEOM_ICurvesOperations_var aCurveOperations = myGeomGUI->GetGeomGen()->GetICurvesOperations( getStudyId() );
|
||||
|
||||
aDetector->ComputeContours( useROI, parameters );
|
||||
std::vector< std::vector<cv::Point> > contours = aDetector->GetContours();
|
||||
std::vector<cv::Vec4i> hierarchy = aDetector->GetContoursHierarchy();
|
||||
myDetector->ComputeContours( useROI, parameters );
|
||||
std::vector< std::vector<cv::Point> > contours = myDetector->GetContours();
|
||||
std::vector<cv::Vec4i> hierarchy = myDetector->GetContoursHierarchy();
|
||||
|
||||
std::vector< cv::Point > contour;
|
||||
int idx = 0;
|
||||
@ -914,8 +923,8 @@ bool EntityGUI_FeatureDetectorDlg::execute( ObjectList& objects )
|
||||
|
||||
// else if(myConstructorId ==LINES)
|
||||
// {
|
||||
// aDetector->ComputeLines();
|
||||
// std::vector<cv::Vec4i> lines = aDetector->GetLines();
|
||||
// myDetector->ComputeLines();
|
||||
// std::vector<cv::Vec4i> lines = myDetector->GetLines();
|
||||
// GEOM::GEOM_Object_var Pnt1;
|
||||
// GEOM::GEOM_Object_var Pnt2;
|
||||
// GEOM::GEOM_Object_var aLine;
|
||||
|
@ -84,7 +84,7 @@ private slots:
|
||||
|
||||
|
||||
private:
|
||||
ShapeRec_FeatureDetector* aDetector;
|
||||
ShapeRec_FeatureDetector* myDetector;
|
||||
|
||||
gp_Ax3 myWPlane;
|
||||
gp_Ax3 aGlobalCS;
|
||||
|
@ -184,12 +184,15 @@ bool EntityGUI_PictureImportDlg::execute( ObjectList& objects )
|
||||
int height = pixmap->height();
|
||||
int width = pixmap->width();
|
||||
|
||||
delete pixmap;
|
||||
|
||||
GEOM::GEOM_Object_var P1 = aBasicOperations->MakePointXYZ( -0.5*width, -0.5*height, 0 );
|
||||
GEOM::GEOM_Object_var P2 = aBasicOperations->MakePointXYZ( -0.5*width, 0.5*height, 0 );
|
||||
GEOM::GEOM_Object_var P3 = aBasicOperations->MakePointXYZ( 0.5*width, 0.5*height, 0 );
|
||||
GEOM::GEOM_Object_var P4 = aBasicOperations->MakePointXYZ( 0.5*width, -0.5*height, 0 );
|
||||
|
||||
GEOM::GEOM_Object_var aFace = aBlocksOperations->MakeQuad4Vertices(P1,P2,P3,P4);
|
||||
getDisplayer()->SetDisplayMode(3);
|
||||
getDisplayer()->SetTexture(theImgFileName.toStdString());
|
||||
|
||||
if ( !aFace->_is_nil() )
|
||||
@ -199,7 +202,6 @@ bool EntityGUI_PictureImportDlg::execute( ObjectList& objects )
|
||||
|
||||
res=true;
|
||||
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
@ -589,10 +589,58 @@ void EntityGUI_SubShapeDlg::showOnlySelected()
|
||||
Handle(SALOME_InteractiveObject) io =
|
||||
new SALOME_InteractiveObject (aMainEntry.in(), "GEOM", "TEMP_IO");
|
||||
if (view->isVisible(io)) myIsHiddenMain = true;
|
||||
}
|
||||
|
||||
aDisplayer->EraseAll(/*forced = false, updateViewer = true*/);
|
||||
aDisplayer->Display(aSelList, true);
|
||||
//keep the selected entry and IO in the map for checking
|
||||
std::map<QString, Handle(SALOME_InteractiveObject)> aSelEntriesMap;
|
||||
SALOME_ListIteratorOfListIO aSelIt(aSelList);
|
||||
for ( ; aSelIt.More(); aSelIt.Next() ) {
|
||||
//fill map <entry, io>
|
||||
Handle(SALOME_InteractiveObject) anSelIO = aSelIt.Value();
|
||||
aSelEntriesMap[anSelIO->getEntry()] = anSelIO;
|
||||
}
|
||||
//get the displayed sub-shapes
|
||||
SALOME_ListIO displayed;
|
||||
view->GetVisible(displayed);
|
||||
// Erase all, except the selected shapes
|
||||
std::map<QString, Handle(SALOME_InteractiveObject)>::iterator
|
||||
aSelDispIter = aSelEntriesMap.end();
|
||||
SALOME_ListIteratorOfListIO aDispIt( displayed );
|
||||
for ( ; aDispIt.More(); aDispIt.Next() ) {
|
||||
Handle(SALOME_InteractiveObject) anIO = aDispIt.Value();
|
||||
aSelDispIter = aSelEntriesMap.find( anIO->getEntry() );
|
||||
if ( aSelDispIter != aSelEntriesMap.end() ) {
|
||||
//sub-shape is selected, so erase it's record from map to keep in it not displayed, but selected sub-shapes only
|
||||
aSelEntriesMap.erase(aSelDispIter);
|
||||
} else {
|
||||
//sub-shape is not in the map of selected, then erase it from view
|
||||
aDisplayer->Erase( anIO, /*forced = */false, /*updateViewer = */false );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !aSelEntriesMap.empty() ) {
|
||||
// Build a presentation of the selected, but not displayed sub-shapes
|
||||
TopTools_IndexedMapOfShape aSubShapesMap;
|
||||
TopExp::MapShapes(myShape, aSubShapesMap);
|
||||
QString anEntryBase = aMainEntry.in();
|
||||
|
||||
TopExp_Explorer anExp (myShape, (TopAbs_ShapeEnum)shapeType());
|
||||
for (; anExp.More(); anExp.Next())
|
||||
{
|
||||
TopoDS_Shape aSubShape = anExp.Current();
|
||||
int index = aSubShapesMap.FindIndex(aSubShape);
|
||||
QString anEntry = QString( "TEMP_" ) + anEntryBase + QString("_%1").arg(index);
|
||||
if ( aSelEntriesMap.find( anEntry ) == aSelEntriesMap.end() ) {
|
||||
//skip not selected sub-shapes
|
||||
continue;
|
||||
}
|
||||
SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation(aSubShape, anEntry, view);
|
||||
if (aPrs) {
|
||||
displayPreview(aPrs, true, false); // append, do not update
|
||||
}
|
||||
}
|
||||
}
|
||||
aDisplayer->UpdateViewer();
|
||||
}
|
||||
|
||||
// Mantis issue 0021421: do not hide main shape, if explode on VERTEX
|
||||
if ((TopAbs_ShapeEnum)shapeType() == TopAbs_VERTEX && myIsHiddenMain) {
|
||||
|
@ -635,12 +635,10 @@ void GEOMAlgo_FinderShapeOn1::InnerPoints(const TopoDS_Face& aF,
|
||||
aP2=aNodes(aN2).Transformed(aTrsf);
|
||||
//
|
||||
if (aType==GeomAbs_Cylinder) {
|
||||
Standard_Real aTolSM;
|
||||
gp_Cylinder aCyl;
|
||||
//
|
||||
aTolSM=1.523e-6;//~1.-cos(0.1 deg)
|
||||
aCyl=aGAS.Cylinder();
|
||||
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, aTolSM)) {
|
||||
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, myTolerance)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -881,12 +881,10 @@ if (!aNb && myNbPntsMin) {
|
||||
aP2=aNodes(aN2).Transformed(aTrsf);
|
||||
//
|
||||
if (aType==GeomAbs_Cylinder) {
|
||||
Standard_Real aTolSM;
|
||||
gp_Cylinder aCyl;
|
||||
//
|
||||
aTolSM=1.523e-6;//~1.-cos(0.1 deg)
|
||||
aCyl=aGAS.Cylinder();
|
||||
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, aTolSM)) {
|
||||
if (!GEOMAlgo_SurfaceTools::IsCoaxial(aP1, aP2, aCyl, myTolerance)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -140,21 +140,34 @@ Standard_Boolean GEOMAlgo_SurfaceTools::IsCoaxial(const gp_Pnt& aP1,
|
||||
const gp_Cylinder& aCyl,
|
||||
const Standard_Real aTol)
|
||||
{
|
||||
Standard_Boolean bRet=Standard_False;
|
||||
Standard_Real aSM;
|
||||
//
|
||||
gp_Vec aV12(aP1, aP2);
|
||||
gp_Dir aD12(aV12);
|
||||
//
|
||||
const gp_Ax1& aAxis=aCyl.Axis();
|
||||
const gp_Dir& aDAxis=aAxis.Direction();
|
||||
//
|
||||
aSM=fabs(aD12*aDAxis);
|
||||
if (fabs(1.-aSM) > aTol) {
|
||||
return bRet;
|
||||
const gp_XYZ &aLoc = aCyl.Location().XYZ();
|
||||
const gp_Ax1 &aAxis = aCyl.Axis();
|
||||
const gp_XYZ &aDAxis = aAxis.Direction().XYZ();
|
||||
gp_XYZ aDP1 = aP1.XYZ().Subtracted(aLoc);
|
||||
gp_XYZ aDP2 = aP2.XYZ().Subtracted(aLoc);
|
||||
Standard_Real aDot1 = aDP1.Dot(aDAxis);
|
||||
Standard_Real aDot2 = aDP1.Dot(aDAxis);
|
||||
Standard_Real aTol2 = aTol*aTol;
|
||||
|
||||
// Project P1 and P2 onto a plane with location aLoc and Norm aDAxis.
|
||||
aDP1.Subtract(aDAxis.Multiplied(aDot1));
|
||||
aDP2.Subtract(aDAxis.Multiplied(aDot2));
|
||||
|
||||
Standard_Real aRadius1 = aDP1.Modulus();
|
||||
Standard_Real aRadius2 = aDP2.Modulus();
|
||||
Standard_Boolean isOn = Standard_False;
|
||||
|
||||
if (fabs(aRadius1 - aRadius2) <= aTol) {
|
||||
// Check the deflection of the middle point.
|
||||
gp_XYZ aMidP = 0.5*(aDP1 + aDP2);
|
||||
Standard_Real aMidRadius1 = aMidP.Modulus();
|
||||
|
||||
if (fabs(aRadius1 - aRadius2) <= aTol) {
|
||||
isOn = Standard_True;
|
||||
}
|
||||
}
|
||||
//
|
||||
return !bRet;
|
||||
|
||||
return isOn;
|
||||
}
|
||||
//=======================================================================
|
||||
//function : IsAnalytic
|
||||
|
@ -673,8 +673,7 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
|
||||
AISShape->SetDisplayVectors( propMap.value( GEOM::propertyName( GEOM::EdgesDirection ) ).toBool() );
|
||||
|
||||
// set transparency
|
||||
// VSR: ??? next line is commented: transparency property is set in the AfterDisplay() function
|
||||
//AISShape->SetTransparency( propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
|
||||
AISShape->SetTransparency( propMap.value( GEOM::propertyName( GEOM::Transparency ) ).toDouble() );
|
||||
|
||||
// set iso properties
|
||||
int uIsos = propMap.value( GEOM::propertyName( GEOM::NbIsos ) ).toString().split( GEOM::subSectionSeparator() )[0].toInt();
|
||||
@ -697,12 +696,36 @@ void GEOM_Displayer::updateShapeProperties( const Handle(GEOM_AISShape)& AISShap
|
||||
AISShape->SetOwnDeviationCoefficient( qMax( propMap.value( GEOM::propertyName( GEOM::Deflection ) ).toDouble(), GEOM::minDeflection() ) );
|
||||
|
||||
// set texture
|
||||
bool textureAdded = false;
|
||||
if ( HasTexture() ) {
|
||||
// predefined display texture, manually set to displayer via GEOM_Displayer::SetTexture() function
|
||||
AISShape->SetTextureFileName( TCollection_AsciiString( GetTexture().c_str() ) );
|
||||
if ( ! entry.isEmpty() ) {
|
||||
// check that study is active
|
||||
SalomeApp_Study* study = getActiveStudy();
|
||||
if ( study ) {
|
||||
// Store the texture in object properties for next displays
|
||||
study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::Texture ), QString( GetTexture().c_str() ) );
|
||||
study->setObjectProperty( aMgrId, entry, GEOM::propertyName( GEOM::DisplayMode ), 3 );
|
||||
|
||||
// Update porpeties map
|
||||
propMap = getObjectProperties( study, entry, myViewFrame );
|
||||
}
|
||||
}
|
||||
textureAdded = true;
|
||||
}
|
||||
else {
|
||||
// Texture from properties
|
||||
QString aTexture = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString();
|
||||
if ( !aTexture.isEmpty() ) {
|
||||
AISShape->SetTextureFileName( TCollection_AsciiString( aTexture.toStdString().c_str() ) );
|
||||
textureAdded = true;
|
||||
}
|
||||
}
|
||||
|
||||
if ( textureAdded ){
|
||||
AISShape->SetTextureMapOn();
|
||||
AISShape->DisableTextureModulate();
|
||||
AISShape->SetDisplayMode( 3 );
|
||||
}
|
||||
|
||||
// set line width
|
||||
@ -1569,30 +1592,6 @@ void GEOM_Displayer::BeforeDisplay( SALOME_View* v, const SALOME_OCCPrs* )
|
||||
|
||||
void GEOM_Displayer::AfterDisplay( SALOME_View* v, const SALOME_OCCPrs* p )
|
||||
{
|
||||
SalomeApp_Study* aStudy = getStudy();
|
||||
if (!aStudy) return;
|
||||
SOCC_Viewer* vf = dynamic_cast<SOCC_Viewer*>( v );
|
||||
if ( vf && !p->IsNull() ) {
|
||||
int aMgrId = getViewManagerId( vf );
|
||||
Handle(AIS_InteractiveContext) ic = vf->getAISContext();
|
||||
const SOCC_Prs* prs = dynamic_cast<const SOCC_Prs*>( p );
|
||||
if ( !ic.IsNull() && prs ) {
|
||||
AIS_ListOfInteractive objects;
|
||||
prs->GetObjects( objects );
|
||||
AIS_ListIteratorOfListOfInteractive it( objects );
|
||||
for ( ; it.More(); it.Next() ) {
|
||||
Handle(GEOM_AISShape) sh = Handle(GEOM_AISShape)::DownCast( it.Value() );
|
||||
if ( sh.IsNull() ) continue;
|
||||
Handle(SALOME_InteractiveObject) IO = sh->getIO();
|
||||
if ( IO.IsNull() ) continue;
|
||||
PropMap aPropMap = aStudy->getObjectPropMap( aMgrId, IO->getEntry() );
|
||||
if ( aPropMap.contains( GEOM::propertyName( GEOM::Transparency ) ) ) {
|
||||
double transparency = aPropMap.value(GEOM::propertyName( GEOM::Transparency )).toDouble();
|
||||
ic->SetTransparency( sh, transparency, true );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
UpdateColorScale(false,false);
|
||||
}
|
||||
|
||||
|
@ -2316,6 +2316,10 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>GEOM_WRN_WARNING</source>
|
||||
<translation>Warning</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_WRN_FACES_NOT_SHELL</source>
|
||||
<translation>Unable to create a shell. Result is a compound of faces.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WRN_SHAPE_UNCLOSED</source>
|
||||
<translation>Unable to create solid from unclosed shape %1</translation>
|
||||
@ -3004,6 +3008,10 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>MEN_MATERIALS_LIBRARY</source>
|
||||
<translation>Materials library</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_TEXTURE</source>
|
||||
<translation>Texture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_TORUS</source>
|
||||
<translation>Torus</translation>
|
||||
@ -3280,7 +3288,6 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>PREF_SCALAR_BAR_NUMBER_OF_INTERVALS</source>
|
||||
<translation>Number of intervals</translation>
|
||||
</message>
|
||||
|
||||
<message>
|
||||
<source>PROCESS_SHAPE_NEW_OBJ_NAME</source>
|
||||
<translation>ProcessShape</translation>
|
||||
@ -4571,27 +4578,27 @@ Please, select face, shell or solid and try again</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_REMOVE_WEBS_TITLE</source>
|
||||
<translation type="unfinished">Remove internal faces</translation>
|
||||
<translation>Remove internal faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_REMOVE_WEBS</source>
|
||||
<translation type="unfinished">Compound of solids</translation>
|
||||
<translation>Compound of solids</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>REMOVE_WEBS_NEW_OBJ_NAME</source>
|
||||
<translation type="unfinished">NoInternalFaces</translation>
|
||||
<translation>NoInternalFaces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_REMOVE_WEBS</source>
|
||||
<translation type="unfinished">Remove internal faces</translation>
|
||||
<translation>Remove internal faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_REMOVE_WEBS</source>
|
||||
<translation type="unfinished">Remove Internal Faces</translation>
|
||||
<translation>Remove Internal Faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_REMOVE_WEBS</source>
|
||||
<translation type="unfinished">Remove internal faces</translation>
|
||||
<translation>Remove internal faces</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_REMOVE_EXTRA_EDGES_TITLE</source>
|
||||
@ -4976,7 +4983,7 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_SMOOTHINGSURFACE</source>
|
||||
<translation type="unfinished">Smoothing Surface</translation>
|
||||
<translation>Smoothing Surface</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SELECT_IMAGE</source>
|
||||
@ -5031,12 +5038,12 @@ Ignoring units will cause model scaling (as dimensions are supposed to be specif
|
||||
<translation>Import / Export</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CC_PNT_ITEM_X_Y</source>
|
||||
<translation>X=%1, Y=%2</translation>
|
||||
<source>CC_PNT_ITEM_X_Y</source>
|
||||
<translation>X=%1, Y=%2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CC_PNT_ITEM_X_Y_Z</source>
|
||||
<translation>X=%1, Y=%2, Z=%3</translation>
|
||||
<source>CC_PNT_ITEM_X_Y_Z</source>
|
||||
<translation>X=%1, Y=%2, Z=%3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5656,7 +5663,7 @@ Number of sketch points too small</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LOWTHRESHOLD</source>
|
||||
<translation>Low theshold</translation>
|
||||
<translation>Low threshold</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>RATIO</source>
|
||||
@ -5878,7 +5885,7 @@ Number of sketch points too small</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WRN_NOT_SUBSHAPE</source>
|
||||
<translation type="unfinished">The selected shape is not a sub-shape of the main shape. Hide all extra shapes in the viewer for more suitable selection.</translation>
|
||||
<translation>The selected shape is not a sub-shape of the main shape. Hide all extra shapes in the viewer for more suitable selection.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5914,10 +5921,6 @@ Number of sketch points too small</translation>
|
||||
<source>DATA_TYPE</source>
|
||||
<translation>Type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source></source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BOOL</source>
|
||||
<translation>Boolean</translation>
|
||||
@ -6032,11 +6035,11 @@ Number of sketch points too small</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WRN_NOT_SUBSHAPE</source>
|
||||
<translation type="unfinished">The selected shape is not a sub-shape of the main shape. Hide all extra shapes in the viewer for more suitable selection.</translation>
|
||||
<translation>The selected shape is not a sub-shape of the main shape. Hide all extra shapes in the viewer for more suitable selection.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ERR_STEP_EXISTS</source>
|
||||
<translation type="unfinished">Step with such ID already exists.</translation>
|
||||
<translation>Step with such ID already exists.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -6509,23 +6512,23 @@ Do you want to create new material?</translation>
|
||||
<translation>Step</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<context>
|
||||
<name>EntityGUI_IsolineDlg</name>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_TITLE</source>
|
||||
<translation>Isoline Construction</translation>
|
||||
<source>GEOM_ISOLINE_TITLE</source>
|
||||
<translation>Isoline Construction</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE</source>
|
||||
<translation>Isoline</translation>
|
||||
<source>GEOM_ISOLINE</source>
|
||||
<translation>Isoline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_U</source>
|
||||
<translation>U-Isoline</translation>
|
||||
<source>GEOM_ISOLINE_U</source>
|
||||
<translation>U-Isoline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_V</source>
|
||||
<translation>V-Isoline</translation>
|
||||
<source>GEOM_ISOLINE_V</source>
|
||||
<translation>V-Isoline</translation>
|
||||
</message>
|
||||
</context>
|
||||
</context>
|
||||
</TS>
|
||||
|
@ -4,12 +4,12 @@
|
||||
<context>
|
||||
<name>@default</name>
|
||||
<message>
|
||||
<source>MEN_POP_CONCEAL_CHILDREN</source>
|
||||
<translation>Retirer les sous-éléments</translation>
|
||||
<source>MEN_TEXTURE</source>
|
||||
<translation type="unfinished">Texture</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_POP_DISCLOSE_CHILDREN</source>
|
||||
<translation>Publier les sous-éléments</translation>
|
||||
<source>GEOM_WRN_FACES_NOT_SHELL</source>
|
||||
<translation type="unfinished">Unable to create a shell. Result is a compound of faces.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>BRep_API: command not done</source>
|
||||
@ -37,8 +37,10 @@
|
||||
</message>
|
||||
<message>
|
||||
<source>DEP_OBJECT</source>
|
||||
<translation>L'objet choisi a été utilisé pour créer un autre objet.
|
||||
La suppression de cet objet peut entrainer un export python invalide. </translation>
|
||||
<translation>L'objet choisi a été utilisé pour créer un autre objet ou est référencé par un autre module.
|
||||
La suppression de cet objet peut entrainer un export python invalide.
|
||||
|
||||
Voulez-vous tout de même supprimer ces objets ?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>DEVIDE_EDGE_NEW_OBJECT_NAME</source>
|
||||
@ -1676,7 +1678,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ALLOW_NON_MANIFOLD</source>
|
||||
<translation type="unfinished">Allow Non Manifold</translation>
|
||||
<translation>Non conformes autorisés</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SHAPE</source>
|
||||
@ -2356,7 +2358,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_CURVE_CREATOR</source>
|
||||
<translation type="unfinished">Curve creator</translation>
|
||||
<translation>Créateur de courbe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_ALL_SEL_ONLY</source>
|
||||
@ -2799,12 +2801,12 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<translation>Editer champ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_POP_SHOW_CHILDREN</source>
|
||||
<translation>Montrer les enfants</translation>
|
||||
<source>MEN_POP_DISCLOSE_CHILDREN</source>
|
||||
<translation>Publier les sous-éléments</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_POP_HIDE_CHILDREN</source>
|
||||
<translation>Cacher les enfants</translation>
|
||||
<source>MEN_POP_CONCEAL_CHILDREN</source>
|
||||
<translation>Retirer les sous-éléments</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_POP_UNPUBLISH_OBJ</source>
|
||||
@ -2966,6 +2968,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>MEN_3DSKETCH</source>
|
||||
<translation>Esquisse 3D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_ISOLINE</source>
|
||||
<translation>Isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_SOLID</source>
|
||||
<translation>Solide</translation>
|
||||
@ -3654,6 +3660,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>STB_POP_CREATE_GROUP</source>
|
||||
<translation>Créer un groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_POP_EDIT_FIELD</source>
|
||||
<translation>Editer un champ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_POP_UNPUBLISH_OBJ</source>
|
||||
<translation>Dépublier l'objet</translation>
|
||||
@ -3786,6 +3796,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>STB_3DSKETCH</source>
|
||||
<translation>Créer une esquisse 3D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_ISOLINE</source>
|
||||
<translation>Créer une U ou V isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_SOLID</source>
|
||||
<translation>Construire un solide</translation>
|
||||
@ -4178,6 +4192,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>TOP_GROUP_CUT</source>
|
||||
<translation>Découpe de groupes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_FIELD_CREATE</source>
|
||||
<translation>Créer un champ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_FIELD_EDIT</source>
|
||||
<translation>Editer un champ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_HEX_SOLID</source>
|
||||
<translation>Solide hexaédrique</translation>
|
||||
@ -4290,6 +4312,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>TOP_POP_CREATE_GROUP</source>
|
||||
<translation>Créer un groupe</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_POP_EDIT_FIELD</source>
|
||||
<translation>Editer un champ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_POP_UNPUBLISH_OBJ</source>
|
||||
<translation>Dépublier l'objet</translation>
|
||||
@ -4390,6 +4416,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
|
||||
<source>TOP_3DSKETCH</source>
|
||||
<translation>Esquisse 3D</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_ISOLINE</source>
|
||||
<translation>Isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_SOLID</source>
|
||||
<translation>Créer un solide</translation>
|
||||
@ -4955,14 +4985,6 @@ le paramètre '%1' aux préférences du module Géométrie.</translati
|
||||
<source>TOP_SMOOTHINGSURFACE</source>
|
||||
<translation>Surface lissée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MEN_SMOOTHINGSURFACE</source>
|
||||
<translation>Surface lissée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>STB_SMOOTHINGSURFACE</source>
|
||||
<translation>Surface lissée</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SELECT_IMAGE</source>
|
||||
<translation>Sélectionner une image...</translation>
|
||||
@ -4971,6 +4993,10 @@ le paramètre '%1' aux préférences du module Géométrie.</translati
|
||||
<source>MEN_IMPORTEXPORT</source>
|
||||
<translation>Import / Export XAO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOOL_IMPORTEXPORT</source>
|
||||
<translation>Import / Export XAO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TOP_EXPORTXAO</source>
|
||||
<translation>Export XAO</translation>
|
||||
@ -5012,12 +5038,12 @@ le paramètre '%1' aux préférences du module Géométrie.</translati
|
||||
<translation>Import / Export XAO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CC_PNT_ITEM_X_Y</source>
|
||||
<translation>X=%1, Y=%2</translation>
|
||||
<source>CC_PNT_ITEM_X_Y</source>
|
||||
<translation>X=%1, Y=%2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CC_PNT_ITEM_X_Y_Z</source>
|
||||
<translation>X=%1, Y=%2, Z=%3</translation>
|
||||
<source>CC_PNT_ITEM_X_Y_Z</source>
|
||||
<translation>X=%1, Y=%2, Z=%3</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5453,19 +5479,19 @@ le paramètre '%1' aux préférences du module Géométrie.</translati
|
||||
</message>
|
||||
<message>
|
||||
<source>SET_SECTIONS_POLYLINE</source>
|
||||
<translation type="unfinished">Set polyline</translation>
|
||||
<translation>Définir la polyligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SET_SECTIONS_POLYLINE_TLT</source>
|
||||
<translation type="unfinished">Set selected section type to polyline</translation>
|
||||
<translation>Affecter le type de section sélectionné à la polyligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SET_SECTIONS_SPLINE</source>
|
||||
<translation type="unfinished">Set spline</translation>
|
||||
<translation>Définir la spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SET_SECTIONS_SPLINE_TLT</source>
|
||||
<translation type="unfinished">Set selected section type to spline</translation>
|
||||
<translation>Affecter le type de section sélectionné à la spline</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>REMOVE</source>
|
||||
@ -5593,7 +5619,7 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>USE_ROI</source>
|
||||
<translation type="unfinished">Use region of interest</translation>
|
||||
<translation>Utiliser la région d'intérêt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>KERNEL_SIZE</source>
|
||||
@ -5609,75 +5635,75 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>TYPE_CRITERIA</source>
|
||||
<translation type="unfinished">Type criteria</translation>
|
||||
<translation>Critère de type</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_TERMCRIT_ITER</source>
|
||||
<translation type="unfinished">Max number of iteration</translation>
|
||||
<translation>Nombre max d'itérations</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_TERMCRIT_EPS</source>
|
||||
<translation type="unfinished">Epsilon</translation>
|
||||
<translation>Epsilon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_TERMCRIT_ITER | CV_TERMCRIT_EPS</source>
|
||||
<translation type="unfinished">Max number of iteration or epsilon</translation>
|
||||
<translation>Nombre max d'itérations ou epsilon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MAX_ITER</source>
|
||||
<translation type="unfinished">Max iteration</translation>
|
||||
<translation>Iteration max</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>EPSILON</source>
|
||||
<translation type="unfinished">Epsilon</translation>
|
||||
<translation>Epsilon</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>L2GRADIENT</source>
|
||||
<translation type="unfinished">L2 gradient</translation>
|
||||
<translation>Gradient L2</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>LOWTHRESHOLD</source>
|
||||
<translation type="unfinished">Low theshold</translation>
|
||||
<translation>Niveau bas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>RATIO</source>
|
||||
<translation type="unfinished">Ratio</translation>
|
||||
<translation>Ratio</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SMOOTH_SIZE</source>
|
||||
<translation type="unfinished">Smooth size</translation>
|
||||
<translation>Adoucissement</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>HBINS</source>
|
||||
<translation type="unfinished">Hbins</translation>
|
||||
<translation>Hbins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SBINS</source>
|
||||
<translation type="unfinished">Sbins</translation>
|
||||
<translation>Sbins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>HIST_TYPE</source>
|
||||
<translation type="unfinished">Histogram type</translation>
|
||||
<translation>Type d'histogramme</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_HIST_ARRAY</source>
|
||||
<translation type="unfinished">Multi-dimensional dense array</translation>
|
||||
<translation>Tableau dense multi-dimensionnel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_HIST_SPARSE</source>
|
||||
<translation type="unfinished">Multi-dimensional sparse array</translation>
|
||||
<translation>Tableau clairsemé multi-dimensionnel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>THRESHOLD_VALUE</source>
|
||||
<translation type="unfinished">Threshold value</translation>
|
||||
<translation>Seuil</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>MAX_THRESHOLD</source>
|
||||
<translation type="unfinished">Max threshold</translation>
|
||||
<translation>Seuil max</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>FIND_CONTOURS_METHOD</source>
|
||||
<translation type="unfinished">Chain approximation method</translation>
|
||||
<translation>Méthode d'approximation des chaînes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_CHAIN_APPROX_NONE</source>
|
||||
@ -5689,11 +5715,11 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_CHAIN_APPROX_TC89_KCOS</source>
|
||||
<translation type="unfinished">TC89 KCOS</translation>
|
||||
<translation>TC89 KCOS</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CV_CHAIN_APPROX_TC89_L1</source>
|
||||
<translation type="unfinished">TC89 L1</translation>
|
||||
<translation>TC89 L1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5859,7 +5885,7 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WRN_NOT_SUBSHAPE</source>
|
||||
<translation>La forme sélectionnée n'est pas un sous-élémént de la forme principale. Pour choisir plus facilement, cacher les formes en trop dans la vue.</translation>
|
||||
<translation>La forme sélectionnée n'est pas un sous-élémént de la forme principale. Pour choisir plus facilement, cacher les formes en trop dans la vue.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -5913,7 +5939,7 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SHAPE_TYPE</source>
|
||||
<translation>Type d'objet</translation>
|
||||
<translation>Type d'objet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>VERTEX</source>
|
||||
@ -5973,7 +5999,7 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_NO_STUDY</source>
|
||||
<translation>Pas d'étude disponible</translation>
|
||||
<translation>Pas d'étude disponible</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NO_SHAPE</source>
|
||||
@ -6009,7 +6035,7 @@ Le nombre de points n'est pas suffisant</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WRN_NOT_SUBSHAPE</source>
|
||||
<translation>La forme sélectionnée n'est pas un élément de la forme principale.</translation>
|
||||
<translation>La forme sélectionnée n'est pas un élément de la forme principale. Pour choisir plus facilement, cacher les formes en trop dans la vue.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ERR_STEP_EXISTS</source>
|
||||
@ -6400,24 +6426,24 @@ Voulez-vous en créer un nouveau ?</translation>
|
||||
<context>
|
||||
<name>GEOMGUI_CreationInfoWdg</name>
|
||||
<message>
|
||||
<source>NO_INFO</source>
|
||||
<translation>(aucune information disponible)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>VALUE</source>
|
||||
<translation>Valeur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PARAMETER</source>
|
||||
<translation>Paramètre</translation>
|
||||
<source>CREATION_INFO_TITLE</source>
|
||||
<translation>Information</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>OPERATION</source>
|
||||
<translation>Création</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>CREATION_INFO_TITLE</source>
|
||||
<translation>Information</translation>
|
||||
<source>PARAMETER</source>
|
||||
<translation>Paramètre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>VALUE</source>
|
||||
<translation>Valeur</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>NO_INFO</source>
|
||||
<translation>(aucune information disponible)</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@ -6486,6 +6512,23 @@ Voulez-vous en créer un nouveau ?</translation>
|
||||
<translation>Pas</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>EntityGUI_IsolineDlg</name>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_TITLE</source>
|
||||
<translation>Construction d'isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE</source>
|
||||
<translation>Isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_U</source>
|
||||
<translation>U-Isoligne</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_ISOLINE_V</source>
|
||||
<translation>V-Isoligne</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
|
||||
|
||||
|
@ -503,6 +503,7 @@ void GeometryGUI::OnGUIEvent( int id, const QVariant& theParam )
|
||||
case GEOMOp::OpDMWireframe: // MENU VIEW - WIREFRAME
|
||||
case GEOMOp::OpDMShading: // MENU VIEW - SHADING
|
||||
case GEOMOp::OpDMShadingWithEdges: // MENU VIEW - SHADING
|
||||
case GEOMOp::OpDMTexture: // MENU VIEW - TEXTURE
|
||||
case GEOMOp::OpShowAll: // MENU VIEW - SHOW ALL
|
||||
case GEOMOp::OpShowOnly: // MENU VIEW - DISPLAY ONLY
|
||||
case GEOMOp::OpShowOnlyChildren: // MENU VIEW - SHOW ONLY CHILDREN
|
||||
@ -847,6 +848,11 @@ void GeometryGUI::createGeomAction( const int id, const QString& label, const QS
|
||||
void GeometryGUI::createOriginAndBaseVectors()
|
||||
{
|
||||
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( application()->activeStudy() );
|
||||
bool aLocked = (_PTR(AttributeStudyProperties)(appStudy->studyDS()->GetProperties()))->IsLocked();
|
||||
if ( aLocked ) {
|
||||
SUIT_MessageBox::warning ( application()->desktop(), QObject::tr("WRN_WARNING"), QObject::tr("WRN_STUDY_LOCKED") );
|
||||
return;
|
||||
}
|
||||
if ( appStudy ) {
|
||||
_PTR(Study) studyDS = appStudy->studyDS();
|
||||
if ( studyDS && !CORBA::is_nil( GetGeomGen() ) ) {
|
||||
@ -1019,6 +1025,7 @@ void GeometryGUI::initialize( CAM_Application* app )
|
||||
createGeomAction( GEOMOp::OpDMWireframe, "WIREFRAME" );
|
||||
createGeomAction( GEOMOp::OpDMShading, "SHADING" );
|
||||
createGeomAction( GEOMOp::OpDMShadingWithEdges, "SHADING_WITH_EDGES" );
|
||||
createGeomAction( GEOMOp::OpDMTexture, "TEXTURE" );
|
||||
createGeomAction( GEOMOp::OpShowAll, "DISPLAY_ALL" );
|
||||
createGeomAction( GEOMOp::OpHideAll, "ERASE_ALL" );
|
||||
createGeomAction( GEOMOp::OpShow, "DISPLAY" );
|
||||
@ -1291,6 +1298,7 @@ void GeometryGUI::initialize( CAM_Application* app )
|
||||
createMenu( GEOMOp::OpDMWireframe, dispmodeId, -1 );
|
||||
createMenu( GEOMOp::OpDMShading, dispmodeId, -1 );
|
||||
createMenu( GEOMOp::OpDMShadingWithEdges, dispmodeId, -1 );
|
||||
createMenu( GEOMOp::OpDMTexture, dispmodeId, -1 );
|
||||
createMenu( separator(), dispmodeId, -1 );
|
||||
createMenu( GEOMOp::OpSwitchVectors, dispmodeId, -1 );
|
||||
|
||||
@ -2664,6 +2672,11 @@ void GeometryGUI::storeVisualParameters (int savePoint)
|
||||
ip->setParameter(entry, param.toStdString(), val.join( GEOM::subSectionSeparator()).toStdString());
|
||||
}
|
||||
|
||||
if (aProps.contains(GEOM::propertyName( GEOM::Texture ))) {
|
||||
param = occParam + GEOM::propertyName( GEOM::Texture );
|
||||
ip->setParameter(entry, param.toStdString(), aProps.value(GEOM::propertyName( GEOM::Texture )).toString().toStdString());
|
||||
}
|
||||
|
||||
if (vType == SVTK_Viewer::Type()) {
|
||||
if (aProps.contains(GEOM::propertyName( GEOM::Opacity ))) {
|
||||
param = occParam + GEOM::propertyName( GEOM::Opacity );
|
||||
@ -2813,6 +2826,8 @@ void GeometryGUI::restoreVisualParameters (int savePoint)
|
||||
QColor c = QColor::fromRgbF(rgb[0].toDouble(), rgb[1].toDouble(), rgb[2].toDouble());
|
||||
aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Color ), c);
|
||||
}
|
||||
} else if (paramNameStr == GEOM::propertyName( GEOM::Texture )) {
|
||||
aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::Texture ), val );
|
||||
} else if (paramNameStr == GEOM::propertyName( GEOM::EdgesDirection )) {
|
||||
aListOfMap[viewIndex].insert( GEOM::propertyName( GEOM::EdgesDirection ), val == "true" || val == "1");
|
||||
} else if (paramNameStr == GEOM::propertyName( GEOM::Deflection )) {
|
||||
|
@ -68,6 +68,7 @@ namespace GEOMOp {
|
||||
OpDMWireframe = 2010, // MENU VIEW - DISPLAY MODE - WIREFRAME
|
||||
OpDMShading = 2011, // MENU VIEW - DISPLAY MODE - SHADING
|
||||
OpDMShadingWithEdges = 2012, // MENU VIEW - DISPLAY MODE - SHADING WITH EDGES
|
||||
OpDMTexture = 2013, // MENU VIEW - DISPLAY MODE - TEXTURE
|
||||
OpShow = 2100, // POPUP MENU - SHOW
|
||||
OpShowOnly = 2101, // POPUP MENU - SHOW ONLY
|
||||
OpHide = 2102, // POPUP MENU - HIDE
|
||||
|
@ -18,6 +18,7 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -38,7 +39,6 @@
|
||||
#include "utilities.h"
|
||||
|
||||
#include <TDataStd_IntegerArray.hxx>
|
||||
#include <TNaming_CopyShape.hxx>
|
||||
|
||||
#include <TopExp.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
@ -47,8 +47,6 @@
|
||||
#include <TopTools_ListOfShape.hxx>
|
||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||
|
||||
#include <TColStd_IndexedDataMapOfTransientTransient.hxx>
|
||||
|
||||
#include <ShapeFix_Shape.hxx>
|
||||
|
||||
#include <Standard_NullObject.hxx>
|
||||
@ -423,8 +421,7 @@ TopoDS_Shape GEOMImpl_GlueDriver::GlueWithWarnings (const TopoDS_Shape& theShape
|
||||
const Standard_Real theTolerance,
|
||||
const TopAbs_ShapeEnum theShapeType,
|
||||
const Standard_Boolean doKeepNonSolids,
|
||||
TCollection_AsciiString& theWarning,
|
||||
const TopTools_DataMapOfShapeShape& aCopyMap) const
|
||||
TCollection_AsciiString& theWarning) const
|
||||
{
|
||||
TopoDS_Shape aRes;
|
||||
|
||||
@ -554,18 +551,10 @@ TopoDS_Shape GEOMImpl_GlueDriver::GlueWithWarnings (const TopoDS_Shape& theShape
|
||||
TDF_Label anArgumentHistoryLabel =
|
||||
aFunction->GetArgumentHistoryEntry(anArgumentRefLabel, Standard_True);
|
||||
|
||||
TopTools_ListOfShape aModified;
|
||||
for (Standard_Integer ie = 1; ie <= nbArgumentEntities; ie++) {
|
||||
TopoDS_Shape anEntity = anArgumentIndices.FindKey(ie);
|
||||
if (aCopyMap.IsBound(anEntity)) {
|
||||
anEntity = aCopyMap.Find(anEntity);
|
||||
}
|
||||
aModified = aGA.Modified(anEntity);
|
||||
const TopTools_ListOfShape& aModified = aGA.Modified(anEntity);
|
||||
Standard_Integer nbModified = aModified.Extent();
|
||||
if (!nbModified && aResIndices.Contains(anEntity)) {
|
||||
aModified.Append(anEntity);
|
||||
nbModified = 1;
|
||||
}
|
||||
|
||||
if (nbModified > 0) {
|
||||
TDF_Label aWhatHistoryLabel = anArgumentHistoryLabel.FindChild(ie, Standard_True);
|
||||
@ -754,35 +743,18 @@ Standard_Integer GEOMImpl_GlueDriver::Execute(TFunction_Logbook& log) const
|
||||
|
||||
Standard_Boolean aKeepNonSolids = aCI.GetKeepNonSolids();
|
||||
|
||||
// Copy initial shape to prevent its modification by gluing algorithm
|
||||
TopoDS_Shape aShapeCopy;
|
||||
TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
|
||||
TNaming_CopyShape::CopyTool(aShapeBase, aMapTShapes, aShapeCopy);
|
||||
//
|
||||
// map sub-shapes
|
||||
TopTools_IndexedMapOfShape aShapeBase_inds, aShapeCopy_inds;
|
||||
TopTools_DataMapOfShapeShape aCopyMap;
|
||||
Standard_Integer aNbInd, i;
|
||||
//
|
||||
TopExp::MapShapes(aShapeBase, aShapeBase_inds);
|
||||
TopExp::MapShapes(aShapeCopy, aShapeCopy_inds);
|
||||
//
|
||||
aNbInd = aShapeBase_inds.Extent();
|
||||
for (i = 1; i <= aNbInd; ++i) {
|
||||
aCopyMap.Bind(aShapeBase_inds(i), aShapeCopy_inds(i));
|
||||
}
|
||||
//
|
||||
if (aType == GLUE_FACES) {
|
||||
aShape = GlueWithWarnings(aShapeCopy, tol3d, TopAbs_FACE, aKeepNonSolids, aWrn, aCopyMap);
|
||||
//aShape = GlueFacesWithWarnings(aShapeBase, tol3d, aKeepNonSolids, aWrn);
|
||||
aShape = GlueWithWarnings(aShapeBase, tol3d, TopAbs_FACE, aKeepNonSolids, aWrn);
|
||||
}
|
||||
else if (aType == GLUE_EDGES) {
|
||||
aShape = GlueWithWarnings(aShapeCopy, tol3d, TopAbs_EDGE, aKeepNonSolids, aWrn, aCopyMap);
|
||||
aShape = GlueWithWarnings(aShapeBase, tol3d, TopAbs_EDGE, aKeepNonSolids, aWrn);
|
||||
}
|
||||
else if (aType == GLUE_FACES_BY_LIST || aType == GLUE_EDGES_BY_LIST) {
|
||||
Handle(TColStd_HSequenceOfTransient) SF = aCI.GetFaces();
|
||||
TopTools_MapOfShape aFaces;
|
||||
|
||||
for (i = 1; i <= SF->Length(); i++) {
|
||||
int i = 1;
|
||||
for (; i <= SF->Length(); i++) {
|
||||
Handle(Standard_Transient) anItem = SF->Value(i);
|
||||
if (anItem.IsNull())
|
||||
continue;
|
||||
@ -792,14 +764,7 @@ Standard_Integer GEOMImpl_GlueDriver::Execute(TFunction_Logbook& log) const
|
||||
TopoDS_Shape aFace = aRefSh->GetValue();
|
||||
if (aFace.IsNull())
|
||||
continue;
|
||||
|
||||
// get copy of face to correspond to aShapeCopy
|
||||
if (aShapeBase_inds.Contains(aFace)) {
|
||||
int ind = aShapeBase_inds.FindIndex(aFace);
|
||||
aFace = aShapeCopy_inds.FindKey(ind);
|
||||
|
||||
aFaces.Add(aFace);
|
||||
}
|
||||
aFaces.Add(aFace);
|
||||
}
|
||||
|
||||
Standard_Boolean aGlueAllEdges = Standard_False;
|
||||
@ -807,7 +772,7 @@ Standard_Integer GEOMImpl_GlueDriver::Execute(TFunction_Logbook& log) const
|
||||
aGlueAllEdges = aCI.GetGlueAllEdges();
|
||||
|
||||
//aShape = GlueFacesByList(aShapeBase, tol3d, aKeepNonSolids, aFaces);
|
||||
aShape = GlueByList(aShapeCopy, tol3d, aKeepNonSolids, aFaces, aGlueAllEdges);
|
||||
aShape = GlueByList(aShapeBase, tol3d, aKeepNonSolids, aFaces, aGlueAllEdges);
|
||||
}
|
||||
|
||||
if (aShape.IsNull()) return 0;
|
||||
|
@ -48,7 +48,7 @@
|
||||
#endif
|
||||
|
||||
#include <TopTools_MapOfShape.hxx>
|
||||
#include <TopTools_DataMapOfShapeShape.hxx>
|
||||
|
||||
|
||||
#ifndef _TFunction_Driver_HeaderFile
|
||||
#include <TFunction_Driver.hxx>
|
||||
@ -104,8 +104,7 @@ Standard_EXPORT TopoDS_Shape GlueWithWarnings (const TopoDS_Shape& theShape,
|
||||
const Standard_Real theTolerance,
|
||||
const TopAbs_ShapeEnum theShapeType,
|
||||
const Standard_Boolean doKeepNonSolids,
|
||||
TCollection_AsciiString& theWarning,
|
||||
const TopTools_DataMapOfShapeShape& aCopyMap) const;
|
||||
TCollection_AsciiString& theWarning) const;
|
||||
|
||||
Standard_EXPORT static TopoDS_Shape GlueByList (const TopoDS_Shape& theShape,
|
||||
const Standard_Real theTolerance,
|
||||
|
@ -60,6 +60,7 @@
|
||||
#include <BRepCheck_Result.hxx>
|
||||
#include <BRepCheck_Shell.hxx>
|
||||
#include <BRepClass3d_SolidClassifier.hxx>
|
||||
#include <BRepClass_FaceClassifier.hxx>
|
||||
#include <BRepExtrema_DistShapeShape.hxx>
|
||||
#include <BRepGProp.hxx>
|
||||
#include <BRepTools.hxx>
|
||||
@ -85,6 +86,7 @@
|
||||
|
||||
#include <GeomAPI_IntSS.hxx>
|
||||
#include <GeomAPI_ProjectPointOnCurve.hxx>
|
||||
#include <GeomAPI_ProjectPointOnSurf.hxx>
|
||||
|
||||
#include <GeomAbs_SurfaceType.hxx>
|
||||
|
||||
@ -1551,40 +1553,116 @@ TCollection_AsciiString GEOMImpl_IMeasureOperations::WhatIs (Handle(GEOM_Object)
|
||||
* AreCoordsInside
|
||||
*/
|
||||
//=============================================================================
|
||||
std::vector<bool> GEOMImpl_IMeasureOperations::AreCoordsInside(Handle(GEOM_Object) theShape,
|
||||
const std::vector<double>& coords,
|
||||
double tolerance)
|
||||
std::vector<bool>
|
||||
GEOMImpl_IMeasureOperations::AreCoordsInside(Handle(GEOM_Object) theShape,
|
||||
const std::vector<double>& coords,
|
||||
double tolerance)
|
||||
{
|
||||
std::vector<bool> res;
|
||||
std::vector<bool> isInsideRes;
|
||||
if (!theShape.IsNull()) {
|
||||
Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
|
||||
if (!aRefShape.IsNull()) {
|
||||
TopoDS_Shape aShape = aRefShape->GetValue();
|
||||
if (!aShape.IsNull()) {
|
||||
unsigned int nb_points = coords.size()/3;
|
||||
for (int i = 0; i < nb_points; i++) {
|
||||
double x = coords[3*i];
|
||||
double y = coords[3*i+1];
|
||||
double z = coords[3*i+2];
|
||||
gp_Pnt aPnt(x, y, z);
|
||||
if ( aShape.ShapeType() == TopAbs_COMPOUND || aShape.ShapeType() == TopAbs_COMPSOLID ||
|
||||
aShape.ShapeType() == TopAbs_SOLID ) {
|
||||
TopExp_Explorer anExp;
|
||||
bool isFound = false;
|
||||
for ( anExp.Init( aShape, TopAbs_SOLID ); anExp.More() && !isFound; anExp.Next() ) {
|
||||
BRepClass3d_SolidClassifier SC( anExp.Current() );
|
||||
if (!aShape.IsNull())
|
||||
{
|
||||
TopTools_IndexedMapOfShape mapShape;
|
||||
{
|
||||
TopExp_Explorer anExp;
|
||||
for ( anExp.Init( aShape, TopAbs_SOLID ); anExp.More(); anExp.Next() )
|
||||
mapShape.Add( anExp.Current() );
|
||||
for ( anExp.Init( aShape, TopAbs_FACE, TopAbs_SOLID ); anExp.More(); anExp.Next() )
|
||||
mapShape.Add( anExp.Current() );
|
||||
for ( anExp.Init( aShape, TopAbs_EDGE, TopAbs_FACE ); anExp.More(); anExp.Next() )
|
||||
mapShape.Add( anExp.Current() );
|
||||
for ( anExp.Init( aShape, TopAbs_VERTEX, TopAbs_EDGE ); anExp.More(); anExp.Next() )
|
||||
mapShape.Add( anExp.Current() ); //// ?????????
|
||||
}
|
||||
size_t nb_points = coords.size()/3, nb_points_inside = 0;
|
||||
isInsideRes.resize( nb_points, false );
|
||||
|
||||
for ( int iS = 1; iS <= mapShape.Extent(); ++iS )
|
||||
{
|
||||
if ( nb_points_inside == nb_points )
|
||||
break;
|
||||
aShape = mapShape( iS );
|
||||
switch ( aShape.ShapeType() ) {
|
||||
case TopAbs_SOLID:
|
||||
{
|
||||
BRepClass3d_SolidClassifier SC( TopoDS::Solid( aShape ));
|
||||
for ( size_t i = 0; i < nb_points; i++)
|
||||
{
|
||||
if ( isInsideRes[ i ]) continue;
|
||||
gp_Pnt aPnt( coords[3*i], coords[3*i+1], coords[3*i+2] );
|
||||
SC.Perform( aPnt, tolerance );
|
||||
isFound = ( SC.State() == TopAbs_IN ) || ( SC.State() == TopAbs_ON );
|
||||
isInsideRes[ i ] = (( SC.State() == TopAbs_IN ) || ( SC.State() == TopAbs_ON ));
|
||||
nb_points_inside += isInsideRes[ i ];
|
||||
}
|
||||
res.push_back( isFound );
|
||||
break;
|
||||
}
|
||||
else
|
||||
res.push_back( false );
|
||||
case TopAbs_FACE:
|
||||
{
|
||||
Standard_Real u1,u2,v1,v2;
|
||||
const TopoDS_Face& face = TopoDS::Face( aShape );
|
||||
Handle(Geom_Surface) surf = BRep_Tool::Surface( face );
|
||||
surf->Bounds( u1,u2,v1,v2 );
|
||||
GeomAPI_ProjectPointOnSurf project;
|
||||
project.Init(surf, u1,u2, v1,v2, tolerance );
|
||||
for ( size_t i = 0; i < nb_points; i++)
|
||||
{
|
||||
if ( isInsideRes[ i ]) continue;
|
||||
gp_Pnt aPnt( coords[3*i], coords[3*i+1], coords[3*i+2] );
|
||||
project.Perform( aPnt );
|
||||
if ( project.IsDone() &&
|
||||
project.NbPoints() > 0 &&
|
||||
project.LowerDistance() <= tolerance )
|
||||
{
|
||||
Quantity_Parameter u, v;
|
||||
project.LowerDistanceParameters(u, v);
|
||||
gp_Pnt2d uv( u, v );
|
||||
BRepClass_FaceClassifier FC ( face, uv, tolerance );
|
||||
isInsideRes[ i ] = (( FC.State() == TopAbs_IN ) || ( FC.State() == TopAbs_ON ));
|
||||
nb_points_inside += isInsideRes[ i ];
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TopAbs_EDGE:
|
||||
{
|
||||
Standard_Real f,l;
|
||||
const TopoDS_Edge& edge = TopoDS::Edge( aShape );
|
||||
Handle(Geom_Curve) curve = BRep_Tool::Curve( edge, f, l );
|
||||
GeomAPI_ProjectPointOnCurve project;
|
||||
project.Init( curve, f, l );
|
||||
for ( size_t i = 0; i < nb_points; i++)
|
||||
{
|
||||
if ( isInsideRes[ i ]) continue;
|
||||
gp_Pnt aPnt( coords[3*i], coords[3*i+1], coords[3*i+2] );
|
||||
project.Perform( aPnt );
|
||||
isInsideRes[ i ] = ( project.NbPoints() > 0 &&
|
||||
project.LowerDistance() <= tolerance );
|
||||
nb_points_inside += isInsideRes[ i ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
case TopAbs_VERTEX:
|
||||
{
|
||||
gp_Pnt aVPnt = BRep_Tool::Pnt( TopoDS::Vertex( aShape ));
|
||||
for ( size_t i = 0; i < nb_points; i++)
|
||||
{
|
||||
if ( isInsideRes[ i ]) continue;
|
||||
gp_Pnt aPnt( coords[3*i], coords[3*i+1], coords[3*i+2] );
|
||||
isInsideRes[ i ] = ( aPnt.SquareDistance( aVPnt ) <= tolerance * tolerance );
|
||||
nb_points_inside += isInsideRes[ i ];
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:;
|
||||
} // switch ( aShape.ShapeType() )
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return res;
|
||||
return isInsideRes;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
@ -1592,10 +1670,15 @@ std::vector<bool> GEOMImpl_IMeasureOperations::AreCoordsInside(Handle(GEOM_Objec
|
||||
* GetMinDistance
|
||||
*/
|
||||
//=============================================================================
|
||||
Standard_Real GEOMImpl_IMeasureOperations::GetMinDistance
|
||||
(Handle(GEOM_Object) theShape1, Handle(GEOM_Object) theShape2,
|
||||
Standard_Real& X1, Standard_Real& Y1, Standard_Real& Z1,
|
||||
Standard_Real& X2, Standard_Real& Y2, Standard_Real& Z2)
|
||||
Standard_Real
|
||||
GEOMImpl_IMeasureOperations::GetMinDistance (Handle(GEOM_Object) theShape1,
|
||||
Handle(GEOM_Object) theShape2,
|
||||
Standard_Real& X1,
|
||||
Standard_Real& Y1,
|
||||
Standard_Real& Z1,
|
||||
Standard_Real& X2,
|
||||
Standard_Real& Y2,
|
||||
Standard_Real& Z2)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
Standard_Real MinDist = 1.e9;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <GEOMImpl_ITransformOperations.hxx>
|
||||
#include <GEOMImpl_Types.hxx>
|
||||
#include <GEOM_Function.hxx>
|
||||
#include <GEOMUtils.hxx>
|
||||
|
||||
#include <ShapeFix_Shape.hxx>
|
||||
#include <ShapeFix_ShapeTolerance.hxx>
|
||||
@ -175,10 +176,7 @@ Standard_Integer GEOMImpl_TranslateDriver::Execute(TFunction_Logbook& log) const
|
||||
Handle(GEOM_Function) aVector = TI.GetVector();
|
||||
gp_Vec Vec = gp::DX();
|
||||
if (!aVector.IsNull()) {
|
||||
TopoDS_Shape aV = aVector->GetValue();
|
||||
if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aV);
|
||||
Vec = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
|
||||
Vec = GEOMUtils::GetVector( aVector->GetValue(), Standard_False );
|
||||
Vec.Normalize();
|
||||
}
|
||||
|
||||
@ -211,18 +209,12 @@ Standard_Integer GEOMImpl_TranslateDriver::Execute(TFunction_Logbook& log) const
|
||||
gp_Vec Vec2 = gp::DY();
|
||||
|
||||
if (!aVector.IsNull()) {
|
||||
TopoDS_Shape aV = aVector->GetValue();
|
||||
if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aV);
|
||||
Vec1 = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
|
||||
Vec1 = GEOMUtils::GetVector( aVector->GetValue(), Standard_False );
|
||||
Vec1.Normalize();
|
||||
}
|
||||
|
||||
if (!aVector2.IsNull()) {
|
||||
TopoDS_Shape aV = aVector2->GetValue();
|
||||
if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aV);
|
||||
Vec2 = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
|
||||
Vec2 = GEOMUtils::GetVector( aVector2->GetValue(), Standard_False );
|
||||
Vec2.Normalize();
|
||||
}
|
||||
|
||||
|
@ -725,8 +725,8 @@ bool GEOMToolsGUI::Import()
|
||||
app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( fileName, /*withExten=*/true ) ) );
|
||||
anOp->start();
|
||||
|
||||
CORBA::String_var fileN = fileName.toLatin1().constData();
|
||||
CORBA::String_var fileT = aCurrentType.toLatin1().constData();
|
||||
CORBA::String_var fileN = fileName.toUtf8().constData();
|
||||
CORBA::String_var fileT = aCurrentType.toUtf8().constData();
|
||||
|
||||
// jfa 21.08.2012 for mantis issue 21511 (STEP file units)
|
||||
CORBA::String_var aUnits = aInsOp->ReadValue(fileN, fileT, "LEN_UNITS");
|
||||
@ -945,7 +945,7 @@ bool GEOMToolsGUI::Export()
|
||||
|
||||
anOp->start();
|
||||
|
||||
aInsOp->Export( anObj, file.toStdString().c_str(), fileType.toLatin1().constData() );
|
||||
aInsOp->Export( anObj, file.toUtf8().constData(), fileType.toUtf8().constData() );
|
||||
|
||||
if (aInsOp->IsDone())
|
||||
anOp->commit();
|
||||
|
@ -298,9 +298,9 @@ void GEOMToolsGUI::OnTexture()
|
||||
|
||||
QString aTexture = QFileDialog::getOpenFileName( dynamic_cast< SUIT_ViewWindow* >( window ),tr("GEOM_SELECT_IMAGE"),QString(), tr("OCC_TEXTURE_FILES"));
|
||||
if( !aTexture.isEmpty() ) {
|
||||
displayer.SetTexture( aTexture.toStdString() );
|
||||
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() ) {
|
||||
Handle( SALOME_InteractiveObject ) io = It.Value();
|
||||
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::Texture ), aTexture );
|
||||
appStudy->setObjectProperty( aMgrId, io->getEntry(), GEOM::propertyName( GEOM::DisplayMode ), 3 );
|
||||
if ( window->isVisible( io ) ) displayer.Redisplay( io, false );
|
||||
}
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include "GEOM_PythonDump.hxx"
|
||||
#include "GEOMImpl_Types.hxx"
|
||||
#include "GEOMImpl_CopyDriver.hxx"
|
||||
#include "GEOMImpl_IInsertOperations.hxx"
|
||||
#include "GEOM_wrap.hxx"
|
||||
|
||||
// Cascade headers
|
||||
@ -240,10 +241,9 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
CORBA::String_var aGeomObjIOR = _orb->object_to_string(theObject);
|
||||
aResultSO->SetAttrString("AttributeIOR",aGeomObjIOR);
|
||||
|
||||
TCollection_AsciiString anObjectName("Shape_");
|
||||
TCollection_AsciiString anObjectName, aNamePrefix("Shape_");
|
||||
|
||||
// BEGIN: try to find existed name for current shape
|
||||
bool HasName = false;
|
||||
if ( !aShape->_is_nil() )
|
||||
{
|
||||
// recieve current TopoDS shape
|
||||
@ -263,7 +263,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
// check all named shapes using iterator
|
||||
TDF_ChildIDIterator anIt (aMainLbl, TNaming_NamedShape::GetID(), Standard_True);
|
||||
|
||||
for (; anIt.More() && !HasName; anIt.Next()) {
|
||||
for (; anIt.More() && anObjectName.IsEmpty(); anIt.Next()) {
|
||||
Handle(TNaming_NamedShape) anAttr =
|
||||
Handle(TNaming_NamedShape)::DownCast(anIt.Value());
|
||||
if (anAttr.IsNull()) continue;
|
||||
@ -271,10 +271,8 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
if (S.IsEqual(TopoSh)) {
|
||||
TDF_Label L = anAttr->Label();
|
||||
Handle(TDataStd_Name) aName;
|
||||
if (L.FindAttribute(TDataStd_Name::GetID(), aName)) {
|
||||
if (L.FindAttribute(TDataStd_Name::GetID(), aName))
|
||||
anObjectName = aName->Get();
|
||||
HasName = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -286,32 +284,32 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
switch ( (TopAbs_ShapeEnum)anOp->GetType( aShape )) {
|
||||
case TopAbs_VERTEX:
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_GROUP_PNT" );
|
||||
anObjectName = "Group_Of_Vertices_";
|
||||
aNamePrefix = "Group_Of_Vertices_";
|
||||
break;
|
||||
case TopAbs_EDGE:
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_GROUP_EDGE");
|
||||
anObjectName = "Group_Of_Edges_";
|
||||
aNamePrefix = "Group_Of_Edges_";
|
||||
break;
|
||||
case TopAbs_FACE:
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_GROUP_FACE");
|
||||
anObjectName = "Group_Of_Faces_";
|
||||
aNamePrefix = "Group_Of_Faces_";
|
||||
break;
|
||||
case TopAbs_SOLID:
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_GROUP_SOLID");
|
||||
anObjectName = "Group_Of_Solids_";
|
||||
aNamePrefix = "Group_Of_Solids_";
|
||||
break;
|
||||
}
|
||||
} else if ( mytype == GEOM_MARKER ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_LCS");
|
||||
anObjectName = "LocalCS_";
|
||||
aNamePrefix = "LocalCS_";
|
||||
} else if ( mytype > ADVANCED_BASE ) {
|
||||
char buf[20];
|
||||
sprintf( buf, "%d", aBaseObj->GetType() );
|
||||
std::string advId = "ICON_OBJBROWSER_ADVANCED_"; advId += buf;
|
||||
aResultSO->SetAttrString("AttributePixMap",advId.c_str());
|
||||
anObjectName = "Advanced_";
|
||||
aNamePrefix = "Advanced_";
|
||||
} else if ( mytype == GEOM_FIELD ) {
|
||||
anObjectName = "Field_";
|
||||
aNamePrefix = "Field_";
|
||||
GEOM::GEOM_Field_var aField = GEOM::GEOM_Field::_narrow(theObject);
|
||||
if ( !aField->_is_nil() )
|
||||
switch( aField->GetDimension() ) {
|
||||
@ -327,38 +325,38 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_FIELD_SOLID");
|
||||
}
|
||||
} else if ( mytype == GEOM_FIELD_STEP ) {
|
||||
anObjectName = "Step_";
|
||||
aNamePrefix = "Step_";
|
||||
} else if ( !aShape->_is_nil() ) {
|
||||
GEOM::shape_type myshapetype=aShape->GetShapeType();
|
||||
if ( myshapetype == GEOM::COMPOUND ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_COMPOUND" );
|
||||
anObjectName = "Compound_";
|
||||
aNamePrefix = "Compound_";
|
||||
} else if ( myshapetype == GEOM::COMPSOLID ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_COMPSOLID");
|
||||
anObjectName = "Compsolid_";
|
||||
aNamePrefix = "Compsolid_";
|
||||
} else if ( myshapetype == GEOM::SOLID ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_SOLID");
|
||||
anObjectName = "Solid_";
|
||||
aNamePrefix = "Solid_";
|
||||
} else if ( myshapetype == GEOM::SHELL ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_SHELL");
|
||||
anObjectName = "Shell_";
|
||||
aNamePrefix = "Shell_";
|
||||
} else if ( myshapetype == GEOM::FACE ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_FACE");
|
||||
anObjectName = "Face_";
|
||||
aNamePrefix = "Face_";
|
||||
} else if ( myshapetype == GEOM::WIRE ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_WIRE");
|
||||
anObjectName = "Wire_";
|
||||
aNamePrefix = "Wire_";
|
||||
} else if ( myshapetype == GEOM::EDGE ) {
|
||||
aResultSO->SetAttrString("AttributePixMap", "ICON_OBJBROWSER_EDGE");
|
||||
anObjectName = "Edge_";
|
||||
aNamePrefix = "Edge_";
|
||||
} else if ( myshapetype == GEOM::VERTEX ) {
|
||||
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_VERTEX" );
|
||||
anObjectName = "Vertex_";
|
||||
aNamePrefix = "Vertex_";
|
||||
}
|
||||
}
|
||||
if (!HasName)
|
||||
if ( anObjectName.IsEmpty() )
|
||||
{
|
||||
//if (strlen(theName) == 0) anObjectName += TCollection_AsciiString(aResultSO->Tag());
|
||||
//if (strlen(theName) == 0) aNamePrefix += TCollection_AsciiString(aResultSO->Tag());
|
||||
//else anObjectName = TCollection_AsciiString(CORBA::string_dup(theName));
|
||||
|
||||
// asv : 11.11.04 Introducing a more sofisticated method of name creation, just as
|
||||
@ -368,16 +366,15 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
|
||||
if ( strlen( theName ) == 0 ) { // MOST PROBABLY CALLED FROM BATCHMODE OR SUPERVISOR
|
||||
int i = 0; // (WITH EMPTY NEW NAME)
|
||||
SALOMEDS::SObject_var obj;
|
||||
TCollection_AsciiString aNewObjectName;
|
||||
do {
|
||||
aNewObjectName = anObjectName + TCollection_AsciiString(++i);
|
||||
obj = theStudy->FindObject( aNewObjectName.ToCString() );
|
||||
anObjectName = aNamePrefix + TCollection_AsciiString(++i);
|
||||
obj = theStudy->FindObject( anObjectName.ToCString() );
|
||||
}
|
||||
while ( !obj->_is_nil() );
|
||||
anObjectName = aNewObjectName;
|
||||
}
|
||||
else // MOST PROBABLY CALLED FROM GEOM GUI (ALREADY WITH VALID NAME)
|
||||
else { // MOST PROBABLY CALLED FROM GEOM GUI (ALREADY WITH VALID NAME)
|
||||
anObjectName = theName;
|
||||
}
|
||||
}
|
||||
|
||||
//Set the study entry as a name of the published GEOM_Object
|
||||
@ -750,6 +747,7 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream,
|
||||
// Find the current Study and StudyBuilder
|
||||
SALOMEDS::Study_var aStudy = theObject->GetStudy();
|
||||
SALOMEDS::StudyBuilder_var aStudyBuilder = aStudy->NewBuilder();
|
||||
SALOMEDS::UseCaseBuilder_var anUseCaseBuilder = aStudy->GetUseCaseBuilder();
|
||||
SALOMEDS::SObject_var aNewSO;
|
||||
// Retrieve a TopoDS_Shape from byte stream
|
||||
TopoDS_Shape aTopology;
|
||||
@ -786,6 +784,10 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PasteInto(const SALOMEDS::TMPFile& theStream,
|
||||
anIOR->SetValue(objStr.in());
|
||||
anIOR->UnRegister();
|
||||
|
||||
// add object to the use case tree
|
||||
// (to support tree representation customization and drag-n-drop)
|
||||
anUseCaseBuilder->AppendTo( aNewSO->GetFather(), aNewSO );
|
||||
|
||||
// Return the created in the Study SObject
|
||||
return aNewSO._retn();
|
||||
}
|
||||
@ -2905,11 +2907,11 @@ Engines::ListOfIdentifiers* GEOM_Gen_i::importData(
|
||||
if (aFileName.rfind("/") != std::string::npos) { // remove folders from the name
|
||||
aFileName = aFileName.substr(aFileName.rfind("/") + 1);
|
||||
}
|
||||
|
||||
std::string anExtension(data->extension());
|
||||
aFileName += "." + anExtension;
|
||||
// convert extension to upper case
|
||||
std::transform(anExtension.begin(), anExtension.end(), anExtension.begin(), ::toupper);
|
||||
|
||||
std::string aFullPath = aTmpDir + aFileName;
|
||||
|
||||
Engines::TMPFile* aFileStream = data->get();
|
||||
@ -2922,16 +2924,30 @@ Engines::ListOfIdentifiers* GEOM_Gen_i::importData(
|
||||
aFile.write(aBuffer, aFileStream->length());
|
||||
aFile.close();
|
||||
|
||||
GEOM::GEOM_Object_var anObj = aInsOp->ImportFile(aFullPath.c_str(), anExtension.c_str());
|
||||
if ( !anObj->_is_nil() && aInsOp->IsDone() ) {
|
||||
SALOMEDS::SObject_var aSO = PublishInStudy(aStudy, SALOMEDS::SObject::_nil(), anObj, data->name());
|
||||
aResult->length(1);
|
||||
GEOM::GEOM_Object_var aShapeObj;
|
||||
GEOM::ListOfGO_var aSubShape = new GEOM::ListOfGO;
|
||||
GEOM::ListOfGO_var aGroups = new GEOM::ListOfGO;
|
||||
GEOM::ListOfFields_var aFields = new GEOM::ListOfFields;
|
||||
|
||||
CORBA::Boolean isResultOK = aInsOp->ImportXAO(aFullPath.c_str(), aShapeObj.out(), aSubShape.out(), aGroups.out(), aFields.out());
|
||||
|
||||
if ( isResultOK && !aShapeObj->_is_nil() && aInsOp->IsDone() ) {
|
||||
SALOMEDS::SObject_var aSO = PublishInStudy(aStudy, SALOMEDS::SObject::_nil(), aShapeObj, aShapeObj->GetName());
|
||||
aResult->length(aGroups->length() + 1);
|
||||
aResult[0] = aSO->GetID(); // unioque identifer of the object in GEOM is entry of SObject
|
||||
} else {
|
||||
if (anObj->_is_nil())
|
||||
//Iteration for objects of the group.
|
||||
for (int i = 0; i < aGroups->length(); i++) {
|
||||
SALOMEDS::SObject_var aSOChild = AddInStudy(aStudy, aGroups[i], aGroups[i]->GetName(), aShapeObj);
|
||||
aResult[i+1] = aSOChild->GetID();
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (aShapeObj->_is_nil())
|
||||
MESSAGE("Result of the import operation is incorrect for file "<<aFullPath.c_str());
|
||||
if (!aInsOp->IsDone())
|
||||
MESSAGE("Import operation is not done for file "<<aFullPath.c_str());
|
||||
if (!isResultOK)
|
||||
MESSAGE("ImportXAO operation is failed for file "<<aFullPath.c_str());
|
||||
return aResult._retn();
|
||||
}
|
||||
|
||||
@ -2965,10 +2981,16 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId)
|
||||
if (CORBA::is_nil(aComponent))
|
||||
return aResult._retn();
|
||||
SALOMEDS::ChildIterator_var anIter = aStudy->NewChildIterator(aComponent); // check only published shapes
|
||||
TopoDS_Compound aResultComp;
|
||||
BRep_Builder aBB;
|
||||
aBB.MakeCompound(aResultComp);
|
||||
int aNumInComp = 0; // number of shapes in resulting compound
|
||||
|
||||
GEOM::GEOM_Object_var shapeObj;
|
||||
GEOM::ListOfGO_var groups = new GEOM::ListOfGO;
|
||||
GEOM::ListOfFields_var fields = new GEOM::ListOfFields;
|
||||
std::string anAuthorName = "SIMAN Author";
|
||||
|
||||
GEOM::GEOM_IShapesOperations_var aShapesOp = GetIShapesOperations(aStudy->StudyId());
|
||||
GEOM::GEOM_IInsertOperations_var aInsOp = GetIInsertOperations(aStudy->StudyId());
|
||||
|
||||
int aSeqLength = 0; // the sequence length
|
||||
for(; anIter->More(); anIter->Next()) {
|
||||
SALOMEDS::SObject_var aSO = anIter->Value();
|
||||
SALOMEDS::SObject_var aRefSO;
|
||||
@ -2979,25 +3001,37 @@ Engines::ListOfData* GEOM_Gen_i::getModifiedData(CORBA::Long studyId)
|
||||
GEOM::GEOM_Object_var aCORBAMainShape = GEOM::GEOM_Object::_narrow(anObj);
|
||||
if(!aCORBAMainShape->_is_nil()) {
|
||||
CORBA::String_var entry = aCORBAMainShape->GetEntry();
|
||||
Handle(GEOM_Object) aMainShape = Handle(GEOM_Object)::DownCast( _impl->GetObject(studyId, entry) );
|
||||
if (!aMainShape.IsNull()) {
|
||||
TopoDS_Shape aMainSh = aMainShape->GetValue();
|
||||
if (!aMainSh.IsNull()) {
|
||||
aBB.Add(aResultComp, aMainSh);
|
||||
aNumInComp++;
|
||||
Handle(GEOM_Object) aMainShape = Handle(GEOM_Object)::DownCast(_impl->GetObject(studyId, entry));
|
||||
|
||||
GEOM::shape_type aCORBAShapeType = aCORBAMainShape->GetShapeType();
|
||||
if (!aMainShape.IsNull() && !(aCORBAShapeType == GEOM::VERTEX) && !(aCORBAShapeType == GEOM::EDGE)) {
|
||||
aSeqLength++;
|
||||
shapeObj = aCORBAMainShape;
|
||||
if (aShapesOp->_is_nil()) {
|
||||
MESSAGE("No shapes operations!");
|
||||
return aResult._retn();
|
||||
}
|
||||
groups = aShapesOp->GetExistingSubObjects(aCORBAMainShape, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (aNumInComp > 0) { // compund is correct, write it to the temporary file
|
||||
std::string aFullPath = Kernel_Utils::GetTmpFileName() + ".brep";
|
||||
BRepTools::Write(aResultComp, aFullPath.c_str());
|
||||
MESSAGE("Write compound of "<<aNumInComp<<" shapes to "<<aFullPath.c_str());
|
||||
|
||||
if (aInsOp->_is_nil()) {
|
||||
MESSAGE("No insert operations!");
|
||||
return aResult._retn();
|
||||
}
|
||||
|
||||
if (aSeqLength > 0) { // Shape is correct, write it to the temporary file
|
||||
|
||||
std::string aFullXaoPath = Kernel_Utils::GetTmpFileName() + ".xao";
|
||||
CORBA::Boolean isResultOK = aInsOp->ExportXAO(shapeObj.in(), groups.in(), fields.in(), anAuthorName.c_str(), aFullXaoPath.c_str());
|
||||
|
||||
aResult->length(1);
|
||||
Engines::DataContainer_var aData = (new Engines_DataContainer_i(
|
||||
aFullPath.c_str(), "", "", true))->_this();
|
||||
aFullXaoPath.c_str(), "", "", true))->_this();
|
||||
aResult[0] = aData;
|
||||
} else {
|
||||
MESSAGE("No shapes to export");
|
||||
|
@ -674,10 +674,57 @@ void GroupGUI_GroupDlg::showOnlySelected()
|
||||
Handle(SALOME_InteractiveObject) io =
|
||||
new SALOME_InteractiveObject (aMainEntry.in(), "GEOM", "TEMP_IO");
|
||||
if (view->isVisible(io)) myIsHiddenMain = true;
|
||||
}
|
||||
|
||||
aDisplayer->EraseAll(/*forced = false, updateViewer = true*/);
|
||||
aDisplayer->Display(aSelList, true);
|
||||
//keep the selected entry and IO in the map for checking
|
||||
std::map<QString, Handle(SALOME_InteractiveObject)> aSelEntriesMap;
|
||||
SALOME_ListIteratorOfListIO aSelIt(aSelList);
|
||||
for ( ; aSelIt.More(); aSelIt.Next() ) {
|
||||
Handle(SALOME_InteractiveObject) anSelIO = aSelIt.Value();
|
||||
aSelEntriesMap[anSelIO->getEntry()] = anSelIO;
|
||||
}
|
||||
//get the displayed sub-shapes
|
||||
SALOME_ListIO displayed;
|
||||
view->GetVisible(displayed);
|
||||
// Erase all, except the selected sub-shapes
|
||||
std::map<QString, Handle(SALOME_InteractiveObject)>::iterator
|
||||
aSelDispIter = aSelEntriesMap.end();
|
||||
SALOME_ListIteratorOfListIO aDispIt( displayed );
|
||||
for ( ; aDispIt.More(); aDispIt.Next() ) {
|
||||
Handle(SALOME_InteractiveObject) anIO = aDispIt.Value();
|
||||
aSelDispIter = aSelEntriesMap.find( anIO->getEntry() );
|
||||
if ( aSelDispIter != aSelEntriesMap.end() ) {
|
||||
//sub-shape is selected, so erase it's record from map to keep in it not displayed, but selected sub-shapes only
|
||||
aSelEntriesMap.erase(aSelDispIter);
|
||||
} else {
|
||||
//sub-shape is not in the map of selected, then erase it from view
|
||||
aDisplayer->Erase( anIO, /*forced = */false, /*updateViewer = */false );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !aSelEntriesMap.empty() ) {
|
||||
// Build a presentation of the selected, but not displayed sub-shapes
|
||||
TopoDS_Shape aMainShape = GEOM_Client::get_client().GetShape(GeometryGUI::GetGeomGen(), myMainObj);
|
||||
TopTools_IndexedMapOfShape aSubShapesMap;
|
||||
TopExp::MapShapes(aMainShape, aSubShapesMap);
|
||||
QString anEntryBase = aMainEntry.in();
|
||||
|
||||
TopExp_Explorer anExp (aMainShape, getShapeType());
|
||||
for (; anExp.More(); anExp.Next()) {
|
||||
TopoDS_Shape aSubShape = anExp.Current();
|
||||
int index = aSubShapesMap.FindIndex(aSubShape);
|
||||
QString anEntry = QString( "TEMP_" ) + anEntryBase + QString("_%1").arg(index);
|
||||
if ( aSelEntriesMap.find( anEntry ) == aSelEntriesMap.end() ) {
|
||||
//skip not selected sub-shapes
|
||||
continue;
|
||||
}
|
||||
SALOME_Prs* aPrs = aDisplayer->buildSubshapePresentation(aSubShape, anEntry, view);
|
||||
if (aPrs) {
|
||||
displayPreview(aPrs, true, false); // append, do not update
|
||||
}
|
||||
}
|
||||
}
|
||||
aDisplayer->UpdateViewer();
|
||||
}
|
||||
|
||||
// Mantis issue 0021421: do not hide main shape, if explode on VERTEX
|
||||
if (getShapeType() == TopAbs_VERTEX && myIsHiddenMain) {
|
||||
|
@ -347,7 +347,7 @@ SALOME_Prs* MeasureGUI_AngleDlg::buildPrs()
|
||||
gce_MakePln gce_MP(aP11, aP12, aP3);
|
||||
Handle(Geom_Plane) aPlane = new Geom_Plane(gce_MP.Value());
|
||||
|
||||
Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( anEdge1, anEdge2, aPlane->Pln() );
|
||||
Handle(AIS_AngleDimension) anIO = new AIS_AngleDimension( anEdge1, anEdge2 );
|
||||
|
||||
Handle(Prs3d_DimensionAspect) aDimensionStyle = new Prs3d_DimensionAspect;
|
||||
|
||||
|
@ -95,6 +95,8 @@ namespace GEOM
|
||||
"IsosColor", // -
|
||||
// outlines color
|
||||
"OutlineColor", // -
|
||||
// texture
|
||||
"Texture", // -
|
||||
};
|
||||
return ( type >= GEOM::Visibility && type <= GEOM::LastProperty ) ? names[type] : QString();
|
||||
}
|
||||
|
@ -54,7 +54,8 @@ namespace GEOM
|
||||
PointColor,
|
||||
IsosColor,
|
||||
OutlineColor,
|
||||
LastProperty = OutlineColor,
|
||||
Texture,
|
||||
LastProperty = Texture,
|
||||
};
|
||||
|
||||
GEOM_OBJECT_EXPORT double minDeflection();
|
||||
|
@ -60,13 +60,15 @@ void ShapeRec_FeatureDetector::SetPath( const std::string& thePath )
|
||||
IplImage* src = cvLoadImage(imagePath.c_str(),CV_LOAD_IMAGE_COLOR);
|
||||
imgHeight = src->height;
|
||||
imgWidth = src->width;
|
||||
cvReleaseImage(&src);
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
Computes the corners of the image located at imagePath
|
||||
*/
|
||||
void ShapeRec_FeatureDetector::ComputeCorners( bool useROI, ShapeRec_Parameters* parameters ){
|
||||
void ShapeRec_FeatureDetector::ComputeCorners( bool useROI, ShapeRec_Parameters* parameters )
|
||||
{
|
||||
ShapeRec_CornersParameters* aCornersParameters = dynamic_cast<ShapeRec_CornersParameters*>( parameters );
|
||||
if ( !aCornersParameters ) aCornersParameters = new ShapeRec_CornersParameters();
|
||||
|
||||
@ -105,8 +107,8 @@ void ShapeRec_FeatureDetector::ComputeCorners( bool useROI, ShapeRec_Parameters*
|
||||
/*!
|
||||
Computes the contours of the image located at imagePath
|
||||
*/
|
||||
bool ShapeRec_FeatureDetector::ComputeContours( bool useROI, ShapeRec_Parameters* parameters ){
|
||||
|
||||
bool ShapeRec_FeatureDetector::ComputeContours( bool useROI, ShapeRec_Parameters* parameters )
|
||||
{
|
||||
// Initialising images
|
||||
cv::Mat src, src_gray;
|
||||
cv::Mat detected_edges;
|
||||
@ -135,40 +137,44 @@ bool ShapeRec_FeatureDetector::ComputeContours( bool useROI, ShapeRec_Parameters
|
||||
}
|
||||
else //COLORFILTER
|
||||
{
|
||||
IplImage* find_image = cvLoadImage(imagePath.c_str(),CV_LOAD_IMAGE_COLOR);
|
||||
// Load the input image where we want to detect contours
|
||||
IplImage* input_image = cvLoadImage(imagePath.c_str(),CV_LOAD_IMAGE_COLOR);
|
||||
|
||||
ShapeRec_ColorFilterParameters* aColorFilterParameters = dynamic_cast<ShapeRec_ColorFilterParameters*>( parameters );
|
||||
if ( !aColorFilterParameters ) aColorFilterParameters = new ShapeRec_ColorFilterParameters();
|
||||
|
||||
// Reduce noise
|
||||
cvSmooth( find_image, find_image, CV_GAUSSIAN, aColorFilterParameters->smoothSize, aColorFilterParameters->smoothSize );
|
||||
cvSmooth( input_image, input_image, CV_GAUSSIAN, aColorFilterParameters->smoothSize, aColorFilterParameters->smoothSize );
|
||||
|
||||
// Crop the image to build an histogram from the selected part
|
||||
cvSetImageROI(find_image, rect);
|
||||
IplImage* test_image = cvCreateImage(cvGetSize(find_image),
|
||||
find_image->depth,
|
||||
find_image->nChannels);
|
||||
cvCopy(find_image, test_image, NULL);
|
||||
cvResetImageROI(find_image);
|
||||
// Crop the image to the selected part only (sample_image)
|
||||
cvSetImageROI(input_image, rect);
|
||||
IplImage* sample_image = cvCreateImage(cvGetSize(input_image),
|
||||
input_image->depth,
|
||||
input_image->nChannels);
|
||||
cvCopy(input_image, sample_image, NULL);
|
||||
cvResetImageROI(input_image);
|
||||
|
||||
IplImage* test_hsv = cvCreateImage(cvGetSize(test_image),8,3);
|
||||
IplImage* h_plane = cvCreateImage( cvGetSize(test_image), 8, 1 );
|
||||
IplImage* s_plane = cvCreateImage( cvGetSize(test_image), 8, 1 );
|
||||
CvHistogram* hist;
|
||||
IplImage* sample_hsv = cvCreateImage( cvGetSize(sample_image),8,3 );
|
||||
IplImage* sample_h_plane = cvCreateImage( cvGetSize(sample_image), 8, 1 );
|
||||
IplImage* sample_s_plane = cvCreateImage( cvGetSize(sample_image), 8, 1 );
|
||||
CvHistogram* sample_hist;
|
||||
|
||||
cvCvtColor(test_image, test_hsv, CV_BGR2HSV);
|
||||
cvCvtColor(sample_image, sample_hsv, CV_BGR2HSV);
|
||||
|
||||
cvCvtPixToPlane(test_hsv, h_plane, s_plane, 0, 0);
|
||||
IplImage* planes[] = { h_plane, s_plane };
|
||||
cvCvtPixToPlane(sample_hsv, sample_h_plane, sample_s_plane, 0, 0);
|
||||
IplImage* sample_planes[] = { sample_h_plane, sample_s_plane };
|
||||
|
||||
//create hist
|
||||
// Create the hue / saturation histogram of the SAMPLE image.
|
||||
// This histogramm will be representative of what is the zone
|
||||
// we want to find the frontier of. Indeed, the sample image is meant to
|
||||
// be representative of this zone
|
||||
float hranges[] = { 0, 180 };
|
||||
float sranges[] = { 0, 256 };
|
||||
float* ranges[] = { hranges, sranges };
|
||||
hist = cvCreateHist( 2, aColorFilterParameters->histSize, aColorFilterParameters->histType, ranges );
|
||||
sample_hist = cvCreateHist( 2, aColorFilterParameters->histSize, aColorFilterParameters->histType, ranges );
|
||||
|
||||
//calculate hue /saturation histogram
|
||||
cvCalcHist(planes, hist, 0 ,0);
|
||||
cvCalcHist(sample_planes, sample_hist, 0 ,0);
|
||||
|
||||
// // TEST print of the histogram for debugging
|
||||
// IplImage* hist_image = cvCreateImage(cvSize(320,300),8,3);
|
||||
@ -194,18 +200,37 @@ bool ShapeRec_FeatureDetector::ComputeContours( bool useROI, ShapeRec_Parameters
|
||||
// cvNamedWindow("hist", 1); cvShowImage("hist",hist_image);
|
||||
|
||||
|
||||
//calculate back projection of hue and saturation planes of input image
|
||||
IplImage* backproject = cvCreateImage(cvGetSize(test_image), 8, 1);
|
||||
IplImage* binary_backproject = cvCreateImage(cvGetSize(test_image), 8, 1);
|
||||
cvCalcBackProject(planes, backproject, hist);
|
||||
// Calculate the back projection of hue and saturation planes of the INPUT image
|
||||
// by mean of the histogram of the SAMPLE image.
|
||||
//
|
||||
// The pixels which (h,s) coordinates correspond to high values in the histogram
|
||||
// will have high values in the grey image result. It means that a pixel of the INPUT image
|
||||
// which is more probably in the zone represented by the SAMPLE image, will be whiter
|
||||
// in the back projection.
|
||||
IplImage* backproject = cvCreateImage(cvGetSize(input_image), 8, 1);
|
||||
IplImage* binary_backproject = cvCreateImage(cvGetSize(input_image), 8, 1);
|
||||
IplImage* input_hsv = cvCreateImage(cvGetSize(input_image),8,3);
|
||||
IplImage* input_hplane = cvCreateImage(cvGetSize(input_image),8,1);
|
||||
IplImage* input_splane = cvCreateImage(cvGetSize(input_image),8,1);
|
||||
|
||||
// Threshold in order to obtain binary image
|
||||
// Get hue and saturation planes of the INPUT image
|
||||
cvCvtColor(input_image, input_hsv, CV_BGR2HSV);
|
||||
cvCvtPixToPlane(input_hsv, input_hplane, input_splane, 0, 0);
|
||||
IplImage* input_planes[] = { input_hplane, input_splane };
|
||||
|
||||
// Compute the back projection
|
||||
cvCalcBackProject(input_planes, backproject, sample_hist);
|
||||
|
||||
// Threshold in order to obtain a binary image
|
||||
cvThreshold(backproject, binary_backproject, aColorFilterParameters->threshold, aColorFilterParameters->maxThreshold, CV_THRESH_BINARY);
|
||||
cvReleaseImage(&test_image);
|
||||
cvReleaseImage(&test_hsv);
|
||||
cvReleaseImage(&h_plane);
|
||||
cvReleaseImage(&s_plane);
|
||||
cvReleaseImage(&find_image);
|
||||
cvReleaseImage(&sample_image);
|
||||
cvReleaseImage(&sample_hsv);
|
||||
cvReleaseImage(&sample_h_plane);
|
||||
cvReleaseImage(&sample_s_plane);
|
||||
cvReleaseImage(&input_image);
|
||||
cvReleaseImage(&input_hsv);
|
||||
cvReleaseImage(&input_hplane);
|
||||
cvReleaseImage(&input_splane);
|
||||
cvReleaseImage(&backproject);
|
||||
|
||||
detected_edges = cv::Mat(binary_backproject);
|
||||
@ -218,7 +243,7 @@ bool ShapeRec_FeatureDetector::ComputeContours( bool useROI, ShapeRec_Parameters
|
||||
|
||||
// _detectAndRetrieveContours( detected_edges, parameters->findContoursMethod );
|
||||
detected_edges = detected_edges > 1;
|
||||
findContours( detected_edges, contours, hierarchy, CV_RETR_CCOMP, parameters->findContoursMethod, useROI ? cvPoint(rect.x,rect.y) : cvPoint(0,0) );
|
||||
findContours( detected_edges, contours, hierarchy, CV_RETR_CCOMP, parameters->findContoursMethod);
|
||||
|
||||
return true;
|
||||
|
||||
@ -269,6 +294,9 @@ std::string ShapeRec_FeatureDetector::CroppImage()
|
||||
|
||||
cvSaveImage ("/tmp/cropped_image.bmp", cropped_image);
|
||||
|
||||
cvReleaseImage(&src);
|
||||
cvReleaseImage(&cropped_image);
|
||||
|
||||
return "/tmp/cropped_image.bmp";
|
||||
}
|
||||
|
||||
|
@ -174,11 +174,11 @@ void TransformationGUI_MultiRotationDlg::ConstructorsClicked (int constructorId)
|
||||
{
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
|
||||
myBase.nullify();
|
||||
myVector.nullify();
|
||||
//myBase.nullify();
|
||||
//myVector.nullify();
|
||||
|
||||
GroupArgs->LineEdit1->setText("");
|
||||
GroupArgs->LineEdit2->setText("");
|
||||
//GroupArgs->LineEdit1->setText("");
|
||||
//GroupArgs->LineEdit2->setText("");
|
||||
|
||||
GroupArgs->SpinBox_DX1->setValue(myAng);
|
||||
GroupArgs->SpinBox_DY1->setValue(myNbTimes1);
|
||||
@ -275,7 +275,8 @@ void TransformationGUI_MultiRotationDlg::SelectionIntoArgument()
|
||||
// angular step
|
||||
double diag = sqrt((Xmax-Xmin)*(Xmax-Xmin) + (Ymax-Ymin)*(Ymax-Ymin));
|
||||
double d = sqrt((0.5*(Xmax+Xmin))*(0.5*(Xmax+Xmin)) + (0.5*(Ymax+Ymin))*(0.5*(Ymax+Ymin)));
|
||||
myAng = floor(2.0 * atan(diag/d) * 180.0 / M_PI);
|
||||
if ( fabs(d) > 1.e-16 )
|
||||
myAng = floor(2.0 * atan(diag/d) * 180.0 / M_PI);
|
||||
GroupArgs->SpinBox_DX1->setValue(myAng);
|
||||
|
||||
// radial step
|
||||
@ -293,10 +294,10 @@ void TransformationGUI_MultiRotationDlg::SelectionIntoArgument()
|
||||
}
|
||||
|
||||
// clear selection
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
// disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
// myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
// connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
// this, SLOT(SelectionIntoArgument()));
|
||||
}
|
||||
else {
|
||||
if ( myEditCurrentArgument == GroupArgs->LineEdit1 )
|
||||
|
@ -239,15 +239,21 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor
|
||||
GroupDimensions->hide();
|
||||
GroupPoints->show();
|
||||
|
||||
GroupPoints->LineEdit1->setText("");
|
||||
GroupPoints->LineEdit2->setText("");
|
||||
myBase.nullify();
|
||||
myVectorU.nullify();
|
||||
//GroupPoints->LineEdit1->setText("");
|
||||
//GroupPoints->LineEdit2->setText("");
|
||||
//myBase.nullify();
|
||||
//myVectorU.nullify();
|
||||
|
||||
if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) );
|
||||
if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) );
|
||||
|
||||
GroupPoints->SpinBox_DX->setValue(myStepU);
|
||||
GroupPoints->SpinBox_DY->setValue(myNbTimesU);
|
||||
|
||||
GroupPoints->PushButton1->click();
|
||||
if ( !myBase )
|
||||
GroupPoints->PushButton1->click();
|
||||
else if ( !myVectorU )
|
||||
GroupPoints->PushButton2->click();
|
||||
break;
|
||||
}
|
||||
case 1: // Translate double
|
||||
@ -255,19 +261,28 @@ void TransformationGUI_MultiTranslationDlg::ConstructorsClicked (int constructor
|
||||
GroupPoints->hide();
|
||||
GroupDimensions->show();
|
||||
|
||||
GroupDimensions->LineEdit1->setText("");
|
||||
GroupDimensions->LineEdit2->setText("");
|
||||
GroupDimensions->LineEdit3->setText("");
|
||||
myBase.nullify();
|
||||
myVectorU.nullify();
|
||||
myVectorV.nullify();
|
||||
//GroupDimensions->LineEdit1->setText("");
|
||||
//GroupDimensions->LineEdit2->setText("");
|
||||
//GroupDimensions->LineEdit3->setText("");
|
||||
//myBase.nullify();
|
||||
//myVectorU.nullify();
|
||||
//myVectorV.nullify();
|
||||
|
||||
if ( myBase ) GroupDimensions->LineEdit1->setText( GEOMBase::GetName( myBase.get() ) );
|
||||
if ( myVectorU ) GroupDimensions->LineEdit2->setText( GEOMBase::GetName( myVectorU.get() ) );
|
||||
if ( myVectorV ) GroupDimensions->LineEdit3->setText( GEOMBase::GetName( myVectorV.get() ) );
|
||||
|
||||
GroupDimensions->SpinBox_DX1->setValue(myStepU);
|
||||
GroupDimensions->SpinBox_DY1->setValue(myNbTimesU);
|
||||
GroupDimensions->SpinBox_DX2->setValue(myStepV);
|
||||
GroupDimensions->SpinBox_DY2->setValue(myNbTimesV);
|
||||
|
||||
GroupDimensions->PushButton1->click();
|
||||
if ( !myBase )
|
||||
GroupDimensions->PushButton1->click();
|
||||
else if ( !myVectorU )
|
||||
GroupDimensions->PushButton2->click();
|
||||
else if ( !myVectorV )
|
||||
GroupDimensions->PushButton3->click();
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -329,7 +344,7 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
|
||||
QString aName = GEOMBase::GetName( aSelectedObject.get() );
|
||||
myEditCurrentArgument->setText( aName );
|
||||
|
||||
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
|
||||
if ( myEditCurrentArgument == GroupPoints->LineEdit1 || myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
|
||||
myBase = aSelectedObject;
|
||||
|
||||
// recompute myStepU (Mantis issue 0021718)
|
||||
@ -338,36 +353,26 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
|
||||
anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
|
||||
if (anOper->IsDone()) {
|
||||
myStepU = floor(1.5 * (Xmax - Xmin));
|
||||
myStepV = floor(1.5 * (Ymax - Ymin));
|
||||
GroupPoints->SpinBox_DX->setValue(myStepU);
|
||||
GroupDimensions->SpinBox_DX1->setValue(myStepU);
|
||||
GroupDimensions->SpinBox_DX2->setValue(myStepV);
|
||||
}
|
||||
|
||||
if (!myVectorU)
|
||||
if ( myEditCurrentArgument == GroupPoints->LineEdit1 && !myVectorU )
|
||||
GroupPoints->PushButton2->click();
|
||||
if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
|
||||
if ( !myVectorU )
|
||||
GroupDimensions->PushButton2->click();
|
||||
else if ( !myVectorV )
|
||||
GroupDimensions->PushButton3->click();
|
||||
}
|
||||
}
|
||||
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
|
||||
myVectorU = aSelectedObject;
|
||||
if ( !myBase )
|
||||
GroupPoints->PushButton1->click();
|
||||
}
|
||||
else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
|
||||
myBase = aSelectedObject;
|
||||
|
||||
// recompute myStepU and myStepV (Mantis issue 0021718)
|
||||
GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId());
|
||||
double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
|
||||
anOper->GetBoundingBox(myBase.get(), true, Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
|
||||
if (anOper->IsDone()) {
|
||||
myStepU = floor(1.5 * (Xmax - Xmin));
|
||||
myStepV = floor(1.5 * (Ymax - Ymin));
|
||||
GroupDimensions->SpinBox_DX1->setValue(myStepU);
|
||||
GroupDimensions->SpinBox_DX2->setValue(myStepV);
|
||||
}
|
||||
|
||||
if ( !myVectorU )
|
||||
GroupDimensions->PushButton2->click();
|
||||
else if ( !myVectorV )
|
||||
GroupDimensions->PushButton3->click();
|
||||
}
|
||||
else if ( myEditCurrentArgument == GroupDimensions->LineEdit2 ) {
|
||||
myVectorU = aSelectedObject;
|
||||
if ( !myVectorV )
|
||||
@ -384,10 +389,10 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
|
||||
}
|
||||
|
||||
// clear selection
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
// disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
// myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||
// connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
// this, SLOT(SelectionIntoArgument()));
|
||||
}
|
||||
else {
|
||||
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ||
|
||||
@ -668,8 +673,8 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects)
|
||||
createPathPreview(myVectorU.get());
|
||||
createPathPreview(myVectorV.get());
|
||||
anObj = anOper->MultiTranslate2D(myBase.get(),
|
||||
myVectorU.get(), myStepU, myNbTimesU,
|
||||
myVectorV.get(), myStepV, myNbTimesV);
|
||||
myVectorU.get(), myStepU, myNbTimesU,
|
||||
myVectorV.get(), myStepV, myNbTimesV);
|
||||
if (!IsPreview()) {
|
||||
aParameters << GroupDimensions->SpinBox_DX1->text();
|
||||
aParameters << GroupDimensions->SpinBox_DY1->text();
|
||||
@ -743,6 +748,7 @@ void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Objec
|
||||
ShapeAnalysis_Edge aShapeAnal;
|
||||
TopoDS_Vertex aFirst = aShapeAnal.FirstVertex( anEdge );
|
||||
TopoDS_Vertex aLast = aShapeAnal.LastVertex( anEdge );
|
||||
if ( BRep_Tool::Pnt(aFirst).IsEqual( BRep_Tool::Pnt(aLast), Precision::Confusion() ) ) return;
|
||||
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 );
|
||||
|
@ -55,7 +55,10 @@ SET(TestXAO_SOURCES
|
||||
|
||||
ADD_EXECUTABLE(TestXAO ${TestXAO_SOURCES})
|
||||
TARGET_LINK_LIBRARIES(TestXAO ${_link_LIBRARIES})
|
||||
|
||||
SALOME_GENERATE_TESTS_ENVIRONMENT(tests_env)
|
||||
|
||||
ADD_TEST(TestXAO TestXAO)
|
||||
SET_TESTS_PROPERTIES(TestXAO PROPERTIES ENVIRONMENT "GEOM_SRC_DIR=${PROJECT_SOURCE_DIR}")
|
||||
SET_TESTS_PROPERTIES(TestXAO PROPERTIES ENVIRONMENT "GEOM_SRC_DIR=${PROJECT_SOURCE_DIR};${tests_env}")
|
||||
|
||||
INSTALL(TARGETS TestXAO DESTINATION ${SALOME_INSTALL_BINS})
|
||||
|
@ -25,8 +25,9 @@ namespace XAO
|
||||
rstr.seekg(0, rstr.end); // go to the end
|
||||
length = rstr.tellg(); // report location (this is the length)
|
||||
rstr.seekg(0, rstr.beg); // go back to the beginning
|
||||
char* txt = new char[length]; // allocate memory for a buffer of appropriate dimension
|
||||
char* txt = new char[length+1]; // allocate memory for a buffer of appropriate dimension
|
||||
rstr.read(txt, length); // read the whole file into the buffer
|
||||
txt[length] = '\0';
|
||||
rstr.close();
|
||||
|
||||
return txt;
|
||||
|