Merge from V6_3_BR 15/07/2011

This commit is contained in:
vsr 2011-07-15 10:48:49 +00:00
parent a21596709a
commit 660a8df6ce
29 changed files with 353 additions and 158 deletions

View File

@ -24,7 +24,7 @@
# Modified by : Alexander BORODIN (OCN) - autotools usage # Modified by : Alexander BORODIN (OCN) - autotools usage
# Created from configure.in.base # Created from configure.in.base
# #
AC_INIT([Salome2 Project GEOM module], [6.3.0], [webmaster.salome@opencascade.com], [SalomeGEOM]) AC_INIT([Salome2 Project GEOM module], [6.3.1], [webmaster.salome@opencascade.com], [SalomeGEOM])
AC_CONFIG_AUX_DIR(adm_local/unix/config_files) AC_CONFIG_AUX_DIR(adm_local/unix/config_files)
AC_CANONICAL_HOST AC_CANONICAL_HOST
AC_CANONICAL_TARGET AC_CANONICAL_TARGET
@ -416,6 +416,7 @@ AC_OUTPUT([ \
doc/salome/gui/GEOM/doxyfile_py \ doc/salome/gui/GEOM/doxyfile_py \
doc/salome/gui/GEOM/doxyfile_tui \ doc/salome/gui/GEOM/doxyfile_tui \
doc/salome/gui/GEOM/static/header.html \ doc/salome/gui/GEOM/static/header.html \
doc/salome/gui/GEOM/static/header_py.html \
doc/salome/tui/Makefile \ doc/salome/tui/Makefile \
doc/salome/tui/doxyfile \ doc/salome/tui/doxyfile \
doc/salome/tui/static/header.html \ doc/salome/tui/static/header.html \

View File

@ -110,7 +110,7 @@ RECURSIVE = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_HTML = YES GENERATE_HTML = YES
HTML_OUTPUT = geompy_doc HTML_OUTPUT = geompy_doc
HTML_HEADER = @builddir@/static/header.html HTML_HEADER = @builddir@/static/header_py.html
HTML_FOOTER = @srcdir@/static/footer.html HTML_FOOTER = @srcdir@/static/footer.html
HTML_STYLESHEET = @srcdir@/static/doxygen.css HTML_STYLESHEET = @srcdir@/static/doxygen.css
TOC_EXPAND = YES TOC_EXPAND = YES

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -5,58 +5,93 @@
To create a \b Curve in the <b>Main Menu</b> select <b>New Entity - > To create a \b Curve in the <b>Main Menu</b> select <b>New Entity - >
Basic - > Curve</b> Basic - > Curve</b>
\n There are three algorithms to create a \b Curve in the 3D space. Each There are three <b>Curve Construction</b> menu choices corresponding to three
time you define it by a list of \b Points through which the curve
passes. The three <b>Curve Construction</b> menu choices correspond to three
possible types of curves: Polyline, Besier or B-spline (Interpolated). possible types of curves: Polyline, Besier or B-spline (Interpolated).
The curve is defined by a list of \b Points through which it passes.
\n There are two ways to define these <b>Points</b>:
<ul>
<li> <b>By Selection</b> manual picking of the points in the Object Browser or 3D Viewer.
<li> <b>Analytical</b> parametric definition of the points through
python expressions.
</ul>
\n The \b Result of each operation will be a GEOM_Object (edge). \n The \b Result of each operation will be a GEOM_Object (edge).
\n There are two ways to define <b>Points</b>:
<ul>
<li> <b>By Selection</b> choice of the points manually in the Object Browser or 3D Viewer.
<li> <b>Analitical</b> parametric definition of the points through python expressions.
</ul>
\n <b>TUI Commands:</b> <b>Polyline</b>
<ul>
<li><em>geompy.MakePolyline(ListOfShapes,isClosed)</em></li>
<li><em>geompy.MakeBezier(ListOfShapes,isClosed)</em></li>
<li><em>geompy.MakeInterpol(ListOfShapes,isClosed,doReordering)</em></li>
<li><em>geompy.MakeCurveParametric(XExpr, YExpt, ZExpt, tMin, tMax, tStep, curveType)</em></li>
</ul>
ListOfShape is a list of points through which the curve passes.
If isClosed is True, MakeBezier and MakeInterpol builds a closed edge,
MakePolyline builds a closed wire. If doReordering is True,
MakeInterpol does not follow the order of vertices but searches for the
closest vertex.
\n XExpr, YExpr, ZExpr python expressions for the X, Y and Z coordinates of the basic points of the curve.
\n tMin, tMax minimum and maximun values of the parameter \b t.
\n tStep step of the parameter \b t
\n curveType type of the curve Polyline, Bezier or Interpolation.
<b>Arguments:</b>
<ul>
<li>Name + at least 2 points which will serve as nodes on the curve, or</li>
<li>Name + 3 string + 3 values (python expressions for the X, Y and Z coordinates, minimum,
maximum and step values of the parameter)</li>
</ul>
\n<b>Advanced options</b> \ref preview_anchor "Preview"
\image html curve.png
\image html curve1.png
\image html curve2.png
<b>Examples:</b>
\image html polyline.png \image html polyline.png
<center>Polyline</center>
Polyline or polygonal chain is a connected series of line segments. It
can be defined by the following parameters:
\image html curve2.png
<ul>
<li><b>Points</b> at least 2 points which will serve as nodes on the curve.</li>
<li><b>Build a closed wire</b> checkbox allows creating the curve as
closed wire.</li>
</ul>
\n <b>TUI Command:</b> <em>geompy.MakePolyline(ListOfShapes,isClosed)</em>
<b>Bezier</b>
\image html bezier.png \image html bezier.png
<center>Bezier</center>
Bezier curve is a curve completely contained in a convex hull of its
control points. It can be defined by the following parameters:
\image html curve3.png
<ul>
<li><b>Points</b> at least 2 points used to approximate the curve.</li>
<li><b>Build a closed edge</b> checkbox allows creating the curve as
closed edge.</li>
</ul>
\n <b>TUI Command:</b> <em>geompy.MakeBezier(ListOfShapes,isClosed)</em>
<b>B-spline</b>
\image html interpol.png \image html interpol.png
<center>B-Spline</center>
B-spline is a union of curve segments defined at each node span. It
can be defined by the following parameters:
\image html curve4.png
<ul>
<li><b>Points</b> at least 2 points which will serve as nodes on the curve.</li>
<li><b>Build a closed edge</b> checkbox allows creating the curve as
closed edge.</li>
<li> If <b>Reorder vertices taking into account distances</b> is
checked, the interpolation algorithm does not follow the order of
vertices but searches for the closest vertex.</li>
</ul>
\n <b>TUI Command:</b>
<em>geompy.MakeInterpol(ListOfShapes,isClosed,doReordering)</em>
<b>Analytical Definition</b>
The input parameters for analytical definition are common for all
types of curves.
\image html curve1.png
<ul>
<li><b>X(t)equation, Y(t)equation, Z(t)equation</b> are python
expressions for X, Y and Z coordinates of the basic points of the curve.</li>
<li><b>Min t, Max t</b> are minimum and maximum values of the parameter \b t.</li>
<li><b>Step</b> is the step of the parameter \b t.</li>
</ul>
\n <b>TUI Command:</b> <em>geompy.MakeCurveParametric(XExpr, YExpt, ZExpt, tMin, tMax, tStep, curveType)</em>
\n<b>Advanced options</b> \ref preview_anchor "Preview"
Our <b>TUI Scripts</b> provide you with useful examples of creation of Our <b>TUI Scripts</b> provide you with useful examples of creation of
\ref tui_creation_curve "Basic Geometric Objects". \ref tui_creation_curve "Basic Geometric Objects".

View File

@ -41,17 +41,21 @@ the connection points (sharp bend) is not processed.
\image html edge2.png "Create edge from wire" \image html edge2.png "Create edge from wire"
The third case allows building edges of desired length on any existing Thirdly, it is possible to build an edge of required \b Length on any existing
curve (selected existing edge). <b>Start Point</b> parameter is optional. \b Edge.
Any point can be selected for it, the new edge will begin at the end
of initial edge, close to the selected point. <b>Length</b> can exceed <b>Start Point</b> parameter is optional:
the initial edge's length or be negative to extrapolate existing edge - if used, it allows selecting any existing point - in such a case the start point
along its curve (except bezier and b-spline curves). of the new edge will be chosen as start or end point of the selected \b Edge
whatever is closest to the selected <b>Start Point</b>
- if it is missed, the start point of the initial edge is used
<b>Length</b> can exceed the length of the initial edge length or be
negative. In this case the existing edge is extrapolated
along its curve (except for bezier and b-spline curves).
<b>TUI Command:</b> <em>geompy.MakeEdgeOnCurveByLength(Edge, Length, StartPoint = None)</em><br> <b>TUI Command:</b> <em>geompy.MakeEdgeOnCurveByLength(Edge, Length, StartPoint = None)</em><br>
<b>Arguments:</b> Name + 1 edge + Length + 1 Vertex <b>Arguments:</b> Name + 1 edge + Length + 1 Vertex
(StartPoint parameter is optional, it allows switching from one end of
initial edge to another. Length can exceed the initial edge's length or be negative).
\image html edge3.png "Create edge on curve" \image html edge3.png "Create edge on curve"

View File

@ -16,7 +16,7 @@ obtain from it.
variety of ways: variety of ways:
<ul> <ul>
<li><em>geompy.ExtractShapes(Shape, Type, isSorted)</em> explodes a <li><em>geompy.ExtractShapes(Shape, Type, isSorted)</em> explodes a
Shape on subshapes of a given Type and returns a List of sub-shapes. Shape into subshapes of a given Type and returns a List of sub-shapes.
This method does not return the Shape itself if it matches the This method does not return the Shape itself if it matches the
Type.</li> Type.</li>
<li><em>geompy.SubShapeAll(Shape, Type)</em> explodes a Shape on <li><em>geompy.SubShapeAll(Shape, Type)</em> explodes a Shape on

View File

@ -33,15 +33,17 @@ point is located in the middle of the edge.
position of the point on the given edge. position of the point on the given edge.
\image html point3.png \image html point3.png
Alternatively, it is possible to define the point by \b Edge and \b Length, Alternatively, it is possible to define a point by an \b Edge and a \b Length.
the given length can exceed the length of the edge or be negative The \b Length defines the position of the point on the given edge. It
(except bezier and b-spline curves). The orientation of the edge can can exceed the length of the edge or be negative. In this case the edge
be reversed by the \b StartPoint selection. is extrapolated along its curve (except for bezier and b-spline
\n <b>TUI Command:</b> <em>geompy.MakeVertexOnCurveByLength(Edge,Length,StartPoint=None).</em> curves).
\n <b>Arguments:</b> Name + 1 edge + 1 Length defining the position The <b>Start Point</b> defines the direction for the length
of the point on the given edge + 1 Point defining the direction for calculation (if not defined, the first vertex of
the calculation of the length (if not defined, the first vertex of
Edge is used, else the vertex of Edge closest to StartPoint is used). Edge is used, else the vertex of Edge closest to StartPoint is used).
\n <b>TUI Command:</b> <em>geompy.MakeVertexOnCurveByLength(Edge,Length,StartPoint=None).</em>
\n <b>Arguments:</b> Name + 1 edge + 1 Length + 1 Point.
\image html point3_3.png \image html point3_3.png
It is also possible to define 3D coordinates of the point It is also possible to define 3D coordinates of the point

View File

@ -0,0 +1,60 @@
/*!
\page glue_edges_operation_page Glue Edges
\n To <b>Glue Edges</b> in the <b>Main Menu</b> select <b>Repair - > Glue Edges</b>.
\n This operation glues edges that are coincident with respect to the
given tolerance value.
\n <b>Arguments:</b> Name + Compound of shapes + Tolerance value.
\n <b>Advanced option:</b>
\ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
\n The \b Result will be a \b GEOM_Object.
\image html glue4.png
\n <b>TUI Command:</b>
\n <em>geompy.MakeGlueEdges(theShape,theTolerance)</em>,
\n where \em theShape is a compound of shapes to be glued, and \em
theTolerance is a maximum distance between two faces/edges, which can
be considered as coincident.
\n It is also possible to manually select the edges that will be
glued - select the shape, specify the tolerance and press \b Detect button.
\image html glue5.png
\n \b Geometry module detects the edges where gluing can be
performed and displays a notification.
\image html glue7.png
\n The edges that can be glued are colored in red. It is
possible to select the edges for gluing in the 3D viewer.
The selected edges will be marked in white.
\n <b>TUI Command:</b>
\n <em>geompy.GetGlueEdges(theShape,theTolerance)</em>,
\n where \em theShape is a compound of shapes to be glued, \em
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, containing one sub shape per each detected set of
coincident sub shapes.
\n <em>geompy.MakeGlueEdgesByList(theShape,theTolerance,theEdges)</em>,
\n where \em theShape is a 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
subshapes to be glued.
\n <b>Example:</b>
\image html glue8.png
<center><em>Box with an edge that can be glued</em></center>
Our <b>TUI Scripts</b> provide you with useful examples of the use of
<b>Repairing Operations</b> \ref tui_glue_edges "Glue Edges".
*/

View File

@ -1,11 +1,11 @@
/*! /*!
\page glue_faces_operation_page Glue Faces / Edges \page glue_faces_operation_page Glue Faces
\n To <b>Glue Faces</b> in the <b>Main Menu</b> select <b>Repair - > Glue Faces</b>. \n To <b>Glue Faces</b> in the <b>Main Menu</b> select <b>Repair - > Glue Faces</b>.
\n To <b>Glue Edges</b> in the <b>Main Menu</b> select <b>Repair - > Glue Edges</b>.
\n This operation glues faces/edges that are coincident with respect to the
\n This operation glues faces that are coincident with respect to the
given tolerance value. given tolerance value.
\n <b>Arguments:</b> Name + Compound of shapes + Tolerance value. \n <b>Arguments:</b> Name + Compound of shapes + Tolerance value.
@ -14,51 +14,46 @@ given tolerance value.
\n The \b Result will be a \b GEOM_Object. \n The \b Result will be a \b GEOM_Object.
\image html glue1.png \image html glue1.png
\n \image html glue4.png
\n <b>TUI Commands:</b> \n <b>TUI Commands:</b>
<em>geompy.MakeGlueFaces(theShape,theTolerance,doKeepNonSolids)</em> and \n <em>geompy.MakeGlueFaces(theShape,theTolerance,doKeepNonSolids)</em>,
<em>geompy.MakeGlueEdges(theShape,theTolerance)</em>, \n where \em theShape is a compound of shapes to be glued, \em
where \em theShape is a compound of shapes to be glued, \em theTolerance is a maximum distance between two faces, which can
theTolerance is a maximum distance between two faces/edges, which can
be considered as coincident. The \em doKeepNonSolids flag allows to be considered as coincident. The \em doKeepNonSolids flag allows to
throw away non-solids from the result, if false. The \b Result will throw away non-solids from the result, if false. The \b Result will
be a new \b GEOM_Object. be a new \b GEOM_Object.
\n It is also possible to manually select the faces/edges that will be \n It is also possible to manually select the faces that will be
glued - select the shape, specify the tolerance and press \b Detect button. glued - select the shape, specify the tolerance and press \b Detect button.
\image html glue2.png \image html glue2.png
\n \image html glue5.png
\n \b Geometry module detects the faces/edges where gluing can be \n \b Geometry module detects the faces where gluing can be
performed and displays a notification. performed and displays a notification.
\image html glue3.png \image html glue3.png
\n The faces/edges that can be glued are colored in red. It is \n The faces that can be glued are colored in red. It is
possible to select the faces/edges for gluing in the 3D viewer. possible to select the faces for gluing in the 3D viewer.
The selected faces/edges will be marked in white. The selected faces will be marked in white.
\n For faces gluing their edges are also glued. By default, other \n When the faces are glued their edges are glued as well. By default, other
edges are not glued (this concerns only Glue Faces, of course). edges are not glued. To force gluing of all edges, check <b>Glue all coincident edges</b>
To force all edges gluing, check the "Glue all coincident edges"
checkbox. checkbox.
\n <b>TUI Commands:</b> \n <b>TUI Commands:</b>
<em>geompy.GetGlueFaces(theShape,theTolerance)</em> and \n <em>geompy.GetGlueFaces(theShape,theTolerance)</em>,
<em>geompy.GetGlueEdges(theShape,theTolerance)</em>, \n where \em theShape is a compound of shapes to be glued, \em
where \em theShape is a compound of shapes to be glued, \em theTolerance is a maximum distance between two faces, which can
theTolerance is a maximum distance between two faces/edges, which can
be considered as coincident. The \b Result will be a list of \b be considered as coincident. The \b Result will be a list of \b
GEOM_Objects, containing one sub shape per each detected set of GEOM_Objects, containing one sub shape per each detected set of
coincident sub shapes. coincident sub shapes.
\n <em>geompy.MakeGlueFacesByList(theShape,theTolerance,theFaces,doKeepNonSolids,doGlueAllEdges)</em> \n <em>geompy.MakeGlueFacesByList(theShape,theTolerance,theFaces,doKeepNonSolids,doGlueAllEdges)</em>,
and <em>geompy.MakeGlueEdgesByList(theShape,theTolerance,theEdges)</em>, \n where \em theShape is a compound of shapes to be glued, \em
where \em theShape is a compound of shapes to be glued, \em theTolerance is a maximum distance between two faces, which can
theTolerance is a maximum distance between two faces/edges, which can be considered as coincident, \em theFaces is a list of
be considered as coincident, \em theFaces/theEdges is a list of
subshapes to be glued. The \em doKeepNonSolids flag allows to throw subshapes to be glued. The \em doKeepNonSolids flag allows to throw
away non-solids from the result, if false. The \em doGlueAllEdges away non-solids from the result, if false. The \em doGlueAllEdges
allows to glue all edges, not only owned by glued faces. The \b allows to glue all edges, not only owned by glued faces. The \b
@ -76,7 +71,6 @@ checkbox.
<center><em>Manual selection of faces for gluing</em></center> <center><em>Manual selection of faces for gluing</em></center>
Our <b>TUI Scripts</b> provide you with useful examples of the use of Our <b>TUI Scripts</b> provide you with useful examples of the use of
<b>Repairing Operations</b> \ref tui_glue_faces "Glue Faces" and \ref <b>Repairing Operations</b> \ref tui_glue_faces "Glue Faces".
tui_glue_edges "Glue Edges".
*/ */

View File

@ -17,6 +17,8 @@ holes with free boundaries on a selected face.</li>
<li>\subpage sewing_operation_page "Sewing" - sews faces or shells.</li> <li>\subpage sewing_operation_page "Sewing" - sews faces or shells.</li>
<li>\subpage glue_faces_operation_page "Glue faces" - unites <li>\subpage glue_faces_operation_page "Glue faces" - unites
coincident faces within the given tolerance.</li> coincident faces within the given tolerance.</li>
<li>\subpage glue_edges_operation_page "Glue edges" - unites
coincident edges within the given tolerance.</li>
<li>\subpage limit_tolerance_operation_page "Limit Tolerance" - tries <li>\subpage limit_tolerance_operation_page "Limit Tolerance" - tries
to set new tolerance value for the given shape.</li> to set new tolerance value for the given shape.</li>
<li>\subpage add_point_on_edge_operation_page "Add point on edge" - <li>\subpage add_point_on_edge_operation_page "Add point on edge" -

View File

@ -4,7 +4,7 @@
<br><center><b>Set presentation parameters and subshapes from arguments</b></center> <br><center><b>Set presentation parameters and subshapes from arguments</b></center>
\n This option allows the operation result to inherit colour \n This option allows the operation result to inherit color
and subshapes from its arguments. and subshapes from its arguments.
\n To activate this functionality, check in "Set \n To activate this functionality, check in "Set
@ -17,7 +17,7 @@ faces and Cylinder_1 with free published edges.
\image html restore-ss-viewer-before.png "The initial box and cylinder" \image html restore-ss-viewer-before.png "The initial box and cylinder"
First, we examine the case when the resulting shape corresponds to one argument (after transformation, First, we examine the case when the resulting shape corresponds to one argument (after transformation,
after the boolean operation Cut, or after the partiton with one object shape). after the Boolean operation Cut, or after the partiton with one object shape).
We create a Cut of Box_1 with Cylinder_1. We create a Cut of Box_1 with Cylinder_1.
@ -28,7 +28,7 @@ The resulting shape inherits the subshapes and the colour of Box_1.
\image html restore-ss-viewer-cut.png "The resulting shape" \image html restore-ss-viewer-cut.png "The resulting shape"
Second, we examine the case when the resulting shape is composed from multiple arguments Second, we examine the case when the resulting shape is composed from multiple arguments
(after all boolean operations, except for Cut, or after the partition with (after all Boolean operations, except for Cut, or after the partition with
several object shapes, or if the resulting shape is a compound). several object shapes, or if the resulting shape is a compound).
We create a Common of Box_1 and Cylinder_1. We create a Common of Box_1 and Cylinder_1.
@ -37,7 +37,7 @@ We create a Common of Box_1 and Cylinder_1.
\n The resulting object is created with several subshapes that correspond to the \n The resulting object is created with several subshapes that correspond to the
operation arguments and their published subshapes. The resulting shape operation arguments and their published subshapes. The resulting shape
has a default colour, but its subshapes inherit colors corresponding has a default color, but its subshapes inherit colors corresponding
to arguments and their subshapes. to arguments and their subshapes.
\image html restore-ss-viewer-after.png "The resulting shape" \image html restore-ss-viewer-after.png "The resulting shape"
@ -62,6 +62,6 @@ restored sub-shapes, and the prefix "from_subshapes_of_" to the names of partial
By default this option is On. By default this option is On.
\anchor preview_anchor <br><center><b>Preview</b></center> \anchor preview_anchor <br><center><b>Preview</b></center>
<b>Preview</b> checkbox allows display/erase simulation of the <b>Result</b> in the viewer. <b>Preview</b> checkbox allows displaying/erasing simulation of the <b>Result</b> in the viewer.
*/ */

View File

@ -0,0 +1,23 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>$title</title>
<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
<link href="$relpath$search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath$search/search.js"></script>
<link href="$relpath$navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="$relpath$jquery.js"></script>
<script type="text/javascript" src="$relpath$navtree.js"></script>
<script type="text/javascript" src="$relpath$resize.js"></script>
<script type="text/javascript">
$(document).ready(initResizable);
</script>
<link href="$relpath$doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<div id="top"><!-- do not remove this div! -->
<div id="titlearea"><div align="right"><div class="version">Version: @VERSION@</div></div></div>
<div align="bottom-left"><a href=../index.html>Home</a></div>
</div>

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : EntityGUI_SubShapeDlg.cxx // File : EntityGUI_SubShapeDlg.cxx
@ -64,7 +63,9 @@
//================================================================================= //=================================================================================
EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidget* parent, EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl) bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl) : GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl),
myWithShape(true),
myIsHiddenMain(false)
{ {
QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SUBSHAPE"))); QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_SUBSHAPE")));
QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT"))); QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
@ -111,6 +112,11 @@ EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidge
//================================================================================= //=================================================================================
EntityGUI_SubShapeDlg::~EntityGUI_SubShapeDlg() EntityGUI_SubShapeDlg::~EntityGUI_SubShapeDlg()
{ {
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myObject);
myIsHiddenMain = false;
}
} }
//================================================================================= //=================================================================================
@ -289,6 +295,12 @@ void EntityGUI_SubShapeDlg::SelectionIntoArgument()
return; return;
} }
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myObject);
myIsHiddenMain = false;
}
TopoDS_Shape S = GEOMBase::GetTopoFromSelection(aSelList); TopoDS_Shape S = GEOMBase::GetTopoFromSelection(aSelList);
if (S.IsNull() || S.ShapeType() == TopAbs_VERTEX) { if (S.IsNull() || S.ShapeType() == TopAbs_VERTEX) {
myObject = GEOM::GEOM_Object::_nil(); myObject = GEOM::GEOM_Object::_nil();
@ -393,6 +405,11 @@ void EntityGUI_SubShapeDlg::LineEditReturnPressed()
//================================================================================= //=================================================================================
void EntityGUI_SubShapeDlg::ResetStateOfDialog() void EntityGUI_SubShapeDlg::ResetStateOfDialog()
{ {
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myObject);
myIsHiddenMain = false;
}
myObject = GEOM::GEOM_Object::_nil(); myObject = GEOM::GEOM_Object::_nil();
myShape.Nullify(); myShape.Nullify();
myEditCurrentArgument->setText(""); myEditCurrentArgument->setText("");
@ -641,7 +658,15 @@ void EntityGUI_SubShapeDlg::activateSelection()
if (!myObject->_is_nil() && !isAllSubShapes()) if (!myObject->_is_nil() && !isAllSubShapes())
{ {
GEOM_Displayer* aDisplayer = getDisplayer(); GEOM_Displayer* aDisplayer = getDisplayer();
SALOME_View* view = GEOM_Displayer::GetActiveView();
if (view) {
CORBA::String_var aMainEntry = myObject->GetStudyEntry();
Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject (aMainEntry.in(), "GEOM", "TEMP_IO");
if (view->isVisible(io)) {
aDisplayer->Erase(myObject, false, false); aDisplayer->Erase(myObject, false, false);
myIsHiddenMain = true;
}
}
int prevDisplayMode = aDisplayer->SetDisplayMode(0); int prevDisplayMode = aDisplayer->SetDisplayMode(0);

View File

@ -88,6 +88,8 @@ private:
bool myWithShape; bool myWithShape;
bool myIsHiddenMain;
DlgRef_1Sel1List1Check3Btn* GroupPoints; DlgRef_1Sel1List1Check3Btn* GroupPoints;
}; };

View File

@ -19,7 +19,6 @@
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
// File: GEOMAlgo_Gluer2.cxx // File: GEOMAlgo_Gluer2.cxx
// Author: Peter KURNEV // Author: Peter KURNEV

View File

@ -22,8 +22,7 @@
// File: GEOMAlgo_Gluer2_3.cxx // File: GEOMAlgo_Gluer2_3.cxx
// Created: // Created:
// Author: Peter KURNEV // Author: Peter KURNEV
// <peter@PREFEX>
//
#include <GEOMAlgo_Gluer2.hxx> #include <GEOMAlgo_Gluer2.hxx>
#include <TopAbs_ShapeEnum.hxx> #include <TopAbs_ShapeEnum.hxx>
@ -332,9 +331,11 @@ void MapShapes1(const TopoDS_Shape& aS,
const TopAbs_ShapeEnum aType, const TopAbs_ShapeEnum aType,
TopTools_IndexedMapOfShape& aM) TopTools_IndexedMapOfShape& aM)
{ {
TopExp_Explorer aEx (aS, aType); TopExp_Explorer aExp;
while (aEx.More()) {
const TopoDS_Shape aSx=aEx.Current(); aExp.Init (aS, aType);
for ( ;aExp.More(); aExp.Next()) {
const TopoDS_Shape aSx=aExp.Current();
if (aType==TopAbs_EDGE) { if (aType==TopAbs_EDGE) {
const TopoDS_Edge& aEx=*((TopoDS_Edge*)&aSx); const TopoDS_Edge& aEx=*((TopoDS_Edge*)&aSx);
if (BRep_Tool::Degenerated(aEx)) { if (BRep_Tool::Degenerated(aEx)) {
@ -342,6 +343,29 @@ void MapShapes1(const TopoDS_Shape& aS,
} }
} }
aM.Add(aSx); aM.Add(aSx);
aEx.Next();
} }
} }
/*
//=======================================================================
//function : MapShapes1
//purpose :
//=======================================================================
void MapShapes1(const TopoDS_Shape& aS,
const TopAbs_ShapeEnum aType,
TopTools_IndexedMapOfShape& aM)
{
TopExp_Explorer aExp (aS, aType);
while (aExp.More()) {
const TopoDS_Shape aSx=aExp.Current();
if (aType==TopAbs_EDGE) {
const TopoDS_Edge& aEx=*((TopoDS_Edge*)&aSx);
if (BRep_Tool::Degenerated(aEx)) {
aExp.Next();
continue;
}
}
aM.Add(aSx);
aExp.Next();
}
}
*/

View File

@ -25,6 +25,8 @@
#ifndef GEOM_GenericObjPtr_H #ifndef GEOM_GenericObjPtr_H
#define GEOM_GenericObjPtr_H #define GEOM_GenericObjPtr_H
#include "GEOM_GEOMBase.hxx"
#include "SALOMEconfig.h" #include "SALOMEconfig.h"
#include CORBA_SERVER_HEADER(GEOM_Gen) #include CORBA_SERVER_HEADER(GEOM_Gen)
@ -228,7 +230,7 @@ namespace GEOM
typedef GenericObjPtr<GEOM::GEOM_IGroupOperations> GroupOpPtr; typedef GenericObjPtr<GEOM::GEOM_IGroupOperations> GroupOpPtr;
typedef GenericObjPtr<GEOM::GEOM_IAdvancedOperations> AdvancedOpPtr; typedef GenericObjPtr<GEOM::GEOM_IAdvancedOperations> AdvancedOpPtr;
template<> bool GenericObjPtr<GEOM::GEOM_Object>::isSame( GEOM::GEOM_Object_ptr theLeft, GEOM::GEOM_Object_ptr theRight ); template<> bool GEOMBASE_EXPORT GenericObjPtr<GEOM::GEOM_Object>::isSame( GEOM::GEOM_Object_ptr theLeft, GEOM::GEOM_Object_ptr theRight );
} }
#endif // GEOM_GenericObjPtr_H #endif // GEOM_GenericObjPtr_H

View File

@ -55,7 +55,6 @@
#define HST_CLIENT_LEN 256 #define HST_CLIENT_LEN 256
//======================================================================= //=======================================================================
// function : Load() // function : Load()
// purpose : // purpose :
@ -105,10 +104,8 @@ GEOM_Client::GEOM_Client()
//======================================================================= //=======================================================================
GEOM_Client::GEOM_Client(const GEOM_Client& client) GEOM_Client::GEOM_Client(const GEOM_Client& client)
{ {
myIORs = client.myIORs;
myShapes = client.myShapes;
_myIndexes = client._myIndexes;
_mySubShapes = client._mySubShapes; _mySubShapes = client._mySubShapes;
myShapesMap = client.myShapesMap;
pid_client = client.pid_client; pid_client = client.pid_client;
} }
@ -142,30 +139,29 @@ GEOM_Client GEOM_Client::get_client()
// function : Find() // function : Find()
// purpose : // purpose :
//======================================================================= //=======================================================================
Standard_Integer GEOM_Client::Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) Standard_Boolean GEOM_Client::Find (const TCollection_AsciiString& IOR, TopoDS_Shape& S)
{ {
if (_myIndexes.count(IOR) != 0) if (myShapesMap.count(IOR) != 0) {
{ S = myShapesMap[IOR];
Standard_Integer i = _myIndexes[IOR]; return Standard_True;
S = myShapes.Value(i);
return i;
} }
return 0; return Standard_False;
} }
//======================================================================= //=======================================================================
// function : Find() // function : Find()
// purpose : // purpose :
//======================================================================= //=======================================================================
Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) Standard_Boolean GEOM_Client::Find (const TopoDS_Shape& S, TCollection_AsciiString& IOR)
{ {
for ( Standard_Integer i = 1; i<= myShapes.Length(); i++ ) { std::map< TCollection_AsciiString, TopoDS_Shape >::const_iterator it;
if (myShapes.Value(i) == S) { for (it = myShapesMap.begin(); it != myShapesMap.end(); ++it) {
IOR = myIORs.Value(i); if ((*it).second == S) {
return i; IOR = (*it).first;
return Standard_True;
} }
} }
return 0; return Standard_False;
} }
//======================================================================= //=======================================================================
@ -174,9 +170,7 @@ Standard_Integer GEOM_Client::Find( const TopoDS_Shape& S, TCollection_AsciiStri
//======================================================================= //=======================================================================
void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S )
{ {
myIORs.Append(IOR); myShapesMap[IOR] = S;
myShapes.Append(S);
_myIndexes[IOR] = myIORs.Length();
} }
//======================================================================= //=======================================================================
@ -185,15 +179,11 @@ void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape&
//======================================================================= //=======================================================================
void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR) void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
{ {
if( myIORs.IsEmpty() ) if (myShapesMap.size() == 0)
return; return;
TopoDS_Shape S; if (myShapesMap.count(IOR) != 0) {
Standard_Integer anIndex = Find( IOR, S ); myShapesMap.erase(IOR);
if( anIndex != 0 ) {
myIORs.Remove(anIndex);
myShapes.Remove(anIndex);
_myIndexes.erase(IOR);
_mySubShapes.erase(IOR); _mySubShapes.erase(IOR);
} }
} }
@ -204,13 +194,11 @@ void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
//======================================================================= //=======================================================================
void GEOM_Client::ClearClientBuffer() void GEOM_Client::ClearClientBuffer()
{ {
if( myIORs.IsEmpty() ) if (myShapesMap.size() == 0)
return; return;
myIORs.Clear();
myShapes.Clear();
_myIndexes.clear();
_mySubShapes.clear(); _mySubShapes.clear();
return; myShapesMap.clear();
} }
//======================================================================= //=======================================================================
@ -219,7 +207,7 @@ void GEOM_Client::ClearClientBuffer()
//======================================================================= //=======================================================================
unsigned int GEOM_Client::BufferLength() unsigned int GEOM_Client::BufferLength()
{ {
return myIORs.Length(); return myShapesMap.size();
} }
//======================================================================= //=======================================================================
@ -231,9 +219,9 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
TopoDS_Shape S; TopoDS_Shape S;
CORBA::String_var anIOR = geom->GetStringFromIOR(aShape); CORBA::String_var anIOR = geom->GetStringFromIOR(aShape);
TCollection_AsciiString IOR = (char*)anIOR.in(); TCollection_AsciiString IOR = (char*)anIOR.in();
Standard_Integer anIndex = Find(IOR, S); Standard_Boolean anIndex = Find(IOR, S);
if (anIndex != 0) return S; if (anIndex) return S;
/******* in case of a MAIN GEOM::SHAPE ********/ /******* in case of a MAIN GEOM::SHAPE ********/
if (aShape->IsMainShape()) { if (aShape->IsMainShape()) {
@ -251,7 +239,7 @@ TopoDS_Shape GEOM_Client::GetShape( GEOM::GEOM_Gen_ptr geom, GEOM::GEOM_Object_p
TCollection_AsciiString mainIOR = (char*)aMainIOR.in(); TCollection_AsciiString mainIOR = (char*)aMainIOR.in();
//find subshapes only one time //find subshapes only one time
if(_mySubShapes.count(mainIOR)==0) if (_mySubShapes.count(mainIOR) == 0)
{ {
TopTools_IndexedMapOfShape anIndices; TopTools_IndexedMapOfShape anIndices;
TopExp::MapShapes(aMainShape, anIndices); TopExp::MapShapes(aMainShape, anIndices);

View File

@ -111,9 +111,9 @@ class GEOMCLIENT_EXPORT GEOM_Client {
//Standard_EXPORT //Standard_EXPORT
GEOM_Client(const GEOM_Client& client); GEOM_Client(const GEOM_Client& client);
//Standard_EXPORT //Standard_EXPORT
Standard_Integer Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) ; Standard_Boolean Find( const TCollection_AsciiString& IOR, TopoDS_Shape& S ) ;
//Standard_EXPORT //Standard_EXPORT
Standard_Integer Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ; Standard_Boolean Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;
//Standard_EXPORT //Standard_EXPORT
void Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) ; void Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) ;
//Standard_EXPORT //Standard_EXPORT
@ -134,10 +134,8 @@ class GEOMCLIENT_EXPORT GEOM_Client {
private: private:
// Fields PRIVATE // Fields PRIVATE
// //
TColStd_SequenceOfAsciiString myIORs ;
TopTools_SequenceOfShape myShapes ;
std::map< TCollection_AsciiString , int > _myIndexes;
std::map< TCollection_AsciiString , std::vector<TopoDS_Shape> > _mySubShapes; std::map< TCollection_AsciiString , std::vector<TopoDS_Shape> > _mySubShapes;
std::map< TCollection_AsciiString , TopoDS_Shape > myShapesMap;
long pid_client; long pid_client;
}; };

View File

@ -4344,7 +4344,7 @@ Otherwise the dimensions will be kept without modifications.</translation>
</message> </message>
<message> <message>
<source>GEOM_CURVE_ANALITICAL</source> <source>GEOM_CURVE_ANALITICAL</source>
<translation>Analitical</translation> <translation>Analytical</translation>
</message> </message>
</context> </context>
<context> <context>

View File

@ -20,6 +20,14 @@
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// //
#ifdef WNT
// E.A. : On windows with python 2.6, there is a conflict
// E.A. : between pymath.h and Standard_math.h which define
// E.A. : some same symbols : acosh, asinh, ...
#include <Standard_math.hxx>
#include <pymath.h>
#endif
#include <Python.h> #include <Python.h>
#include <structmember.h> #include <structmember.h>
@ -875,7 +883,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric(const char*
aPyScript += thezExpr; aPyScript += thezExpr;
aPyScript += "\n"; aPyScript += "\n";
aPyScript +="def coordCalucator(tmin, tmax, tstep): \n"; aPyScript +="def coordCalculator(tmin, tmax, tstep): \n";
aPyScript +=" coords = [] \n"; aPyScript +=" coords = [] \n";
aPyScript +=" while tmin <= tmax : \n"; aPyScript +=" while tmin <= tmax : \n";
aPyScript +=" coords.append([X(tmin), Y(tmin), Z(tmin)]) \n"; aPyScript +=" coords.append([X(tmin), Y(tmin), Z(tmin)]) \n";
@ -909,7 +917,8 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric(const char*
PyObject* obj = PyRun_String(aPyScript.ToCString(), Py_file_input, main_dict, NULL); PyObject* obj = PyRun_String(aPyScript.ToCString(), Py_file_input, main_dict, NULL);
if (obj == NULL) { if (obj == NULL) {
SetErrorCode("Error during run python script !!!"); SetErrorCode("Error during executing of python script !!!");
PyErr_Print();
PyGILState_Release(gstate); PyGILState_Release(gstate);
return NULL; return NULL;
} else { } else {
@ -917,7 +926,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric(const char*
} }
PyObject * func = NULL; PyObject * func = NULL;
func = PyObject_GetAttrString(main_mod, "coordCalucator"); func = PyObject_GetAttrString(main_mod, "coordCalculator");
if (func == NULL){ if (func == NULL){
SetErrorCode("Can't get function from python module !!!"); SetErrorCode("Can't get function from python module !!!");
@ -936,7 +945,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCurveParametric(const char*
PyErr_Print(); PyErr_Print();
PySys_SetObject((char*)"stderr", PySys_GetObject((char*)"__stderr__")); PySys_SetObject((char*)"stderr", PySys_GetObject((char*)"__stderr__"));
Py_DECREF(new_stderr); Py_DECREF(new_stderr);
MESSAGE("Can't evaluate coordCalucator()" << " error is " << err_description); MESSAGE("Can't evaluate coordCalculator()" << " error is " << err_description);
SetErrorCode("Can't evaluate the expressions, please check them !!!"); SetErrorCode("Can't evaluate the expressions, please check them !!!");
PyGILState_Release(gstate); PyGILState_Release(gstate);
return NULL; return NULL;

View File

@ -789,7 +789,10 @@ Standard_Integer GEOMImpl_ShapeDriver::Execute(TFunction_Logbook& log) const
concatcurve->SetValue(concatcurve->Lower(), Concat.BSplineCurve()); concatcurve->SetValue(concatcurve->Lower(), Concat.BSplineCurve());
} }
// rnc : prevents the driver from building an edge without C1 continuity
if (concatcurve->Value(concatcurve->Lower())->Continuity()==GeomAbs_C0){
Standard_ConstructionError::Raise("Construction aborted : The given Wire has sharp bends between some Edges, no valid Edge can be built");
}
ResEdge = BRepLib_MakeEdge(concatcurve->Value(concatcurve->Lower()), ResEdge = BRepLib_MakeEdge(concatcurve->Value(concatcurve->Lower()),
FirstVertex, LastVertex); FirstVertex, LastVertex);
} }

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : GroupGUI_GroupDlg.cxx // File : GroupGUI_GroupDlg.cxx
@ -72,7 +71,8 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg (Mode mode, GeometryGUI* theGeometryGUI, QW
: GEOMBase_Skeleton(theGeometryGUI, parent, false), : GEOMBase_Skeleton(theGeometryGUI, parent, false),
myMode(mode), myMode(mode),
myBusy(false), myBusy(false),
myIsShapeType(false) myIsShapeType(false),
myIsHiddenMain(false)
{ {
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
@ -184,6 +184,11 @@ GroupGUI_GroupDlg::GroupGUI_GroupDlg (Mode mode, GeometryGUI* theGeometryGUI, QW
GroupGUI_GroupDlg::~GroupGUI_GroupDlg() GroupGUI_GroupDlg::~GroupGUI_GroupDlg()
{ {
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myMainObj);
myIsHiddenMain = false;
}
} }
//================================================================================= //=================================================================================
@ -461,6 +466,11 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
GEOMBase::ConvertIOinGEOMObject(aSelList.First()); GEOMBase::ConvertIOinGEOMObject(aSelList.First());
if (GEOMBase::IsShape(anObj)) { if (GEOMBase::IsShape(anObj)) {
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myMainObj);
myIsHiddenMain = false;
}
myMainObj = anObj; myMainObj = anObj;
myEditCurrentArgument->setText(GEOMBase::GetName(anObj)); myEditCurrentArgument->setText(GEOMBase::GetName(anObj));
// activate subshapes selection by default // activate subshapes selection by default
@ -470,6 +480,11 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
} }
} }
else { else {
if (myIsHiddenMain) {
GEOM_Displayer* aDisplayer = getDisplayer();
aDisplayer->Display(myMainObj);
myIsHiddenMain = false;
}
myMainObj = GEOM::GEOM_Object::_nil(); myMainObj = GEOM::GEOM_Object::_nil();
} }
} }
@ -788,7 +803,15 @@ void GroupGUI_GroupDlg::activateSelection()
myIsShapeType) // check if shape type is already choosen by user myIsShapeType) // check if shape type is already choosen by user
{ {
GEOM_Displayer* aDisplayer = getDisplayer(); GEOM_Displayer* aDisplayer = getDisplayer();
SALOME_View* view = GEOM_Displayer::GetActiveView();
if (view) {
CORBA::String_var aMainEntry = myMainObj->GetStudyEntry();
Handle(SALOME_InteractiveObject) io = new SALOME_InteractiveObject (aMainEntry.in(), "GEOM", "TEMP_IO");
if (view->isVisible(io)) {
aDisplayer->Erase(myMainObj, false, false); aDisplayer->Erase(myMainObj, false, false);
myIsHiddenMain = true;
}
}
int prevDisplayMode = aDisplayer->SetDisplayMode(0); int prevDisplayMode = aDisplayer->SetDisplayMode(0);
@ -909,7 +932,7 @@ void GroupGUI_GroupDlg::highlightSubShapes()
int id = myIdList->item(ii)->text().toInt(); int id = myIdList->item(ii)->text().toInt();
if (subSelectionWay() != ALL_SUBSHAPES && if (subSelectionWay() != ALL_SUBSHAPES &&
!myMain2InPlaceIndices.IsBound(id)) { !myMain2InPlaceIndices.IsBound(id)) {
myIdList->item(ii)->setSelected(false); //myIdList->item(ii)->setSelected(false);
} }
else { else {
anIds.Add(id); anIds.Add(id);

View File

@ -96,6 +96,7 @@ private:
Mode myMode; Mode myMode;
bool myBusy; bool myBusy;
bool myIsShapeType; bool myIsShapeType;
bool myIsHiddenMain;
GEOM::GEOM_Object_var myMainObj; GEOM::GEOM_Object_var myMainObj;
GEOM::GEOM_Object_var myGroup; GEOM::GEOM_Object_var myGroup;
GEOM::GEOM_Object_var myInPlaceObj; GEOM::GEOM_Object_var myInPlaceObj;