# Modified by : Alexander BORODIN (OCN) - autotools usage
# 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_CANONICAL_HOST
AC_CANONICAL_TARGET
doc/salome/gui/GEOM/doxyfile_py \
doc/salome/gui/GEOM/doxyfile_tui \
doc/salome/gui/GEOM/static/header.html \
+ doc/salome/gui/GEOM/static/header_py.html \
doc/salome/tui/Makefile \
doc/salome/tui/doxyfile \
doc/salome/tui/static/header.html \
#---------------------------------------------------------------------------
GENERATE_HTML = YES
HTML_OUTPUT = geompy_doc
-HTML_HEADER = @builddir@/static/header.html
+HTML_HEADER = @builddir@/static/header_py.html
HTML_FOOTER = @srcdir@/static/footer.html
HTML_STYLESHEET = @srcdir@/static/doxygen.css
TOC_EXPAND = YES
To create a \b Curve in the <b>Main Menu</b> select <b>New Entity - >
Basic - > Curve</b>
-\n There are three algorithms to create a \b Curve in the 3D space. Each
-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
+There are three <b>Curve Construction</b> menu choices corresponding to three
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 There are two ways to define <b>Points</b>:
+
+<b>Polyline</b>
+
+\image html polyline.png
+
+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>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.
+<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 Commands:</b>
+\n <b>TUI Command:</b> <em>geompy.MakePolyline(ListOfShapes,isClosed)</em>
+
+<b>Bezier</b>
+
+\image html bezier.png
+
+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><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>
+<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>
-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>
+
+\n <b>TUI Command:</b> <em>geompy.MakeBezier(ListOfShapes,isClosed)</em>
+
+<b>B-spline</b>
+
+\image html interpol.png
+
+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>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>
+<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>
-\n<b>Advanced options</b> \ref preview_anchor "Preview"
+<b>Analytical Definition</b>
-\image html curve.png
-\image html curve1.png
-\image html curve2.png
+The input parameters for analytical definition are common for all
+types of curves.
-<b>Examples:</b>
+\image html curve1.png
-\image html polyline.png
-<center>Polyline</center>
+<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>
-\image html bezier.png
-<center>Bezier</center>
+\n <b>TUI Command:</b> <em>geompy.MakeCurveParametric(XExpr, YExpt, ZExpt, tMin, tMax, tStep, curveType)</em>
-\image html interpol.png
-<center>B-Spline</center>
+\n<b>Advanced options</b> \ref preview_anchor "Preview"
Our <b>TUI Scripts</b> provide you with useful examples of creation of
\ref tui_creation_curve "Basic Geometric Objects".
\image html edge2.png "Create edge from wire"
-The third case allows building edges of desired length on any existing
-curve (selected existing edge). <b>Start Point</b> parameter is optional.
-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
-the initial edge's length or be negative to extrapolate existing edge
-along its curve (except bezier and b-spline curves).
+Thirdly, it is possible to build an edge of required \b Length on any existing
+\b Edge.
+
+<b>Start Point</b> parameter is optional:
+- if used, it allows selecting any existing point - in such a case the start point
+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>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"
variety of ways:
<ul>
<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
Type.</li>
<li><em>geompy.SubShapeAll(Shape, Type)</em> explodes a Shape on
position of the point on the given edge.
\image html point3.png
-Alternatively, it is possible to define the point by \b Edge and \b Length,
-the given length can exceed the length of the edge or be negative
-(except bezier and b-spline curves). The orientation of the edge can
-be reversed by the \b StartPoint selection.
-\n <b>TUI Command:</b> <em>geompy.MakeVertexOnCurveByLength(Edge,Length,StartPoint=None).</em>
-\n <b>Arguments:</b> Name + 1 edge + 1 Length defining the position
-of the point on the given edge + 1 Point defining the direction for
-the calculation of the length (if not defined, the first vertex of
+Alternatively, it is possible to define a point by an \b Edge and a \b Length.
+The \b Length defines the position of the point on the given edge. It
+can exceed the length of the edge or be negative. In this case the edge
+is extrapolated along its curve (except for bezier and b-spline
+curves).
+The <b>Start Point</b> defines the direction for the length
+calculation (if not defined, the first vertex of
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
It is also possible to define 3D coordinates of the point
--- /dev/null
+/*!
+
+\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".
+
+*/
/*!
-\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 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.
\n <b>Arguments:</b> Name + Compound of shapes + Tolerance value.
\n The \b Result will be a \b GEOM_Object.
\image html glue1.png
-\n \image html glue4.png
+
\n <b>TUI Commands:</b>
- <em>geompy.MakeGlueFaces(theShape,theTolerance,doKeepNonSolids)</em> and
- <em>geompy.MakeGlueEdges(theShape,theTolerance)</em>,
- where \em theShape is a compound of shapes to be glued, \em
- theTolerance is a maximum distance between two faces/edges, which can
+\n <em>geompy.MakeGlueFaces(theShape,theTolerance,doKeepNonSolids)</em>,
+\n where \em theShape is a compound of shapes to be glued, \em
+ theTolerance is a maximum distance between two faces, which can
be considered as coincident. The \em doKeepNonSolids flag allows to
throw away non-solids from the result, if false. The \b Result will
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.
\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.
\image html glue3.png
-\n The faces/edges that can be glued are colored in red. It is
-possible to select the faces/edges for gluing in the 3D viewer.
-The selected faces/edges will be marked in white.
+\n The faces that can be glued are colored in red. It is
+possible to select the faces for gluing in the 3D viewer.
+The selected faces will be marked in white.
-\n For faces gluing their edges are also glued. By default, other
-edges are not glued (this concerns only Glue Faces, of course).
-To force all edges gluing, check the "Glue all coincident edges"
+\n 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.
\n <b>TUI Commands:</b>
- <em>geompy.GetGlueFaces(theShape,theTolerance)</em> and
- <em>geompy.GetGlueEdges(theShape,theTolerance)</em>,
- where \em theShape is a compound of shapes to be glued, \em
- theTolerance is a maximum distance between two faces/edges, which can
+\n <em>geompy.GetGlueFaces(theShape,theTolerance)</em>,
+\n where \em theShape is a 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, containing one sub shape per each detected set of
coincident sub shapes.
-\n <em>geompy.MakeGlueFacesByList(theShape,theTolerance,theFaces,doKeepNonSolids,doGlueAllEdges)</em>
- and <em>geompy.MakeGlueEdgesByList(theShape,theTolerance,theEdges)</em>,
- where \em theShape is a compound of shapes to be glued, \em
- theTolerance is a maximum distance between two faces/edges, which can
- be considered as coincident, \em theFaces/theEdges is a list of
+\n <em>geompy.MakeGlueFacesByList(theShape,theTolerance,theFaces,doKeepNonSolids,doGlueAllEdges)</em>,
+\n where \em theShape is a compound of shapes to be glued, \em
+ theTolerance is a maximum distance between two faces, which can
+ be considered as coincident, \em theFaces is a list of
subshapes to be glued. The \em doKeepNonSolids flag allows to throw
away non-solids from the result, if false. The \em doGlueAllEdges
allows to glue all edges, not only owned by glued faces. The \b
<center><em>Manual selection of faces for gluing</em></center>
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
-tui_glue_edges "Glue Edges".
+<b>Repairing Operations</b> \ref tui_glue_faces "Glue Faces".
*/
<li>\subpage sewing_operation_page "Sewing" - sews faces or shells.</li>
<li>\subpage glue_faces_operation_page "Glue faces" - unites
coincident faces within the given tolerance.</li>
+<li>\subpage glue_edges_operation_page "Glue edges" - unites
+coincident edges within the given tolerance.</li>
<li>\subpage limit_tolerance_operation_page "Limit Tolerance" - tries
to set new tolerance value for the given shape.</li>
<li>\subpage add_point_on_edge_operation_page "Add point on edge" -
<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.
\n To activate this functionality, check in "Set
\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,
-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.
\image html restore-ss-viewer-cut.png "The resulting shape"
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).
We create a Common of Box_1 and Cylinder_1.
\n The resulting object is created with several subshapes that correspond to the
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.
\image html restore-ss-viewer-after.png "The resulting shape"
By default this option is On.
\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.
*/
--- /dev/null
+<!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>
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
// GEOM GEOMGUI : GUI for Geometry component
// File : EntityGUI_SubShapeDlg.cxx
//=================================================================================
EntityGUI_SubShapeDlg::EntityGUI_SubShapeDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
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 image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
//=================================================================================
EntityGUI_SubShapeDlg::~EntityGUI_SubShapeDlg()
{
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myObject);
+ myIsHiddenMain = false;
+ }
}
//=================================================================================
return;
}
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myObject);
+ myIsHiddenMain = false;
+ }
+
TopoDS_Shape S = GEOMBase::GetTopoFromSelection(aSelList);
if (S.IsNull() || S.ShapeType() == TopAbs_VERTEX) {
myObject = GEOM::GEOM_Object::_nil();
//=================================================================================
void EntityGUI_SubShapeDlg::ResetStateOfDialog()
{
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myObject);
+ myIsHiddenMain = false;
+ }
myObject = GEOM::GEOM_Object::_nil();
myShape.Nullify();
myEditCurrentArgument->setText("");
void EntityGUI_SubShapeDlg::updateButtonState()
{
if (SUIT_Session::session()->activeApplication()->desktop()->activeWindow()->getViewManager()->getType() != OCCViewer_Viewer::Type() ||
- myObject->_is_nil() || shapeType() == TopAbs_SHAPE || shapeType() == TopAbs_COMPOUND) {
+ myObject->_is_nil() || shapeType() == TopAbs_SHAPE || shapeType() == TopAbs_COMPOUND) {
GroupPoints->CheckButton1->setChecked(false);
GroupPoints->CheckButton1->setEnabled(false);
}
if (!myObject->_is_nil() && !isAllSubShapes())
{
GEOM_Displayer* aDisplayer = getDisplayer();
- aDisplayer->Erase(myObject, false, false);
+ 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);
+ myIsHiddenMain = true;
+ }
+ }
int prevDisplayMode = aDisplayer->SetDisplayMode(0);
bool myWithShape;
+ bool myIsHiddenMain;
+
DlgRef_1Sel1List1Check3Btn* GroupPoints;
};
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-
// File: GEOMAlgo_Gluer2.cxx
// Author: Peter KURNEV
// File: GEOMAlgo_Gluer2_3.cxx
// Created:
// Author: Peter KURNEV
-// <peter@PREFEX>
-//
+
#include <GEOMAlgo_Gluer2.hxx>
#include <TopAbs_ShapeEnum.hxx>
const TopAbs_ShapeEnum aType,
TopTools_IndexedMapOfShape& aM)
{
- TopExp_Explorer aEx (aS, aType);
- while (aEx.More()) {
- const TopoDS_Shape aSx=aEx.Current();
+ TopExp_Explorer aExp;
+
+ aExp.Init (aS, aType);
+ for ( ;aExp.More(); aExp.Next()) {
+ const TopoDS_Shape aSx=aExp.Current();
+ if (aType==TopAbs_EDGE) {
+ const TopoDS_Edge& aEx=*((TopoDS_Edge*)&aSx);
+ if (BRep_Tool::Degenerated(aEx)) {
+ continue;
+ }
+ }
+ aM.Add(aSx);
+ }
+}
+/*
+//=======================================================================
+//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);
- aEx.Next();
+ aExp.Next();
}
}
+*/
#ifndef GEOM_GenericObjPtr_H
#define GEOM_GenericObjPtr_H
+#include "GEOM_GEOMBase.hxx"
+
#include "SALOMEconfig.h"
#include CORBA_SERVER_HEADER(GEOM_Gen)
typedef GenericObjPtr<GEOM::GEOM_IGroupOperations> GroupOpPtr;
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
#define HST_CLIENT_LEN 256
-
//=======================================================================
// function : Load()
// purpose :
//=======================================================================
GEOM_Client::GEOM_Client(const GEOM_Client& client)
{
- myIORs = client.myIORs;
- myShapes = client.myShapes;
- _myIndexes = client._myIndexes;
_mySubShapes = client._mySubShapes;
+ myShapesMap = client.myShapesMap;
pid_client = client.pid_client;
}
// function : Find()
// 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)
- {
- Standard_Integer i = _myIndexes[IOR];
- S = myShapes.Value(i);
- return i;
+ if (myShapesMap.count(IOR) != 0) {
+ S = myShapesMap[IOR];
+ return Standard_True;
}
- return 0;
+ return Standard_False;
}
//=======================================================================
// function : Find()
// 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++ ) {
- if (myShapes.Value(i) == S) {
- IOR = myIORs.Value(i);
- return i;
+ std::map< TCollection_AsciiString, TopoDS_Shape >::const_iterator it;
+ for (it = myShapesMap.begin(); it != myShapesMap.end(); ++it) {
+ if ((*it).second == S) {
+ IOR = (*it).first;
+ return Standard_True;
}
}
- return 0;
+ return Standard_False;
}
//=======================================================================
//=======================================================================
void GEOM_Client::Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S )
{
- myIORs.Append(IOR);
- myShapes.Append(S);
- _myIndexes[IOR] = myIORs.Length();
+ myShapesMap[IOR] = S;
}
//=======================================================================
//=======================================================================
void GEOM_Client::RemoveShapeFromBuffer( const TCollection_AsciiString& IOR)
{
- if( myIORs.IsEmpty() )
+ if (myShapesMap.size() == 0)
return;
- TopoDS_Shape S;
- Standard_Integer anIndex = Find( IOR, S );
- if( anIndex != 0 ) {
- myIORs.Remove(anIndex);
- myShapes.Remove(anIndex);
- _myIndexes.erase(IOR);
+ if (myShapesMap.count(IOR) != 0) {
+ myShapesMap.erase(IOR);
_mySubShapes.erase(IOR);
}
}
//=======================================================================
void GEOM_Client::ClearClientBuffer()
{
- if( myIORs.IsEmpty() )
+ if (myShapesMap.size() == 0)
return;
- myIORs.Clear();
- myShapes.Clear();
- _myIndexes.clear();
+
_mySubShapes.clear();
- return;
+ myShapesMap.clear();
}
//=======================================================================
//=======================================================================
unsigned int GEOM_Client::BufferLength()
{
- return myIORs.Length();
+ return myShapesMap.size();
}
//=======================================================================
TopoDS_Shape S;
CORBA::String_var anIOR = geom->GetStringFromIOR(aShape);
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 ********/
if (aShape->IsMainShape()) {
TCollection_AsciiString mainIOR = (char*)aMainIOR.in();
//find subshapes only one time
- if(_mySubShapes.count(mainIOR)==0)
+ if (_mySubShapes.count(mainIOR) == 0)
{
TopTools_IndexedMapOfShape anIndices;
TopExp::MapShapes(aMainShape, anIndices);
//Standard_EXPORT
GEOM_Client(const GEOM_Client& client);
//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_Integer Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;
+ Standard_Boolean Find( const TopoDS_Shape& S, TCollection_AsciiString& IOR ) ;
//Standard_EXPORT
void Bind( const TCollection_AsciiString& IOR, const TopoDS_Shape& S ) ;
//Standard_EXPORT
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 , TopoDS_Shape > myShapesMap;
long pid_client;
};
</message>
<message>
<source>GEOM_CURVE_ANALITICAL</source>
- <translation>Analitical</translation>
+ <translation>Analytical</translation>
</message>
</context>
<context>
// 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 <structmember.h>
aPyScript += thezExpr;
aPyScript += "\n";
- aPyScript +="def coordCalucator(tmin, tmax, tstep): \n";
+ aPyScript +="def coordCalculator(tmin, tmax, tstep): \n";
aPyScript +=" coords = [] \n";
aPyScript +=" while tmin <= tmax : \n";
aPyScript +=" coords.append([X(tmin), Y(tmin), Z(tmin)]) \n";
PyObject* obj = PyRun_String(aPyScript.ToCString(), Py_file_input, main_dict, NULL);
if (obj == NULL) {
- SetErrorCode("Error during run python script !!!");
+ SetErrorCode("Error during executing of python script !!!");
+ PyErr_Print();
PyGILState_Release(gstate);
return NULL;
} else {
}
PyObject * func = NULL;
- func = PyObject_GetAttrString(main_mod, "coordCalucator");
+ func = PyObject_GetAttrString(main_mod, "coordCalculator");
if (func == NULL){
SetErrorCode("Can't get function from python module !!!");
PyErr_Print();
PySys_SetObject((char*)"stderr", PySys_GetObject((char*)"__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 !!!");
PyGILState_Release(gstate);
return NULL;
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()),
FirstVertex, LastVertex);
}
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
// GEOM GEOMGUI : GUI for Geometry component
// File : GroupGUI_GroupDlg.cxx
: GEOMBase_Skeleton(theGeometryGUI, parent, false),
myMode(mode),
myBusy(false),
- myIsShapeType(false)
+ myIsShapeType(false),
+ myIsHiddenMain(false)
{
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
GroupGUI_GroupDlg::~GroupGUI_GroupDlg()
{
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myMainObj);
+ myIsHiddenMain = false;
+ }
}
//=================================================================================
GEOMBase::ConvertIOinGEOMObject(aSelList.First());
if (GEOMBase::IsShape(anObj)) {
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myMainObj);
+ myIsHiddenMain = false;
+ }
myMainObj = anObj;
myEditCurrentArgument->setText(GEOMBase::GetName(anObj));
// activate subshapes selection by default
}
}
else {
+ if (myIsHiddenMain) {
+ GEOM_Displayer* aDisplayer = getDisplayer();
+ aDisplayer->Display(myMainObj);
+ myIsHiddenMain = false;
+ }
myMainObj = GEOM::GEOM_Object::_nil();
}
}
myIsShapeType) // check if shape type is already choosen by user
{
GEOM_Displayer* aDisplayer = getDisplayer();
- aDisplayer->Erase(myMainObj, false, false);
+ 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);
+ myIsHiddenMain = true;
+ }
+ }
int prevDisplayMode = aDisplayer->SetDisplayMode(0);
int id = myIdList->item(ii)->text().toInt();
if (subSelectionWay() != ALL_SUBSHAPES &&
!myMain2InPlaceIndices.IsBound(id)) {
- myIdList->item(ii)->setSelected(false);
+ //myIdList->item(ii)->setSelected(false);
}
else {
anIds.Add(id);
Mode myMode;
bool myBusy;
bool myIsShapeType;
+ bool myIsHiddenMain;
GEOM::GEOM_Object_var myMainObj;
GEOM::GEOM_Object_var myGroup;
GEOM::GEOM_Object_var myInPlaceObj;