Merge branch V7_6_BR

This commit is contained in:
vsr 2015-06-03 11:06:53 +03:00
commit b46831ede7
88 changed files with 1550 additions and 1099 deletions

View File

@ -30,8 +30,8 @@ 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 5)
SET(${PROJECT_NAME_UC}_PATCH_VERSION 1)
SET(${PROJECT_NAME_UC}_MINOR_VERSION 6)
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})
SET(${PROJECT_NAME_UC}_VERSION_DEV 1)

View File

@ -23,7 +23,14 @@
#
# !! Please read the generic detection procedure in SalomeMacros.cmake !!
#
SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS(OpenCV OpenCV_DIR 2)
SET(UpCount 2)
IF (WIN32)
SET(UpCount 0)
ENDIF (WIN32)
SALOME_FIND_PACKAGE_AND_DETECT_CONFLICTS(OpenCV OpenCV_DIR ${UpCount})
#MARK_AS_ADVANCED()
IF(OpenCV_FOUND)

View File

@ -117,16 +117,22 @@ if __name__ == "__main__":
if len( args ) < 1: sys.exit("Plugin name is not specified")
f = open(options.output, "w")
if len(args) > 1:
plugins_names = " ".join(args) + " plugins"
elif len(args) == 1:
plugins_names = args[0] + " plugin"
else:
plugins_names = ""
output = []
if options.dummygeomhelp:
output.append( "## @package geomBuilder" )
output.append( "# Documentation of the methods dynamically added by the " + plugin_name + " Geometry plug-in to the geomBuilder class." )
output.append( "# Documentation of the methods dynamically added by the " + plugins_names + " to the @b %geomBuilder class." )
# Add dummy Geometry help
# This is supposed to be done when generating documentation for Geometry module plug-ins
output.append( "# @note The documentation below does not provide complete description of class @b %geomBuilder" )
output.append( "# from @b geomBuilder package. This documentation provides only information about" )
output.append( "# the methods dynamically added to the %geomBuilder class by the " + plugin_name + " plugin" )
output.append( "# the methods dynamically added to the %geomBuilder class by the " + plugins_names + "." )
output.append( "# For more details on the %geomBuilder class, please refer to the SALOME %Geometry module" )
output.append( "# documentation." )
pass

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -10,25 +10,24 @@ This operation is available in <b>OCC Viewer</b> only.
The \b Result will be a \b GEOM_Object.
\n Location of a new vertex on a selected edge can be defined two ways:
\n The location of a new vertex on the selected edge can be defined in two ways:
<ol>
<li> We can specify a position (ranging from 0.0 to 1.0) of the
vertex on the selected edge either by length or by parameter.
<li> By specifying the position (ranging from 0.0 to 1.0) by length or by parameter.
<p>
<b>TUI Command:</b> <em>geompy.DivideEdge(Shape, EdgeID, Value,
IsByParameter)</em>
<ul>
<li> \em Shape is a shape which contains an edge to be divided</li>
<li> \em Shape is a shape, which contains an edge to be divided;</li>
<li>\em EdgeID is the ID of the edge to be divided, if it is = -1,
then \em Shape should be an edge itself.</li>
then \em Shape should be an edge itself;</li>
<li> \em Value is a value of parameter on edge or length parameter,
depending on \em IsByParameter. </li>
<li> \em IsByParameter is a boolean flag, specifying operation mode:
- \c True: \em Value is treated as a curve parameter [0..1]
- \c False: \em Value is treated as a length parameter [0..1] </li>
depending on \em IsByParameter;</li>
<li> \em IsByParameter is a boolean flag, specifying the operation mode:
- \c True: \em Value is treated as a curve parameter; [0..1]
- \c False: \em Value is treated as a length parameter. [0..1] </li>
</ul>
\b Arguments: Name + 1 Edge + 1 Value setting the position of
the point according to one of the selected modes.
the point according to the selected mode.
The difference between "by parameter" and "by length" modes becomes
apparent on the edges with irregular parametrization (for example,
@ -41,15 +40,15 @@ The \b Result will be a \b GEOM_Object.
\image html repair8.png
\n\n
</li>
<li>We can select several points that will be projected to the selected
<li> By selecting several points that will be projected to the selected
edge to find the location of new vertices.
<p>
<b>TUI Command:</b> <em>geompy.DivideEdgeByPoint(Shape, Edge, Points)</em>
<b>TUI Command:</b> <em>geompy.DivideEdgeByPoint(Shape, Edge, Points):</em>
<ul>
<li> \em Shape is a shape which contains an edge to be divided</li>
<li>\em Edge is an edge to be divided (or it's ID, if it is = -1,
then \em Shape should be an edge itself).</li>
<li> \em Points is a list of points to project to \a Edge. </li>
<li> \em Shape is a shape, which contains an edge to be divided;</li>
<li>\em Edge is an edge to be divided (or its ID, if it is = -1,
then \em Shape should be an edge itself);</li>
<li> \em Points is a list of points to be projected to the \a Edge.</li>
</ul>
\b Arguments: Name + 1 Edge + 1 or more Points.

View File

@ -8,10 +8,10 @@ This operation checks whether a shape is a compound of glued blocks.
To be considered as a compound of blocks, the given shape must satisfy the
following conditions:
- Each element of the compound should be a Block (6 quadrangle faces);
- Each quadrangle face is a face that has 1 wire with 4 edges. If there are
more than 4 edges in a single wire and C1 continuity mode is switched on,
a face is quadrangular if it has 4 bounds of C1 continuity.
- Each element of the compound should be a Block, i.e. have 6 quadrangle faces;
- Each quadrangle face should have one wire with four edges. If there are
more than four edges in a single wire and C1 continuity mode is switched on,
a face is quadrangular if it has four bounds with C1 continuity.
- Blocks can be connected only via an entire quadrangle face or an entire edge;
- The compound should be connected;
- Each couple of connecting quadrangle faces should be glued.
@ -20,7 +20,7 @@ a face is quadrangular if it has 4 bounds of C1 continuity.
In this dialog:
- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser.
- <b>Use C1 criterion</b> - option that shitches on/off the C1 continuity mode.
- <b>Use C1 criterion</b> - option switches on/off the C1 continuity mode.
- <b>Angular Tolerance</b> - angular tolerance to check C1 continuity between neighbor edges in a wire.
- \b Errors list informs of possible errors, for example:
- Not a block;

View File

@ -9,17 +9,14 @@ This operation checks the topology of the selected shape to detect self-intersec
In this dialog:
- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser.
- <b>Level of check</b> - The combo box that allows to set the level of checking shape on self-interference.
It defines which interferferences will be checked. Default value is "All interferences".
- <b>Compute self-intersections</b> button computes self-interferences.
- \b Summary section contains the general report if the object has self-intersections and/or if errors are occured during computation.
- \b Self-intersections list contains the list of self-intersections detected.
Select the intersection(s) to show <b>Sub-shapes</b> in the field to the right.
- \b Apply and <b>Apply and Close</b> buttons are used to store interferences selected in the "Self-intersections" list box in the study for further analysis.
If no any interference is selected, all interferences are published in the study. Each interference is published as a child
compound of the source shape and contains a couple of intersecting sub-shapes.
- <b>Level of check</b> - combo box allows setting the level of self-interference checking. It defines, which interferences will be checked. The default value is "All interferences".
- <b>Compute self-intersections</b> button performs the computation.
- \b Summary section contains the general report about self-intersections of the object and/or errors that occurred during the computation.
- \b Self-intersections list contains the list of detected self-intersections. Select the intersection to show <b>Sub-shapes</b> in the field to the right.
- \b Apply and <b>Apply and Close</b> buttons store the interferences selected in the <b>Self-intersections</b> list box in the study for further analysis.
If no interferences are selected, all of them are published in the study. Each interference is published as a child compound of the source shape and contains a couple of intersecting sub-shapes.
\note This tool is useful for detection of shapes, not suitable for
\note This tool is useful for detection of shapes that are not suitable as
arguments of Boolean operations and Partition algorithm.
For more information about Partition and Boolean Operations Algorithms
and their limitations refer to <a href="SALOME_BOA_PA.pdf">this document</a>.

View File

@ -15,10 +15,8 @@ axis, creating a body of revolution.</li>
<li>\subpage create_extrusion_alongpath_page "Extrude an object along a path",
creating a more complex trajectory object.</li>
<li>\subpage create_pipe_path_page "Restore Path" of a pipe-like shape.</li>
<li>\subpage create_thickness_page "Thickness" operation that allows to add a thickness to objects.</li>
<li>\subpage create_groups_page "Generate Groups".
This cross-operation functionality allows creation of groups for certain generation operations.</li>
<li>\subpage create_thickness_page "Add thickness" to objects.</li>
<li>\subpage create_groups_page "Generate Groups" for certain generation operations.</li>
</ul>
<b> New entity -> Advanced </b> sub-menu allows creating new geometric

View File

@ -16,7 +16,7 @@ obtain from it.
The \b Result of the operation will be a List of \b GEOM_Objects
(vertexes, edges, wires, faces, shells or solids).
Available choices in the <b>Sub Shapes Type</b> combo box depend on the type
The choices available in the <b>Sub Shapes Type</b> combo box depend on the type
of selected <b>Main Object</b>:
- \b Compound: to extract compounds;
- \b Compsolid: to extract compsolids;
@ -29,72 +29,70 @@ of selected <b>Main Object</b>:
- \b Shape: to extract top-level contents of the compound shape;
- \b Flat: to extract "flat" contents of the compound shape.
Note: "flat" contents means top-level simple-type sub-shapes extracted from
the compound object recursively (i.e. there is no compounds in the result).
For example, if a compound C1 contains a solid S1 and another compound C2 that
contains solids S2 and S3 (see picture below):
Note: "flat" contents means that top-level simple-type sub-shapes are extracted from
the compound object recursively (i.e. there are no compounds in the result).
Let us take, for example, compound C1 that contains solid S1 and another compound C2 that
contains solids S2 and S3 (see the picture below):
- Explode operation with \b Shape type given as parameter will return S1 and C2;
- Explode operation with \b Flat type given as parameter will return S1, S2 and S3.
\image html flat_contents.png
Switching on <b>Select Sub-shapes</b> check box allows manual selection of sub-shapes
to be extracted from the main object. In this mode the user can select sub-shapes
to be extracted from the main object. In this mode it is possible to select sub-shapes
directly in 3D viewer.
When <b>Select Sub-shapes</b> check box is switched on, additional \b Filter controls
allow to automatically pick up entites which satisfy specified threshold value(s).
The numerical functor for each sub-shape that is compared with threshold value(s)
is computed according to the shape's topological properties:
- length for edges and wires
- area for faces and shells
- volume for solids, compounds, compsolids
allow to automatically pick up entities, which satisfy the specified threshold value(s).
The numerical functor for each sub-shape that is compared with the threshold value(s)
is computed according to the topological properties of the shape:
- length for edges and wires;
- area for faces and shells;
- volume for solids, compounds and compsolids.
Filtering capabilities are not available for vertices.
In order to filter out some entities:
- Activate one or two filtering controls by switching on corresponding check boxes;
- Select required threshold comparator type; the following choices are available:
To filter out some entities it is necessary to do the following:
- Activate one or two filtering controls by switching on the corresponding check boxes;
- Select the required threshold comparator type; the following choices are available:
- <b>Less Than</b> or <b>Equal or Less Than</b> for the first comparator;
- <b>Greater Than</b> or <b>Equal or Greater Than</b> for the second comparator;
- Enter required threshold value (values);
- Enter the required threshold value (values);
- Press \b Apply button in the \b Filter group.
The entities which satisfy entered filtering parameters will be automatically highlighted
The entities, which correspond to the entered filtering parameters, will be automatically highlighted
in the 3D viewer.
Using <b>TUI Commands</b> you can perform this operation in a
variety of ways:
- <em>geompy.ExtractShapes(Shape, Type, isSorted)</em> explodes a
Shape into sub-shapes of a given Type and returns a List of sub-shapes.
This method does not return the Shape itself if it matches the
Type.
- <em>geompy.SubShapeAll(Shape, Type)</em> explodes a Shape on
This method does not return the Shape itself if it matches the Type.
- <em>geompy.SubShapeAll(Shape, Type)</em> explodes a Shape into
sub-shapes of a given Type and returns a List of sub-shapes.
- <em>geompy.SubShapeAllIDs(Shape, Type)</em> explodes a Shape on
sub-shapes of a given Type and returns a List of IDs of
sub-shapes.
- <em>geompy.SubShapeAllIDs(Shape, Type)</em> explodes a Shape into sub-shapes of a given Type and returns a List of IDs of sub-shapes.
- <em>geompy.SubShapeAllSortedCentres(Shape, Type)</em> explodes a
shape on sub-shapes of a given type and sorts them taking into account
shape into sub-shapes of a given type and sorts them taking into account
their gravity centers, to provide a stable order of sub-shapes.
It returns a list of sub-shapes.
- <em>geompy.SubShapeAllSortedCentresIDs(Shape, Type)</em> explodes
a shape on sub-shapes of a given type and sorts them taking into
a shape into sub-shapes of a given type and sorts them taking into
account their gravity centers, to provide a stable order of sub-shapes.
It returns a List of IDs of sub-shapes.
- <em>geompy.SubShape(Shape, Type, ListOfInd)</em> allows to obtain
a compound of sub-shapes of the Shape, selected by they indices in a
a compound of sub-shapes of the Shape, selected by their indexes in a
list of all sub-shapes of the given Type. Each index is in the range
[1, Nb_Sub-Shapes_Of_Given_Type].
- <em>geompy.SubShapeSortedCentres(Shape, Type, ListOfInd)</em>
allows to obtain a compound of sub-shapes of the Shape, selected by
they indices in sorted list of all sub-shapes of the given Type. Each
their indexes in a sorted list of all sub-shapes of the given Type. Each
index is in the range [1, Nb_Sub-Shapes_Of_Given_Type]
<b>Arguments: </b>1 SHAPE + 1 type of SubShape.
<b>Example:</b>
\image html explode.png "A box, exploded into faces"
\image html explode.png "A box exploded into faces"
*/

View File

@ -4,10 +4,10 @@
To create a <b>Surface From Face</B> in the <b>Main Menu</b> select <b>New Entity - > Basic - > Surface From Face</b>
\n This function takes some face as input parameter and creates new
GEOM_Object, i.e. topological shape by extracting underlying surface
of the source face and limiting it by the Umin, Umax, Vmin, Vmax
parameters of the source face (in the parametrical space).
\n This function takes a face at input and creates a new
<b>GEOM_Object</b>, i.e. topological shape by extracting the underlying surface
of the source face and limiting it by the <b>Umin, Umax, Vmin</b> and <b>Vmax</b>
parameters of the source face (in the parametric space).
\n
\ref restore_presentation_parameters_page "Advanced options".

View File

@ -2,26 +2,28 @@
\page create_thickness_page Thickness Construction
To add a \b Thickness to a shape in the <b>Main Menu</b> select <b>New Entity - > Generation - > Thickness</b>
\n
It is possible to create a Solid from a Face or a Shell by applying a
\b Thickness. To do it you should define an \b Object that is a Face or a
Shell, \b Thickness and to define the thickness direction by means of
<b>Thicken towards the inside</b> check box.
To add \b Thickness to a shape in the <b>Main Menu</b> select <b>New Entity - > Generation - > Thickness</b>.
Switch between adding thickness to a Face (Shell) or a Solid using radio buttons.
Firstly, \b Thickness can be applied to a Face or a Shell to create a Solid.
\image html thickness.png
It is necessary to define an \b Object (Face or Shell) and the value of \b Thickness.
<b>Thicken towards the inside</b> check box allows changing the thickness direction.
<b>Example:</b>
\image html thickness_result.png "Thickness of Shell"
It is possible to apply \b Thickness to a Solid. The result of this operation
is the hollowed Solid. To do it you should define an \b Object that is a Solid,
\b Faces to be removed from result, \b Thickness and the thickness direction by
means of <b>Thicken towards the inside</b> check box.
Secondly, the \b Thickness can be applied to a Solid to create a hollowed Solid.
\image html thicksolid.png
It is necessary to define a Solid \b Object \b Faces to be removed from the result and \b Thickness.
<b>Thicken towards the inside</b> check box allows changing the thickness direction.
<b>Example:</b>
\image html thicksolid_result.png "Thickness of Solid"
@ -36,8 +38,8 @@ Modifies a shape to make it a thick solid.
<b>Arguments:</b> Name + 1 shape (face, shell or solid) + thickness +
the list of face IDs.
\n If the shape is face or shell the list of face IDs is not used.
The thickness can be positive or negative for thicken towards the inside.
\n If the shape is a face or a shell the list of face IDs is not used.
The thickness can be positive or negative for thickening towards the inside.
\n\n <b>Advanced options</b> \ref preview_anchor "Preview"
Our <b>TUI Scripts</b> provide you with useful examples of creation of

View File

@ -34,7 +34,7 @@ All necessary parameters of Dependency Tree Viewer can be edited in the \ref pre
Tree nodes in the Dependency Viewer are named according to the study
names of the corresponding objects.
All nodes have fixed size, so long names are cut; the full object name can be seen in the tooltip
All nodes have fixed size, so long names are cut; the full object name can be seen in the tool-tip
when the cursor is hovered over the node.
"Dependency Tree" view supports the following states of nodes:
@ -61,11 +61,11 @@ Browser, OCC Viewer or Dependency Tree Viewer;</li></ul>
Dependency Tree Viewer shows oriented links between nodes to
represent the dependency direction. The viewer supports the following states of links:
<ul><li><b>Unidirectional link</b> - shows that object B depends on object A;</li></ul>
<ul><li><b>Unidirectional link</b> - shows that object \b B depends on object \b A;</li></ul>
\image html tree_unidir_link.png
<ul><li><b>Bidirectional link</b> - shows that object B depends on
object A and, at the same time, object A depends on object B;</li></ul>
<ul><li><b>Bidirectional link</b> - shows that object \b B depends on
object \b A and, at the same time, object \b A depends on object \b B;</li></ul>
\image html tree_bidir_link.png
<ul><li><b>Self-dependency link</b> - shows that an object depends on itself;</li></ul>

View File

@ -29,7 +29,7 @@ functionality for all objects in the current view via the main menu
\n <b>TUI Command:</b> <em>gg.setVectorsMode(ID, Bool)</em>
\n Also it is possible to show the vertices of the selected
\n It is possible to show the vertices of the selected
shape. For this, choose in the context menu of the shape
<b>Display mode -> Show Vertices</b>, or apply this
functionality for all objects in the current view via the main menu
@ -40,10 +40,9 @@ functionality for all objects in the current view via the main menu
\n <b>TUI Command:</b> <em>gg.setVerticesMode(ID, Bool)</em>
\n Moreover user can show the name of the selected
shape. For this, choose in the context menu of the shape
\n To show the name of the selected shape, choose in its context menu
<b>Display mode -> Show Name</b>, or apply this
functionality for all objects in the current view via the main menu
functionality for all objects in the current view via the main menu option
<b> View -> Display Mode -> Show/Hide Name.</b>
\image html name_mode.png

View File

@ -1,25 +1,20 @@
/*!
\page extension_operation_page Extension of an Edge or a Face
\page extension_operation_page Extension
\n To produce an \b Extension in the <b>Main Menu</b> select
<b>Operations - > Transformation - > Extension</b>
\n To produce an \b Extension of an Edge or a Face select in the <b>Main Menu</b>
<b>Operations - > Transformation - > Extension</b>. The type of extension is defined using the radio buttons.
\n This operation resizes an \b Edge by means of first
and last parameters modification or a \b Face by means of modification
of minimal and maximal U- and V-Parameters. \n
\ref restore_presentation_parameters_page "Advanced options".
Firstly it is possible to resize an \b Edge by modifying its first
and last parameters
The type of extension is defined using the radio buttons.
\image html extension1.png "Edge Extension"
Firstly it is possible to resize an \b Edge.
\n <b>TUI Command:</b> <em>geompy.ExtendEdge(theEdge, theMin, theMax)</em>,
where \em theEdge the input edge to be resized, \em theMin the minimal
parameter value, \em theMax the maximal parameter value.
\n <b>Arguments:</b> Name + Object (Edge) + 2 values (Min and Max Parameters).
\image html extension1.png "Extension of an Edge"
\n <b>Example:</b>
\image html extend_edge_example.png "Original edge (white) and extended edge"
@ -28,8 +23,12 @@ parameter value, \em theMax the maximal parameter value.
negative, the input Edge is extended, otherwise it is shrinked by
\b theMin parameter. If \b theMax is greater than 1, the Edge is
extended, otherwise it is shrinked by \b theMax parameter.
Secondly it is possible to resize a \b Face by modifying its
minimal and maximal U- and V-Parameters.
Secondly it is possible to resize a \b Face.
\image html extension2.png "Face Extension"
\n <b>TUI Command:</b> <em>geompy.ExtendFace(theFace, theUMin, theUMax,
theVMin, theVMax)</em>, where \em theFace the input face to be resized,
\em theUMin the minimal U-Parameter value, \em theUMax the maximal U-Parameter
@ -38,18 +37,16 @@ V-Parameter value.
\n <b>Arguments:</b> Name + Object (Face) + 4 values (Min and Max U- and
V-Parameters).
\image html extension2.png "Extension of a Face"
\n <b>Example:</b>
\image html extend_face_example.png "The original face (gray) and a result
face shrinked along U-Direction and extended along V-Direction"
\image html extend_face_example.png "The original face (gray) and a result face shrinked along U-Direction and extended along V-Direction"
\note The input Face U- and V-Parameters range is [0, 1]. If \b theUMin
parameter is negative, the input Face is extended, otherwise it is
shrinked along U-Direction by \b theUMin parameter. If theUMax is
shrinked along U-Direction by \b theUMin parameter. If \b theUMax is
greater than 1, the Face is extended, otherwise it is shrinked along
U-Direction by \b theUMax parameter. So as for \b theVMin, \b theVMax
U-Direction by \b theUMax parameter. The same applies to \b theVMin, \b theVMax
and V-Direction of the input Face.
Our <b>TUI Scripts</b> provide you with useful examples of the use of

View File

@ -6,6 +6,7 @@ Here you can find the answers to some frequently asked questions:
<ul>
<li>\subpage partition_explanation "What is the difference between partition, compounds and fuse operation ?" </li>
<li>\subpage size_models_range "What are the valid sizes of models ?" </li>
</ul>

View File

@ -1,11 +1,11 @@
/*!
\page fast_intersection_page Fast intersection
This operation checks whether or not two selected shapes are overlapped.
This operation checks if two selected shapes are overlapped.
This tool is useful for fast detection of intersections and gaps.
In contrast to Boolean Operations, Partition and Detect Self-intersection
algorithms that compute topological intersections, this algoritm computes
algorithms that compute topological intersections, this algorithm computes
intersections by generating tessellation (triangulation) of the source
shapes and detecting overlapping of resulting meshes. High performance is
achieved through the use of existing triangulation of faces.
@ -28,22 +28,21 @@ of the GUI module's documentation.
In this dialog:
- \b Object 1 - first checked object. \b Selection button allows picking it in the viewer or in the object browser.
- \b Object 2 - second checked object. \b Selection button allows picking it in the viewer or in the object browser.
- <b> Object 1 </b> and <b> Object 2 </b> the checked objects. \b Selection button allows picking them in the viewer or in the object browser.
- <b>Deflection coefficient</b> specifies the quality of shapes tessellation.
- <b>Detect gaps</b> - when switched on, allows detecting gaps between shapes.
- <b>Tolerance</b> - specifies a distance between shapes used for detecting gaps.
- <b>Tolerance</b> - specifies the distance between shapes used for detecting gaps.
- <b>Compute intersections</b> - press this button to compute interferences.
- <b>Sub-shapes of Object 1</b> - list of sub-shapes from the first source shape that localize the intersection.
- <b>Sub-shapes of Object 2</b> - list of sub-shapes from the second source shape that localize the intersection.
- \b Apply and <b>Apply and Close</b> buttons are used to store selected intersected shapes in the study for
further analysis (see below).
\note Quality of the result depends on the quality of triangulation. Changing a value of the deflection coefficient
parameter can strongly affect the result. On the other hand, small values of deflection coefficient might lead to
\note The result quality depends on the quality of triangulation. Changing the value of the deflection coefficient
parameter can strongly affect the result. However, small values of the deflection coefficient might lead to
some performance loss of the algorithm, as number of triangles of the tesselation mesh depends on this parameter.
It is possible to store sub-shapes selected by the user in the study, for the further analysis.
Press <b>Apply and Close</b> or \b Apply button to store the selected sub-shapes in the study for further analysis.
The selection will be published as a compound containing intersected sub-shapes from both source objects.
<b>TUI Command:</b> <em>geompy.FastIntersect(theShape1, theShape2, theTolerance = 0.0, theDeflection = 0.001),</em> \n

View File

@ -5,7 +5,8 @@
\anchor pref_settings <h2>Settings</h2>
In the \b Geometry module you can set preferences for visualization of
geometrical figures, which can be used in later sessions with this module.
geometrical figures, which can be used right now or in later sessions
with this module according to the preferences.
\image html pref15.png
@ -48,16 +49,16 @@ place (in the back) and add the additional wireframe actor in the viewer foregro
<li><b>Shading With Edges</b> - allows to switch display mode to shading with edges mode after
"top-level" operation.</li>
</ul>
<li><b>Transparency</b> - allows to define default transparency value.</li>
<li><b>Deflection coefficient</b> - allows to define default deflection
<li><b>Default transparency</b> - allows to define default transparency value.</li>
<li><b>Default deflection coefficient</b> - allows to define default deflection
coefficient for lines and surfaces. A smaller coefficient provides
better quality of a shape in the viewer.</li>
<li><b>Show predefined materials in popup menu</b> - allows to customize the displaying of popup menu with list of
predefined materials.</li>
<li><b>Default material</b> - allows to define default material.</li>
<li><b>Subshapes color for editing a group</b> - allows to select default color for subshapes in a group.</li>
<li><b>Edges width</b> - allows to define default width of the edges.</li>
<li><b>Isolines width</b> - allows to define default width of the isolines.</li>
<li><b>Default edges width</b> - allows to define default width of the edges.</li>
<li><b>Default 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>Step value for spin boxes</b> - allows to define the increment
@ -82,7 +83,7 @@ of values set in spin boxes.</li>
</ul>
<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:
<li><b>Default number of isolines</b> - allows to specify the default 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
@ -107,26 +108,15 @@ precision for floating-point data.</li>
</ul>
<ul>
<li><b>Marker of Points</b></li>
<li><b>Default marker of points</b></li>
<ul>
<li><b>Type</b> - allows to select the symbol for representation of
<li><b>Type</b> - allows to select the default symbol for representation of
points (cross, asterisk, etc.).</li>
<li><b>Size</b> - allows to define the size of the marker from 1
<li><b>Size</b> - allows to define the default size of the marker from 1
(smallest) to 7 (largest).</li>
</ul>
</ul>
<ul>
<li><b>Origin and base vectors</b></li>
<ul>
<li><b>Length of base vectors</b> - allows to define the length
of base vectors.</li>
<li><b>Auto create</b> - allows to automatically create a point
of origin and three base vectors of the rectangular coordinate
system immediately after the module activation.</li>
</ul>
</ul>
<ul>
<li><b>Scalar bar for field presentation</b></li>
<ul>
@ -139,11 +129,23 @@ system immediately after the module activation.</li>
</ul>
</ul>
<ul>
<li><b>Origin and base vectors</b></li>
<ul>
<li><b>Length of base vectors</b> - allows to define the length
of base vectors.</li>
<li><b>Auto create</b> - allows to automatically create a point
of origin and three base vectors of the rectangular coordinate
system immediately after the module activation.</li>
</ul>
</ul>
<ul>
<li><b>Operations</b></li>
<ul>
<li><b>Preview</b> - allows to customize the displaying preview by default.</li>
<li><b>Hide input objects from the viewer</b> - allows automatic hiding of input
shapes from the 3D viewer (OCC and VTK) in all operations of Geometry module.</li>
</ul>
</ul>

View File

@ -17,7 +17,7 @@ given tolerance value.
\n <b>TUI Command:</b>
<p><em>geompy.MakeGlueEdges( theShapes, theTolerance )</em>,
\n where \em theShapes is either a list or compound of shapes to be
\n where \em theShapes is a list or compound of shapes to be
glued, and \em theTolerance is a maximum distance between two
edges, which can be considered as coincident.
@ -41,12 +41,12 @@ The selected edges will be marked in white.
theTolerance is a maximum distance between two edges, which can
be considered as coincident. The \b Result will be a list of \b
GEOM_Objects (edges), containing one sub-shape per each detected set of
coincident sub-shapes. For example if there are two coincident edges
in selected shapes, the result list contains one of the two coincident edges.
coincident sub-shapes. For example, if there are two coincident edges
in the selected shapes, the result list contains one of the two coincident edges.
<em>geompy.MakeGlueEdgesByList( theShapes, theTolerance, theEdges )</em>,
\n where \em theShape is either a list or compound of shapes to be glued, \em
theTolerance is a maximum distance between two edges, which can
\n where \em theShape is a list or compound of shapes to be glued,
\em theTolerance is a maximum distance between two edges, which can
be considered as coincident, \em theEdges is a list of
edges to be glued.

View File

@ -41,12 +41,12 @@ The selected faces will be marked in white.
When the faces are glued their edges are glued as well. By default, other
edges are not glued. To force gluing of all edges, check <b>Glue all coincident edges</b>
checkbox.
check-box.
\n <b>TUI Commands:</b>
<em>geompy.GetGlueFaces( theShapes, theTolerance )</em>,
\n where \em theShapes is either a list or compound of shapes to be glued, \em
\n where \em theShapes is a list or compound of shapes to be glued, \em
theTolerance is a maximum distance between two faces, which can
be considered as coincident. The \b Result will be a list of \b
GEOM_Objects (faces), containing one sub-shape per each detected set of

View File

@ -12,11 +12,11 @@ In this dialog:
- Click on the "selection" button and select an object to inspect in the Object Browser or in the viewer.
- Show/hide sub-shape(s) in the 3D viewer, by pressing “eye” icon in the first column of the tree view.
- Show/hide all sub-shapes in the 3D viewer, by pressing “eye” icon in the first column of the tree view header.
- Rename selected sub-shape by double-clicking on the item or pressing <F2> key.
- Show selected sub-shape(s) in the 3D viewer by pressing <b>Show Selected</b> button.
- Show selected sub-shape(s) in the 3D viewer and erase all currently shown objects by pressing <b>Show Only Selected</b> button.
- Hide selected sub-shape(s) from the 3D viewer by pressing <b>Hide Selected</b> button.
- Publish selected sub-shapes in the study, by pressing <b>Publish Selected</b> button.
- Rename the selected sub-shape by double-clicking on the item or pressing <F2> key.
- Show the selected sub-shape(s) in the 3D viewer by pressing <b>Show Selected</b> button.
- Show the selected sub-shape(s) in the 3D viewer and erase all currently shown objects by pressing <b>Show Only Selected</b> button.
- Hide the selected sub-shape(s) from the 3D viewer by pressing <b>Hide Selected</b> button.
- Publish the selected sub-shapes in the study, by pressing <b>Publish Selected</b> button.
- Close dialog box, by pressing <b>Close</b> button.
*/

View File

@ -14,12 +14,11 @@ To make a projection it is necessary to define:
- \b Object to be projected. It can be either a planar wire or a face;
- \b Radius of the cylinder;
- <b>Starting angle</b> from the cylinder's X axis around Z axis. This is
the angle of the projection starting.
- <b>Length angle</b> in which to project the total length of
the wire. If it is unchecked the projection is not scaled and natural
the angle of the projection start.
- <b>Length angle</b> where the total length of
the wire should be projected. If it is unchecked the projection is not scaled and the natural
wire length is kept for the projection.
\ref restore_presentation_parameters_page "Advanced options".
- \ref restore_presentation_parameters_page "Advanced options".
\image html proj_on_cyl_dlg.png
@ -29,8 +28,8 @@ wire length is kept for the projection.
\n <b>TUI Command:</b> <em>geompy.MakeProjectionOnCylinder(theObject, theRadius,
theStartAngle=0.0, theAngleLength=-1.0),</em>
where \em theObject is a shape which has to be projected, \em theRadius
is a cylinder radius, \em theStartAngle the starting angle of projection in
where \em theObject is a shape to be projected, \em theRadius
is a cylinder radius, \em theStartAngle is the starting angle of projection in
radians, \em theAngleLength the projection length angle in radians.
The \em Result will be a \em GEOM_Object.

View File

@ -3,18 +3,18 @@
\page sewing_operation_page Sewing
\b Sewing operation allows uniting several faces (possibly contained
in a shell, solid or compound) into one shell while geometrically
in a shell, solid or compound) into one shell. Geometrically
coincident (within a specified tolerance) edges (or parts of edges) of
different faces are replaced by one edge thus producing a shell of
faces with shared boundaries.<p>
This operation is similar to <b>New Entity - > Build - > Shell</b>
operation, the difference is that with \b Sewing you can specify the
tolerance and can get a non-manifold result. <p>
Possibility to create a non-manifold shell can be used e.g. to create a
tolerance and get a non-manifold result. <p>
The possibility to create a non-manifold shell can be used e.g. to create a
shell forming several closed domains and then to create several solids
with shared boundaries from this shell.
\note Geometrically coincident faces (or part of faces) won't be
\note Geometrically coincident faces (or parts of faces) will not be
replaced by one face during \b Sewing.
To produce a \b Sewing operation in the <b>Main Menu</b> select <b>Repair - > Sewing</b>.

View File

@ -56,22 +56,22 @@ merge with neighboring edges.</li>
<li><b>3D Tolerance</b> (DropSmallEdges.Tolerance3d) - defines minimum
possible distance between two parallel edges.</li>
</ul>
<li><b>Drop Small Solids</b> (DropSmallSolids) - either removes small
<li><b>Drop Small Solids</b> (DropSmallSolids) - removes small
solids or merges them with neighboring ones.</li>
<ul>
<li><b>Width factor tol.</b> (DropSmallSolids.WidthFactorThreshold) -
defines maximum value of <em>2V/S</em> of a solid which is
considered small, where \a V is volume and \a S is surface area of
defines the maximum value of <em>2V/S</em> of a solid, which is
considered small, where \a V is the volume and \a S is the surface area of
the solid.</li>
<li><b>Volume tol.</b> (DropSmallSolids.VolumeThreshold) - defines
maximum volume of a solid which is considered small.</li>
the maximum volume of a solid, which is considered small.</li>
<li><b>To merge solids</b> (DropSmallSolids.MergeSolids) - if
activated, small solids are removed, else small solids are merged to
adjacent non-small solids or left untouched if cannot be merged.
adjacent non-small solids or left untouched if they cannot be merged.
</li>
</ul>
If the both tolerances are activated a solid is considered small if
it meets the both criteria.
it meets both criteria.
<li><b>Split Angle</b> (SplitAngle) - splits faces based on conical
surfaces, surfaces of revolution and cylindrical surfaces in segments
using a certain angle.</li>

View File

@ -15,22 +15,22 @@ Shared Shapes.</b> The following dialog box will appear.
In this dialog:
- <b>Name</b> is the base name of the resulting shapes.
- <b>Shapes</b> are the shapes to fing shared sub-shapes of.
- <b>Shapes</b> are the shapes whose shared sub-shapes should be found.
- <b>Sub-shapes Type</b> is the type of required sub-shapes.
- <b>Shared by all</b> option specifies what type of shared sub-shapes should be checked:
- \b On: causes to search sub-shapes from the first input shape shared with all other input shapes;
- \b Off: causes to search sub-shapes shared between couples of input shapes.
- \b On: searches for sub-shapes from the first input shape shared with all other input shapes;
- \b Off: searches for sub-shapes shared between couples of input shapes.
\note For the case when "Shared by all" option is switched off - if an input list of shapes
contains single compound, the sub-shapes shared between all possible couples of its top-level shapes
are searched; otherwise, only sub-shapes that are shared between first input shape and all rest input
shapes are searched.
contains a single compound, the sub-shapes shared between all possible couples of its top-level shapes
are searched for; otherwise, only sub-shapes that are shared between the first input shape and
all other input shapes are searched.
<b>Advanced options:</b> \ref preview_anchor "Preview"
<b>TUI Command:</b> <em> geompy.GetSharedShapesMulti( Shapes, Type ),</em>
<br> where \em Shapes is a list or compound of shapes to fing shared sub-
shapes of and \em Type is the type of required sub-shapes.
<br> where \em Shapes is a list or compound of shapes, whose shared sub-
shapes should be found and \em Type is the type of required sub-shapes.
Our <b>TUI Scripts</b> provide you with useful examples of the use of
Get Shared Shapes functionality:

View File

@ -0,0 +1,83 @@
/*!
\page size_models_range Sizes of Models in Salome
\tableofcontents
In Salome and Open CASCADE Technology (OCCT), which is a modeling core
of Salome %GEOM module, any model has its location in the 3D-space and size.
This document defines the range of values (tolerances, locations
and sizes) that should be taken into account for any 3D model design.
It is not obligatory to create models within this range,
however, algorithms can fail or return unexpected results if the
recommendations are not followed.
\section sec1 Maximal Size of the Model
The Maximal Size of the model corresponds to the maximal diameter of
enclosed sphere built for the model. In OCCT any model has a location defined
relatively to the absolute origin. Thus the maximal diameter should be built
taking into account the model itself and its location.
In OCCT there are two tolerances: Tolerance Confusion (TolC)
and Tolerance Angular (TolA) (see OCCT Precision package for more details).
These values are used for geometric comparisons. However, they are not used inside
low-level algorithms (e.g. intersection), where more precise values are
used instead. The value TolC guarantees that the error associated with
the computations for a given geometric entity is not greater than TolC.
- TolC - precision value used to check the coincidence of two points
[by default 1.e-7];
- TolA - precision value used to check the equality of two angles
[by default 1.e-12].
For more information on tolerance definition please see
<a href="SALOME_BOA_PA.pdf">Chapter 4 of this document</a>. To see limitations
that are due to modeling errors or inaccuracies of tolerance usage please
refer to <a href="SALOME_BOA_PA.pdf">Chapter 9.2.2 of the same document</a>.
To provide robust geometric modeling the computations should be consistent,
i.e. the one tolerance value should be used for all computations. Thus, the
TolC and TolA values should be consistent:
<CENTER><B><PRE>Smax = TolC / TolA (1)</PRE></B></CENTER>
\image html tolerances.png "TolC, TolA and Maximal Size Consistency"
In accordance with <B>(1)</B> the Maximal Size for the Model is [by default]:
<CENTER><B><PRE>Smax = 1.e-7 / 1.e-12 = 1.e+5 (2)</PRE></B></CENTER>
\section sec2 Minimal Size of the Model
The Minimal Size of the Model is defined as the maximal diameter of enclosed
sphere built for the smallest BRep entity of the Model.
All models in OCCT are represented using double precision
floating point numbers. This representation contains approximately 14-16
significant digits.
From the experience, it is considered that the last four significant
digits contain rounding-off errors occurring during the computation. So
(taking into account the worst cases), there are ten reliable significant digits
for double precision floating point numbers. Having the estimation it is
possible to compute the value of the Minimal size of the model:
<CENTER><B><PRE>Smin=Smax / 1.e+10 (3)</PRE></B></CENTER>
In accordance with <B>(2)</B> for the default value it will be [by default]:
<CENTER><B><PRE>Smin=1.e-5. (4)</PRE></B></CENTER>
\section sec3 Full Range of Sizes
The values <B>Smax (2)</B>, <B>Smin (4)</B> are theoretical. Taking into
account the practical purposes of improving the reliability, the lower limit
should be restricted by one order. Thus, the full Range of Sizes of the Models
is:
<CENTER><B><PRE>[Smin, Smax] = [1.e-4, 1.e+5] (5)</PRE></B></CENTER>
*/

View File

@ -21,24 +21,23 @@ In this dialog:
<ul>
<li> <b>Source Shape</b> is an object that is a source of non-topological data.</li>
<li> <b>Destination Shape</b> is a data destination object. </li>
<li> <b>Type of detection operation</b> is the method to search sub-shapes of
<b>Source Shape</b> in <b>Destination Shape</b>. Data are transferred
from these corresponding sub-shapes. This is a combo-box with the following
possible values:
<li> <b>Type of detection operation</b> allows choosing how to search sub-shapes of the
<b>Source Shape</b> in the <b>Destination Shape</b>. The data are transferred
from these corresponding sub-shapes. The following methods are possible:
<ul>
<li><b>Get In Place</b> - current implementation of Get In Place algorithm
<li><b>Get In Place</b> - the current implementation of Get In Place algorithm
(default value).</li>
<li><b>Get In Place (old)</b> - old implementation of Get In Place
<li><b>Get In Place (old)</b> - the old implementation of Get In Place
algorithm.</li>
<li><b>Get In Place By History</b> - Get In Place By History algorithm.</li>
</ul>
</li>
</ul>
To copy data click on \b Apply or <b>Apply and Close</b> button. As the result
it is possible to see how many names and materials are copied as well as
maximum number of names and materials available for copying. This information is
provided on the following message box:
To copy the data click on \b Apply or <b>Apply and Close</b> button.
It is possible to see how many names and materials are copied as well as
the maximum number of names and materials available for copying. This information is
provided in the following message box:
\image html transfer_data2.png "Transfer Data Information"

View File

@ -5,13 +5,13 @@
This operation provides the list of types and quantities of all topological
entities, composing the selected geometrical object.
For the \em COMPOUND or \em COMPSOLID shape, additionally the information about
"flat" content is shown - a number of "simple" top-level shapes enclosed into the compound.
The information about \em COMPOUND or \em COMPSOLID shapes additionally shows
"flat" content - the number of "simple" top-level shapes enclosed into the compound.
\image html measures8.png
\note This dialog supports navigation through the selectable objects (in OCC 3D viewer only):
- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when input focus is
- Scroll mouse wheel with pressed \em Ctrl key or press \em "S", \em "P" keys when the input focus is
in the viewer to navigate between selectable objects.
- Press left mouse button to select an appropriate object to the dialog box.
.

View File

@ -81,24 +81,24 @@ creation of other groups), or skip it by clicking \b Close button.
\n The Result of the operation will be a \b GEOM_Object.
The \b Filter controls allow to automatically pick up entites which satisfy specified
The \b Filter controls allow to automatically pick up entities, which satisfy specified
threshold value(s). The numerical functor for each sub-shape that is compared with
threshold value(s) is computed according to the shape's topological properties:
- length for edges and wires
- area for faces and shells
- volume for solids, compounds, compsolids
- length for edges and wires;
- area for faces and shells;
- volume for solids, compounds, compsolids.
Filtering capabilities are not available for vertices.
In order to filter out some entities:
- Activate one or two filtering controls by switching on corresponding check boxes;
- Select required threshold comparator type; the following choices are available:
- Activate one or two filtering controls by switching on the corresponding check boxes;
- Select the required threshold comparator type; the following choices are available:
- <b>Less Than</b> or <b>Equal or Less Than</b> for the first comparator;
- <b>Greater Than</b> or <b>Equal or Greater Than</b> for the second comparator;
- Enter required threshold value (values);
- Enter the required threshold value (values);
- Press \b Apply button in the \b Filter group.
The entities which satisfy entered filtering parameters will be automatically highlighted
The entities, which satisfy the entered filtering parameters, will be automatically highlighted
in the 3D viewer.
\b Plot button into "Filter" group box provides an access

View File

@ -26,7 +26,10 @@ SALOME_CONFIGURE_FILE(static/header.html.in static/header.html)
ADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE})
INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM)")
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM DESTINATION ${SALOME_INSTALL_DOC}/tui)
INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/GEOM
DESTINATION ${SALOME_INSTALL_DOC}/tui
PATTERN "*.md5" EXCLUDE
PATTERN "*.map" EXCLUDE)
INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/tui/GEOM)
SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES GEOM)

View File

@ -226,6 +226,7 @@ module GEOM
string operationName;
Parameters params;
};
typedef sequence<CreationInformation> CreationInformationSeq;
/*!
* \brief Reporting on shape healing
@ -348,7 +349,7 @@ module GEOM
/*!
* \brief Return name of operation and values of parameters used for object creation
*/
CreationInformation GetCreationInformation();
CreationInformationSeq GetCreationInformation();
};
//# GEOM_Object

View File

@ -1474,70 +1474,16 @@ bool AdvancedEngine_IOperations::MakePipeTShapePartition(Handle(GEOM_Object) the
face_t->GetLastFunction()->SetDescription("");
theShapes.push_back(face_t);
gp_Pnt aP2 = BRep_Tool::Pnt(TopoDS::Vertex(P2->GetValue()));
gp_Pnt aP5 = BRep_Tool::Pnt(TopoDS::Vertex(vi1->GetValue()));
double deltaZ = aP2.Z() - aP5.Z();
// std::cerr << "Creating new point from vi1 with deltaZ = " << deltaZ << std::endl;
Handle(GEOM_Object) P5bis = myTransformOperations->TranslateDXDYDZCopy(vi1, 0, 0, deltaZ);
if (P5bis.IsNull()) {
SetErrorCode("Impossible to translate vertex");
// Create a prism from edge_chan_inc
Handle(GEOM_Object) aPrismDir = myBasicOperations->MakeVectorDXDYDZ(1., 1., 0.);
if (aPrismDir.IsNull()) {
SetErrorCode("Impossible to build Prism direction");
return false;
}
P5bis->GetLastFunction()->SetDescription("");
aPrismDir->GetLastFunction()->SetDescription("");
face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, aPrismDir, theR2 + theW2);
gp_Pnt aP4 = BRep_Tool::Pnt(TopoDS::Vertex(P4->GetValue()));
gp_Pnt aP6 = BRep_Tool::Pnt(TopoDS::Vertex(vi2->GetValue()));
deltaZ = aP4.Z() - aP6.Z();
// std::cerr << "Creating new point from vi2 with deltaZ = " << deltaZ << std::endl;
Handle(GEOM_Object) P6bis = myTransformOperations->TranslateDXDYDZCopy(vi2, 0, 0, deltaZ);
if (P6bis.IsNull()) {
SetErrorCode("Impossible to translate vertex");
return false;
}
P6bis->GetLastFunction()->SetDescription("");
// std::cerr << "Creating new line 1 from 2 previous points" << std::endl;
Handle(GEOM_Object) Cote_3 = myBasicOperations->MakeLineTwoPnt(P5bis, P2);
if (Cote_3.IsNull()) {
SetErrorCode("Impossible to build edge in thickness");
return false;
}
Cote_3->GetLastFunction()->SetDescription("");
// std::cerr << "Creating new line 2 from 2 previous points" << std::endl;
Handle(GEOM_Object) Cote_4 = myBasicOperations->MakeLineTwoPnt(P6bis, P4);
if (Cote_4.IsNull()) {
SetErrorCode("Impossible to build edge in thickness");
return false;
}
Cote_4->GetLastFunction()->SetDescription("");
// std::cerr << "Creating new line 3 from 2 previous points" << std::endl;
Handle(GEOM_Object) Cote_5 = myBasicOperations->MakeLineTwoPnt(P5bis, P6bis);
if (Cote_4.IsNull()) {
SetErrorCode("Impossible to build edge in thickness");
return false;
}
Cote_5->GetLastFunction()->SetDescription("");
//std::list<Handle(GEOM_Object)> edgeList2;
//edgeList2.push_back(edge_chan_inc);
//edgeList2.push_back(Cote_3);
//edgeList2.push_back(Cote_5);
//edgeList2.push_back(Cote_4);
// std::cerr << "Creating wire 2" << std::endl;
//wire_t2 = myShapesOperations->MakeWire(edgeList2, 1e-7);
//if (wire_t2.IsNull()) {
// SetErrorCode("Impossible to build wire");
// return false;
//}
//wire_t2->GetLastFunction()->SetDescription("");
// std::cerr << "Creating face 2" << std::endl;
//face_t2 = myShapesOperations->MakeFace(wire_t2, false);
// Mantis issue 0021682
face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, Cote_4, - (theR2 + theW2));
//face_t2 = my3DPrimOperations->MakePrismVecH(edge_chan_inc, Cote_4, - 2.0*theR2);
if (face_t2.IsNull()) {
SetErrorCode("Impossible to build face");
return false;

View File

@ -129,7 +129,7 @@
</message>
<message>
<source>INTERNAL_FACES</source>
<translation></translation>
<translation></translation>
</message>
</context>
<context>

View File

@ -32,7 +32,7 @@
<name>BREPPlugin_GUI</name>
<message>
<source>BREP_FILES</source>
<translation>BREPファイル</translation>
<translation>BREP ( *.brep )</translation>
</message>
<message>
<source>EXPORT_TITLE</source>

View File

@ -613,9 +613,9 @@ void BasicGUI_PointDlg::SetEditCurrentArgument()
}
send->setDown(true);
if ((send == GroupLineIntersection->PushButton1 ||
send == GroupLineIntersection->PushButton2) && !myBusy)
SelectionIntoArgument();
// if ((send == GroupLineIntersection->PushButton1 ||
// send == GroupLineIntersection->PushButton2) && !myBusy)
// SelectionIntoArgument();
}

View File

@ -95,9 +95,11 @@
// be merged. The edges can be merged if:
// 1. They belong to same faces.
// 2. They either both seam or both not seam on each face.
// 3. They are based on coincident lines, or:
// 4. They are based on coincident circles, or:
// 5. They are based on either Bezier of BSplines.
// 3. There are no another edges (e.g. seam) on each common face
// that are connected to the common vertex of two edges.
// 4. They are based on coincident lines, or:
// 5. They are based on coincident circles, or:
// 6. They are based on either Bezier of BSplines.
//=======================================================================
static Standard_Boolean IsToMerge
(const TopoDS_Edge &theEdge1,
@ -108,7 +110,6 @@ static Standard_Boolean IsToMerge
Standard_Boolean aResult = Standard_False;
Standard_Boolean isDegen1 = BRep_Tool::Degenerated(theEdge1);
Standard_Boolean isDegen2 = BRep_Tool::Degenerated(theEdge2);
Standard_Boolean isCompareGeom = Standard_False;
if (isDegen1 && isDegen2) {
// Both of edges are degenerated.
@ -141,6 +142,44 @@ static Standard_Boolean IsToMerge
Standard_Boolean isSeam2 = BRep_Tool::IsClosed(theEdge2, aFace1);
isSame = (isSeam1 && isSeam2) || (isSeam1 == isSeam2);
if (isSame) {
// Check if there are no other edges (e.g. seam) on this face
// that are connected to the common vertex.
TopoDS_Vertex aVCommon;
if (TopExp::CommonVertex(theEdge1, theEdge2, aVCommon)) {
TopTools_IndexedDataMapOfShapeListOfShape aMapVE;
TopExp::MapShapesAndAncestors
(aFace1, TopAbs_VERTEX, TopAbs_EDGE, aMapVE);
if (aMapVE.Contains(aVCommon)) {
TopTools_ListIteratorOfListOfShape
anItE(aMapVE.FindFromKey(aVCommon));
for (; anItE.More(); anItE.Next()) {
const TopoDS_Shape &anEdge = anItE.Value();
if (!theEdge1.IsSame(anEdge) &&
!theEdge2.IsSame(anEdge)) {
// There is another edge that shares the common vertex.
// Nothing to merge.
isSame = Standard_False;
break;
}
}
} else {
// Common vertex doesn't belong to the face.
// Nothing to merge. NEVERREACHED.
isSame = Standard_False;
}
} else {
// No common vertex. Nothing to merge. NEVERREACHED.
isSame = Standard_False;
}
}
break;
}
}

View File

@ -582,7 +582,7 @@ void CurveCreator_Utils::setSelectedPoints( Handle(AIS_InteractiveContext) theCo
for( aSelection->Init(); aSelection->More(); aSelection->Next() )
{
#if OCC_VERSION_LARGE > 0x06080100
const SelectMgr_HSensitiveEntity aHSenEntity = aSelection->Sensitive();
const Handle(SelectMgr_SensitiveEntity) aHSenEntity = aSelection->Sensitive();
if( aHSenEntity.IsNull() )
continue;
Handle_SelectBasics_SensitiveEntity aSenEntity = aHSenEntity->BaseSensitive();

View File

@ -31,16 +31,14 @@
<source>UPDATE</source>
<translation>Mise à jour</translation>
</message>
</context>
<context>
<name>DependencyTree_ViewModel</name>
<message>
<source>MEN_REBUILD_THE_TREE</source>
<translation type="unfinished">Rebuild the tree</translation>
<translation>Reconstruire l'arbre</translation>
</message>
<message>
<source>MEN_REDUCE_STUDY</source>
<translation type="unfinished">Reduce study</translation>
<translation>Réduire l'étude</translation>
</message>
</context>
</TS>

View File

@ -5,40 +5,40 @@
<name>DependencyTree_View</name>
<message>
<source>DEPENDENCY_TREE</source>
<translation type="unfinished">Dependency Tree</translation>
<translation></translation>
</message>
<message>
<source>MOVE_NODES</source>
<translation type="unfinished">Move nodes</translation>
<translation></translation>
</message>
<message>
<source>HIERARCHY_DEPTH</source>
<translation type="unfinished">Hierarchy depth </translation>
<translation></translation>
</message>
<message>
<source>DISPLAY_ASCENDANTS</source>
<translation type="unfinished">Display ascendants</translation>
<translation></translation>
</message>
<message>
<source>DISPLAY_DESCENDANTS</source>
<translation type="unfinished">Display descendants</translation>
<translation></translation>
</message>
<message>
<source>SHOW_ALL</source>
<translation type="unfinished">Show all</translation>
<translation></translation>
</message>
<message>
<source>UPDATE</source>
<translation type="unfinished">Update</translation>
<translation></translation>
</message>
<name>DependencyTree_ViewModel</name>
<message>
<source>MEN_REBUILD_THE_TREE</source>
<translation type="unfinished">Rebuild the tree</translation>
<translation></translation>
</message>
<message>
<source>MEN_REDUCE_STUDY</source>
<translation type="unfinished">Reduce study</translation>
<translation></translation>
</message>
</context>
</TS>

View File

@ -26,7 +26,8 @@
// SALOME includes
#include "EntityGUI_FeatureDetectorDlg.h"
#include <ShapeRec_FeatureDetector.hxx>
#include "ShapeRec_FeatureDetector.hxx"
#include "GEOM_Constants.h"
#include <OCCViewer_ViewWindow.h>
#include <OCCViewer_ViewManager.h>
@ -399,7 +400,6 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
// TODO supprimer les lignes qui ne servent à rien le cas échéant
SUIT_ViewWindow* theViewWindow = getDesktop()->activeWindow();
std::map< std::string , std::vector<Handle(AIS_InteractiveObject)> >::iterator AISit;
SOCC_Viewer* soccViewer = (SOCC_Viewer*)(theViewWindow->getViewManager()->getViewModel());
if (!myEditCurrentArgument->isEnabled())
@ -433,24 +433,20 @@ void EntityGUI_FeatureDetectorDlg::SelectionIntoArgument()
if ( myEditCurrentArgument == mySelectionGroup->LineEdit1 ) {
myFace = aSelectedObject;
AISit = soccViewer->entry2aisobjects.find(myFaceEntry.toStdString());
if (AISit == soccViewer->entry2aisobjects.end())
SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( SUIT_Session::session()->activeApplication()->activeStudy() );
if ( !study ) return;
LightApp_Application* app = ::qobject_cast<LightApp_Application*>( study->application() );
if ( !app ) return;
SUIT_ViewManager* vm = app->activeViewManager();
if ( !vm ) return;
PropMap propMap = study->getObjectProperties( vm->getGlobalId(), myFaceEntry );
QString theImgFileName = propMap.value( GEOM::propertyName( GEOM::Texture ) ).toString();
if ( theImgFileName.isEmpty() )
return;
Handle(AIS_InteractiveObject) myAIS = (*AISit).second[0];
Handle(GEOM_AISShape) myAISShape;
if( myAIS->IsInstance( STANDARD_TYPE(GEOM_AISShape) ) ) {
myAISShape = Handle(GEOM_AISShape)::DownCast( myAIS );
}
else
return ;
std::string theImgFileName = myAISShape->TextureFile();
if ( theImgFileName == "" )
return ;
// Setting the image caracteristics
myDetector->SetPath( theImgFileName );
myDetector->SetPath( theImgFileName.toStdString() );
height = myDetector->GetImgHeight();
width = myDetector->GetImgWidth();
pictureLeft = -0.5 * width; // X coordinate of the top left corner of the background image in the view

View File

@ -188,9 +188,9 @@ bool EntityGUI_PictureImportDlg::execute( ObjectList& objects )
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 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 P4 = aBasicOperations->MakePointXYZ( -0.5*width, 0.5*height, 0 );
GEOM::GEOM_Object_var aFace = aBlocksOperations->MakeQuad4Vertices(P1,P2,P3,P4);
getDisplayer()->SetDisplayMode(3);

View File

@ -162,6 +162,7 @@ EntityGUI_PolylineDlg::EntityGUI_PolylineDlg
EntityGUI_PolylineDlg::~EntityGUI_PolylineDlg()
{
erasePreview();
myEditorWidget->SetViewer2DMode(false);
}
//=================================================================================
@ -381,16 +382,6 @@ bool EntityGUI_PolylineDlg::ClickOnApply()
return true;
}
//=================================================================================
// function : ClickOnCancel()
// purpose :
//=================================================================================
void EntityGUI_PolylineDlg::ClickOnCancel()
{
myEditorWidget->SetViewer2DMode(false);
GEOMBase_Skeleton::ClickOnCancel();
}
//=================================================================================
// function : processStartedSubOperation
// purpose :

View File

@ -152,7 +152,6 @@ protected slots:
void ClickOnOk();
bool ClickOnApply();
void ClickOnCancel();
void processStartedSubOperation( QWidget*, bool );
void processFinishedSubOperation( QWidget* );
void SetEditCurrentArgument( bool );

View File

@ -632,15 +632,14 @@ void EntityGUI_SketcherDlg::RectClicked()
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
GroupRect->show();
myX1=0;
myX2=10;
myY1=0;
myY2=10;
GroupRect->SpinBox_DX1->setValue(myX1);
myY1=0;
GroupRect->SpinBox_DY1->setValue(myY1);
myX2=10;
GroupRect->SpinBox_DX2->setValue(myX2);
myY2=10;
GroupRect->SpinBox_DY2->setValue(myY2);
resize( minimumSizeHint() );

View File

@ -493,18 +493,17 @@ Handle(TColStd_HSequenceOfTransient) GEOM_BaseObject::GetLastDependency()
*/
//================================================================================
Handle(TFunction_Driver) GEOM_BaseObject::GetCreationDriver()
Handle(TFunction_Driver) GEOM_BaseObject::GetCreationDriver(int funNb)
{
Handle(TFunction_Driver) aDriver;
Handle(GEOM_Function) function = GetFunction(1);
Handle(TFunction_Driver) driver;
Handle(GEOM_Function) function = GetFunction(funNb);
if ( !function.IsNull() )
{
Standard_GUID aGUID = function->GetDriverGUID();
if ( TFunction_DriverTable::Get()->FindDriver(aGUID, aDriver))
aDriver->Init( function->GetEntry() );
if ( TFunction_DriverTable::Get()->FindDriver(aGUID, driver ))
driver->Init( function->GetEntry() );
}
return aDriver;
return driver;
}
//=============================================================================

View File

@ -31,6 +31,8 @@
#include <TDF_Label.hxx>
#include <TDataStd_TreeNode.hxx>
#include <vector>
class GEOM_BaseObject;
class Handle(TFunction_Driver);
class GEOM_Engine;
@ -146,8 +148,8 @@ public:
//Returns the dependencies of the last function
Standard_EXPORT Handle(TColStd_HSequenceOfTransient) GetLastDependency();
//Returns a driver creator of this object
Standard_EXPORT Handle(TFunction_Driver) GetCreationDriver();
//Returns drivers creators of this object
Standard_EXPORT Handle(TFunction_Driver) GetCreationDriver(int funNb);
//###########################################################
// Internal methods

View File

@ -222,6 +222,19 @@ Standard_Integer GEOMAlgo_AlgoTools::BuildPCurveForEdgeOnFace
return iRet;
}
//
#if OCC_VERSION_LARGE > 0x06080000
// Try to copy PCurve from old edge to the new one.
iRet = BOPTools_AlgoTools2D::AttachExistingPCurve(aEold, aEnew, aF, aCtx);
if (iRet) {
// Do PCurve using projection algorithm.
iRet = 0;
} else {
// The PCurve is attached successfully.
return iRet;
}
#endif
//
BOPTools_AlgoTools2D::BuildPCurveForEdgeOnFace(aEnew, aF);
aC2D=BRep_Tool::CurveOnSurface(aEnew, aF, aT1, aT2);
if (aC2D.IsNull()){

View File

@ -126,93 +126,75 @@ Standard_Integer GEOMAlgo_GetInPlaceAPI::GetInPlaceOld
return 1;
}
TopoDS_Shape aPntShape;
TopoDS_Vertex aVertex;
bool isFound = false;
TopAbs_ShapeEnum iType = TopAbs_SOLID;
//Standard_Real aWhat_Mass = 0., aWhere_Mass = 0.;
Standard_Real tab_aWhat[4], tab_aWhere[4];
Standard_Real dl_l = 1e-3;
Standard_Real min_l, Tol_0D, Tol_1D, Tol_2D, Tol_3D, Tol_Mass;
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
Bnd_Box BoundingBox;
gp_Pnt aPnt, aPnt_aWhat, tab_Pnt[2];
GProp_GProps aProps;
// Check shape type.
TopAbs_ShapeEnum iType = GEOMUtils::GetTypeOfSimplePart(theWhat);
iType = GEOMUtils::GetTypeOfSimplePart(theWhat);
if (iType == TopAbs_SHAPE) {
// Error: An attempt to extract a shape of not supported type.
return 2;
}
TopExp_Explorer Exp_aWhat ( theWhat, iType );
TopExp_Explorer Exp_aWhere ( theWhere, iType );
TopExp_Explorer Exp_Edge ( theWhere, TopAbs_EDGE );
// Compute confusion tolerance.
Standard_Real aTolConf = Precision::Confusion();
Standard_Integer i;
// Find the shortest edge in theShapeWhere shape
BRepBndLib::Add(theWhere, BoundingBox);
BoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
min_l = fabs(aXmax - aXmin);
if( min_l < fabs(aYmax - aYmin) ) min_l = fabs(aYmax - aYmin);
if( min_l < fabs(aZmax - aZmin) ) min_l = fabs(aZmax - aZmin);
min_l /= dl_l;
// Mantis issue 0020908 BEGIN
if (!Exp_Edge.More()) {
min_l = Precision::Confusion();
}
// Mantis issue 0020908 END
for ( Standard_Integer nbEdge = 0; Exp_Edge.More(); Exp_Edge.Next(), nbEdge++ ) {
TopExp_Explorer Exp_Vertex( Exp_Edge.Current(), TopAbs_VERTEX);
for ( Standard_Integer nbVertex = 0; Exp_Vertex.More(); Exp_Vertex.Next(), nbVertex++ ) {
aPnt = BRep_Tool::Pnt( TopoDS::Vertex( Exp_Vertex.Current() ) );
tab_Pnt[nbVertex] = aPnt;
}
if ( ! tab_Pnt[0].IsEqual(tab_Pnt[1], dl_l) ) {
BRepGProp::LinearProperties(Exp_Edge.Current(), aProps);
if ( aProps.Mass() < min_l ) min_l = aProps.Mass();
for (i = 0; i < 2; ++i) {
TopExp_Explorer anExp(i == 0 ? theWhere : theWhat, TopAbs_VERTEX);
for (; anExp.More(); anExp.Next()) {
const TopoDS_Vertex aVtx = TopoDS::Vertex(anExp.Current());
const Standard_Real aTolVtx = BRep_Tool::Tolerance(aVtx);
if (aTolVtx > aTolConf) {
aTolConf = aTolVtx;
}
}
}
// Compute tolerances
Tol_0D = dl_l;
Tol_1D = dl_l * min_l;
Tol_2D = dl_l * ( min_l * min_l) * ( 2. + dl_l);
Tol_3D = dl_l * ( min_l * min_l * min_l ) * ( 3. + (3 * dl_l) + (dl_l * dl_l) );
// Compute mass tolerance.
Bnd_Box aBoundingBox;
Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
Standard_Real aMassTol;
if (Tol_0D < Precision::Confusion()) Tol_0D = Precision::Confusion();
if (Tol_1D < Precision::Confusion()) Tol_1D = Precision::Confusion();
if (Tol_2D < Precision::Confusion()) Tol_2D = Precision::Confusion();
if (Tol_3D < Precision::Confusion()) Tol_3D = Precision::Confusion();
BRepBndLib::Add(theWhere, aBoundingBox);
BRepBndLib::Add(theWhat, aBoundingBox);
aBoundingBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
aMassTol = Max(aXmax - aXmin, aYmax - aYmin);
aMassTol = Max(aMassTol, aZmax - aZmin);
aMassTol *= aTolConf;
Tol_Mass = Tol_3D;
if ( iType == TopAbs_VERTEX ) Tol_Mass = Tol_0D;
else if ( iType == TopAbs_EDGE ) Tol_Mass = Tol_1D;
else if ( iType == TopAbs_FACE ) Tol_Mass = Tol_2D;
// Searching for the sub-shapes inside the ShapeWhere shape
// Compute the result.
TopExp_Explorer Exp_aWhat (theWhat, iType);
TopExp_Explorer Exp_aWhere (theWhere, iType);
Standard_Real tab_aWhat[4], tab_aWhere[4];
gp_Pnt aPnt, aPnt_aWhat;
TopoDS_Shape aPntShape;
TopoDS_Vertex aVertex;
bool isFound = false;
TopTools_MapOfShape map_aWhere;
for ( Exp_aWhere.ReInit(); Exp_aWhere.More(); Exp_aWhere.Next() ) {
for (; Exp_aWhere.More(); Exp_aWhere.Next()) {
if (!map_aWhere.Add(Exp_aWhere.Current()))
continue; // skip repeated shape to avoid mass addition
GetShapeProperties( Exp_aWhere.Current(), tab_aWhere, aPnt );
for ( Exp_aWhat.ReInit(); Exp_aWhat.More(); Exp_aWhat.Next() ) {
GetShapeProperties( Exp_aWhat.Current(), tab_aWhat, aPnt_aWhat );
if ( fabs(tab_aWhat[3] - tab_aWhere[3]) <= Tol_Mass && aPnt_aWhat.Distance(aPnt) <= Tol_1D )
if (fabs(tab_aWhat[3] - tab_aWhere[3]) <= aMassTol && aPnt_aWhat.Distance(aPnt) <= aTolConf)
isFound = true;
else {
if ( (tab_aWhat[3] - tab_aWhere[3]) > Tol_Mass ) {
if ((tab_aWhat[3] - tab_aWhere[3]) > aMassTol) {
aPntShape = BRepBuilderAPI_MakeVertex( aPnt ).Shape();
aVertex = TopoDS::Vertex( aPntShape );
BRepExtrema_DistShapeShape aWhereDistance ( aVertex, Exp_aWhere.Current() );
BRepExtrema_DistShapeShape aWhatDistance ( aVertex, Exp_aWhat.Current() );
if ( aWhereDistance.IsDone() && aWhatDistance.IsDone() &&
fabs(aWhereDistance.Value() - aWhatDistance.Value()) <= Tol_1D )
if (aWhereDistance.IsDone() && aWhatDistance.IsDone() &&
fabs(aWhereDistance.Value() - aWhatDistance.Value()) <= aTolConf)
{
// 0020162: "EDF 961 GEOM : Getinplace is getting additionnal orthogonal faces"
// aVertex must be projected to the same point on Where and on What
gp_Pnt pOnWhat = aWhatDistance.PointOnShape2(1);
gp_Pnt pOnWhere = aWhereDistance.PointOnShape2(1);
isFound = ( pOnWhat.Distance(pOnWhere) <= Tol_1D );
isFound = (pOnWhat.Distance(pOnWhere) <= aTolConf);
if ( isFound && iType == TopAbs_FACE )
{
// check normals at pOnWhat and pOnWhere

View File

@ -424,19 +424,18 @@ void GEOMAlgo_ShapeInfoFiller::FillDetails(const TopoDS_Face& aF,
aPx[i]=aInfoEx.Location();
}
//
Standard_Boolean isRectangle = Standard_True;
for (i=0; i<4; ++i) {
j=(i==3) ? 0 : i+1;
aDot=aDx[i]*aDx[j];
if (fabs (aDot) > myTolerance) {
aInfo.SetKindOfName(GEOMAlgo_KN_QUADRANGLE);
return;
isRectangle = Standard_False;
break;
}
}
//
// rectangle
aInfo.SetKindOfName(GEOMAlgo_KN_RECTANGLE);
//
// shift location to the center and calc. sizes
// shift location to the center
aXYZc.SetCoord(0.,0.,0.);
TopExp::MapShapes(aF, TopAbs_VERTEX, aMV);
for (i=1; i<=aNbV; ++i) {
@ -448,33 +447,41 @@ void GEOMAlgo_ShapeInfoFiller::FillDetails(const TopoDS_Face& aF,
//
// Location : aPc in center of rectangle
// Position : 0z is plane normal
// 0x is along length
// 0x is along the first edge (quadrangle) or
// along length (rectangle)
//
aXYZc.Divide(4.);
aPc.SetXYZ(aXYZc);
//
gp_Lin aL0(aPx[0], aDx[0]);
gp_Lin aL1(aPx[1], aDx[1]);
//
aD0=aL0.Distance(aPc);
aD1=aL1.Distance(aPc);
//
aLength=aD0;
aWidth =aD1;
aDX=aL1.Direction();
if (aD0<aD1) {
aDX=aDx[0];
aInfo.SetLocation(aPc);
if (isRectangle) {
// Calculate sizes
gp_Lin aL0(aPx[0], aDx[0]);
gp_Lin aL1(aPx[1], aDx[1]);
//
aD0=aL0.Distance(aPc);
aD1=aL1.Distance(aPc);
//
aLength=aD1;
aWidth =aD0;
aDX=aL0.Direction();
if (aD0>aD1) {
aLength=aD0;
aWidth =aD1;
aDX=aDx[1];
}
//
aLength=2.*aLength;
aWidth =2.*aWidth;
//
aInfo.SetLength(aLength);
aInfo.SetWidth(aWidth);
aInfo.SetKindOfName(GEOMAlgo_KN_RECTANGLE);
} else {
aInfo.SetKindOfName(GEOMAlgo_KN_QUADRANGLE);
}
//
aLength=2.*aLength;
aWidth =2.*aWidth;
//
aInfo.SetLocation(aPc);
aInfo.SetLength(aLength);
aInfo.SetWidth(aWidth);
//
const gp_Dir& aDZ=aPln.Axis().Direction();
gp_Ax2 aAx2(aPc, aDZ, aDX);
gp_Ax3 aAx3(aAx2);

View File

@ -21,9 +21,13 @@
// Author : Edward AGAPOV (eap)
#include "GEOMGUI_CreationInfoWdg.h"
#include "GEOMImpl_Types.hxx"
#include <SalomeApp_Application.h>
#include <SUIT_Desktop.h>
#include <SUIT_ResourceMgr.h>
#include <SUIT_Session.h>
#include <SalomeApp_Application.h>
#include <QString>
#include <QLabel>
@ -38,33 +42,16 @@ GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app )
//:QWidget( app->desktop() )
{
setWindowTitle( tr( "CREATION_INFO_TITLE" ) );
setObjectName( "geomCreationInformation" );
QFrame* frame = new QFrame( this );
QVBoxLayout* myLayout = new QVBoxLayout( this );
myLayout->addWidget( frame );
myLayout->setMargin(0);
QGroupBox* operationGB = new QGroupBox( tr( "OPERATION" ), frame );
myIconLbl = new QLabel( operationGB );
myOperaionLnEd = new QLineEdit( operationGB );
myOperaionLnEd->setReadOnly( true );
myParamsTreeWd = new QTreeWidget( frame );
myParamsTreeWd = new QTreeWidget( this );
myParamsTreeWd->setColumnCount( 2 );
myParamsTreeWd->setHeaderLabels( QStringList() << tr( "PARAMETER" ) << tr( "VALUE" ) );
myParamsTreeWd->header()->setStretchLastSection( true );
myParamsTreeWd->header()->setResizeMode( 0, QHeaderView::ResizeToContents );
QHBoxLayout* operationLay = new QHBoxLayout( operationGB );
operationLay->addWidget( myIconLbl );
operationLay->addWidget( myOperaionLnEd );
operationLay->setMargin(5);
QVBoxLayout* aLayout = new QVBoxLayout( frame );
aLayout->addWidget( operationGB );
QVBoxLayout* aLayout = new QVBoxLayout( this );
aLayout->addWidget( myParamsTreeWd );
aLayout->setMargin(11);
// get a free dockable window id
myWindowID = 10;
@ -73,19 +60,26 @@ GEOMGUI_CreationInfoWdg::GEOMGUI_CreationInfoWdg( SalomeApp_Application* app )
++myWindowID; // pb when a GEOM is a sole module: CreationInfoWdg replaces Python console
}
void GEOMGUI_CreationInfoWdg::setOperation(const QPixmap& icon, const QString& name)
{
myIconLbl->setPixmap( icon );
myOperaionLnEd->setText( name );
if ( name.isEmpty() )
myOperaionLnEd->setText( tr("NO_INFO"));
}
void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& value)
QTreeWidgetItem* GEOMGUI_CreationInfoWdg::addOperation(const QPixmap& icon, const QString& name)
{
QTreeWidgetItem* item = new QTreeWidgetItem( myParamsTreeWd );
item->setIcon( 0, icon );
item->setText( 0, name );
if ( name.isEmpty() )
item->setText( 0, tr("NO_INFO"));
item->setExpanded( true );
return item;
}
void GEOMGUI_CreationInfoWdg::addParam (QTreeWidgetItem* operation,
const QString& name,
const QString& value)
{
QTreeWidgetItem* item = new QTreeWidgetItem( operation );
//item->setFlags( Qt::NoItemFlags );
item->setExpanded( true );
@ -95,8 +89,6 @@ void GEOMGUI_CreationInfoWdg::addParam (const QString& name, const QString& valu
void GEOMGUI_CreationInfoWdg::clear()
{
myIconLbl->setPixmap( QPixmap() );
myOperaionLnEd->setText( "" );
myParamsTreeWd->clear();
}
@ -104,3 +96,57 @@ GEOMGUI_CreationInfoWdg::~GEOMGUI_CreationInfoWdg()
{
//std::cout<<"~GEOMGUI_CreationInfoWdg"<<std::endl;
}
void GEOMGUI_CreationInfoWdg::setInfo( GEOM::CreationInformationSeq& info )
{
clear();
QPixmap icon;
QString operationName;
try
{
if ( &info && info.length() > 0 )
{
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
for ( int j = 0, nb = info.length(); j < nb; ++j )
{
QString name = info[j].operationName.in();
if ( !name.isEmpty() )
{
// get plugin_name if any
QString plugin_name;
for ( size_t i = 0; i < info[j].params.length(); ++i )
{
QString value = info[j].params[i].name.in();
if ( value == PLUGIN_NAME )
plugin_name = info[j].params[i].value.in();
}
// get icon
QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
// translate operation name
operationName = tr( ("MEN_"+name).toLatin1().constData() );
if ( operationName.startsWith( "MEN_" ))
operationName = name; // no translation
QTreeWidgetItem* operation = addOperation( icon, operationName );
// add parameters
for ( size_t i = 0; i < info[j].params.length(); ++i )
addParam( operation,
info[j].params[i].name.in(),
info[j].params[i].value.in() );
}
}
}
else
{
addOperation( icon, operationName );
}
}
catch (...)
{
}
}

View File

@ -22,12 +22,16 @@
#include "GEOM_GEOMGUI.hxx"
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(GEOM_Gen)
#include <QWidget>
class QString;
class QLabel;
class QLineEdit;
class QString;
class QTreeWidget;
class QTreeWidgetItem;
class SalomeApp_Application;
/*!
@ -46,16 +50,18 @@ class GEOMGUI_EXPORT GEOMGUI_CreationInfoWdg : public QWidget
GEOMGUI_CreationInfoWdg( SalomeApp_Application* app );
~GEOMGUI_CreationInfoWdg();
int getWinID() { return myWindowID; }
void setInfo( GEOM::CreationInformationSeq& info );
void clear();
void setOperation(const QPixmap& icon, const QString& name);
void addParam (const QString& name, const QString& value);
int getWinID() { return myWindowID; }
private:
QLabel* myIconLbl;
QLineEdit* myOperaionLnEd;
QTreeWidgetItem* addOperation(const QPixmap& icon, const QString& name);
void addParam (QTreeWidgetItem* operation, const QString& name, const QString& value);
QLabel* myIconLbl;
//QLineEdit* myOperaionLnEd;
QTreeWidget* myParamsTreeWd;
int myWindowID;

View File

@ -179,7 +179,7 @@ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj,
for ( sel->Init(); sel->More(); sel->Next() ) {
#if OCC_VERSION_LARGE > 0x06080100
const SelectMgr_HSensitiveEntity aHSenEntity = sel->Sensitive();
const Handle(SelectMgr_SensitiveEntity) aHSenEntity = sel->Sensitive();
if( aHSenEntity.IsNull() )
continue;

View File

@ -541,7 +541,7 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>GEOM_CYLINDER_ANGLE_ERR</source>
<translation>Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the "Angle" box to use the regular cylinder constructor.</translation>
<translation>Angle values 0 and 360 are unsafe to build proper volumes. Please uncheck the &quot;Angle&quot; box to use the regular cylinder constructor.</translation>
</message>
<message>
<source>GEOM_D1</source>
@ -2477,12 +2477,12 @@ Please, select face, shell or solid and try again</translation>
<translation>2D Polyline</translation>
</message>
<message>
<source>TOP_CURVE_CREATOR</source>
<translation>Create 2D polyline</translation>
<source>TOP_CURVE_CREATOR</source>
<translation>Create 2D polyline</translation>
</message>
<message>
<source>STB_CURVE_CREATOR</source>
<translation>Create 2D polyline</translation>
<source>STB_CURVE_CREATOR</source>
<translation>Create 2D polyline</translation>
</message>
<message>
<source>MEN_ALL_SEL_ONLY</source>
@ -3270,7 +3270,7 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>PREF_DEFLECTION</source>
<translation>Deflection coefficient</translation>
<translation>Default deflection coefficient</translation>
</message>
<message>
<source>GEOM_PREF_def_precision</source>
@ -3318,7 +3318,7 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>PREF_TRANSPARENCY</source>
<translation>Transparency</translation>
<translation>Default transparency</translation>
</message>
<message>
<source>PREF_FREE_BOUND_COLOR</source>
@ -3342,7 +3342,7 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>PREF_GROUP_VERTEX</source>
<translation>Marker of Points</translation>
<translation>Default marker of points</translation>
</message>
<message>
<source>PREF_ISOS_COLOR</source>
@ -3422,11 +3422,11 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>PREF_EDGE_WIDTH</source>
<translation>Edges width</translation>
<translation>Default edges width</translation>
</message>
<message>
<source>PREF_ISOLINES_WIDTH</source>
<translation>Iso lines width</translation>
<translation>Default isolines width</translation>
</message>
<message>
<source>PREF_PREVIEW_EDGE_WIDTH</source>
@ -3486,7 +3486,7 @@ Please, select face, shell or solid and try again</translation>
</message>
<message>
<source>PREF_ISOS</source>
<translation>Number of isolines</translation>
<translation>Default number of isolines</translation>
</message>
<message>
<source>PREF_ISOS_U</source>
@ -5759,23 +5759,23 @@ shells and solids on the other hand.</translation>
</message>
</context>
<context>
<name>CurveCreator_TableView</name>
<message>
<source>TABLE_SECTION</source>
<translation>Section</translation>
</message>
<message>
<source>TABLE_INDEX</source>
<translation>Index</translation>
</message>
<message>
<source>TABLE_X</source>
<translation>X</translation>
</message>
<message>
<source>TABLE_Y</source>
<translation>Y</translation>
</message>
<name>CurveCreator_TableView</name>
<message>
<source>TABLE_SECTION</source>
<translation>Section</translation>
</message>
<message>
<source>TABLE_INDEX</source>
<translation>Index</translation>
</message>
<message>
<source>TABLE_X</source>
<translation>X</translation>
</message>
<message>
<source>TABLE_Y</source>
<translation>Y</translation>
</message>
</context>
<context>
<name>CurveCreator_Widget</name>
@ -7199,7 +7199,7 @@ Do you want to create new material?</translation>
<translation>Main shape</translation>
</message>
<message>
<source>GEOM_INSPECT_OBJECT_SHOW</source>
<source>GEOM_INSPECT_OBJECT_SHOW</source>
<translation>Show Selected</translation>
</message>
<message>
@ -7322,22 +7322,22 @@ Do you want to create new material?</translation>
<source>GEOM_CHECK_INTE_V_E</source>
<translation>Vertex to Edge + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_E</source>
<translation>Edge to Edge + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_V_F</source>
<translation>Vertex to Face + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_F</source>
<translation>Edge to Face + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_ALL</source>
<translation>Face to Face + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_E</source>
<translation>Edge to Edge + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_V_F</source>
<translation>Vertex to Face + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_F</source>
<translation>Edge to Face + all above</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_ALL</source>
<translation>Face to Face + all above</translation>
</message>
</context>
<context>
<name>MeasureGUI_FastCheckIntersectionsDlg</name>
@ -7549,16 +7549,16 @@ Do you want to create new material?</translation>
<context>
<name>TransformationGUI_ProjectionOnCylDlg</name>
<message>
<source>GEOM_PROJ_ON_CYL_TITLE</source>
<translation>Projection On A Cylinder</translation>
<source>GEOM_PROJ_ON_CYL_TITLE</source>
<translation>Projection On A Cylinder</translation>
</message>
<message>
<source>GEOM_PROJ_ON_CYL_START_ANGLE</source>
<translation>Starting angle</translation>
<source>GEOM_PROJ_ON_CYL_START_ANGLE</source>
<translation>Starting angle</translation>
</message>
<message>
<source>GEOM_PROJ_ON_CYL_LENGTH_ANGLE</source>
<translation>Length angle</translation>
<source>GEOM_PROJ_ON_CYL_LENGTH_ANGLE</source>
<translation>Length angle</translation>
</message>
</context>
</TS>

View File

@ -679,6 +679,18 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>GEOM_EXTRUSION_TITLE</source>
<translation>Construction par extrusion</translation>
</message>
<message>
<source>GEOM_THICKNESS_TITLE</source>
<translation>Epaississement</translation>
</message>
<message>
<source>GEOM_THICKNESS_NAME</source>
<translation>Epaississement</translation>
</message>
<message>
<source>GEOM_TOWARDS_INSIDE</source>
<translation>Epaissit vers l'intérieur</translation>
</message>
<message>
<source>GEOM_SCALE_PRISM</source>
<translation>Appliquer le facteur d&apos;échelle</translation>
@ -1252,6 +1264,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>GEOM_PROJECTION_TITLE</source>
<translation>Projection sur une face</translation>
</message>
<message>
<source>GEOM_PROJECTION_NAME</source>
<translation>Projection</translation>
</message>
<message>
<source>GEOM_PROJ_ON_FACE_SOURCE</source>
<translation>Point, arête ou contour source</translation>
@ -1400,6 +1416,14 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>GEOM_SELECT_UNPUBLISHED_EDGES</source>
<translation>Choisir les arêtes non-publiées</translation>
</message>
<message>
<source>GEOM_GENERATE_GROUPS</source>
<translation>Générer les groupes</translation>
</message>
<message>
<source>GEOM_GROUP_NAME_PREFIX</source>
<translation>Préfixe des groupes</translation>
</message>
<message>
<source>GEOM_PLANE</source>
<translation>Plan</translation>
@ -2408,6 +2432,26 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>WRN_NULL_OBJECT_OR_SHAPE</source>
<translation>La forme %1 pour la création d&apos;un solide est invalide</translation>
</message>
<message>
<source>GROUP_DOWN</source>
<translation>Bas</translation>
</message>
<message>
<source>GROUP_UP</source>
<translation>Haut</translation>
</message>
<message>
<source>GROUP_SIDE1</source>
<translation>Gauche</translation>
</message>
<message>
<source>GROUP_SIDE2</source>
<translation>Droite</translation>
</message>
<message>
<source>GROUP_OTHER</source>
<translation>Autre</translation>
</message>
<message>
<source>GEOM_X</source>
<translation>X :</translation>
@ -2433,12 +2477,12 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<translation>Créateur de courbe</translation>
</message>
<message>
<source>TOP_CURVE_CREATOR</source>
<translation>Créer une courbe</translation>
<source>TOP_CURVE_CREATOR</source>
<translation>Créer une courbe</translation>
</message>
<message>
<source>STB_CURVE_CREATOR</source>
<translation>Créer une courbe</translation>
<source>STB_CURVE_CREATOR</source>
<translation>Créer une courbe</translation>
</message>
<message>
<source>MEN_ALL_SEL_ONLY</source>
@ -2840,6 +2884,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>MEN_PROJECTION</source>
<translation>Projection</translation>
</message>
<message>
<source>MEN_PROJ_ON_CYL</source>
<translation>Projection sur un cylindre</translation>
</message>
<message>
<source>MEN_OPERATIONS</source>
<translation>Opérations</translation>
@ -2860,6 +2908,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>MEN_PIPE_PATH</source>
<translation>Retrouver le chemin</translation>
</message>
<message>
<source>MEN_THICKNESS</source>
<translation>Epaisseur</translation>
</message>
<message>
<source>MEN_PLANE</source>
<translation>Plan</translation>
@ -3218,7 +3270,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_DEFLECTION</source>
<translation>Coefficient de déformation</translation>
<translation>Coefficient de déformation par défaut</translation>
</message>
<message>
<source>GEOM_PREF_def_precision</source>
@ -3266,7 +3318,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_TRANSPARENCY</source>
<translation>Transparence</translation>
<translation>Transparence par défaut</translation>
</message>
<message>
<source>PREF_FREE_BOUND_COLOR</source>
@ -3290,7 +3342,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_GROUP_VERTEX</source>
<translation>Marqueurs de points</translation>
<translation>Marqueurs de points par défaut</translation>
</message>
<message>
<source>PREF_ISOS_COLOR</source>
@ -3298,7 +3350,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_LABEL_COLOR</source>
<translation type="unfinished">Color of labels</translation>
<translation>Couleur des étiquettes</translation>
</message>
<message>
<source>PREF_TOPLEVEL_COLOR</source>
@ -3370,11 +3422,11 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_EDGE_WIDTH</source>
<translation>Epaisseur des arêtes</translation>
<translation>Epaisseur des arêtes par défaut</translation>
</message>
<message>
<source>PREF_ISOLINES_WIDTH</source>
<translation>Epaisseur des isolignes</translation>
<translation>Epaisseur des isolignes par défaut</translation>
</message>
<message>
<source>PREF_PREVIEW_EDGE_WIDTH</source>
@ -3430,11 +3482,11 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>PREF_HIDE_INPUT_OBJECT</source>
<translation type="unfinished">Hide input objects from the viewer</translation>
<translation>Cacher dans la vue les objets en entrée</translation>
</message>
<message>
<source>PREF_ISOS</source>
<translation>Nombre d&apos;isolignes</translation>
<translation>Nombre d&apos;isolignes par défaut</translation>
</message>
<message>
<source>PREF_ISOS_U</source>
@ -3804,6 +3856,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>STB_PROJECTION</source>
<translation>Projeter un point, une arête ou un contour sur une face</translation>
</message>
<message>
<source>STB_PROJ_ON_CYL</source>
<translation>Projète un contour ou une face sur un cylindre</translation>
</message>
<message>
<source>STB_ORIGIN_AND_VECTORS</source>
<translation>Créer les vecteurs de base et l&apos;origine</translation>
@ -3820,6 +3876,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>STB_PIPE_PATH</source>
<translation>Retrouver le chemin à partir d&apos;un objet de type tuyau</translation>
</message>
<message>
<source>STB_THICKNESS</source>
<translation>Crée un solide par ajout d'épaisseur</translation>
</message>
<message>
<source>STB_PLANE</source>
<translation>Créer un plan</translation>
@ -3966,7 +4026,7 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
</message>
<message>
<source>STB_NAME_MODE</source>
<translation type="unfinished">Show/Hide names of visible shapes</translation>
<translation>Montrer/cacher le nom des objets visibles</translation>
</message>
<message>
<source>STB_SHADING_COLOR</source>
@ -4424,6 +4484,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>TOP_PROJECTION</source>
<translation>Projection</translation>
</message>
<message>
<source>TOP_PROJ_ON_CYL</source>
<translation>Projection sur un cylindre</translation>
</message>
<message>
<source>TOP_ORIGIN_AND_VECTORS</source>
<translation>Créer l&apos;origine et les vecteurs de base</translation>
@ -4440,6 +4504,10 @@ Choisissez une face, une coque ou un solide et essayez de nouveau</translation>
<source>TOP_PIPE_PATH</source>
<translation>Retrouver le chemin</translation>
</message>
<message>
<source>TOP_THICKNESS</source>
<translation>Epaississement</translation>
</message>
<message>
<source>TOP_PLANE</source>
<translation>Créer un plan</translation>
@ -5395,22 +5463,6 @@ le paramètre &apos;%1&apos; aux préférences du module Géométrie.</translati
<source>TOOL_IMPORTEXPORT</source>
<translation>Import / Export XAO</translation>
</message>
<message>
<source>TABLE_SECTION</source>
<translation>Section</translation>
</message>
<message>
<source>TABLE_INDEX</source>
<translation>Indice</translation>
</message>
<message>
<source>TABLE_X</source>
<translation>X</translation>
</message>
<message>
<source>TABLE_Y</source>
<translation>Y</translation>
</message>
</context>
<context>
<name>BasicGUI_CurveDlg</name>
@ -5706,6 +5758,25 @@ le paramètre &apos;%1&apos; aux préférences du module Géométrie.</translati
<translation>X=%1, Y=%2, Z=%3</translation>
</message>
</context>
<context>
<name>CurveCreator_TableView</name>
<message>
<source>TABLE_SECTION</source>
<translation>Section</translation>
</message>
<message>
<source>TABLE_INDEX</source>
<translation>Indice</translation>
</message>
<message>
<source>TABLE_X</source>
<translation>X</translation>
</message>
<message>
<source>TABLE_Y</source>
<translation>Y</translation>
</message>
</context>
<context>
<name>CurveCreator_Widget</name>
<message>
@ -6064,10 +6135,6 @@ Le nombre de points n&apos;est pas suffisant</translation>
<source>GEOM_ADD_THICKNESS</source>
<translation>Epaissir (arêtes ou contours uniquement)</translation>
</message>
<message>
<source>GEOM_TOWARDS_INSIDE</source>
<translation>Epaissir vers l&apos;intérieur</translation>
</message>
</context>
<context>
<name>GroupGUI</name>
@ -7132,7 +7199,7 @@ Voulez-vous en créer un nouveau ?</translation>
<translation>Forme principale</translation>
</message>
<message>
<source>GEOM_INSPECT_OBJECT_SHOW</source>
<source>GEOM_INSPECT_OBJECT_SHOW</source>
<translation>Afficher la sélection</translation>
</message>
<message>
@ -7255,22 +7322,22 @@ Voulez-vous en créer un nouveau ?</translation>
<source>GEOM_CHECK_INTE_V_E</source>
<translation>Point à arête + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_E</source>
<translation>Arête à arête + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_V_F</source>
<translation>Point à face + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_F</source>
<translation>Arête à Face + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_ALL</source>
<translation>Face à Face + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_E</source>
<translation>Arête à arête + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_V_F</source>
<translation>Point à face + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_E_F</source>
<translation>Arête à Face + tout au-delà</translation>
</message>
<message>
<source>GEOM_CHECK_INTE_ALL</source>
<translation>Face à Face + tout au-delà</translation>
</message>
</context>
<context>
<name>MeasureGUI_FastCheckIntersectionsDlg</name>
@ -7479,4 +7546,19 @@ Voulez-vous en créer un nouveau ?</translation>
<translation>Matériaux: %1 de %2</translation>
</message>
</context>
<context>
<name>TransformationGUI_ProjectionOnCylDlg</name>
<message>
<source>GEOM_PROJ_ON_CYL_TITLE</source>
<translation>Projection sur un cylindre</translation>
</message>
<message>
<source>GEOM_PROJ_ON_CYL_START_ANGLE</source>
<translation>Angle de départ</translation>
</message>
<message>
<source>GEOM_PROJ_ON_CYL_LENGTH_ANGLE</source>
<translation>Longueur de l'angle</translation>
</message>
</context>
</TS>

File diff suppressed because it is too large Load Diff

View File

@ -1686,7 +1686,7 @@ void GeometryGUI::addPluginActions()
// icon
QPixmap icon;
if ( !adata.icon.empty() )
icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
icon = resMgr->loadPixmap( pdata.name.c_str(), adata.icon.c_str() );
// menu text (path)
QStringList smenus = QString( adata.menuText.c_str() ).split( "/" );
QString actionName = smenus.last();
@ -1703,30 +1703,30 @@ void GeometryGUI::addPluginActions()
actionStat = actionStat.toUpper().prepend( "STB_" );
createAction( id, // ~ adata.label
tr( actionTool.toLatin1().constData() ),
icon,
tr( actionName.toLatin1().constData() ),
tr( actionStat.toLatin1().constData() ),
QKeySequence( tr( adata.accel.c_str() ) ),
application()->desktop(),
false /*toggle*/,
this, SLOT( OnGUIEvent() ),
QString() /*shortcutAction*/ );
tr( actionTool.toLatin1().constData() ),
icon,
tr( actionName.toLatin1().constData() ),
tr( actionStat.toLatin1().constData() ),
QKeySequence( tr( adata.accel.c_str() ) ),
application()->desktop(),
false /*toggle*/,
this, SLOT( OnGUIEvent() ),
QString() /*shortcutAction*/ );
int menuId = -1;
foreach ( QString subMenu, smenus ) {
QStringList subMenuList = subMenu.split( ":" );
QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
QStringList subMenuList = subMenu.split( ":" );
QString subMenuName = subMenuList[0].toUpper().prepend( "MEN_" );
int subMenuGroup = subMenuList.size() > 1 ? subMenuList[1].toInt() : -1;
menuId = createMenu( tr( subMenuName.toLatin1().constData() ), menuId, -1, subMenuGroup );
}
createMenu( id, menuId, -1 );
if ( !stools.isEmpty() ) {
QString subTool = stools[0];
subTool = subTool.toUpper().prepend( "TOOL_" );
int toolId = createTool( tr( subTool.toLatin1().constData() ) );
createTool(id, toolId);
QString subTool = stools[0];
subTool = subTool.toUpper().prepend( "TOOL_" );
int toolId = createTool( tr( subTool.toLatin1().constData() ) );
createTool(id, toolId);
}
// add action id to map
@ -1763,8 +1763,8 @@ bool GeometryGUI::activateModule( SUIT_Study* study )
else {
PyObjWrapper result =
PyObject_CallMethod(pluginsmanager, (char*)"initialize", (char*)"isss", 1, "geom",
tr("MEN_NEW_ENTITY").toStdString().c_str(),
tr("GEOM_PLUGINS_OTHER").toStdString().c_str());
tr("MEN_NEW_ENTITY").toUtf8().data(),
tr("GEOM_PLUGINS_OTHER").toUtf8().data());
if ( !result )
PyErr_Print();
}
@ -2041,38 +2041,15 @@ void GeometryGUI::updateCreationInfo()
// pass creation info of geomObj to myCreationInfoWdg
if ( myCreationInfoWdg ) {
QPixmap icon;
QString operationName;
myCreationInfoWdg->setOperation( icon, operationName );
GEOM::CreationInformationSeq_var info;
try {
OCC_CATCH_SIGNALS;
GEOM::CreationInformation_var info = geomObj->GetCreationInformation();
if ( &info.in() ) {
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
QString name = info->operationName.in();
if ( !name.isEmpty() ) {
QString plugin_name;
for ( size_t i = 0; i < info->params.length(); ++i ) {
myCreationInfoWdg->addParam( info->params[i].name.in(),
info->params[i].value.in() );
QString value = info->params[i].name.in();
if( value == PLUGIN_NAME ) {
plugin_name = info->params[i].value.in();
}
}
QString prefix = plugin_name.isEmpty() ? "GEOM" : plugin_name;
icon = resMgr->loadPixmap( prefix, tr( ("ICO_"+name).toLatin1().constData() ), false );
operationName = tr( ("MEN_"+name).toLatin1().constData() );
if ( operationName.startsWith( "MEN_" ))
operationName = name; // no translation
myCreationInfoWdg->setOperation( icon, operationName );
}
}
info = geomObj->GetCreationInformation();
}
catch (...) {
}
myCreationInfoWdg->setInfo( info );
}
}
@ -2304,7 +2281,7 @@ void GeometryGUI::createPreferences()
LightApp_Preferences::Selector, "Geometry", "toplevel_dm" );
int transparency = addPreference( tr( "PREF_TRANSPARENCY" ), genGroup,
LightApp_Preferences::IntSpin, "Geometry", "transparency" );
LightApp_Preferences::IntSpin, "Geometry", "transparency" );
int defl = addPreference( tr( "PREF_DEFLECTION" ), genGroup,
LightApp_Preferences::DblSpin, "Geometry", "deflection_coeff" );

View File

@ -548,71 +548,6 @@ TopoDS_Shape GEOMImpl_BooleanDriver::performOperation
if ( !GEOMUtils::CheckShape(aShape, true) && !GEOMUtils::FixShapeTolerance(aShape) )
Standard_ConstructionError::Raise("Boolean operation aborted : non valid shape result");
// BEGIN: Mantis issue 0021060: always limit tolerance of BOP result
// 1. Get shape parameters for comparison
int nbTypes [TopAbs_SHAPE];
{
for (int iType = 0; iType < TopAbs_SHAPE; ++iType)
nbTypes[iType] = 0;
nbTypes[aShape.ShapeType()]++;
TopTools_MapOfShape aMapOfShape;
aMapOfShape.Add(aShape);
TopTools_ListOfShape aListOfShape;
aListOfShape.Append(aShape);
TopTools_ListIteratorOfListOfShape itL (aListOfShape);
for (; itL.More(); itL.Next()) {
TopoDS_Iterator it (itL.Value());
for (; it.More(); it.Next()) {
TopoDS_Shape s = it.Value();
if (aMapOfShape.Add(s)) {
aListOfShape.Append(s);
nbTypes[s.ShapeType()]++;
}
}
}
}
// 2. Limit tolerance
TopoDS_Shape aShapeCopy;
TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
TNaming_CopyShape::CopyTool(aShape, aMapTShapes, aShapeCopy);
if ( GEOMUtils::FixShapeTolerance(aShapeCopy, true) ) {
int iType, nbTypesCopy [TopAbs_SHAPE];
for (iType = 0; iType < TopAbs_SHAPE; ++iType)
nbTypesCopy[iType] = 0;
nbTypesCopy[aShapeCopy.ShapeType()]++;
TopTools_MapOfShape aMapOfShape;
aMapOfShape.Add(aShapeCopy);
TopTools_ListOfShape aListOfShape;
aListOfShape.Append(aShapeCopy);
TopTools_ListIteratorOfListOfShape itL (aListOfShape);
for (; itL.More(); itL.Next()) {
TopoDS_Iterator it (itL.Value());
for (; it.More(); it.Next()) {
TopoDS_Shape s = it.Value();
if (aMapOfShape.Add(s)) {
aListOfShape.Append(s);
nbTypesCopy[s.ShapeType()]++;
}
}
}
bool isEqual = true;
for (iType = 0; iType < TopAbs_SHAPE && isEqual; ++iType) {
if (nbTypes[iType] != nbTypesCopy[iType])
isEqual = false;
}
if (isEqual)
aShape = aShapeCopy;
}
// END: Mantis issue 0021060
return aShape;
}

25
src/GEOMImpl/GEOMImpl_DiskDriver.cxx Executable file → Normal file
View File

@ -41,6 +41,7 @@
#include <Standard_ConstructionError.hxx>
#include <Precision.hxx>
#include <gp_Pln.hxx>
#include <gp_Pnt.hxx>
#include <gp_Vec.hxx>
#include <gp_Circ.hxx>
@ -91,12 +92,15 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const
TopExp::Vertices(anE, V1, V2, Standard_True);
if (!V1.IsNull() && !V2.IsNull()) {
gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
gp_Ax2 anAxes (aP, -aV);
gp_Circ aCirc (anAxes, aCI.GetRadius());
gp_Ax2 anAxes (aP, aV);
gp_Ax3 anAxes3(anAxes);
gp_Pln aPln(anAxes3);
gp_Ax2 anAxes1(aP, -aV);
gp_Circ aCirc (anAxes1, aCI.GetRadius());
TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge();
BRepBuilderAPI_MakeWire MW;
MW.Add(TopoDS::Edge(aCircle));
BRepBuilderAPI_MakeFace MF (MW, Standard_False);
BRepBuilderAPI_MakeFace MF (aPln, MW);
aShape = MF.Shape();
}
}
@ -121,10 +125,14 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const
if (gp_Vec(aP1, aP2).IsParallel(gp_Vec(aP1, aP3), Precision::Angular()))
Standard_ConstructionError::Raise("Disk creation aborted: points lay on one line");
Handle(Geom_Circle) aCirc = GC_MakeCircle(aP3, aP2, aP1).Value();
gp_Circ aGpCirc = aCirc->Circ();
gp_Ax2 anAxes = aGpCirc.Position();
gp_Ax3 anAxes3(anAxes.Location(), -anAxes.Direction());
gp_Pln aPln(anAxes3);
TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge();
BRepBuilderAPI_MakeWire MW;
MW.Add(TopoDS::Edge(aCircle));
BRepBuilderAPI_MakeFace MF (MW, Standard_False);
BRepBuilderAPI_MakeFace MF (aPln, MW);
aShape = MF.Shape();
}
}
@ -139,12 +147,15 @@ Standard_Integer GEOMImpl_DiskDriver::Execute(TFunction_Logbook& log) const
else if (anOrient == 3)
aV = gp::DY();
gp_Ax2 anAxes (aP, -aV);
gp_Circ aCirc (anAxes, aCI.GetRadius());
gp_Ax2 anAxes (aP, aV);
gp_Ax2 anAxes1(aP, -aV);
gp_Ax3 anAxes3(anAxes);
gp_Pln aPln(anAxes3);
gp_Circ aCirc (anAxes1, aCI.GetRadius());
TopoDS_Shape aCircle = BRepBuilderAPI_MakeEdge(aCirc).Edge();
BRepBuilderAPI_MakeWire MW;
MW.Add(TopoDS::Edge(aCircle));
BRepBuilderAPI_MakeFace MF (MW, Standard_False);
BRepBuilderAPI_MakeFace MF (aPln, MW);
aShape = MF.Shape();
}
else {

View File

@ -83,6 +83,20 @@ GetCreationInformation(std::string& theOperationName,
AddParam( theParams, "Step", data.GetStepID() );
AddParam( theParams, "Stamp", data.GetStepStamp() );
}
else if ( funType == GEOM_Field::FUN_CHANGE_COMP_NAMES )
{
theOperationName = "Change component names";
}
else if ( funType == GEOM_Field::FUN_CHANGE_STEP_STAMP )
{
theOperationName = "Change stamp";
AddParam( theParams, "Stamp", data.GetStepStamp() );
}
else if ( funType == GEOM_Field::FUN_CHANGE_VALUE )
{
theOperationName = "FIELD_EDIT";//"Change values";
AddParam( theParams, "Values", "..." );
}
else
{
return false;

View File

@ -24,10 +24,10 @@
#include "GEOM_Function.hxx"
#define PROJECTION_ARG_SHAPE 1
#define PROJECTION_ARG_RADIUS 2
#define PROJECTION_ARG_START_ANGLE 3
#define PROJECTION_ARG_ANGLE_LENGTH 4
#define PROJCYL_ARG_SHAPE 1
#define PROJCYL_ARG_RADIUS 2
#define PROJCYL_ARG_START_ANGLE 3
#define PROJCYL_ARG_ANGLE_LENGTH 4
class GEOMImpl_IProjOnCyl
{
@ -37,22 +37,22 @@ public:
GEOMImpl_IProjOnCyl(Handle(GEOM_Function) theFunction): _func(theFunction) {}
void SetShape (const Handle(GEOM_Function) &theShape)
{ _func->SetReference(PROJECTION_ARG_SHAPE, theShape); }
{ _func->SetReference(PROJCYL_ARG_SHAPE, theShape); }
void SetRadius (const Standard_Real theRadius)
{ _func->SetReal(PROJECTION_ARG_RADIUS, theRadius); }
{ _func->SetReal(PROJCYL_ARG_RADIUS, theRadius); }
void SetStartAngle (const Standard_Real theStartAngle)
{ _func->SetReal(PROJECTION_ARG_START_ANGLE, theStartAngle); }
{ _func->SetReal(PROJCYL_ARG_START_ANGLE, theStartAngle); }
void SetAngleLength (const Standard_Real theAngleLength)
{ _func->SetReal(PROJECTION_ARG_ANGLE_LENGTH, theAngleLength); }
{ _func->SetReal(PROJCYL_ARG_ANGLE_LENGTH, theAngleLength); }
Handle(GEOM_Function) GetShape()
{ return _func->GetReference(PROJECTION_ARG_SHAPE); }
{ return _func->GetReference(PROJCYL_ARG_SHAPE); }
Standard_Real GetRadius()
{ return _func->GetReal(PROJECTION_ARG_RADIUS ); }
{ return _func->GetReal(PROJCYL_ARG_RADIUS ); }
Standard_Real GetStartAngle()
{ return _func->GetReal(PROJECTION_ARG_START_ANGLE ); }
{ return _func->GetReal(PROJCYL_ARG_START_ANGLE ); }
Standard_Real GetAngleLength()
{ return _func->GetReal(PROJECTION_ARG_ANGLE_LENGTH ); }
{ return _func->GetReal(PROJCYL_ARG_ANGLE_LENGTH ); }
private:

View File

@ -2787,9 +2787,31 @@ Handle(TColStd_HSequenceOfInteger)
return aSeqOfIDs;
}
// Compute classification tolerance.
TopTools_IndexedMapOfShape aMapVtx;
Standard_Real aTol = Precision::Confusion();
TopExp::MapShapes(aShape, TopAbs_VERTEX, aMapVtx);
Standard_Integer i;
Standard_Integer aNbVtx = aMapVtx.Extent();
for (i = 1; i <= aNbVtx; ++i) {
const TopoDS_Vertex aVtx = TopoDS::Vertex(aMapVtx.FindKey(i));
const Standard_Real aVtxTol = BRep_Tool::Tolerance(aVtx);
if (aTol < aVtxTol) {
aTol = aVtxTol;
}
}
// Bound the tolerance value.
if (aTol > 0.0001) {
aTol = 0.0001;
}
// Call algo
GEOMAlgo_FinderShapeOn2 aFinder;
Standard_Real aTol = 0.0001; // default value
Handle(GEOMAlgo_ClsfSolid) aClsfSolid = new GEOMAlgo_ClsfSolid;
aClsfSolid->SetShape(aCheckShape);

View File

@ -210,7 +210,7 @@ GetCreationInformation(std::string& theOperationName,
break;
case OFFSET_THICKENING:
case OFFSET_THICKENING_COPY:
theOperationName = "MakeThickening";
theOperationName = "THICKNESS";
AddParam( theParams, "Object", aCI.GetShape() );
AddParam( theParams, "Offset", aCI.GetParam() ? -aCI.GetValue() : aCI.GetValue() );
{

View File

@ -473,41 +473,43 @@ GetCreationInformation(std::string& theOperationName,
switch ( aType ) {
case PROJECTION_COPY:
{
GEOMImpl_IMirror aCI( function );
{
GEOMImpl_IMirror aCI( function );
AddParam( theParams, "Source object", aCI.GetOriginal() );
AddParam( theParams, "Target face", aCI.GetPlane() );
break;
}
AddParam( theParams, "Source object", aCI.GetOriginal() );
AddParam( theParams, "Target face", aCI.GetPlane() );
break;
}
case PROJECTION_ON_WIRE:
{
GEOMImpl_IProjection aProj (function);
{
GEOMImpl_IProjection aProj (function);
AddParam(theParams, "Point", aProj.GetPoint());
AddParam(theParams, "Shape", aProj.GetShape());
AddParam(theParams, "Point", aProj.GetPoint());
AddParam(theParams, "Shape", aProj.GetShape());
break;
}
break;
}
case PROJECTION_ON_CYLINDER:
{
GEOMImpl_IProjOnCyl aProj (function);
const Standard_Real aLengthAngle = aProj.GetAngleLength();
{
theOperationName = "PROJ_ON_CYL";
AddParam(theParams, "Shape", aProj.GetShape());
AddParam(theParams, "Radius", aProj.GetRadius());
AddParam(theParams, "Start angle", aProj.GetStartAngle());
GEOMImpl_IProjOnCyl aProj (function);
const Standard_Real aLengthAngle = aProj.GetAngleLength();
if (aLengthAngle >= 0.) {
AddParam(theParams, "Length angle", aLengthAngle);
}
AddParam(theParams, "Shape", aProj.GetShape());
AddParam(theParams, "Radius", aProj.GetRadius());
AddParam(theParams, "Start angle", aProj.GetStartAngle());
break;
if (aLengthAngle >= 0.) {
AddParam(theParams, "Length angle", aLengthAngle);
}
break;
}
default:
return false;
}
return true;
}
@ -661,7 +663,7 @@ TopoDS_Shape GEOMImpl_ProjectionDriver::projectOnCylinder
GEOMUtils::Handle(HTrsfCurve2d) aTrsfCurve =
new GEOMUtils::HTrsfCurve2d(aCurve, aPar[0], aPar[1], aTrsf2d);
Approx_Curve2d aConv (aTrsfCurve, aPar[0], aPar[1],
aUResol, aVResol, GeomAbs_C1,
aUResol, aVResol, GeomAbs_C1,
9, 1000);
if (!aConv.IsDone() && !aConv.HasResult()) {

View File

@ -59,6 +59,8 @@
#include <ShapeAnalysis.hxx>
#include <ShapeAnalysis_FreeBounds.hxx>
#include <TNaming_CopyShape.hxx>
#include <TopAbs.hxx>
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
@ -86,6 +88,7 @@
#include <GeomConvert.hxx>
#include <GeomLProp.hxx>
#include <TColStd_IndexedDataMapOfTransientTransient.hxx>
#include <TColStd_SequenceOfReal.hxx>
#include <TColStd_HSequenceOfTransient.hxx>
#include <TColStd_Array1OfReal.hxx>
@ -208,6 +211,7 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
// 1. Extract all edges from the given arguments
TopTools_MapOfShape aMapEdges;
Handle(TopTools_HSequenceOfShape) aSeqEdgesIn = new TopTools_HSequenceOfShape;
TColStd_IndexedDataMapOfTransientTransient aMapTShapes;
for (ind = 1; ind <= nbshapes; ind++) {
Handle(GEOM_Function) aRefSh_i = Handle(GEOM_Function)::DownCast(aShapes->Value(ind));
@ -216,7 +220,12 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
TopExp_Explorer anExpE_i (aSh_i, TopAbs_EDGE);
for (; anExpE_i.More(); anExpE_i.Next()) {
if (aMapEdges.Add(anExpE_i.Current())) {
aSeqEdgesIn->Append(anExpE_i.Current());
// Copy the original shape.
TopoDS_Shape aShapeCopy;
TNaming_CopyShape::CopyTool
(anExpE_i.Current(), aMapTShapes, aShapeCopy);
aSeqEdgesIn->Append(aShapeCopy);
}
}
}

View File

@ -55,7 +55,7 @@
// Below macro specifies how the closed point set is processed (issue 0022885).
// See below for more information.
// Currently solution 4 is chosen!
#define BSPLINE_PROCESS_CLOSED_PNTSET 4
#define BSPLINE_PROCESS_CLOSED_PNTSET 2
namespace
{
@ -152,6 +152,8 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const
// reorder points if required (bspline only)
if ((aType == SPLINE_INTERPOLATION || aType == SPLINE_INTERPOL_TANGENTS) && aCI.GetDoReordering()) {
int nbDup = 0;
gp_Pnt pPrev = points->Value(1);
for (int i = 1; i < length - 1; i++) {
gp_Pnt pi = points->Value(i);
int nearest = 0;
@ -175,6 +177,22 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const
points->SetValue(j, points->Value(j-1));
points->SetValue(i+1, p);
}
if ( pPrev.Distance(points->Value(i+1)) <= Precision::Confusion() )
nbDup++;
else
pPrev = points->Value(i+1);
}
if ( nbDup > 0 ) {
Handle(TColgp_HArray1OfPnt) tmpPoints = new TColgp_HArray1OfPnt(1, length-nbDup);
int j = 1;
for (int i = 1; i <= length; i++) {
if (i == 1 || pPrev.Distance(points->Value(i)) > Precision::Confusion() ) {
tmpPoints->SetValue(j++, points->Value(i));
pPrev = points->Value(i);
}
}
points = tmpPoints;
length = points->Length();
}
} // end of reordering

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -1,7 +1,4 @@
// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 2015 CEA/DEN, EDF R&D, OPEN CASCADE
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public

View File

@ -268,50 +268,59 @@ char* GEOM_BaseObject_i::GetParameters()
*/
//================================================================================
GEOM::CreationInformation* GEOM_BaseObject_i::GetCreationInformation()
GEOM::CreationInformationSeq* GEOM_BaseObject_i::GetCreationInformation()
{
GEOM::CreationInformation_var info = new GEOM::CreationInformation;
GEOM::CreationInformationSeq_var info = new GEOM::CreationInformationSeq();
Handle(GEOM_BaseDriver) driver =
Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver() );
if ( !driver.IsNull() )
int nbFun = _impl->GetNbFunctions();
info->length( nbFun );
int nbI = 0;
for ( int i = 1; i <= nbFun; ++i )
{
std::vector<GEOM_Param> params;
std::string operationName;
try
Handle(GEOM_BaseDriver) driver =
Handle(GEOM_BaseDriver)::DownCast( _impl->GetCreationDriver( i ));
if ( !driver.IsNull() )
{
OCC_CATCH_SIGNALS;
if ( driver->GetCreationInformation( operationName, params ))
std::vector<GEOM_Param> params;
std::string operationName;
try
{
info->operationName = operationName.c_str();
info->params.length( params.size() );
for ( size_t i = 0; i < params.size(); ++i )
OCC_CATCH_SIGNALS;
if ( driver->GetCreationInformation( operationName, params ))
{
info->params[i].name = params[i].name.c_str();
info->params[i].value = params[i].value.c_str();
info[nbI].operationName = operationName.c_str();
info[nbI].params.length( params.size() );
for ( size_t i = 0; i < params.size(); ++i )
{
info[nbI].params[i].name = params[i].name.c_str();
info[nbI].params[i].value = params[i].value.c_str();
}
nbI++;
}
}
#ifdef _DEBUG_
if ( operationName.empty() )
if ( operationName.empty() )
{
cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl
<< " Consider implementing "
<< typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl
<< " for the case of operation which has created '" << GetName() << "' object" << endl
<< "PLEEEEEEEASE" << endl
<< "\tPLEEEEEEEASE" << endl
<< "\t\tPLEEEEEEEASE" << endl
<< "\t\t\tPLEEEEEEEASE" << endl
<< "\t\t\t\tPLEEEEEEEASE" << endl;
}
#endif
}
catch(...)
{
cout << endl << endl << endl << "Warning: " << endl << "Dear developer!!!" << endl
<< " Consider implementing "
<< typeid(*(driver.operator->())).name() << "::GetCreationInformation() " << endl
<< " for the case of operation which has created '" << GetName() << "' object" << endl
<< "PLEEEEEEEASE" << endl
<< "\tPLEEEEEEEASE" << endl
<< "\t\tPLEEEEEEEASE" << endl
<< "\t\t\tPLEEEEEEEASE" << endl
<< "\t\t\t\tPLEEEEEEEASE" << endl;
}
#endif
}
catch(...)
{
#ifdef _DEBUG_
cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl;
cout << "Ecxeption in GEOM_BaseObject_i::GetCreationInformation()" << endl;
#endif
}
}
}
info->length( nbI );
return info._retn();
}

View File

@ -66,7 +66,7 @@ class GEOM_I_EXPORT GEOM_BaseObject_i : public virtual POA_GEOM::GEOM_BaseObject
virtual char* GetParameters();
virtual GEOM::CreationInformation* GetCreationInformation();
virtual GEOM::CreationInformationSeq* GetCreationInformation();
Handle(GEOM_BaseObject) GetImpl() { return _impl; }

View File

@ -320,24 +320,25 @@ SALOMEDS::SObject_ptr GEOM_Gen_i::PublishInStudy(SALOMEDS::Study_ptr theStudy,
aResultSO->SetAttrString("AttributePixMap","ICON_OBJBROWSER_LCS");
aNamePrefix = "LocalCS_";
} else if ( mytype >= USER_TYPE_EX ) {
char buf[20];
sprintf( buf, "%d", aBaseObj->GetType() );
GEOM::CreationInformation_var info = aBaseObj->GetCreationInformation();
std::string plgId;
for ( size_t i = 0; i < info->params.length(); ++i ) {
std::string param_name = info->params[i].name.in();
std::string param_value = info->params[i].value.in();
if( param_name == PLUGIN_NAME) {
plgId = param_value;
break;
}
char buf[20];
sprintf( buf, "%d", aBaseObj->GetType() );
GEOM::CreationInformationSeq_var infoSeq = aBaseObj->GetCreationInformation();
std::string plgId;
for ( size_t j = 0; j < infoSeq->length(); ++j )
for ( size_t i = 0; i < infoSeq[j].params.length(); ++i ) {
std::string param_name = infoSeq[j].params[i].name.in();
std::string param_value = infoSeq[j].params[i].value.in();
if( param_name == PLUGIN_NAME) {
plgId = param_value;
break;
}
}
if(plgId.length() > 0 ) {
plgId += "::";
}
plgId +="ICON_OBJBROWSER_";
plgId += buf;
aResultSO->SetAttrString("AttributePixMap",plgId.c_str());
if(plgId.length() > 0 ) {
plgId += "::";
}
plgId +="ICON_OBJBROWSER_";
plgId += buf;
aResultSO->SetAttrString("AttributePixMap",plgId.c_str());
} else if ( mytype > USER_TYPE ) {
char buf[20];
sprintf( buf, "%d", aBaseObj->GetType() );

View File

@ -3055,10 +3055,12 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
theR,theH,theA,Parameters = ParseParameters(theR, theH, theA)
if flag:
theA = theA*math.pi/180.
anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA)
RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp)
anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "cylinder")
if theA<=0. or theA>=2*math.pi:
raise ValueError("The angle parameter should be strictly between 0 and 2*pi.")
anObj = self.PrimOp.MakeCylinderPntVecRHA(thePnt, theAxis, theR, theH, theA)
RaiseIfFailed("MakeCylinderPntVecRHA", self.PrimOp)
anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "cylinder")
return anObj
## Create a cylinder with given radius and height at
@ -3136,6 +3138,8 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
theR,theH,theA,Parameters = ParseParameters(theR, theH, theA)
if flag:
theA = theA*math.pi/180.
if theA<=0. or theA>=2*math.pi:
raise ValueError("The angle parameter should be strictly between 0 and 2*pi.")
anObj = self.PrimOp.MakeCylinderRHA(theR, theH, theA)
RaiseIfFailed("MakeCylinderRHA", self.PrimOp)
anObj.SetParameters(Parameters)
@ -4472,7 +4476,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
# end of l3_complex
## @}
## @addtogroup l3_advanced
## @addtogroup l3_basic_go
## @{
## Create a linear edge with specified ends.
@ -4904,7 +4908,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
self._autoPublish(anObj, theName, "solid")
return anObj
# end of l3_advanced
# end of l3_basic_go
## @}
## @addtogroup l2_measure
@ -7375,7 +7379,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
Returns:
New GEOM.GEOM_Object, containing copies of theShapes without coincident faces.
"""
anObj = self.ShapesOp.MakeGlueFacesByList(ToList(theShapes), theTolerance, theFaces,
anObj = self.ShapesOp.MakeGlueFacesByList(ToList(theShapes), theTolerance, ToList(theFaces),
doKeepNonSolids, doGlueAllEdges)
if anObj is None:
raise RuntimeError, "MakeGlueFacesByList : " + self.ShapesOp.GetErrorCode()
@ -9161,7 +9165,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
self._autoPublish(anObj, theName, "projection")
return anObj
## Create a projection projection of the given point on a wire or an edge.
## Create a projection of the given point on a wire or an edge.
# If there are no solutions or there are 2 or more solutions It throws an
# exception.
# @param thePoint the point to be projected.
@ -9179,7 +9183,7 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
@ManageTransactions("TrsfOp")
def MakeProjectionOnWire(self, thePoint, theWire, theName=None):
"""
Create a projection projection of the given point on a wire or an edge.
Create a projection of the given point on a wire or an edge.
If there are no solutions or there are 2 or more solutions It throws an
exception.
@ -10966,14 +10970,17 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
return aDict
def GetCreationInformation(self, theShape):
info = theShape.GetCreationInformation()
# operationName
opName = info.operationName
if not opName: opName = "no info available"
res = "Operation: " + opName
# parameters
for parVal in info.params:
res += " \n %s = %s" % ( parVal.name, parVal.value )
res = ''
infos = theShape.GetCreationInformation()
for info in infos:
# operationName
opName = info.operationName
if not opName: opName = "no info available"
if res: res += "\n"
res += "Operation: " + opName
# parameters
for parVal in info.params:
res += "\n \t%s = %s" % ( parVal.name, parVal.value )
return res
## Get a point, situated at the centre of mass of theShape.

View File

@ -50,6 +50,10 @@ ADD_DEFINITIONS(
${QT_DEFINITIONS}
)
IF(WIN32)
ADD_DEFINITIONS(-DNOGDI)
ENDIF(WIN32)
# libraries to link to
SET(_link_LIBRARIES
GEOMObject

View File

@ -443,11 +443,17 @@ void GroupGUI_GroupDlg::SetEditCurrentArgument()
if (send == mySelBtn) {
myEditCurrentArgument = myMainName;
myShape2Name->setText("");
mySelBtn->setDown(true);
mySelBtn2->setDown(false);
}
else if (send == mySelBtn2 || sender() == myRestrictGroup) {
setInPlaceObj(GEOM::GEOM_Object::_nil());
myShape2Name->setText("");
if (subSelectionWay() != ALL_SUBSHAPES) {
if ( send == mySelBtn2 ) {
mySelBtn2->setDown(true);
mySelBtn->setDown(false);
}
if (subSelectionWay() != ALL_SUBSHAPES) {
myEditCurrentArgument = myShape2Name;
}
else {
@ -455,7 +461,11 @@ void GroupGUI_GroupDlg::SetEditCurrentArgument()
}
}
activateSelection();
// activateSelection();
if(myEditCurrentArgument) {
myEditCurrentArgument->setFocus();
send->setDown(true);
}
updateState();
}
@ -562,6 +572,9 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
{
if (subSelectionWay() != ALL_SUBSHAPES && myEditCurrentArgument == myShape2Name) {
onGetInPlace();
if( !myInPlaceObj->_is_nil() ) {
mySelBtn2->setDown(false);
}
return;
}
@ -586,6 +599,7 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
}
myMainObj = anObj;
if (!CORBA::is_nil(myMainObj)) {
mySelBtn->setDown(false);
SALOME_View* view = GEOM_Displayer::GetActiveView();
if (view) {
CORBA::String_var aMainEntry = myMainObj->GetStudyEntry();

View File

@ -32,7 +32,7 @@
<name>IGESPlugin_GUI</name>
<message>
<source>IGES_FILES</source>
<translation>IGESファイル</translation>
<translation>IGES ( *.iges *.igs )</translation>
</message>
<message>
<source>EXPORT_TITLE</source>

View File

@ -135,7 +135,7 @@ MeasureGUI_ManageDimensionsDlg::MeasureGUI_ManageDimensionsDlg( GeometryGUI* the
{
myObjectSelector->PushButton1->click();
}
myIsNeedRedisplay = false;
setHelpFileName("managing_dimensions_page.html");
}
@ -809,7 +809,9 @@ void MeasureGUI_ManageDimensionsDlg::OnFinish()
GEOM::propertyName( GEOM::Dimensions ),
QVariant() );
redisplay( myEditObject.get() );
if ( myIsNeedRedisplay ) {
redisplay( myEditObject.get() );
}
myGeomGUI->emitDimensionsUpdated( QString( myEditObject->GetStudyEntry() ) );
}
@ -894,8 +896,8 @@ void MeasureGUI_ManageDimensionsDlg::SetEditObject( const GEOM::GeomObjPtr& theO
if ( myEditObject.isNull() )
{
myDimensionView->TreeWidget->clear();
myDimensionView->setEnabled( false );
return;
}
@ -960,8 +962,6 @@ void MeasureGUI_ManageDimensionsDlg::RestoreState()
myEditObject->GetStudyEntry(),
GEOM::propertyName( GEOM::Dimensions ),
QVariant() );
RedisplayObject();
}
//=================================================================================
@ -1112,8 +1112,8 @@ bool MeasureGUI_ManageDimensionsDlg::AllowedToCancelChanges()
tr( "WRN_MSG_CHANGES_LOST" ),
QMessageBox::Ok,
QMessageBox::Cancel );
return aResponse == QMessageBox::Ok;
myIsNeedRedisplay = ( aResponse == QMessageBox::Ok );
return myIsNeedRedisplay;
}
//=================================================================================

View File

@ -114,7 +114,7 @@ private:
private:
GEOM::GeomObjPtr myEditObject;
bool myIsNeedRedisplay;
private:
DlgRef_1Sel* myObjectSelector;
MeasureGUI_1TreeWidget_4Button* myDimensionView;

View File

@ -109,7 +109,7 @@ static void getEntityOwners( const Handle(AIS_InteractiveObject)& theObj,
for ( sel->Init(); sel->More(); sel->Next() ) {
#if OCC_VERSION_LARGE > 0x06080100
const SelectMgr_HSensitiveEntity aHSenEntity = sel->Sensitive();
const Handle(SelectMgr_SensitiveEntity) aHSenEntity = sel->Sensitive();
if( aHSenEntity.IsNull() )
continue;

View File

@ -259,6 +259,7 @@ void GEOM_VTKTrihedron::SetSize( double theSize )
aRes->AddInputConnection( aSrcZ->GetOutputPort() );
myMapper->SetInputConnection( aRes->GetOutputPort() );
aRes->Update();
SALOME_Actor::SetMapper( myMapper );
aSrcX->Delete();

View File

@ -411,7 +411,7 @@ bool PrimitiveGUI_CylinderDlg::isValid (QString& msg)
{
ok = GroupDimensions->SpinBox_DX->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DY->isValid( msg, !IsPreview() ) &&
( GroupDimensions->checkBox->isChecked() || GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ) );
( !GroupDimensions->checkBox->isChecked() || GroupDimensions->SpinBox_DZ->isValid( msg, !IsPreview() ) );
if ( GroupDimensions->checkBox->isChecked() &&
( GroupDimensions->SpinBox_DZ->value() <= 0. || GroupDimensions->SpinBox_DZ->value() >= 360. ) ) {
msg += tr("GEOM_CYLINDER_ANGLE_ERR") + "\n";

View File

@ -959,6 +959,7 @@ void RepairGUI_ShapeProcessDlg::operatorChecked( QListWidgetItem * item )
{
if ( item && item->checkState() == Qt::Checked )
{
item->setSelected(true);
myStack->setCurrentIndex( myOpList->row( item ));
}
updateSelectAll();

View File

@ -32,7 +32,7 @@
<name>STEPPlugin_GUI</name>
<message>
<source>STEP_FILES</source>
<translation>STEPファイル</translation>
<translation>STEP ( *.step *.stp )</translation>
</message>
<message>
<source>EXPORT_TITLE</source>

View File

@ -32,7 +32,7 @@
<name>STLPlugin_GUI</name>
<message>
<source>STL_FILES</source>
<translation>STLファイル</translation>
<translation>STL ( *.stl )</translation>
</message>
<message>
<source>EXPORT_TITLE</source>
@ -51,11 +51,11 @@
</message>
<message>
<source>RELATIVE</source>
<translation type="unfinished">Relative</translation>
<translation></translation>
</message>
<message>
<source>DEFLECTION</source>
<translation type="unfinished">Deflection</translation>
<translation></translation>
</message>
</context>
</TS>

View File

@ -32,7 +32,7 @@
<name>VTKPlugin_GUI</name>
<message>
<source>VTK_FILES</source>
<translation>VTKファイル</translation>
<translation>VTKファイル( *.vtk )</translation>
</message>
<message>
<source>EXPORT_TITLE</source>
@ -43,7 +43,7 @@
<name>VTKPlugin_ExportDlg</name>
<message>
<source>DEFLECTION</source>
<translation type="unfinished">Deflection</translation>
<translation></translation>
</message>
</context>
</TS>

View File

@ -5,27 +5,27 @@
<name>@default</name>
<message>
<source>MEN_EXPORTXAO</source>
<translation></translation>
<translation>XAOエクスポート</translation>
</message>
<message>
<source>TOP_EXPORTXAO</source>
<translation></translation>
<translation>XAOのエクスポート</translation>
</message>
<message>
<source>STB_EXPORTXAO</source>
<translation></translation>
<translation>XAOのエクスポート</translation>
</message>
<message>
<source>MEN_IMPORTXAO</source>
<translation></translation>
<translation>XAOインポート</translation>
</message>
<message>
<source>TOP_IMPORTXAO</source>
<translation></translation>
<translation>XAOのインポート</translation>
</message>
<message>
<source>STB_IMPORTXAO</source>
<translation></translation>
<translation>XAOのインポート</translation>
</message>
<message>
<source>XAOPLUGIN_IMPORT_SELECT</source>
@ -33,22 +33,22 @@
</message>
<message>
<source>XAOPLUGIN_EXPORT_SELECT</source>
<translation></translation>
<translation>XAOへのエクスポート</translation>
</message>
<message>
<source>XAOPLUGIN_FILES</source>
<translation> (*.xao)</translation>
<translation>XAO (*.xao)</translation>
</message>
</context>
<context>
<name>XAOPlugin_ExportDlg</name>
<message>
<source>XAOPLUGIN_EXPORT_TITLE</source>
<translation></translation>
<translation>XAOエクスポート</translation>
</message>
<message>
<source>XAOPLUGIN_EXPORTXAO</source>
<translation></translation>
<translation>XAOエクスポート</translation>
</message>
<message>
<source>XAOPLUGIN_EXPORT_INGSHAPE</source>
@ -75,11 +75,11 @@
<name>XAOPlugin_ImportDlg</name>
<message>
<source>XAOPLUGIN_IMPORT_TITLE</source>
<translation></translation>
<translation>XAOインポート</translation>
</message>
<message>
<source>XAOPLUGIN_IMPORTXAO</source>
<translation></translation>
<translation>XAOインポート</translation>
</message>
<message>
<source>XAOPLUGIN_IMPORT_INGSHAPE</source>