Merge from V5_1_main 10/06/2010

This commit is contained in:
vsr 2010-06-10 08:25:12 +00:00
parent 085be54cbe
commit 6ceb0d7750
51 changed files with 657 additions and 273 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -5,23 +5,35 @@
\n To <b>Add Point on Edge</b> in the <b>Main Menu</b> select
<b>Repair - > Add Point on Edge</b>.
\n This operation splits an edge in two in accordance with the
\n This operation splits an edge in two new edges in accordance with the
specified mode (by length or by parameter) and a value specifying the
position of the point on edge (for example val =0.5; mode =
Length). This operation is available in <b>OCC Viewer</b> only.
by length). This operation is available in <b>OCC Viewer</b> only.
\n The \b Result will be a \b GEOM_Object.
\n <b>TUI Command:</b> <em>geompy.DivideEdge(Shape, EdgeID, Value,
IsByParameter), </em> where \em Shape is a shape which contains an edge to
be divided, \em EdgeID is the ID of the edge to be divided, if it = -1,
then Shape is an edge, \em Value is a paramter on the edge or a
length. \em IsByParameter if it is True then Value is the edge parameter
in the range [0:1] otherwise it is a part of the length of the edge in the range
[0: full length of the edge]
\n <b>Arguments:</b> Name + 1 Edge + 1 value setting the position of
IsByParameter)</em>
- \em Shape is a shape which contains an edge to be divided
- \em EdgeID is the ID of the edge to be divided, if it is = -1,
then \em Shape should be an edge itself
- \em Value is a value of parameter on edge or length parameter,
depending on \em IsByParameter.
- \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]
<b>Arguments:</b> Name + 1 Edge + 1 Value setting the position of
the point according to one of the selected modes.
The difference between "by parameter" and "by length" modes becomes
apparent on the edges with irregular parametrization (for example,
b-splines which usually have irregular density by the length).
For example, value 0.5 "by length" on such edge will produce the point
in the middle of this edge (equidistant from both its ends); the same
0.5 value "by parameter" will result in the point situated closer to
one of the ends (depending on the actual parametrization).
\image html repair8.png
\n <b>Example:</b>

View File

@ -26,8 +26,8 @@ of the LCS are calculated automatically basing on the selected object.
coordinates of origin by a point and axes directions by a line or a
vector.
\n <b>TUI command:</b> <em>geompy.MakeMarkerPntTwoVec(Center, VectorX,
VectorY)</em> where Center is a point specified the coordinate system location,
VectorX is a derection of OX axis and VectorY direction of OY axis.
VectorY)</em> where Center is the origin of the coordinate system,
VectorX is the direction of OX axis and VectorY is the direction of OY axis.
\n <b>Arguments:</b> Name + 1 point of origin + X axis direction, Y axis direction.
\image html neo-localcs3.png
@ -40,6 +40,6 @@ and in 3D viewer.
\image html image145.png "Local Coordinate System"
<b>TUI Script</b> provide you with useful example of creation of
\ref tui_creation_lcs "Local Coordinate System".
<b>TUI Script</b> provides you with a useful example of
\ref tui_creation_lcs "Local Coordinate System" creation.
*/

View File

@ -5,23 +5,23 @@
To create a \b PipeTShape in the <b>Main Menu</b> select <b>New Entity - >
Advanced - > PipeTShape </b>
Specify the parameters of the PipeTShape object creation in the opened dialog
Specify the parameters of the PipeTShape object in the opened dialog
box and press "Apply" or "Apply & Close" button.
Result of each operation will be a GEOM_Object.
The <b>result</b> of the operation will be a <b>GEOM_Object</b>.
<b>TUI Command:</b> <em>geompy.MakePipeTShape(R1, W1, L1, R2, W2, L2, HexMesh=True, P1=None, P2=None, P3=None)</em>
<b>Arguments:</b>
- \b R1 - Radius of main T-shape pipe.
- \b W1 - Thickness of main T-shape pipe.
- \b L1 - Length of main T-shape pipe.
- \b R2 - Radius of incident T-shape pipe.
- \b W2 - Thickness of incident T-shape pipe.
- \b L2 - Length of incident T-shape pipe.
- \b HexMesh - If True, the shape is splitted in blocks (suitable for hexaedral mesh).
- \b P1 - First junction point of main pipe (GEOM Vertex).
- \b P2 - Second junction point of main pipe (GEOM Vertex).
- \b P3 - Junction point of incident pipe (GEOM Vertex).
- \b R1 - Radius of the main T-shape pipe.
- \b W1 - Thickness of the main T-shape pipe.
- \b L1 - Length of the main T-shape pipe.
- \b R2 - Radius of the incident T-shape pipe.
- \b W2 - Thickness of the incident T-shape pipe.
- \b L2 - Length of the incident T-shape pipe.
- \b HexMesh - If True, the shape is splitted into blocks (suitable for hexaedral mesh).
- \b P1 - First junction point of the main pipe (GEOM Vertex).
- \b P2 - Second junction point of the main pipe (GEOM Vertex).
- \b P3 - Junction point of the incident pipe (GEOM Vertex).
\image html pipetshape_dlg.png
@ -33,8 +33,8 @@ A Pipe T-Shape can be created with a chamfer at the junction of the main and the
<b>TUI Command:</b> <em>geompy.MakePipeTShapeChamfer(R1, W1, L1, R2, W2, L2, H, W, HexMesh=True, P1=None, P2=None, P3=None)</em>
<b>Arguments are the same as normal Pipe T-Shape plus:</b>
- \b H - Height of the chamfer along incident pipe.
<b>The arguments are the same as of the normal Pipe T-Shape plus:</b>
- \b H - Height of the chamfer along the incident pipe.
- \b W - Width of the chamfer along the main pipe.
Example:
@ -45,7 +45,7 @@ A Pipe T-Shape can be created with a fillet at the junction of the main and the
<b>TUI Command:</b> <em>geompy.MakePipeTShapeFillet(R1, W1, L1, R2, W2, L2, RF, HexMesh=True, P1=None, P2=None, P3=None)</em>
<b>Arguments are the same as normal Pipe T-Shape plus:</b>
<b>The arguments are the same as of the normal Pipe T-Shape plus:</b>
- \b RF - Radius of the fillet.
Example:

View File

@ -54,13 +54,14 @@ is predefined and is equal to 90 degrees);</li>
\b Buttons:
<b>"Sketch Validation"</b> button applies the wire, only red part will be built by "Sketch Validation".
<b>"Restore"</b> button orientates the viewer correspondingly to the chosen working plane and fits the scene to show all its objects.
\n <b>"Sketch Validation"</b> button applies the wire, only red part will be built by "Sketch Validation".
\n <b>"Sketch Closure"</b> will close the Sketch by straight line from last red part and apply it.
\n <b>Dialog Box:</b>
\image html neo-scetcher1.png
<br>
\image html neo-scetcher2.png
\n <b>Example:</b>

View File

@ -2,8 +2,8 @@
\page deflection_page Deflection
\n In this menu you can change the deviation coefficient of the
shape. Smaller coefficient provides better quality of the shape in the
\n In this menu you can change the deflection coefficient of the
shape. The less is the coefficient the better is the quality of the shape in the
viewer.
\n <b>Arguments: </b>1 floating point value (deviation coefficient).

View File

@ -8,7 +8,7 @@
The <b>Type</b> property of the geometrical object specifies the
way the object has been created. It is an integer identifier that
has predefined value depending on the function type used for the
has a predefined value depending on the function type used for the
object creation. The type of the object can be retrieved using the
\b %GetType() function of the \b GEOM_Object interface.
@ -70,10 +70,9 @@ The possible values of the geometrical objects are listed in the table below:
</table>
Also geompy.py module provides a helper function ShapeIdToType()
that allows converting of the geometrical object type id value
to its string representation.
that allows converting the geometrical object id value to its string representation.
For example:
For example, the output of the following code:
\code
import geompy
box = geompy.MakeBoxDXDYDZ(10,10,10)
@ -81,12 +80,12 @@ type = geompy.ShapeIdToType(box.GetType())
print type
\endcode
The above code prints "BOX" value.
will be the "BOX" value.
<b>GetShapeType function:</b>
The ShapeType property specifies the geometrical object in terms of
its topology nature.
its topologic nature.
The possible values are defined in the GEOM namespace: { COMPOUND, COMPSOLID,
SOLID, SHELL, FACE, WIRE, EDGE, VERTEX, SHAPE }<br>
@ -94,7 +93,7 @@ SOLID, SHELL, FACE, WIRE, EDGE, VERTEX, SHAPE }<br>
This type can be retrieved using the \b %GetShapeType() function
of the \b GEOM_Object interface.
Example code:
For example:
\code
import geompy
import GEOM
@ -103,6 +102,6 @@ type = box.GetShapeType()
print type == GEOM.SOLID
\endcode
This code prints "True".
The result is "True".
*/

View File

@ -13,9 +13,11 @@ using a wide range of functions;</li>
<li>\subpage transform_geom_obj_page "transformation of geometrical objects" using
various algorithms;</li>
<li>\subpage repairing_operations_page "optimization of geometrical objects";</li>
<li>\subpage geometrical_obj_prop_page "Geometrical object properties".</li>
<li>\subpage using_measurement_tools_page "provision of information about geometrical objects".</li>
<li>\subpage using_notebook_geom_page.</li>
<li>viewing \subpage geometrical_obj_prop_page "geometrical object properties".</li>
<li>and other information about geometrical objects using
\subpage using_measurement_tools_page "measurement tools".</li>
<li>easily setting parameters via the variables predefined in
\subpage using_notebook_geom_page "Salome notebook".</li>
</ul>
Almost all geometry module functionalities are accessible via

View File

@ -4,45 +4,66 @@
\n To produce a \b Partition in the <b>Main Menu</b> select <b>Operations - > Partition</b>
\n This operation builds a compound by intersection of several shapes with a tool object or a plane.
\n This operation builds a compound by intersection of several shapes
with a set of tool objects or with a plane.
\n The \b Result will be any \b GEOM_Object.
<br><h2>Intersection of two shapes.</h2>
\image html partition1.png
\n <b>Arguments:</b> Name + 2 lists of shapes (the shapes from the
first list will be intersected with the shapes from the second list) +
Resulting Type of shape.
\n As far as the intersection of two objects can produce any type of
geometrical objects, <b>Resulting type</b> box allows choosing the
preferrable result, i.e. a solid, a shell, a list of faces, etc.
\n <b>TUI Command:</b> <em>geompy.MakePartition(ListOfShapes,
ListOfTools, ListOfKeepInside, ListOfRemoveInside, Limit, RemoveWebs,
ListOfMaterials),</em> where where \em ListOfShapes is a list of shapes to
be intersected and \em ListOfTools is a list of shapes to intersect the
shapes from ListOfShapes.
\n Since the implementation of a new version of PartitionAlgo other
parameters are ignored by the current functionality and remain there
only to support the old scripts.
\n <b>Arguments:</b> Name + 2 lists of shapes (the shapes from the
first list will be intersected with the shapes from the second list) +
reconstruction limit.
\n<b>Resulting type</b> has to be equal or lower than the type of the
\em Objects. In other words, if the \em Objects don't contain any
shape of this type, Partition fails.
<b>Keep shapes of lower type</b> checkbox manages standalone shapes of
type other than the \em Limit. If it is checked, lower dimension
objects will be preserved, else they will be lost.
\n For example, you do a partition of a box (Solid) and a face (Face)
without any tool. If you choose Resulting Type "Solid", you will
obtain a compound of two solids (let's the box will be splitted by the
face on two parts), but if you will also check <b>Keep shapes of lower
type</b> checkbox, you will obtain a compound of two solids and one
face (the face will have a hole where the original face lays inside
the box, see corresponding \ref partition_picture_3 "picture" below).
\n <b>Advanced option:</b>
\ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
\image html partition1.png
\n <b>TUI Command:</b> <em>geompy.MakePartition(ListOfShapes,
ListOfTools, ListOfKeepInside, ListOfRemoveInside, Limit, RemoveWebs,
ListOfMaterials, KeepNonlimitShapes),</em> where where \em
ListOfShapes is a list of shapes to be intersected, \em ListOfTools is
a list of shapes to intersect the shapes from ListOfShapes, \em Limit
is a Type of resulting shapes and \em KeepNonlimitShapes is a flag
that allows to preserve standalone shapes of low dimension (than
Limit) in the result.
<b>Keep shapes of lower type</b> checkbox allows building geometrical objects.
Only lower type objects will be preserved without the upper ones.
\n Since the implementation of a new version of PartitionAlgo other
parameters are ignored by the current functionality and remain there
only to support the old scripts.
<br><h2>Intersection of a Shape and a Plane.</h2>
\n <b>TUI Command:</b> <em> geompy.MakeHalfPartition(Shapes,
Plane),</em> where \em Shapes are a list of Shapes to be intersected
and \em Plane is a Tool shape, to intersect the \em Shapes.
\image html partition2.png
\n <b>Arguments:</b> Name + a list of shapes which will be intersected
+ 1 cutting plane.
\n <b>Advanced option:</b>
\ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
\image html partition2.png
\n <b>TUI Command:</b> <em> geompy.MakeHalfPartition(Shapes,
Plane),</em> where \em Shapes are a list of Shapes to be intersected
and \em Plane is a Tool shape, to intersect the \em Shapes.
\n <b>Example:</b>
@ -50,6 +71,9 @@ and \em Plane is a Tool shape, to intersect the \em Shapes.
\image html partitionsn2.png "Result of intersection"
\anchor partition_picture_3
\image html partitionsn3.png "Result of intersection of a box and a plane (both as \em Objects, no tools) with Resulting type \em Solid and checked \em Keep \em shapes \em of \em lower \em type"
Our <b>TUI Scripts</b> provide you with useful examples of the use of
\ref tui_partition "Basic Operations".

View File

@ -1,8 +1,10 @@
/*!
\page restore_presentation_parameters_page Restore presentation parameters and a tree of subshapes
\page restore_presentation_parameters_page Advanced Transformation Options
\n This functionality allows the operation result to inherit colour
<br><center><b>Set presentation parameters and subshapes from arguments</b></center>
\n This option allows the operation result to inherit colour
and subshapes from its arguments.
\n To activate this functionality, check in "Set
@ -38,7 +40,7 @@ operation arguments and their published subshapes. The resulting shape
has a default colour, but its subshapes inherit colors corresponding
to arguments and their subshapes.
\image html restore-ss-viewer-after.png "Thev resulting shape"
\image html restore-ss-viewer-after.png "The resulting shape"
Please, note that when the resulting shape corresponds to one
@ -51,12 +53,13 @@ inherited subshapes depend on the arguments.
\image html restore-ss-OB.png
<br><center><b>Add prefix to names of restored subshapes</b></center>
Add prefix "from_" to names of restored sub-shapes, and prefix "from_subshapes_of_" to names of partially restored subshapes.
By default this option is On.
\n You can also call this functionality from your python scripts.
See our <b>TUI Scripts</b> for \ref tui_restore_prs_params "example".
<br><center><b>Add prefix to names of restored subshapes</b></center>
This option allows adding the prefix "from_" to the names of
restored sub-shapes, and the prefix "from_subshapes_of_" to the names of partially restored subshapes.
By default this option is On.
*/

View File

@ -28,7 +28,7 @@ transparency of geometrical objects.</li>
<li>\subpage isolines_page "Isos" - allows to change the number of
isolines displayed within a shape.</li>
<li>\subpage deflection_page "Deflection" - allows to change the
deviation coefficient of a shape.</li>
deflection coefficient of a shape.</li>
<li>\subpage point_marker_page "Point Marker" - allows to change the
representation of geometrical vertices.</li>
<li><b>Auto color</b> / <b>Disable auto color</b> - activates the auto color

View File

@ -2180,10 +2180,10 @@ module GEOM
* \note Each compound from ListShapes and ListTools will be exploded in order
* to avoid possible intersection between shapes from this compound.
* \param theLimit Type of resulting shapes (corresponding to TopAbs_ShapeEnum).
# \param KeepNonlimitShapes: if this parameter == 0 - only shapes with
# type <= Limit are kept in the result,
# else - shapes with type > Limit are kept
# also (if they exist)
* \param KeepNonlimitShapes: if this parameter == 0, then only shapes of
* target type (equal to Limit) are kept in the result,
* else standalone shapes of lower dimension
* are kept also (if they exist).
*
* After implementation new version of PartitionAlgo (October 2006)
* other parameters are ignored by current functionality. They are kept

View File

@ -379,7 +379,7 @@ void AdvancedGUI_PipeTShapeDlg::SetPosition(bool isChecked) {
//=================================================================================
void AdvancedGUI_PipeTShapeDlg::ValueChangedInSpinBox(double newValue)
{
if (myOkPoint1 && myOkPoint2 && myOkPoint3)
if (JunctionPointsSel->GroupBox1->isChecked() && myOkPoint1 && myOkPoint2 && myOkPoint3)
CheckCompatiblePosition(myPoint1, myPoint2, myPoint3, 0.01);
DisplayPreview();
}

View File

@ -271,6 +271,7 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId )
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
myEditCurrentArgument->setFocus();
globalSelection(); // close local contexts, if any

View File

@ -158,6 +158,10 @@ void BasicGUI_CurveDlg::ConstructorsClicked( int id )
myPoints->length( 0 );
myEditCurrentArgument->setText( "" );
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
}

View File

@ -158,7 +158,8 @@ void BasicGUI_EllipseDlg::Init()
initName( tr( "GEOM_ELLIPSE" ) );
resize(100,100);
resize( minimumSizeHint() );
SelectionIntoArgument();
displayPreview();
}

View File

@ -228,7 +228,6 @@ void BasicGUI_LineDlg::ConstructorsClicked( int constructorId )
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
}

View File

@ -364,6 +364,7 @@ void BasicGUI_PlaneDlg::ConstructorsClicked( int constructorId )
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
myEditCurrentArgument->setFocus();
connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),

View File

@ -231,6 +231,7 @@ void BasicGUI_VectorDlg::ConstructorsClicked( int constructorId )
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
displayPreview();
}

View File

@ -116,6 +116,7 @@ void BuildGUI_FaceDlg::Init()
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_FACE" ) );
SelectionIntoArgument();
}

View File

@ -112,7 +112,6 @@ void BuildGUI_ShellDlg::Init()
aSubShapes.append( GEOM_FACE );
globalSelection( aMap, aSubShapes );
/* signals and slots connections */
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
@ -123,6 +122,7 @@ void BuildGUI_ShellDlg::Init()
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_SHELL" ) );
SelectionIntoArgument();
}

View File

@ -123,6 +123,7 @@ void BuildGUI_WireDlg::Init()
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_WIRE" ) );
SelectionIntoArgument();
}

View File

@ -57,6 +57,8 @@
#include <gp_Pln.hxx>
#include <Basics_Utils.hxx>
//=================================================================================
// class : EntityGUI_SketcherDlg()
// purpose : Constructs a EntityGUI_SketcherDlg which is a child of 'parent', with the
@ -105,12 +107,17 @@ EntityGUI_SketcherDlg::EntityGUI_SketcherDlg( GeometryGUI* GUI, QWidget* parent,
/***************************************************************/
GroupBox1 = new QGroupBox(tr("GEOM_CS"), this);
QGridLayout* OwnLayout = new QGridLayout(GroupBox1);
OwnLayout->setSpacing(6);
OwnLayout->setMargin(11);
QHBoxLayout* planeLayout = new QHBoxLayout(GroupBox1);
planeLayout->setSpacing(6);
planeLayout->setMargin(11);
ComboBox1 = new QComboBox(GroupBox1);
OwnLayout->addWidget(ComboBox1);
ComboBox1->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed) );
planeLayout->addWidget(ComboBox1);
planeButton = new QPushButton (GroupBox1);
planeButton->setText( tr( "GEOM_SKETCHER_RESTORE" ) );
planeLayout->addWidget(planeButton);
topLayout->addWidget(GroupBox1);
topLayout->addWidget( MainWidget );
@ -233,6 +240,7 @@ EntityGUI_SketcherDlg::EntityGUI_SketcherDlg( GeometryGUI* GUI, QWidget* parent,
connect( Group4Spin->SpinBox_DS, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
connect( ComboBox1, SIGNAL( activated( int ) ), this, SLOT( SelectionIntoArgument() ) );
connect( planeButton, SIGNAL( clicked() ), this, SLOT( ActivateLocalCS() ) );
connect( myGeometryGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
@ -352,7 +360,7 @@ void EntityGUI_SketcherDlg::Init()
FindLocalCS();
resize(100,100);
ActivateLocalCS();
GEOMBase_Helper::displayPreview( false, true, true, myLineWidth );
}
@ -896,6 +904,12 @@ void EntityGUI_SketcherDlg::SelectionIntoArgument()
double tmpY = myY;
myX = myLastX1;
myY = myLastY1;
// printf ("\nmyX = %f myY = %f", myX, myY);
// printf ("\nmyLastX1 = %f myLastY1 = %f", myLastX1, myLastY1);
// printf ("\nmyLastX2 = %f myLastY2 = %f", myLastX2, myLastY2);
if ( sender() == ComboBox1 )
ActivateLocalCS();
LightApp_SelectionMgr* aSelMgr = myGeometryGUI->getApp()->selectionMgr();
SALOME_ListIO aSelList;
@ -1406,6 +1420,9 @@ bool EntityGUI_SketcherDlg::execute( ObjectList& objects )
//Test if the current point is the same as the last one
TopoDS_Shape myShape1, myShape2;
// Set "C" numeric locale
Kernel_Utils::Localizer loc;
//Last Shape
QString Command1 = myCommand.join( "" );
Sketcher_Profile aProfile1( Command1.toAscii() );
@ -1648,15 +1665,15 @@ void EntityGUI_SketcherDlg::initSpinBox( SalomeApp_DoubleSpinBox* spinBox,
int aPrecision = resMgr->integerValue( "Geometry", quantity, 6 );
spinBox->setPrecision( aPrecision );
spinBox->setDecimals( aPrecision ); // it's necessary to set decimals before the range setting,
// by default Qt rounds boundaries to 2 decimals at setRange
spinBox->setDecimals( qAbs( aPrecision ) ); // it's necessary to set decimals before the range setting,
// by default Qt rounds boundaries to 2 decimals at setRange
spinBox->setRange( min, max );
spinBox->setSingleStep( step );
// Add a hint for the user saying how to tune precision
QString userPropName = QObject::tr( QString( "PREF_%1" ).arg( quantity ).toLatin1().constData() );
QString userPropName = QObject::tr( QString( "GEOM_PREF_%1" ).arg( quantity ).toLatin1().constData() );
spinBox->setProperty( "validity_tune_hint",
QVariant( QObject::tr( "PRECISION_HINT" ).arg( userPropName ) ) );
QVariant( QObject::tr( "GEOM_PRECISION_HINT" ).arg( userPropName ) ) );
}
//=================================================================================
@ -1747,7 +1764,7 @@ void EntityGUI_SketcherDlg::FindLocalCS()
//=================================================================================
// function : GetActiveLocalCS()
// purpose : Find All Coordinates systems in study
// purpose : Get Working plane
//=================================================================================
gp_Ax3 EntityGUI_SketcherDlg::GetActiveLocalCS()
{
@ -1757,7 +1774,15 @@ gp_Ax3 EntityGUI_SketcherDlg::GetActiveLocalCS()
gp_Ax3 aLCS = myLCSList.at(ind);
myGeometryGUI->SetWorkingPlane( aLCS );
myGeometryGUI->ActiveWorkingPlane();
return aLCS;
}
//=================================================================================
// function : ActivateLocalCS()
// purpose : Activate & Fit Working plane
//=================================================================================
void EntityGUI_SketcherDlg::ActivateLocalCS()
{
myGeometryGUI->SetWorkingPlane( GetActiveLocalCS() );
myGeometryGUI->ActiveWorkingPlane();
}

View File

@ -145,6 +145,7 @@ private:
QGroupBox* GroupBox1;
QComboBox* ComboBox1;
QPushButton* planeButton;
GeometryGUI* myGeometryGUI;
@ -184,6 +185,7 @@ private slots:
void SetDoubleSpinBoxStep( double );
void FindLocalCS();
gp_Ax3 GetActiveLocalCS();
void ActivateLocalCS();
};
#endif // ENTITYGUI_SKETCHERDLG_H

View File

@ -35,6 +35,8 @@
#include "utilities.h"
#include <Basics_Utils.hxx>
#include <TDF_Tool.hxx>
#include <TDF_Data.hxx>
#include <TDF_Reference.hxx>
@ -528,6 +530,9 @@ TCollection_AsciiString GEOM_Engine::DumpPython(int theDocID,
bool isPublished,
bool& aValidScript)
{
// Set "C" numeric locale to save numbers correctly
Kernel_Utils::Localizer loc;
TCollection_AsciiString aScript;
Handle(TDocStd_Document) aDoc = GetDocument(theDocID);

View File

@ -1,4 +1,4 @@
// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@ -19,7 +19,6 @@
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File: GEOMAlgo_Builder.cxx
// Created:
// Author: Peter KURNEV
@ -42,6 +41,7 @@
#include <BRepLib.hxx>
#include <NMTTools_PaveFiller.hxx>
#include <GEOMAlgo_Tools.hxx>
//=======================================================================
//function :
@ -158,28 +158,7 @@
AddShape1(aS);
}
}
//=======================================================================
//function : PostTreat
//purpose :
//=======================================================================
void GEOMAlgo_Builder::PostTreat()
{
Standard_Integer aNbS;
TopoDS_Iterator aIt;
TopTools_ListOfShape aLS;
//
aIt.Initialize(myShape);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aS=aIt.Value();
aLS.Append(aS);
}
aNbS=aLS.Extent();
if (aNbS==1) {
myShape=aLS.First();
}
BRepLib::SameParameter(myShape, 1.e-7, Standard_True);
}
//=======================================================================
//function : AddShape1
//purpose :
@ -399,6 +378,34 @@
PostTreat();
}
//
static
void CorrectWires(const TopoDS_Shape& aS);
//
//=======================================================================
//function : PostTreat
//purpose :
//=======================================================================
void GEOMAlgo_Builder::PostTreat()
{
Standard_Integer aNbS;
TopoDS_Iterator aIt;
TopTools_ListOfShape aLS;
//
aIt.Initialize(myShape);
for (; aIt.More(); aIt.Next()) {
const TopoDS_Shape& aS=aIt.Value();
aLS.Append(aS);
}
aNbS=aLS.Extent();
if (aNbS==1) {
myShape=aLS.First();
}
BRepLib::SameParameter(myShape, 1.e-7, Standard_True);
//
GEOMAlgo_Tools::CorrectWires(myShape);
}
//
// myErrorStatus
//
// 0 - Ok
@ -406,3 +413,4 @@
// 2 - PaveFiller is failed
// 10 - No shapes to process
// 30 - SolidBuilder failed

View File

@ -1,4 +1,4 @@
-- Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
-- Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
--
-- Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-- CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@ -19,7 +19,6 @@
--
-- See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
--
-- File: GEOMAlgo_Tools.cdl
-- Created: Mon Dec 6 11:26:02 2004
-- Author: Peter KURNEV
@ -108,6 +107,9 @@ is
aS:Surface from Geom)
returns Boolean from Standard;
CorrectWires(myclass;
aS :Shape from TopoDS)
returns Boolean from Standard;
--fields
end Tools;

View File

@ -1,24 +1,23 @@
// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
// File generated by CPPExt (Value)
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
// Copyright (C) 1991 - 2000 by
// Matra Datavision SA. All rights reserved.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
// Copyright (C) 2001 - 2004 by
// Open CASCADE SA. All rights reserved.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
// This file is part of the Open CASCADE Technology software.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
// This software may be distributed and/or modified under the terms and
// conditions of the Open CASCADE Public License as defined by Open CASCADE SA
// and appearing in the file LICENSE included in the packaging of this file.
//
// This software is distributed on an "AS IS" basis, without warranty of any
// kind, and Open CASCADE SA hereby disclaims all such warranties,
// including without limitation, any warranties of merchantability, fitness
// for a particular purpose or non-infringement. Please see the License for
// the specific terms and conditions governing rights and limitations under the
// License.
#ifndef _GEOMAlgo_Tools_HeaderFile
#define _GEOMAlgo_Tools_HeaderFile
@ -110,6 +109,9 @@ Standard_EXPORT static void RefinePCurveForEdgeOnFace(const TopoDS_Edge& aE,con
Standard_EXPORT static Standard_Boolean IsUPeriodic(const Handle(Geom_Surface)& aS) ;
Standard_EXPORT static Standard_Boolean CorrectWires(const TopoDS_Shape& aS) ;

View File

@ -0,0 +1,323 @@
// File: GEOMAlgo_Tools_1.cxx
// Created: Thu May 6 10:46:21 2010
// Author: Peter KURNEV
// <pkv@irinox>
#include <GEOMAlgo_Tools.ixx>
//
#include <NCollection_DataMap.hxx>
#include <gp_Pnt2d.hxx>
#include <gp_Pnt.hxx>
#include <Geom2dAdaptor_Curve.hxx>
#include <Geom2dInt_GInter.hxx>
#include <Geom2d_Curve.hxx>
#include <Geom_Curve.hxx>
#include <Geom_Surface.hxx>
#include <GeomAdaptor_Surface.hxx>
#include <IntRes2d_Domain.hxx>
#include <IntRes2d_IntersectionPoint.hxx>
#include <IntRes2d_Transition.hxx>
#include <TopoDS_Iterator.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Wire.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopExp_Explorer.hxx>
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
#include <TopTools_MapOfShape.hxx>
#include <TopTools_ShapeMapHasher.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapOfShapeListOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_DataMapIteratorOfDataMapOfShapeListOfShape.hxx>
static
inline Standard_Boolean IsEqual(const TopoDS_Shape& aS1,
const TopoDS_Shape& aS2) {
return TopTools_ShapeMapHasher::IsEqual(aS1, aS2);
}
//
static
Standard_Boolean CorrectWire(const TopoDS_Wire& aW,
const TopoDS_Face& aF);
//=======================================================================
//function : CorrectWires
//purpose :
//=======================================================================
Standard_Boolean GEOMAlgo_Tools::CorrectWires(const TopoDS_Shape& aShape)
{
Standard_Boolean bRet;
TopoDS_Iterator aItF;
TopExp_Explorer aExp;
TopTools_MapOfShape aMF;
GeomAdaptor_Surface aGAS;
GeomAbs_SurfaceType aTS;
TopLoc_Location aLoc;
//
bRet=Standard_False;
//
aExp.Init(aShape, TopAbs_FACE);
for (; aExp.More(); aExp.Next()) {
const TopoDS_Face& aF=*((TopoDS_Face*)&aExp.Current());
if (aMF.Add(aF)) {
const Handle(Geom_Surface)& aS=BRep_Tool::Surface(aF, aLoc);
aGAS.Load(aS);
aTS=aGAS.GetType();
if (aTS==GeomAbs_Cylinder) {
aItF.Initialize(aF);
for (; aItF.More(); aItF.Next()) {
const TopoDS_Wire& aW=*((TopoDS_Wire*)&aItF.Value());
if (CorrectWire(aW, aF)) {
bRet=Standard_True;
}
}
}
}
}
return bRet;
}
//=======================================================================
//class: GEOMAlgo_InfoEdge
//purpose :
//=======================================================================
class GEOMAlgo_InfoEdge {
public:
//
GEOMAlgo_InfoEdge() {
myErrorStatus=0;
myTolInt=1.0e-10;
};
//
~GEOMAlgo_InfoEdge(){
};
//
void Init(const TopoDS_Edge& aE,
const TopoDS_Face& aF);
//
void SetTolInt(const Standard_Real aTolInt) {
myTolInt=aTolInt;
};
//
const Standard_Real TolInt() const {
return myTolInt;
}
//
const Geom2dAdaptor_Curve& Adaptor() const {
return myGAC2D;
}
//
const IntRes2d_Domain& Domain()const {
return myDomain;
}
//
const Handle(Geom2d_Curve)& CurveOnSurface()const {
return myC2D;
}
//
const Handle(Geom_Curve)& Curve()const {
return myC3D;
}
//
Standard_Integer ErrorStatus()const {
return myErrorStatus;
}
//
protected:
Standard_Integer myErrorStatus;
Standard_Real myTolInt;
Geom2dAdaptor_Curve myGAC2D;
IntRes2d_Domain myDomain;
Handle(Geom2d_Curve) myC2D;
Handle(Geom_Curve) myC3D;
};
//
typedef NCollection_DataMap<TopoDS_Shape, GEOMAlgo_InfoEdge> GEOMAlgo_DataMapOfShapeInfoEdge;
typedef GEOMAlgo_DataMapOfShapeInfoEdge::Iterator GEOMAlgo_DataMapIteratorOfDataMapOfShapeInfoEdge;
//=======================================================================
//function : Init
//purpose :
//=======================================================================
void GEOMAlgo_InfoEdge::Init(const TopoDS_Edge& aE,
const TopoDS_Face& aF)
{
Standard_Real aT1, aT2, aT1x, aT2x;
gp_Pnt2d aP2D1, aP2D2;
//
myErrorStatus=0;
//
myC3D=BRep_Tool::Curve(aE, aT1, aT2);
myC2D=BRep_Tool::CurveOnSurface(aE ,aF, aT1, aT2);
if (!myC2D.IsNull() && aT2>aT1) {
myGAC2D.Load(myC2D);
if(!myGAC2D.IsPeriodic()) {
aT1x=myGAC2D.FirstParameter();
aT2x=myGAC2D.LastParameter();
if(aT1x > aT1) {
aT1=aT1x;
}
if(aT2x < aT2) {
aT2=aT2x;
}
}
//
BRep_Tool::UVPoints(aE, aF, aP2D1, aP2D2);
myDomain.SetValues(aP2D1, aT1, myTolInt, aP2D2, aT2, myTolInt);
}
else {
myErrorStatus=10;
return;
}
}
//=======================================================================
//function : CorrectWire
//purpose :
//=======================================================================
Standard_Boolean CorrectWire(const TopoDS_Wire& aW,
const TopoDS_Face& aF)
{
Standard_Boolean bRet;
Standard_Real aTolInt;
Standard_Integer iErr, aNbV, aNbE;
TopoDS_Iterator aItW, aItE;
Geom2dInt_GInter aInter;
GEOMAlgo_DataMapOfShapeInfoEdge aDMEIE;
TopTools_DataMapOfShapeListOfShape aDMVLE;
TopTools_DataMapIteratorOfDataMapOfShapeListOfShape aItDMVLE;
//
bRet=Standard_False;
aTolInt=1.0e-10;
//
aItW.Initialize(aW);
for (; aItW.More(); aItW.Next()) {
const TopoDS_Edge& aE=*((TopoDS_Edge*)&aItW.Value());
aItE.Initialize(aE);
for (aNbV=0; aItE.More(); aItE.Next(), ++aNbV) {
}
if (aNbV<2) {
return bRet; //
}
//
if (!aDMEIE.IsBound(aE)) {
GEOMAlgo_InfoEdge aInfoEdge;
//
aInfoEdge.Init (aE, aF);
iErr=aInfoEdge.ErrorStatus();
if (iErr) {
return bRet; //
}
//
aDMEIE.Bind(aE, aInfoEdge);
}
//
aItE.Initialize(aE);
for (; aItE.More(); aItE.Next()) {
const TopoDS_Shape& aV=aItE.Value();
if (aDMVLE.IsBound(aV)) {
TopTools_ListOfShape& aLE=aDMVLE.ChangeFind(aV);
aLE.Append(aE);
}
else {
TopTools_ListOfShape aLE;
aLE.Append(aE);
aDMVLE.Bind(aV, aLE);
}
}
}
//
// 2
Standard_Real aTolV, aD1, aD2, aDmax, aCoeff;
gp_Pnt aPV;
Handle(Geom_Surface) aS;
BRep_Builder aBB;
//
aCoeff=1.1;
aS=BRep_Tool::Surface(aF);
//
aItDMVLE.Initialize(aDMVLE);
for(; aItDMVLE.More(); aItDMVLE.Next()) {
const TopoDS_Vertex& aV=*((TopoDS_Vertex*)&aItDMVLE.Key());
const TopTools_ListOfShape& aLE=aItDMVLE.Value();
aNbE=aLE.Extent();
if (aNbE!=2) {
continue;
}
//
aPV=BRep_Tool::Pnt(aV);
aTolV=BRep_Tool::Tolerance(aV);
//
const TopoDS_Edge& aE1=*((TopoDS_Edge*)&aLE.First());
const GEOMAlgo_InfoEdge& aIE1=aDMEIE.Find(aE1);
const Geom2dAdaptor_Curve& aGAC1=aIE1.Adaptor();
const IntRes2d_Domain& aDomain1=aIE1.Domain();
//
const TopoDS_Edge& aE2=*((TopoDS_Edge*)&aLE.Last());
const GEOMAlgo_InfoEdge& aIE2=aDMEIE.Find(aE2);
const Geom2dAdaptor_Curve& aGAC2=aIE2.Adaptor();
const IntRes2d_Domain& aDomain2=aIE2.Domain();
//
aInter.Perform(aGAC1, aDomain1,aGAC2, aDomain2, aTolInt, aTolInt);
if(!aInter.IsDone()) {
continue;
}
//
Standard_Integer i, aNbP;
Standard_Real aIP_ParamOnFirst, aIP_ParamOnSecond;
gp_Pnt aP3D1, aP3D2;
gp_Pnt2d aP2D1, aP2D2;
IntRes2d_Transition aTr1, aTr2;
//
aNbP=aInter.NbPoints();
for (i=1; i<=aNbP; ++i) {
const IntRes2d_IntersectionPoint& aIP = aInter.Point(i);
aIP_ParamOnFirst = aIP.ParamOnFirst();
aIP_ParamOnSecond = aIP.ParamOnSecond();
aTr1 =aIP.TransitionOfFirst();
aTr2 =aIP.TransitionOfSecond();
if(aTr1.PositionOnCurve()==IntRes2d_Middle ||
aTr2.PositionOnCurve()==IntRes2d_Middle) {
//
const Handle(Geom_Curve)& aC3D1=aIE1.Curve();
if (!aC3D1.IsNull()) {
aP3D1=aC3D1->Value(aIP_ParamOnFirst);
}
else {
aP2D1=aGAC1.Value(aIP_ParamOnFirst);
aS->D0(aP2D1.X(), aP2D1.Y(), aP3D1);
}
//
const Handle(Geom_Curve)& aC3D2=aIE2.Curve();
if (!aC3D2.IsNull()) {
aP3D2=aC3D2->Value(aIP_ParamOnSecond);
}
else {
aP2D2=aGAC2.Value(aIP_ParamOnSecond);
aS->D0(aP2D2.X(), aP2D2.Y(), aP3D2);
}
//
aD1=aPV.Distance(aP3D1);
aD2=aPV.Distance(aP3D2);
aDmax=(aD1>aD2)? aD1 : aD2;
if (aDmax>aCoeff*aTolV) {
if (aDmax<10.*aTolV){
aBB.UpdateVertex(aV, aDmax);
bRet=Standard_True;
}
}
}//
}//for (i=1; i<=aNbP; ++i) {
}//for(; aItDMVLE.More(); aItDMVLE.Next()) {
return bRet;
}

View File

@ -103,6 +103,7 @@ dist_libGEOMAlgo_la_SOURCES = \
GEOMAlgo_SurfaceTools.cxx \
GEOMAlgo_Tools3D.cxx \
GEOMAlgo_Tools.cxx \
GEOMAlgo_Tools_1.cxx \
GEOMAlgo_VertexSolid.cxx \
GEOMAlgo_WESCorrector.cxx \
GEOMAlgo_WireEdgeSet.cxx \

View File

@ -1555,6 +1555,10 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_SKETCHER_EL</source>
<translation>Element Type</translation>
</message>
<message>
<source>GEOM_SKETCHER_RESTORE</source>
<translation>Restore</translation>
</message>
<message>
<source>GEOM_SKETCHER_LENGTH</source>
<translation>Length</translation>

View File

@ -1278,7 +1278,7 @@ void GeometryGUI::viewManagers( QStringList& lst ) const
void GeometryGUI::onViewManagerAdded( SUIT_ViewManager* vm )
{
if ( vm->getType() == OCCViewer_Viewer::Type() )
if ( vm && vm->getType() == OCCViewer_Viewer::Type() )
{
qDebug( "connect" );
connect( vm, SIGNAL( keyPress ( SUIT_ViewWindow*, QKeyEvent* ) ),
@ -1475,8 +1475,8 @@ void GeometryGUI::createPreferences()
// Set property for precision value for spinboxes
for ( ii = 0; ii < nbQuantities; ii++ ){
setPreferenceProperty( prec[ii], "min", -10 );
setPreferenceProperty( prec[ii], "max", 10 );
setPreferenceProperty( prec[ii], "min", -14 );
setPreferenceProperty( prec[ii], "max", 14 );
setPreferenceProperty( prec[ii], "precision", 2 );
}

View File

@ -438,13 +438,14 @@ Standard_Integer GEOMImpl_BooleanDriver::Execute(TFunction_Logbook& log) const
//}
//Alternative case to check shape result Mantis 0020604: EDF 1172
TopoDS_Iterator It (aShape, Standard_True, Standard_True);
/* TopoDS_Iterator It (aShape, Standard_True, Standard_True);
int nbSubshapes=0;
for (; It.More(); It.Next())
nbSubshapes++;
if (!nbSubshapes)
Standard_ConstructionError::Raise("Boolean operation aborted : result object is empty compound");
Standard_ConstructionError::Raise("Boolean operation aborted : result object is empty compound");*/
//end of 0020604: EDF 1172
//! the changes temporary commented because of customer needs (see the same mantis bug)
aFunction->SetValue(aShape);

View File

@ -17,12 +17,11 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# GEOM GEOM_SWIG : binding of C++ omplementaion with Python
# File : geompy.py
# Author : Paul RASCLE, EDF
# Module : GEOM
#
"""
\namespace geompy
\brief Module geompy
@ -535,13 +534,13 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theFace The face for which tangent plane should be built.
# @param theParameterV vertical value of the center point (0.0 - 1.0).
# @param theParameterU horisontal value of the center point (0.0 - 1.0).
# @param theTrimSize the size of plane.
# @param theTrimSize the size of plane.
# @return New GEOM_Object, containing the created tangent.
#
# @ref swig_MakeTangentPlaneOnFace "Example"
def MakeTangentPlaneOnFace(self, theFace, theParameterU, theParameterV, theTrimSize):
anObj = self.BasicOp.MakeTangentPlaneOnFace(theFace, theParameterU, theParameterV, theTrimSize)
RaiseIfFailed("MakeTangentPlaneOnFace", self.BasicOp)
def MakeTangentPlaneOnFace(self, theFace, theParameterU, theParameterV, theTrimSize):
anObj = self.BasicOp.MakeTangentPlaneOnFace(theFace, theParameterU, theParameterV, theTrimSize)
RaiseIfFailed("MakeTangentPlaneOnFace", self.BasicOp)
return anObj
## Create a vector with the given components.
@ -716,7 +715,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theYVec Vector of Y direction
# @return New GEOM_Object, containing the created coordinate system.
#
# @ref tui_creation_lcs "Example"
# @ref tui_creation_lcs "Example"
def MakeMarkerPntTwoVec(self, theOrigin, theXVec, theYVec):
anObj = self.BasicOp.MakeMarkerPntTwoVec(theOrigin, theXVec, theYVec)
RaiseIfFailed("MakeMarkerPntTwoVec", self.BasicOp)
@ -945,9 +944,9 @@ class geompyDC(GEOM._objref_GEOM_Gen):
RaiseIfFailed("MakeSketcherOnPlane", self.CurvesOp)
return anObj
## Create a sketcher wire, following the numerical description,
## Create a sketcher wire, following the numerical description,
# passed through <VAR>theCoordinates</VAR> argument. \n
# @param theCoordinates double values, defining points to create a wire,
# @param theCoordinates double values, defining points to create a wire,
# passing from it.
# @return New GEOM_Object, containing the created wire.
#
@ -1008,7 +1007,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# with edges, parallel to this coordinate axes.
# @param theH height of Face.
# @param theW width of Face.
# @param theOrientation orientation belong axis OXY OYZ OZX
# @param theOrientation orientation belong axis OXY OYZ OZX
# @return New GEOM_Object, containing the created face.
#
# @ref tui_creation_face "Example"
@ -1023,7 +1022,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Create a face from another plane and two sizes,
# vertical size and horisontal size.
# @param theObj Normale vector to the creating face or
# the face object.
# the face object.
# @param theH Height (vertical size).
# @param theW Width (horisontal size).
# @return New GEOM_Object, containing the created face.
@ -1065,7 +1064,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Create a disk with specified dimensions along OX-OY coordinate axes.
# @param theR Radius of Face.
# @param theOrientation set the orientation belong axis OXY or OYZ or OZX
# @param theOrientation set the orientation belong axis OXY or OYZ or OZX
# @return New GEOM_Object, containing the created disk.
#
# @ref tui_creation_face "Example"
@ -2118,10 +2117,13 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @return New GEOM_Object, containing processed shape.
#
# @ref tui_shape_processing "Example"
def ProcessShape(self,theShape, theOperators, theParameters, theValues):
def ProcessShape(self, theShape, theOperators, theParameters, theValues):
# Example: see GEOM_TestHealing.py
theValues,Parameters = ParseList(theValues)
anObj = self.HealOp.ProcessShape(theShape, theOperators, theParameters, theValues)
# To avoid script failure in case of good argument shape
if self.HealOp.GetErrorCode() == "ShHealOper_NotError_msg":
return theShape
RaiseIfFailed("ProcessShape", self.HealOp)
for string in (theOperators + theParameters):
Parameters = ":" + Parameters
@ -2375,10 +2377,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# in order to avoid possible intersection between shapes from
# this compound.
# @param Limit Type of resulting shapes (corresponding to TopAbs_ShapeEnum).
# @param KeepNonlimitShapes: if this parameter == 0 - only shapes with
# type <= Limit are kept in the result,
# else - shapes with type > Limit are kept
# also (if they exist)
# @param KeepNonlimitShapes: if this parameter == 0, then only shapes of
# target type (equal to Limit) are kept in the result,
# else standalone shapes of lower dimension
# are kept also (if they exist).
#
# After implementation new version of PartitionAlgo (October 2006)
# other parameters are ignored by current functionality. They are kept
@ -2701,9 +2703,9 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Modify the Location of the given object by Path,
# @param theObject The object to be displaced.
# @param thePath Wire or Edge along that the object will be translated.
# @param theDistance progress of Path (0 = start location, 1 = end of path location).
# @param theCopy is to create a copy objects if true.
# @param theReverse - 0 for usual direction, 1 to reverse path direction.
# @param theDistance progress of Path (0 = start location, 1 = end of path location).
# @param theCopy is to create a copy objects if true.
# @param theReverse - 0 for usual direction, 1 to reverse path direction.
# @return New GEOM_Object, containing the displaced shape.
#
# @ref tui_modify_location "Example"
@ -4153,11 +4155,11 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @ref tui_creation_pipetshape "Example"
def MakePipeTShape(self, theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh=True, theP1=None, theP2=None, theP3=None):
theR1, theW1, theL1, theR2, theW2, theL2, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShape(theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh)
RaiseIfFailed("MakePipeTShape", self.AdvOp)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShape(theR1, theW1, theL1, theR2, theW2, theL2, theHexMesh)
RaiseIfFailed("MakePipeTShape", self.AdvOp)
if Parameters: anObj[0].SetParameters(Parameters)
return anObj
@ -4185,17 +4187,17 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @ref tui_creation_pipetshape "Example"
def MakePipeTShapeChamfer(self, theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh=True, theP1=None, theP2=None, theP3=None):
theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeChamferWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShapeChamfer(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeChamferWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShapeChamfer(theR1, theW1, theL1, theR2, theW2, theL2, theH, theW, theHexMesh)
RaiseIfFailed("MakePipeTShapeChamfer", self.AdvOp)
if Parameters: anObj[0].SetParameters(Parameters)
return anObj
## Create a T-shape object with fillet and with specified caracteristics for the main
# and the incident pipes (radius, width, half-length). The fillet is
# created on the junction of the pipes.
# created on the junction of the pipes.
# The extremities of the main pipe are located on junctions points P1 and P2.
# The extremity of the incident pipe is located on junction point P3.
# If P1, P2 and P3 are not given, the center of the shape is (0,0,0) and
@ -4207,7 +4209,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theW2 Width of incident pipe (R2+W2 < R1+W1)
# @param theL2 Half-length of incident pipe
# @param theRF Radius of curvature of fillet.
# @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True)
# @param theHexMesh Boolean indicating if shape is prepared for hex mesh (default=True)
# @param theP1 1st junction point of main pipe
# @param theP2 2nd junction point of main pipe
# @param theP3 Junction point of incident pipe
@ -4216,10 +4218,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @ref tui_creation_pipetshape "Example"
def MakePipeTShapeFillet(self, theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh=True, theP1=None, theP2=None, theP3=None):
theR1, theW1, theL1, theR2, theW2, theL2, theRF, Parameters = ParseParameters(theR1, theW1, theL1, theR2, theW2, theL2, theRF)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeFilletWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShapeFillet(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh)
if (theP1 and theP2 and theP3):
anObj = self.AdvOp.MakePipeTShapeFilletWithPosition(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh, theP1, theP2, theP3)
else:
anObj = self.AdvOp.MakePipeTShapeFillet(theR1, theW1, theL1, theR2, theW2, theL2, theRF, theHexMesh)
RaiseIfFailed("MakePipeTShapeFillet", self.AdvOp)
if Parameters: anObj[0].SetParameters(Parameters)
return anObj

View File

@ -298,6 +298,7 @@ void OperationGUI_FilletDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
}
//=================================================================================

View File

@ -202,6 +202,7 @@ void OperationGUI_PartitionDlg::ConstructorsClicked( int constructorId )
myEditCurrentArgument->setFocus();
connect( myGeomGUI->getApp()->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
SelectionIntoArgument();
}

View File

@ -54,8 +54,7 @@
//=================================================================================
PrimitiveGUI_BoxDlg::PrimitiveGUI_BoxDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl),
myInitial(true)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
{
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BOX_2P")));
QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_BOX_DXYZ")));
@ -196,15 +195,9 @@ void PrimitiveGUI_BoxDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
if (myInitial) {
// on dialog initialization we init the first field with a selected object (if any)
SelectionIntoArgument();
myInitial = false;
}
else {
displayPreview();
}
displayPreview();
}
//=================================================================================
@ -331,10 +324,6 @@ void PrimitiveGUI_BoxDlg::SetEditCurrentArgument()
// clear selection
//disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
//if (myInitial)
// myInitial = false;
//else
// myGeomGUI->getApp()->selectionMgr()->clearSelected();
if (send == GroupPoints->PushButton1) {
myEditCurrentArgument = GroupPoints->LineEdit1;

View File

@ -58,9 +58,6 @@ private:
private:
GEOM::GEOM_Object_var myPoint1, myPoint2; /* Points containing the vector */
// to initialize the first selection field with a selected object on the dialog creation
bool myInitial;
DlgRef_2Sel* GroupPoints;
DlgRef_3Spin* GroupDimensions;

View File

@ -54,8 +54,7 @@
//=================================================================================
PrimitiveGUI_ConeDlg::PrimitiveGUI_ConeDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl),
myInitial(true)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
{
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_CONE_PV")));
QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_CONE_DXYZ")));
@ -211,15 +210,9 @@ void PrimitiveGUI_ConeDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
if (myInitial) {
// on dialog initialization we init the first field with a selected object (if any)
SelectionIntoArgument();
myInitial = false;
}
else {
displayPreview();
}
displayPreview();
}
//=================================================================================

View File

@ -61,9 +61,6 @@ private:
private:
GEOM::GEOM_Object_var myPoint, myDir;
// to initialize the first selection field with a selected object on the dialog creation
bool myInitial;
DlgRef_2Sel3Spin* GroupPoints;
DlgRef_3Spin* GroupDimensions;

View File

@ -202,20 +202,9 @@ void PrimitiveGUI_CylinderDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
if (myInitial) {
myInitial = false;
if (constructorId == 0) {
// on dialog initialization we init the first field with a selected object (if any)
SelectionIntoArgument();
}
else {
displayPreview();
}
}
else {
displayPreview();
}
displayPreview();
}
//=================================================================================

View File

@ -49,8 +49,7 @@
//=================================================================================
PrimitiveGUI_DiskDlg::PrimitiveGUI_DiskDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl),
myInitial(true)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
{
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_DISK_PNT_VEC_R")));
@ -253,20 +252,9 @@ void PrimitiveGUI_DiskDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
if (myInitial) {
myInitial = false;
if (constructorId == 1 || constructorId == 2) {
// on dialog initialization we init the first field with a selected object (if any)
SelectionIntoArgument();
}
else {
displayPreview();
}
}
else {
displayPreview();
}
displayPreview();
}
//=================================================================================

View File

@ -60,9 +60,6 @@ private:
private:
GEOM::GEOM_Object_var myPoint, myDir, myPoint1, myPoint2, myPoint3;
// to initialize the first selection field with a selected object on the dialog creation
bool myInitial;
DlgRef_2Sel1Spin* GroupPntVecR;
DlgRef_3Sel* Group3Pnts;
DlgRef_1Spin* GroupDimensions;

View File

@ -193,6 +193,7 @@ void PrimitiveGUI_SphereDlg::ConstructorsClicked( int constructorId )
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
SelectionIntoArgument();
displayPreview();
}

View File

@ -54,8 +54,7 @@
//=================================================================================
PrimitiveGUI_TorusDlg::PrimitiveGUI_TorusDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl),
myInitial(true)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
{
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_TORUS_PV")));
@ -201,20 +200,9 @@ void PrimitiveGUI_TorusDlg::ConstructorsClicked (int constructorId)
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
SelectionIntoArgument();
if (myInitial) {
myInitial = false;
if (constructorId == 0) {
// on dialog initialization we init the first field with a selected object (if any)
SelectionIntoArgument();
}
else {
displayPreview();
}
}
else {
displayPreview();
}
displayPreview();
}
//=================================================================================

View File

@ -60,9 +60,6 @@ private:
private:
GEOM::GEOM_Object_var myPoint, myDir;
// to initialize the first selection field with a selected object on the dialog creation
bool myInitial;
DlgRef_2Sel2Spin* GroupPoints;
DlgRef_2Spin* GroupDimensions;

View File

@ -19,11 +19,10 @@
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component
// File : RepairGUI_SuppressFacesDlg.cxx
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#include "RepairGUI_SuppressFacesDlg.h"
#include <DlgRef.h>
@ -207,6 +206,8 @@ void RepairGUI_SuppressFacesDlg::SelectionIntoArgument()
}
if (aMap.IsEmpty() && aSelList.Extent() > 0) { // try to detect selected published sub-shape
TColStd_MapOfInteger anIds;
SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>(myGeomGUI->getApp()->activeStudy());
if (!appStudy) return;
_PTR(Study) aStudy = appStudy->studyDS();
@ -232,11 +233,30 @@ void RepairGUI_SuppressFacesDlg::SelectionIntoArgument()
int anIndex = aMainMap.FindIndex(aSubShape);
if (anIndex >= 0) {
aMap.Add(anIndex);
anIds.Add(anIndex);
}
}
}
}
}
if (!aMap.IsEmpty()) {
// highlight local faces, correspondent to OB selection
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
aSelMgr->clearSelected();
Standard_Boolean isOk;
char* objIOR = GEOMBase::GetIORFromObject(myObject);
Handle(GEOM_AISShape) aSh = GEOMBase::ConvertIORinGEOMAISShape(objIOR, isOk, true);
free(objIOR);
if (!isOk || aSh.IsNull())
return;
aSelMgr->AddOrRemoveIndex(aSh->getIO(), anIds, false);
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
this, SLOT(SelectionIntoArgument()));
}
}
const int n = aMap.Extent();

View File

@ -130,6 +130,7 @@ void TransformationGUI_OffsetDlg::Init()
globalSelection( GEOM_ALLSHAPES );
resize(100,100);
SelectionIntoArgument();
}