\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>
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
\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".
-*/
\ No newline at end of file
+<b>TUI Script</b> provides you with a useful example of
+\ref tui_creation_lcs "Local Coordinate System" creation.
+*/
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
<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:
<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:
\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>
\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).
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.
</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)
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>
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
print type == GEOM.SOLID
\endcode
-This code prints "True".
+The result is "True".
*/
<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
\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>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".
+
\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.
+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.
+
\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>Advanced option:</b>
- \ref restore_presentation_parameters_page "Set presentation parameters and subshapes from arguments".
-
-\image html partition1.png
-
-<b>Keep shapes of lower type</b> checkbox allows building geometrical objects.
-Only lower type objects will be preserved without the upper ones.
<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>
\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".
/*!
-\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
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
\image html restore-ss-OB.png
+\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>
-Add prefix "from_" to names of restored sub-shapes, and prefix "from_subshapes_of_" to names of partially restored subshapes.
+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.
-\n You can also call this functionality from your python scripts.
-See our <b>TUI Scripts</b> for \ref tui_restore_prs_params "example".
-
*/
<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
* \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
ChamferGroupParams->SpinBox_DX->setValue(20);
ChamferGroupParams->SpinBox_DY->setValue(10);
FilletGroupParams->SpinBox_DX->setValue(20);
-
+
CssNormal = QString("QDoubleSpinBox {");
CssNormal.append(MainTubeGroupParams->SpinBox_DZ->styleSheet());
CssNormal.append("}");
CssNormal.append("}");
CssAcceptable = "QDoubleSpinBox, QPushButton {background-color: rgb(85, 170, 127)}";
CssRefused = "QDoubleSpinBox, QPushButton {background-color: rgb(255, 0, 0)}";
-
+
// Signal/slot connections
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
//=================================================================================
void AdvancedGUI_PipeTShapeDlg::ApplyNewDimensions() {
QPushButton* send = (QPushButton*) sender();
-
+
bool ok = false;
double newVal;
if (send == JunctionPointsSel->PushButton4) {
//=================================================================================
void AdvancedGUI_PipeTShapeDlg::ValueChangedInSpinBox(double newValue)
{
- if (myOkPoint1 && myOkPoint2 && myOkPoint3)
+ if (JunctionPointsSel->GroupBox1->isChecked() && myOkPoint1 && myOkPoint2 && myOkPoint3)
CheckCompatiblePosition(myPoint1, myPoint2, myPoint3, 0.01);
DisplayPreview();
}
JunctionPointsSel->LineEdit1->setEnabled(false);
JunctionPointsSel->PushButton2->setDown(false);
JunctionPointsSel->LineEdit2->setEnabled(false);
- }
+ }
// enable line edit
myEditCurrentArgument->setEnabled(true);
JunctionPointsSel->LineEdit4->setText("");
JunctionPointsSel->LineEdit5->setText("");
-
+
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
// globalSelection(GEOM_POINT);
globalSelection(); // close local contexts, if any
CORBA::Double theL1 = MainTubeGroupParams->SpinBox_DZ->value();
CORBA::Double theL2 = IncidentTubeGroupParams->SpinBox_DZ->value();
-
+
JunctionPointsSel->LineEdit4->setText("");
JunctionPointsSel->LineEdit5->setText("");
-
+
MainTubeGroupParams->SpinBox_DZ->setToolTip("");
IncidentTubeGroupParams->SpinBox_DZ->setToolTip("");
double d12 = P1.Distance(P2);
double d13 = P1.Distance(P3);
double d23 = P2.Distance(P3);
-
+
if (Abs(d12) <= Precision::Confusion()) {
// SetErrorCode("Junctions points P1 and P2 are identical");
return false;
}
bool AdvancedGUI_PipeTShapeDlg::execute(ObjectList& objects) {
-
+
if (JunctionPointsSel->GroupBox1->isChecked() && myOkPoint1 && myOkPoint2 && myOkPoint3)
CheckCompatiblePosition(myPoint1, myPoint2, myPoint3, 0.01);
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
+ SelectionIntoArgument();
myEditCurrentArgument->setFocus();
globalSelection(); // close local contexts, if any
myPoints->length( 0 );
myEditCurrentArgument->setText( "" );
+ qApp->processEvents();
+ updateGeometry();
+ resize( minimumSizeHint() );
+ SelectionIntoArgument();
}
initName( tr( "GEOM_ELLIPSE" ) );
- resize(100,100);
+ resize( minimumSizeHint() );
+ SelectionIntoArgument();
displayPreview();
}
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
-
SelectionIntoArgument();
}
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
+ SelectionIntoArgument();
myEditCurrentArgument->setFocus();
connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
+ SelectionIntoArgument();
displayPreview();
}
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_FACE" ) );
+ SelectionIntoArgument();
}
QList<int> aSubShapes;
aSubShapes.append( GEOM_FACE );
globalSelection( aMap, aSubShapes );
-
/* signals and slots connections */
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_SHELL" ) );
+ SelectionIntoArgument();
}
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
initName( tr( "GEOM_WIRE" ) );
+ SelectionIntoArgument();
}
#include <gp_Pln.hxx>
+#include <Basics_Utils.hxx>
+
//=================================================================================
// class : EntityGUI_SketcherDlg()
// purpose : Constructs a EntityGUI_SketcherDlg which is a child of 'parent', with the
/***************************************************************/
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 );
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 ) ) );
FindLocalCS();
resize(100,100);
-
+ ActivateLocalCS();
GEOMBase_Helper::displayPreview( false, true, true, myLineWidth );
}
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;
//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() );
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 ) ) );
}
//=================================================================================
//=================================================================================
// function : GetActiveLocalCS()
-// purpose : Find All Coordinates systems in study
+// purpose : Get Working plane
//=================================================================================
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();
+}
QGroupBox* GroupBox1;
QComboBox* ComboBox1;
+ QPushButton* planeButton;
GeometryGUI* myGeometryGUI;
void SetDoubleSpinBoxStep( double );
void FindLocalCS();
gp_Ax3 GetActiveLocalCS();
+ void ActivateLocalCS();
};
#endif // ENTITYGUI_SKETCHERDLG_H
#include "utilities.h"
+#include <Basics_Utils.hxx>
+
#include <TDF_Tool.hxx>
#include <TDF_Data.hxx>
#include <TDF_Reference.hxx>
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);
-// 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
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
-
// File: GEOMAlgo_Builder.cxx
// Created:
// Author: Peter KURNEV
#include <BRepLib.hxx>
#include <NMTTools_PaveFiller.hxx>
+#include <GEOMAlgo_Tools.hxx>
//=======================================================================
//function :
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 :
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
// 2 - PaveFiller is failed
// 10 - No shapes to process
// 30 - SolidBuilder failed
+
--- 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
--
-- 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
aS:Surface from Geom)
returns Boolean from Standard;
+ CorrectWires(myclass;
+ aS :Shape from TopoDS)
+ returns Boolean from Standard;
--fields
end Tools;
-// 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
-//
-// 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.
-//
-// 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.
-//
-// 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
+// Copyright (C) 1991 - 2000 by
+// Matra Datavision SA. All rights reserved.
+//
+// Copyright (C) 2001 - 2004 by
+// Open CASCADE SA. All rights reserved.
+//
+// This file is part of the Open CASCADE Technology software.
//
+// 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
Standard_EXPORT static Standard_Boolean IsUPeriodic(const Handle(Geom_Surface)& aS) ;
+Standard_EXPORT static Standard_Boolean CorrectWires(const TopoDS_Shape& aS) ;
+
+
--- /dev/null
+// 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;
+}
+
+
GEOMAlgo_SurfaceTools.cxx \
GEOMAlgo_Tools3D.cxx \
GEOMAlgo_Tools.cxx \
+ GEOMAlgo_Tools_1.cxx \
GEOMAlgo_VertexSolid.cxx \
GEOMAlgo_WESCorrector.cxx \
GEOMAlgo_WireEdgeSet.cxx \
<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>
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* ) ),
// 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 );
}
//}
//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);
#
# 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
# @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.
RaiseIfFailed("MakeMarker", self.BasicOp)
anObj.SetParameters(Parameters)
return anObj
-
+
## Create a local coordinate system from shape.
# @param theShape The initial shape to detect the coordinate system.
# @return New GEOM_Object, containing the created coordinate system.
# @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)
anObj = self.CurvesOp.MakeArcCenter(thePnt1, thePnt2, thePnt3, theSense)
RaiseIfFailed("MakeArcCenter", self.CurvesOp)
return anObj
-
+
## Create an arc of ellipse, of center and two points.
# @param theCenter Center of the arc.
# @param thePnt1 defines major radius of the arc by distance from Pnt1 to Pnt2.
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.
#
# 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"
## 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.
## 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"
## Create a shape by extrusion of the profile shape along
# the path shape. The path shape can be a wire or an edge.
- # the several profiles can be specified in the several locations of path.
+ # the several profiles can be specified in the several locations of path.
# @param theSeqBases - list of Bases shape to be extruded.
# @param theLocations - list of locations on the path corresponding
# specified list of the Bases shapes. Number of locations
## Create a shape by extrusion of the profile shape along
# the path shape. The path shape can be a wire or a edge.
- # the several profiles can be specified in the several locations of path.
+ # the several profiles can be specified in the several locations of path.
# @param theSeqBases - list of Bases shape to be extruded. Base shape must be
# shell or face. If number of faces in neighbour sections
# aren't coincided result solid between such sections will
# @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
# 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
## 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"
# end of l3_groups
## @}
- ## @addtogroup l4_advanced
+ ## @addtogroup l4_advanced
## @{
## Create a T-shape object with specified caracteristics for the main
# @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
# @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
# @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
# @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
qApp->processEvents();
updateGeometry();
resize(minimumSizeHint());
+ SelectionIntoArgument();
}
//=================================================================================
myEditCurrentArgument->setFocus();
connect( myGeomGUI->getApp()->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
+ SelectionIntoArgument();
}
//=================================================================================
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")));
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();
}
//=================================================================================
// 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;
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;
//=================================================================================
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")));
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();
}
//=================================================================================
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;
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();
}
//=================================================================================
//=================================================================================
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")));
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();
}
//=================================================================================
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;
qApp->processEvents();
updateGeometry();
resize( minimumSizeHint() );
+ SelectionIntoArgument();
displayPreview();
}
//=================================================================================
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")));
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();
}
//=================================================================================
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;
//
// 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>
myObject = GEOM::GEOM_Object::_nil();
myFacesInd = new GEOM::short_array();
myFacesInd->length(0);
-
+
mainFrame()->GroupBoxPublish->show();
// signals and slots connections
}
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();
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();
globalSelection( GEOM_ALLSHAPES );
resize(100,100);
+ SelectionIntoArgument();
}