Mantis issue 0021718: EDF 1874: Ergonomic of multi-translation / multi-rotation

This commit is contained in:
jfa 2013-01-11 14:20:45 +00:00
parent c749b0fe0f
commit fa79fcc326
31 changed files with 1470 additions and 890 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -5,24 +5,28 @@
\n To produce a <b>Multi Rotation</b> in the <b>Main Menu</b> select \n To produce a <b>Multi Rotation</b> in the <b>Main Menu</b> select
<b>Operations - > Transformation - > Multi Rotation</b> <b>Operations - > Transformation - > Multi Rotation</b>
\n This operation creates several geometrical objects rotated in one \n This operation creates a compound of several shapes rotated in one
or two dimensions basing on the initial geometrical object. or two dimensions basing on the initial shape.
\n The \b Result will be one or several \b GEOM_Objects (compound). \n The \b Result will be one \b GEOM_Object (compound).
\n To produce a <b>Simple Multi Rotation</b> (in one dimension) you \n To produce a <b>Simple Multi Rotation</b> (in one dimension) you
need to define a \b Shape to be rotated, an \b Axis of rotation and a need to define a \b Shape to be rotated, an \b Axis of rotation (DZ by
<b>Number of Times</b> the shape must be rotated. <b>Rotation Angle</b> will default), Angle of rotation (optionally) and a <b>Number of Times</b>
be 2 * \a PI / \a NbTimes. Number of shapes in the resulting compound will be equal the shape must be rotated. If <b>Angular step</b> is not defined
to \a NbTimes (if \a NbTimes = 1, the result will contain only the initial (checkbox is not checked), it will be 2 * \a PI / \a NbTimes. Number
non-transformed shape). of shape's copies in the resulting compound will be equal to
\n <b>TUI Command:</b> <em>geompy.MultiRotate1D(Shape, Axis, NbTimes)</em> \a NbTimes (if \a NbTimes = 1, the result will contain only the
\n <b>Arguments:</b> Name + 1 shape + 1 vector for direction + 1 value initial non-transformed shape).
(repetition).
\n <b>TUI Commands:</b>
\n <em>geompy.MultiRotate1DNbTimes(Shape, Axis, NbTimes)</em>
\n <em>geompy.MultiRotate1DByStep(Shape, Axis, AngleStep, NbTimes)</em>
\b <b>NB!</b> There is another way to execute a Multi-rotation \b <b>NB!</b> There is another way to execute a Multi-rotation
operation, which is currently accessible only via TUI commands: operation, which is currently accessible only via TUI commands:
<em>geompy.MakeMultiRotation1D(Shape, Dir, Point, NbTimes)</em> which works in <em>geompy.MakeMultiRotation1DNbTimes(Shape, Dir, Point, NbTimes)</em>,
the same way, but the Axis is defined by direction and point. <em>geompy.MakeMultiRotation1DByStep(Shape, Dir, Point, AngleStep, NbTimes)</em>,
which works in the same way, but the Axis is defined by direction and point.
\image html neo-mrot1.png \image html neo-mrot1.png
@ -31,23 +35,27 @@ the same way, but the Axis is defined by direction and point.
\image html multi_rotation1d2.png "The result of a simple multi-rotation" \image html multi_rotation1d2.png "The result of a simple multi-rotation"
\n <b>Double Multi Rotation</b> (in two dimensions) rotates the given \n <b>Double Multi Rotation</b> (in two dimensions) rotates the given
\b Object around the given \b Axis on the given \b Angle a given \b Object around the given \b Axis (DZ by default) on the given
<b>Number of Times</b> and multi-translates each rotation \b Angle (optional) a given <b>Number of Times</b> and
result. Translation direction passes through the center of gravity of multi-translates each rotation result.
the rotated shape and its projection on the rotation axis. Number of If <b>Angular step</b> is not defined (checkbox is not checked), it
shapes in the resulting compound will be equal to \a NbTimes1 x \a NbTimes2 (if will be 2 * \a PI / \a NbTimes.
both \a NbTimes1 and \a NbTimes2 are equal to 1, the result will contain Translation direction passes through the center of gravity of the
initial shape and its projection on the rotation axis. Number of
shape's copies in the resulting compound will be equal to \a NbTimes1 x \a NbTimes2
(if both \a NbTimes1 and \a NbTimes2 are equal to 1, the result will contain
only the initial non-transformed shape). only the initial non-transformed shape).
\b Reverse checkbox allows to set the direction of rotation. \b Reverse checkbox allows to set the direction of rotation.
\n <b>TUI Command:</b> <em>geompy.MultiRotate2D(Shape, Axis, Angle, NbTimes1, Step, NbTimes2)</em>
\n <b>Arguments:</b> Name + 1 shape + 1 vector for direction + 1 angle \n <b>TUI Commands:</b>
+ 1 value (repetition) + 1 step value + 1 value (repetition). \n <em>geompy.MultiRotate2DNbTimes(Shape, Axis, NbTimes1, RadialStep, NbTimes2)</em>
\n <em>geompy.MultiRotate2DByStep(Shape, Axis, AngleStep, NbTimes1, RadialStep, NbTimes2)</em>
<b>NB!</b> There is another way to execute a Double Multi-rotation <b>NB!</b> There is another way to execute a Double Multi-rotation
operation, which is currently accessible only via TUI commands: operation, which is currently accessible only via TUI commands:
<em>geompy.MakeMultiRotation2D(Shape, Dir, Point, Angle, nbtimes1, Step,nbtimes2)</em> <em>geompy.MakeMultiRotation2DNbTimes(Shape, Dir, Point, NbTimes1, RadialStep, NbTimes2)</em>,
which works in the same way, <em>geompy.MakeMultiRotation2DByStep(Shape, Dir, Point, AngleStep, NbTimes1, RadialStep, NbTimes2)</em>,
but the Axis is defined by direction and point. which works in the same way, but the Axis is defined by direction and point.
\image html neo-mrot2.png \image html neo-mrot2.png

View File

@ -7,9 +7,8 @@ select <b>Operations - > Transformation - > Multi Translation</b>
\n This operation makes several translations of a shape in \b one or \b \n This operation makes several translations of a shape in \b one or \b
two directions. two directions.
\n The \b Result will be one or several \b GEOM_Objects \n The \b Result will be one \b GEOM_Object (compound). The total
(compound). The total number of shapes in the resulting compound (for number of shape copies in the resulting compound will be equal to:
a single initial selected shape) will be equal to:
- in case of \ref single_multi_translation "Single multi translation": - in case of \ref single_multi_translation "Single multi translation":
\a NbTimes (if \a NbTimes parameter is equal to 1, the result will \a NbTimes (if \a NbTimes parameter is equal to 1, the result will
contain only the initial non-translated shape). contain only the initial non-translated shape).
@ -21,14 +20,11 @@ initial shape).
\anchor single_multi_translation \anchor single_multi_translation
\n To produce a <b>Simple Multi Translation</b> (in one direction) you \n To produce a <b>Simple Multi Translation</b> (in one direction) you
need to indicate an \b Object to be translated, a \b Vector of need to indicate an \b Object to be translated, a \b Vector of
translation, a \b Step of translation and a <b>Number of Times</b> the translation (DX by default), a \b Step of translation and a <b>Number
Object should be duplicated. If a curve has been selected instead of of Times</b> the Object should be duplicated. If a curve has been
the Vector, only its first and last vertices will be used to get the vector direction selected instead of the Vector, only its first and last vertices will
and the dialog preview will display the vector along which the object will be translated. be used to get the vector direction and the dialog preview will
\n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation1D(Shape, Dir, display the vector along which the object will be translated.
Step, NbTimes)</em>
\n <b>Arguments:</b> Name + 1 shape + 1 vector (for direction) + 1
step value + 1 value (repetition).
\image html mtrans1.png \image html mtrans1.png
@ -36,12 +32,26 @@ step value + 1 value (repetition).
\image html multi_translation1dsn.png "The result of a simple multi-translation" \image html multi_translation1dsn.png "The result of a simple multi-translation"
\n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation1D(Shape, Dir,
Step, NbTimes)</em>
\n <b>Arguments:</b> Name + 1 shape + 1 vector (for direction) + 1
step value + 1 value (repetition).
\anchor double_multi_translation \anchor double_multi_translation
\n To produce a <b>Double Multi Translation</b> (in two directions) you need to \n To produce a <b>Double Multi Translation</b> (in two directions) you need to
indicate an \b Object to be translated, and, for both axes, a \b indicate an \b Object to be translated, and, for both axes, a \b
Vector of translation, a \b Step of translation and a <b>Number of Times</b> the shape must be duplicated. Vector of translation (DX and DY by default), a \b Step of translation
If a curve has been selected instead of the Vector, only its first and last vertices will be used to get the vector direction and a <b>Number of Times</b> the shape must be duplicated.
and the dialog preview will display the vector along which the object will be translated. If a curve has been selected instead of the Vector, only its first and
last vertices will be used to get the vector direction and the dialog
preview will display the vector along which the object will be
translated.
\image html mtrans2.png
\image html multi_translation_initialsn.png "The initial object"
\image html multi_translation2dsn.png "The result of a double multi-translation"
\n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation2D(Shape, Dir1, \n <b>TUI Command:</b> <em>geompy.MakeMultiTranslation2D(Shape, Dir1,
Step1, NbTimes1, Dir2, Step2, NbTimes2),</em> where \em Shape is a shape Step1, NbTimes1, Dir2, Step2, NbTimes2),</em> where \em Shape is a shape
@ -53,12 +63,6 @@ along \em Dir2.
\n <b>Arguments:</b> Name + 1 shape + 2 vectors defining the direction \n <b>Arguments:</b> Name + 1 shape + 2 vectors defining the direction
+ 2 step values + 2 values (repetitions). + 2 step values + 2 values (repetitions).
\image html mtrans2.png
\image html multi_translation_initialsn.png "The initial object"
\image html multi_translation2dsn.png "The result of a double multi-translation"
Our <b>TUI Scripts</b> provide you with useful examples of the use of Our <b>TUI Scripts</b> provide you with useful examples of the use of
\ref tui_multi_translation "Transformation Operations". \ref tui_multi_translation "Transformation Operations".

View File

@ -340,6 +340,7 @@ gg.setDisplayMode(id_tr2d,1)
import geompy import geompy
import salome import salome
gg = salome.ImportComponentGUI("GEOM") gg = salome.ImportComponentGUI("GEOM")
import math
# create vertices and vectors # create vertices and vectors
p0 = geompy.MakeVertex( 0., 0., 0.) p0 = geompy.MakeVertex( 0., 0., 0.)
@ -349,7 +350,7 @@ pz = geompy.MakeVertex( 0., 0., 20.)
pxyz = geompy.MakeVertex( 50., 50., 10.) pxyz = geompy.MakeVertex( 50., 50., 10.)
vz = geompy.MakeVector(p0, pz) vz = geompy.MakeVector(p0, pz)
vxy = geompy.MakeVector(px, py) vxy = geompy.MakeVector(px, py)
vrot1d = geompy.MakeVector(p0, pxyz) vrot = geompy.MakeVector(p0, pxyz)
# create an arc # create an arc
arc = geompy.MakeArc(py, pz, px) arc = geompy.MakeArc(py, pz, px)
@ -363,25 +364,41 @@ face = geompy.MakeFace(wire, 1)
# create a prism # create a prism
prism = geompy.MakePrismVecH(face, vz, 20.0) prism = geompy.MakePrismVecH(face, vz, 20.0)
# rotate the given object around the given axis by the given angle a given number of times # 1. Rotate the prism around the axis vrot 4 times
rot1d = geompy.MultiRotate1D(prism, vrot1d, 4)
# rotate the given object around the given axis by the given angle a given number of times # rotation angle = 2 * PI / 4
# and multi-translate the result of each rotation rot1da = geompy.MultiRotate1DNbTimes(prism, vrot, 4)
rot2d = geompy.MultiRotate2D(prism, vrot1d, 60, 4, 50, 5)
# by the given angle of 30 degrees
rot1db = geompy.MultiRotate1DByStep(prism, vrot, math.pi/6., 4)
# 2. Rotate the prism around the axis vrot 4 times
# and translate the result of each rotation 5 times on distance 50
# rotation angle = 2 * PI / 4
rot2da = geompy.MultiRotate2DNbTimes(prism, vrot, 4, 50, 5)
# by the given angle of 60 degrees
rot2db = geompy.MultiRotate2DByStep(prism, vrot, math.pi/3., 4, 50, 5)
# add objects in the study # add objects in the study
id_prism = geompy.addToStudy(prism,"Prism") id_prism = geompy.addToStudy(prism,"Prism")
id_rot1d = geompy.addToStudy(rot1d,"Rotation 1D") id_rot1da = geompy.addToStudy(rot1da,"Rotation 1D Nb.Times")
id_rot2d = geompy.addToStudy(rot2d,"Rotation 2D") id_rot1db = geompy.addToStudy(rot1db,"Rotation 1D By Step")
id_rot2da = geompy.addToStudy(rot2da,"Rotation 2D Nb.Times")
id_rot2db = geompy.addToStudy(rot2db,"Rotation 2D By Step")
# display the prism and the results of fillet operation # display the prism and the results of fillet operation
gg.createAndDisplayGO(id_prism) gg.createAndDisplayGO(id_prism)
gg.setDisplayMode(id_prism,1) gg.setDisplayMode(id_prism,1)
gg.createAndDisplayGO(id_rot1d) gg.createAndDisplayGO(id_rot1da)
gg.setDisplayMode(id_rot1d,1) gg.setDisplayMode(id_rot1da,1)
gg.createAndDisplayGO(id_rot2d) gg.createAndDisplayGO(id_rot1db)
gg.setDisplayMode(id_rot2d,1) gg.setDisplayMode(id_rot1db,1)
gg.createAndDisplayGO(id_rot2da)
gg.setDisplayMode(id_rot2da,1)
gg.createAndDisplayGO(id_rot2db)
gg.setDisplayMode(id_rot2db,1)
\endcode \endcode
\anchor tui_fillet2d \anchor tui_fillet2d

View File

@ -804,7 +804,7 @@ module GEOM
/*! /*!
* \brief Translate the given object along the given vector a given number times * \brief Translate the given object along the given vector a given number times
* \param theObject The object to be translated. * \param theObject The object to be translated.
* \param theVector Direction of the translation. * \param theVector Direction of the translation. DX if None.
* \param theStep Distance to translate on. * \param theStep Distance to translate on.
* \param theNbTimes Quantity of translations to be done. * \param theNbTimes Quantity of translations to be done.
* \return New GEOM_Object, containing compound of all * \return New GEOM_Object, containing compound of all
@ -818,10 +818,10 @@ module GEOM
/*! /*!
* \brief Conseqently apply two specified translations to theObject specified number of times. * \brief Conseqently apply two specified translations to theObject specified number of times.
* \param theObject The object to be translated. * \param theObject The object to be translated.
* \param theVector1 Direction of the first translation. * \param theVector1 Direction of the first translation. DX if None.
* \param theStep1 Step of the first translation. * \param theStep1 Step of the first translation.
* \param theNbTimes1 Quantity of translations to be done along theVector1. * \param theNbTimes1 Quantity of translations to be done along theVector1.
* \param theVector2 Direction of the second translation. * \param theVector2 Direction of the second translation. DY if None.
* \param theStep2 Step of the second translation. * \param theStep2 Step of the second translation.
* \param theNbTimes2 Quantity of translations to be done along theVector2. * \param theNbTimes2 Quantity of translations to be done along theVector2.
* \return New GEOM_Object, containing compound of all * \return New GEOM_Object, containing compound of all
@ -888,20 +888,56 @@ module GEOM
in GEOM_Object theAxis, in GEOM_Object theAxis,
in double theAngle); in double theAngle);
/*! /*!
* \brief Rotate the given object around the given axis a given number times. * \brief Rotate the given object around the given axis a given number times.
* *
* Rotation angle will be 2*PI/theNbTimes. * Rotation angle will be 2*PI/theNbObjects.
* \param theObject The object to be rotated. * \param theObject The object to be rotated.
* \param theAxis The rotation axis. * \param theAxis The rotation axis. DZ if None.
* \param theNbTimes Quantity of rotations to be done. * \param theNbObjects Quantity of rotations to be done.
* \return New GEOM_Object, containing compound of all the * \return New GEOM_Object, containing compound of all the
* shapes, obtained after each rotation. * shapes, obtained after each rotation.
*/ */
GEOM_Object MultiRotate1D (in GEOM_Object theObject, GEOM_Object MultiRotate1D (in GEOM_Object theObject,
in GEOM_Object theAxis, in GEOM_Object theAxis,
in long theNbTimes); in long theNbObjects);
/*!
* \brief Rotate the given object around the given axis
* a given number times on the given angle.
*
* \param theObject The object to be rotated.
* \param theAxis The rotation axis. DZ if None.
* \param theAngleStep Rotation angle in radians.
* \param theNbSteps Quantity of rotations to be done.
* \return New GEOM_Object, containing compound of all the
* shapes, obtained after each rotation.
*/
GEOM_Object MultiRotate1DByStep (in GEOM_Object theObject,
in GEOM_Object theAxis,
in double theAngleStep,
in long theNbSteps);
/*!
* \brief Rotate the given object around the given axis
* a given number times and multi-translate each rotation result.
*
* Rotation angle will be 2*PI/theNbObjects.
* Translation direction passes through center of gravity
* of rotated shape and its projection on the rotation axis.
* \param theObject The object to be rotated.
* \param theAxis Rotation axis. DZ if None.
* \param theNbObjects Quantity of rotations to be done.
* \param theRadialStep Translation distance.
* \param theNbSteps Quantity of translations to be done.
* \return New GEOM_Object, containing compound of all the
* shapes, obtained after each transformation.
*/
GEOM_Object MultiRotate2DNbTimes (in GEOM_Object theObject,
in GEOM_Object theAxis,
in long theNbObjects,
in double theRadialStep,
in long theNbSteps);
/*! /*!
* \brief Rotate the given object around the * \brief Rotate the given object around the
@ -911,20 +947,43 @@ module GEOM
* Translation direction passes through center of gravity * Translation direction passes through center of gravity
* of rotated shape and its projection on the rotation axis. * of rotated shape and its projection on the rotation axis.
* \param theObject The object to be rotated. * \param theObject The object to be rotated.
* \param theAxis Rotation axis. * \param theAxis Rotation axis. DZ if None.
* \param theAngle Rotation angle in graduces. * \param theAngleStep Rotation angle in radians.
* \param theNbTimes1 Quantity of rotations to be done. * \param theNbSteps1 Quantity of rotations to be done.
* \param theStep Translation distance. * \param theRadialStep Translation distance.
* \param theNbTimes2 Quantity of translations to be done. * \param theNbSteps2 Quantity of translations to be done.
* \return New GEOM_Object, containing compound of all the
* shapes, obtained after each transformation.
*/
GEOM_Object MultiRotate2DByStep (in GEOM_Object theObject,
in GEOM_Object theAxis,
in double theAngleStep,
in long theNbSteps1,
in double theRadialStep,
in long theNbSteps2);
/*!
* \brief Rotate the given object around the
* given axis on the given angle a given number
* times and multi-translate each rotation result.
*
* Translation direction passes through center of gravity
* of rotated shape and its projection on the rotation axis.
* \param theObject The object to be rotated.
* \param theAxis Rotation axis. DZ if None.
* \param theAngleStep Rotation angle in degrees.
* \param theNbSteps1 Quantity of rotations to be done.
* \param theRadialStep Translation distance.
* \param theNbSteps2 Quantity of translations to be done.
* \return New GEOM_Object, containing compound of all the * \return New GEOM_Object, containing compound of all the
* shapes, obtained after each transformation. * shapes, obtained after each transformation.
*/ */
GEOM_Object MultiRotate2D (in GEOM_Object theObject, GEOM_Object MultiRotate2D (in GEOM_Object theObject,
in GEOM_Object theAxis, in GEOM_Object theAxis,
in double theAngle, in double theAngleStep,
in long theNbTimes1, in long theNbSteps1,
in double theStep, in double theRadialStep,
in long theNbTimes2); in long theNbSteps2);
/*! /*!
* \brief Replace the given object by an object, * \brief Replace the given object by an object,
@ -3629,6 +3688,16 @@ module GEOM
out double X1, out double Y1, out double Z1, out double X1, out double Y1, out double Z1,
out double X2, out double Y2, out double Z2); out double X2, out double Y2, out double Z2);
/*!
* \brief Get closest points of the given shapes.
* \param theShape1,theShape2 Shapes to find closest points of.
* \param theCoords Output. List of (X, Y, Z) coordinates for all couples of points.
* \return The number of found solutions (-1 in case of infinite number of solutions).
*/
long ClosestPoints (in GEOM_Object theShape1,
in GEOM_Object theShape2,
out ListOfDouble theCoords);
/*! /*!
* \brief Get angle between the given lines or linear edges. * \brief Get angle between the given lines or linear edges.
* \param theShape1,theShape2 Shapes to find angle between. Lines or linear edges. * \param theShape1,theShape2 Shapes to find angle between. Lines or linear edges.

View File

@ -15,7 +15,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : DlgRef.cxx // File : DlgRef.cxx
// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
@ -526,20 +525,6 @@ DlgRef_2Sel3Spin::~DlgRef_2Sel3Spin()
{ {
} }
//////////////////////////////////////////
// DlgRef_2Sel4Spin1Check
//////////////////////////////////////////
DlgRef_2Sel4Spin1Check::DlgRef_2Sel4Spin1Check( QWidget* parent, Qt::WindowFlags f )
: QWidget( parent, f )
{
setupUi( this );
}
DlgRef_2Sel4Spin1Check::~DlgRef_2Sel4Spin1Check()
{
}
////////////////////////////////////////// //////////////////////////////////////////
// DlgRef_2Sel // DlgRef_2Sel
////////////////////////////////////////// //////////////////////////////////////////

View File

@ -15,7 +15,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// File : DlgRef.h // File : DlgRef.h
// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com) // Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
@ -611,22 +610,6 @@ public:
~DlgRef_2Sel3Spin(); ~DlgRef_2Sel3Spin();
}; };
//////////////////////////////////////////
// DlgRef_2Sel4Spin1Check
//////////////////////////////////////////
#include "ui_DlgRef_2Sel4Spin1Check_QTD.h"
class DLGREF_EXPORT DlgRef_2Sel4Spin1Check : public QWidget,
public Ui::DlgRef_2Sel4Spin1Check_QTD
{
Q_OBJECT
public:
DlgRef_2Sel4Spin1Check( QWidget* = 0, Qt::WindowFlags = 0 );
~DlgRef_2Sel4Spin1Check();
};
////////////////////////////////////////// //////////////////////////////////////////
// DlgRef_2Sel // DlgRef_2Sel
////////////////////////////////////////// //////////////////////////////////////////

View File

@ -1,237 +0,0 @@
<ui version="4.0" >
<class>DlgRef_2Sel4Spin1Check_QTD</class>
<widget class="QWidget" name="DlgRef_2Sel4Spin1Check_QTD" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>156</width>
<height>197</height>
</rect>
</property>
<property name="windowTitle" >
<string/>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>0</number>
</property>
<property name="topMargin" >
<number>0</number>
</property>
<property name="rightMargin" >
<number>0</number>
</property>
<property name="bottomMargin" >
<number>0</number>
</property>
<property name="horizontalSpacing" >
<number>0</number>
</property>
<property name="verticalSpacing" >
<number>0</number>
</property>
<item row="0" column="0" >
<widget class="QGroupBox" name="GroupBox1" >
<property name="title" >
<string/>
</property>
<layout class="QGridLayout" >
<property name="leftMargin" >
<number>9</number>
</property>
<property name="topMargin" >
<number>9</number>
</property>
<property name="rightMargin" >
<number>9</number>
</property>
<property name="bottomMargin" >
<number>9</number>
</property>
<property name="horizontalSpacing" >
<number>6</number>
</property>
<property name="verticalSpacing" >
<number>6</number>
</property>
<item row="4" column="0" colspan="3" >
<widget class="QCheckBox" name="CheckButton1" >
<property name="text" >
<string/>
</property>
</widget>
</item>
<item row="6" column="1" colspan="2" >
<widget class="SalomeApp_IntSpinBox" name="SpinBox_DY2" />
</item>
<item row="5" column="1" colspan="2" >
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX2" />
</item>
<item row="3" column="1" colspan="2" >
<widget class="SalomeApp_IntSpinBox" name="SpinBox_DY1" />
</item>
<item row="2" column="1" colspan="2" >
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX1" />
</item>
<item row="6" column="0" >
<widget class="QLabel" name="TextLabel6" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL6</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="5" column="0" >
<widget class="QLabel" name="TextLabel5" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL5</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="3" column="0" >
<widget class="QLabel" name="TextLabel4" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL4</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="2" column="0" >
<widget class="QLabel" name="TextLabel3" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL3</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0" >
<widget class="QLabel" name="TextLabel2" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL2</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="1" >
<widget class="QPushButton" name="PushButton2" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string/>
</property>
</widget>
</item>
<item row="0" column="2" >
<widget class="QLineEdit" name="LineEdit1" />
</item>
<item row="0" column="0" >
<widget class="QLabel" name="TextLabel1" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string>TL1</string>
</property>
<property name="wordWrap" >
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="2" >
<widget class="QLineEdit" name="LineEdit2" />
</item>
<item row="0" column="1" >
<widget class="QPushButton" name="PushButton1" >
<property name="sizePolicy" >
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
<string/>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
<layoutdefault spacing="6" margin="11" />
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
<customwidgets>
<customwidget>
<class>SalomeApp_DoubleSpinBox</class>
<extends>QDoubleSpinBox</extends>
<header location="global" >SalomeApp_DoubleSpinBox.h</header>
</customwidget>
<customwidget>
<class>SalomeApp_IntSpinBox</class>
<extends>QSpinBox</extends>
<header location="global" >SalomeApp_IntSpinBox.h</header>
</customwidget>
</customwidgets>
<tabstops>
<tabstop>PushButton1</tabstop>
<tabstop>LineEdit1</tabstop>
<tabstop>PushButton2</tabstop>
<tabstop>LineEdit2</tabstop>
<tabstop>SpinBox_DX1</tabstop>
<tabstop>SpinBox_DY1</tabstop>
<tabstop>CheckButton1</tabstop>
<tabstop>SpinBox_DX2</tabstop>
<tabstop>SpinBox_DY2</tabstop>
</tabstops>
<resources/>
<connections/>
</ui>

View File

@ -15,9 +15,7 @@
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
# #
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# GEOM DLGREF :
# File : Makefile.am # File : Makefile.am
# Author : Alexander BORODIN, Open CASCADE S.A.S. (alexander.borodin@opencascade.com) # Author : Alexander BORODIN, Open CASCADE S.A.S. (alexander.borodin@opencascade.com)
# Package : DlgRef # Package : DlgRef
@ -72,7 +70,6 @@ UIC_FILES = \
ui_DlgRef_2Sel2Spin2Push_QTD.h \ ui_DlgRef_2Sel2Spin2Push_QTD.h \
ui_DlgRef_2Sel3Spin2Rb_QTD.h \ ui_DlgRef_2Sel3Spin2Rb_QTD.h \
ui_DlgRef_2Sel3Spin_QTD.h \ ui_DlgRef_2Sel3Spin_QTD.h \
ui_DlgRef_2Sel4Spin1Check_QTD.h \
ui_DlgRef_2Sel_QTD.h \ ui_DlgRef_2Sel_QTD.h \
ui_DlgRef_2SelExt_QTD.h \ ui_DlgRef_2SelExt_QTD.h \
ui_DlgRef_2Spin_QTD.h \ ui_DlgRef_2Spin_QTD.h \

View File

@ -125,6 +125,10 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_ANGLE_1</source> <source>GEOM_ANGLE_1</source>
<translation>Angle</translation> <translation>Angle</translation>
</message> </message>
<message>
<source>GEOM_ANGLE_STEP</source>
<translation>Angular step :</translation>
</message>
<message> <message>
<source>GEOM_ARC_ELLIPSE</source> <source>GEOM_ARC_ELLIPSE</source>
<translation>Arc of ellipse</translation> <translation>Arc of ellipse</translation>
@ -1950,6 +1954,10 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_STEP</source> <source>GEOM_STEP</source>
<translation>Step :</translation> <translation>Step :</translation>
</message> </message>
<message>
<source>GEOM_STEP_R</source>
<translation>Radial step :</translation>
</message>
<message> <message>
<source>GEOM_STEP_TITLE</source> <source>GEOM_STEP_TITLE</source>
<translation>Step value for GUI constructions</translation> <translation>Step value for GUI constructions</translation>

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
@ -500,7 +499,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theObject.IsNull() || theVector.IsNull()) return NULL; if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aLastFunction = theObject->GetLastFunction(); Handle(GEOM_Function) aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be moved if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be moved
@ -515,9 +514,10 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate1D
//Check if the function is set correctly //Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_TranslateDriver::GetID()) return NULL; if (aFunction->GetDriverGUID() != GEOMImpl_TranslateDriver::GetID()) return NULL;
GEOMImpl_ITranslate aTI(aFunction); GEOMImpl_ITranslate aTI (aFunction);
aTI.SetVector(theVector->GetLastFunction());
aTI.SetOriginal(aLastFunction); aTI.SetOriginal(aLastFunction);
if (!theVector.IsNull())
aTI.SetVector(theVector->GetLastFunction());
aTI.SetStep1(theStep); aTI.SetStep1(theStep);
aTI.SetNbIter1(theNbTimes); aTI.SetNbIter1(theNbTimes);
@ -560,7 +560,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Obje
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theObject.IsNull() || theVector.IsNull() || theVector2.IsNull()) return NULL; if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aLastFunction = theObject->GetLastFunction(); Handle(GEOM_Function) aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be moved if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be moved
@ -576,11 +576,13 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Translate2D (Handle(GEOM_Obje
if (aFunction->GetDriverGUID() != GEOMImpl_TranslateDriver::GetID()) return NULL; if (aFunction->GetDriverGUID() != GEOMImpl_TranslateDriver::GetID()) return NULL;
GEOMImpl_ITranslate aTI (aFunction); GEOMImpl_ITranslate aTI (aFunction);
aTI.SetVector(theVector->GetLastFunction());
aTI.SetVector2(theVector2->GetLastFunction());
aTI.SetOriginal(aLastFunction); aTI.SetOriginal(aLastFunction);
if (!theVector.IsNull())
aTI.SetVector(theVector->GetLastFunction());
aTI.SetStep1(theStep1); aTI.SetStep1(theStep1);
aTI.SetNbIter1(theNbTimes1); aTI.SetNbIter1(theNbTimes1);
if (!theVector2.IsNull())
aTI.SetVector2(theVector2->GetLastFunction());
aTI.SetStep2(theStep2); aTI.SetStep2(theStep2);
aTI.SetNbIter2(theNbTimes2); aTI.SetNbIter2(theNbTimes2);
@ -1675,10 +1677,12 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate (Handle(GEOM_Object) t
//============================================================================= //=============================================================================
/*! /*!
* Rotate * RotateCopy
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Object) theObject, Handle(GEOM_Object) theAxis, double theAngle) Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis,
double theAngle)
{ {
SetErrorCode(KO); SetErrorCode(KO);
@ -1728,7 +1732,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateCopy (Handle(GEOM_Objec
//============================================================================= //=============================================================================
/*! /*!
* Rotate1D * Rotate1D (for MultiRotate1DNbTimes)
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) theObject, Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) theObject,
@ -1737,7 +1741,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object)
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theObject.IsNull() || theAxis.IsNull()) return NULL; if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated
@ -1754,7 +1758,8 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object)
GEOMImpl_IRotate aRI(aFunction); GEOMImpl_IRotate aRI(aFunction);
aRI.SetOriginal(aLastFunction); aRI.SetOriginal(aLastFunction);
aRI.SetAxis(theAxis->GetLastFunction()); if (!theAxis.IsNull())
aRI.SetAxis(theAxis->GetLastFunction());
aRI.SetNbIter1(theNbTimes); aRI.SetNbIter1(theNbTimes);
//Compute the translation //Compute the translation
@ -1774,7 +1779,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object)
} }
//Make a Python command //Make a Python command
GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate1D(" GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate1DNbTimes("
<< theObject << ", " << theAxis << ", " << theNbTimes << ")"; << theObject << ", " << theAxis << ", " << theNbTimes << ")";
SetErrorCode(OK); SetErrorCode(OK);
@ -1783,19 +1788,17 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object)
//============================================================================= //=============================================================================
/*! /*!
* Rotate2D * Rotate1D (for MultiRotate1DByStep)
*/ */
//============================================================================= //=============================================================================
Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) theObject, Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate1D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis, Handle(GEOM_Object) theAxis,
double theAngle, double theAngleStep,
Standard_Integer theNbTimes1, Standard_Integer theNbSteps)
double theStep,
Standard_Integer theNbTimes2)
{ {
SetErrorCode(KO); SetErrorCode(KO);
if (theObject.IsNull() || theAxis.IsNull()) return NULL; if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated
@ -1804,19 +1807,21 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object)
Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType()); Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType());
//Add a rotate function //Add a rotate function
aFunction = aCopy->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_2D); aFunction = aCopy->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_1D_STEP);
if (aFunction.IsNull()) return NULL; if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly //Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL; if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL;
GEOMImpl_IRotate aRI(aFunction); //Convert angle into degrees
aRI.SetAxis(theAxis->GetLastFunction()); double anAngleStep = theAngleStep * 180. / M_PI;
GEOMImpl_IRotate aRI (aFunction);
aRI.SetOriginal(aLastFunction); aRI.SetOriginal(aLastFunction);
aRI.SetNbIter1(theNbTimes1); if (!theAxis.IsNull())
aRI.SetNbIter2(theNbTimes2); aRI.SetAxis(theAxis->GetLastFunction());
aRI.SetAngle(theAngle); aRI.SetAngle(anAngleStep);
aRI.SetStep(theStep); aRI.SetNbIter1(theNbSteps);
//Compute the translation //Compute the translation
try { try {
@ -1835,9 +1840,140 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object)
} }
//Make a Python command //Make a Python command
GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate2D(" GEOM::TPythonDump(aFunction)
<< theObject << ", " << theAxis << ", " << theAngle << ", " << aCopy << " = geompy.MultiRotate1DByStep(" << theObject << ", "
<< theNbTimes1 << ", " << theStep << ", " << theNbTimes2 << ")"; << theAxis << ", " << anAngleStep << "*math.pi/180.0, " << theNbSteps << ")";
SetErrorCode(OK);
return aCopy;
}
//=============================================================================
/*!
* Rotate2D (for MultiRotate2DNbTimes)
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis,
Standard_Integer theNbObjects,
double theRadialStep,
Standard_Integer theNbSteps)
{
SetErrorCode(KO);
if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated
//Add a new Copy object
Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType());
//Add a rotate function
aFunction = aCopy->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_2D);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL;
double anAngle = 360. / (double)theNbObjects;
GEOMImpl_IRotate aRI (aFunction);
aRI.SetOriginal(aLastFunction);
if (!theAxis.IsNull())
aRI.SetAxis(theAxis->GetLastFunction());
aRI.SetAngle(anAngle);
aRI.SetNbIter1(theNbObjects);
aRI.SetStep(theRadialStep);
aRI.SetNbIter2(theNbSteps);
//Compute the translation
try {
#if OCC_VERSION_LARGE > 0x06010000
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Rotate driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aCopy << " = geompy.MultiRotate2DNbTimes("
<< theObject << ", " << theAxis << ", " << theNbObjects
<< ", " << theRadialStep << ", " << theNbSteps << ")";
SetErrorCode(OK);
return aCopy;
}
//=============================================================================
/*!
* Rotate2D (for MultiRotate2DByStep)
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_ITransformOperations::Rotate2D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis,
double theAngleStep,
Standard_Integer theNbTimes1,
double theStep,
Standard_Integer theNbTimes2)
{
SetErrorCode(KO);
if (theObject.IsNull()) return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated
//Add a new Copy object
Handle(GEOM_Object) aCopy = GetEngine()->AddObject(GetDocID(), theObject->GetType());
//Add a rotate function
aFunction = aCopy->AddFunction(GEOMImpl_RotateDriver::GetID(), ROTATE_2D);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_RotateDriver::GetID()) return NULL;
//Convert angle into degrees
double anAngleStep = theAngleStep * 180. / M_PI;
GEOMImpl_IRotate aRI (aFunction);
aRI.SetOriginal(aLastFunction);
if (!theAxis.IsNull())
aRI.SetAxis(theAxis->GetLastFunction());
aRI.SetAngle(anAngleStep);
aRI.SetNbIter1(theNbTimes1);
aRI.SetStep(theStep);
aRI.SetNbIter2(theNbTimes2);
//Compute the translation
try {
#if OCC_VERSION_LARGE > 0x06010000
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Rotate driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction)
<< aCopy << " = geompy.MultiRotate2DByStep(" << theObject << ", "
<< theAxis << ", " << anAngleStep << "*math.pi/180.0, "
<< theNbTimes1 << ", " << theStep << ", " << theNbTimes2 << ")";
SetErrorCode(OK); SetErrorCode(OK);
return aCopy; return aCopy;
@ -1858,7 +1994,7 @@ Handle(GEOM_Object) GEOMImpl_ITransformOperations::RotateThreePoints (Handle(GEO
if (theObject.IsNull() || theCentPoint.IsNull() || thePoint1.IsNull() || thePoint2.IsNull()) return NULL; if (theObject.IsNull() || theCentPoint.IsNull() || thePoint1.IsNull() || thePoint2.IsNull()) return NULL;
Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction(); Handle(GEOM_Function) aFunction, aLastFunction = theObject->GetLastFunction();
if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated if (aLastFunction.IsNull()) return NULL; //There is no function which creates an object to be rotated
// Get last functions of the arguments // Get last functions of the arguments
Handle(GEOM_Function) aCPF = theCentPoint->GetLastFunction(); Handle(GEOM_Function) aCPF = theCentPoint->GetLastFunction();

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef _GEOMImpl_ITransformOperations_HXX_ #ifndef _GEOMImpl_ITransformOperations_HXX_
#define _GEOMImpl_ITransformOperations_HXX_ #define _GEOMImpl_ITransformOperations_HXX_
@ -154,6 +153,17 @@ class GEOMImpl_ITransformOperations : public GEOM_IOperations
Handle(GEOM_Object) theAxis, Handle(GEOM_Object) theAxis,
Standard_Integer theNbTimes); Standard_Integer theNbTimes);
Standard_EXPORT Handle(GEOM_Object) Rotate1D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis,
double theAngleStep,
Standard_Integer theNbSteps);
Standard_EXPORT Handle(GEOM_Object) Rotate2D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis,
Standard_Integer theNbObjects,
double theRadialStep,
Standard_Integer theNbSteps);
Standard_EXPORT Handle(GEOM_Object) Rotate2D (Handle(GEOM_Object) theObject, Standard_EXPORT Handle(GEOM_Object) Rotate2D (Handle(GEOM_Object) theObject,
Handle(GEOM_Object) theAxis, Handle(GEOM_Object) theAxis,
double theAngle, double theAngle,

View File

@ -18,35 +18,41 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
#include <GEOMImpl_RotateDriver.hxx> #include <GEOMImpl_RotateDriver.hxx>
#include <GEOMImpl_IRotate.hxx> #include <GEOMImpl_IRotate.hxx>
#include <GEOMImpl_Types.hxx> #include <GEOMImpl_Types.hxx>
#include <GEOM_Function.hxx> #include <GEOM_Function.hxx>
#include <GEOMUtils.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRep_Builder.hxx>
#include <BRep_Tool.hxx>
#include <BRepGProp.hxx>
#include <TopAbs.hxx>
#include <TopExp.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Compound.hxx>
#include <TopoDS_Edge.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
#include <Geom_Line.hxx>
#include <GProp_GProps.hxx>
#include <Precision.hxx>
#include <gp_Trsf.hxx> #include <gp_Trsf.hxx>
#include <gp_Pnt.hxx> #include <gp_Pnt.hxx>
#include <gp_Vec.hxx> #include <gp_Vec.hxx>
#include <gp_Dir.hxx> #include <gp_Dir.hxx>
#include <gp_Ax1.hxx> #include <gp_Ax1.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Compound.hxx>
#include <TopAbs.hxx>
#include <TopExp.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopoDS_Edge.hxx>
#include <BRep_Tool.hxx>
#include <BRep_Builder.hxx>
#include <GeomAPI_ProjectPointOnCurve.hxx>
#include <Geom_Line.hxx>
#include <GProp_GProps.hxx>
#include <BRepGProp.hxx>
#include <Precision.hxx>
//======================================================================= //=======================================================================
//function : GetID //function : GetID
@ -92,13 +98,12 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
Handle(GEOM_Function) anAxis = RI.GetAxis(); Handle(GEOM_Function) anAxis = RI.GetAxis();
if (anAxis.IsNull()) return 0; if (anAxis.IsNull()) return 0;
TopoDS_Shape A = anAxis->GetValue(); TopoDS_Shape A = anAxis->GetValue();
if (A.IsNull() || A.ShapeType() != TopAbs_EDGE) return 0; gp_Vec aV = GEOMUtils::GetVector(A);
TopoDS_Edge anEdge = TopoDS::Edge(A); TopoDS_Edge anEdge = TopoDS::Edge(A);
gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)); gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge));
gp_Pnt aP2 = BRep_Tool::Pnt(TopExp::LastVertex(anEdge)); gp_Dir aDir (aV);
gp_Dir aDir(gp_Vec(aP1, aP2)); gp_Ax1 anAx1 (aP1, aDir);
gp_Ax1 anAx1(aP1, aDir);
Standard_Real anAngle = RI.GetAngle(); Standard_Real anAngle = RI.GetAngle();
if (fabs(anAngle) < Precision::Angular()) anAngle += 2.*M_PI; // NPAL19665,19769 if (fabs(anAngle) < Precision::Angular()) anAngle += 2.*M_PI; // NPAL19665,19769
aTrsf.SetRotation(anAx1, anAngle); aTrsf.SetRotation(anAx1, anAngle);
@ -148,22 +153,24 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
TopLoc_Location aLocRes (aTrsfOrig); TopLoc_Location aLocRes (aTrsfOrig);
aShape = anOriginal.Located(aLocRes); aShape = anOriginal.Located(aLocRes);
} }
else if (aType == ROTATE_1D) { else if (aType == ROTATE_1D || aType == ROTATE_1D_STEP) {
//Get direction //Get direction
gp_Pnt aP1 = gp::Origin();
gp_Dir D = gp::DZ();
Handle(GEOM_Function) anAxis = RI.GetAxis(); Handle(GEOM_Function) anAxis = RI.GetAxis();
if(anAxis.IsNull()) return 0; if (!anAxis.IsNull()) {
TopoDS_Shape A = anAxis->GetValue(); TopoDS_Shape A = anAxis->GetValue();
if(A.IsNull() || A.ShapeType() != TopAbs_EDGE) return 0; gp_Vec aV = GEOMUtils::GetVector(A);
TopoDS_Edge anEdge = TopoDS::Edge(A); TopoDS_Edge anEdge = TopoDS::Edge(A);
aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge));
gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)); D = gp_Dir(aV);
gp_Pnt aP2 = BRep_Tool::Pnt(TopExp::LastVertex(anEdge)); }
gp_Dir D(gp_Vec(aP1, aP2)); gp_Ax1 AX1 (aP1, D);
gp_Ax1 AX1(aP1, D);
Standard_Integer nbtimes = RI.GetNbIter1(); Standard_Integer nbtimes = RI.GetNbIter1();
Standard_Real angle = 360.0/nbtimes; Standard_Real angle = 360. / nbtimes;
if (aType == ROTATE_1D_STEP)
angle = RI.GetAngle();
TopoDS_Compound aCompound; TopoDS_Compound aCompound;
BRep_Builder B; BRep_Builder B;
@ -177,7 +184,7 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
B.Add(aCompound, anOriginal); B.Add(aCompound, anOriginal);
} }
else { else {
aTrsf.SetRotation(AX1, i*angle*M_PI/180.); aTrsf.SetRotation(AX1, i * angle * M_PI / 180.);
//TopLoc_Location aLocRes (aTrsf * aTrsfOrig); // gp_Trsf::Multiply() has a bug //TopLoc_Location aLocRes (aTrsf * aTrsfOrig); // gp_Trsf::Multiply() has a bug
gp_Trsf aTrsfNew (aTrsfOrig); gp_Trsf aTrsfNew (aTrsfOrig);
aTrsfNew.PreMultiply(aTrsf); aTrsfNew.PreMultiply(aTrsf);
@ -194,16 +201,17 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
} }
else if (aType == ROTATE_2D) { else if (aType == ROTATE_2D) {
//Get direction //Get direction
gp_Pnt aP1 = gp::Origin();
gp_Dir D = gp::DZ();
Handle(GEOM_Function) anAxis = RI.GetAxis(); Handle(GEOM_Function) anAxis = RI.GetAxis();
if(anAxis.IsNull()) return 0; if (!anAxis.IsNull()) {
TopoDS_Shape A = anAxis->GetValue(); TopoDS_Shape A = anAxis->GetValue();
if(A.IsNull() || A.ShapeType() != TopAbs_EDGE) return 0; gp_Vec aV = GEOMUtils::GetVector(A);
TopoDS_Edge anEdge = TopoDS::Edge(A); TopoDS_Edge anEdge = TopoDS::Edge(A);
gp_Pnt aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)); aP1 = BRep_Tool::Pnt(TopExp::FirstVertex(anEdge));
gp_Pnt aP2 = BRep_Tool::Pnt(TopExp::LastVertex(anEdge)); D = gp_Dir(aV);
gp_Dir D(gp_Vec(aP1, aP2)); }
gp_Ax1 AX1 (aP1, D);
gp_Ax1 AX1(aP1, D);
gp_Trsf aTrsf1; gp_Trsf aTrsf1;
gp_Trsf aTrsf2; gp_Trsf aTrsf2;
@ -274,7 +282,7 @@ Standard_Integer GEOMImpl_RotateDriver::Execute(TFunction_Logbook& log) const
B.Add(aCompound, anOriginal.Located(aLocRes)); B.Add(aCompound, anOriginal.Located(aLocRes));
} }
else { else {
aTrsf2.SetRotation(AX1, j*ang*M_PI/180.); aTrsf2.SetRotation(AX1, j * ang * M_PI / 180.);
//TopLoc_Location aLocRes (aTrsf2 * aTrsf1 * aTrsfOrig); // gp_Trsf::Multiply() has a bug //TopLoc_Location aLocRes (aTrsf2 * aTrsf1 * aTrsfOrig); // gp_Trsf::Multiply() has a bug
gp_Trsf aTrsfNew (aTrsfOrig); gp_Trsf aTrsfNew (aTrsfOrig);
aTrsfNew.PreMultiply(aTrsf1); aTrsfNew.PreMultiply(aTrsf1);

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
@ -173,13 +172,14 @@ Standard_Integer GEOMImpl_TranslateDriver::Execute(TFunction_Logbook& log) const
B.MakeCompound( aCompound ); B.MakeCompound( aCompound );
Handle(GEOM_Function) aVector = TI.GetVector(); Handle(GEOM_Function) aVector = TI.GetVector();
if(aVector.IsNull()) return 0; gp_Vec Vec = gp::DX();
TopoDS_Shape aV = aVector->GetValue(); if (!aVector.IsNull()) {
if(aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0; TopoDS_Shape aV = aVector->GetValue();
TopoDS_Edge anEdge = TopoDS::Edge(aV); if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
TopoDS_Edge anEdge = TopoDS::Edge(aV);
gp_Vec Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge))); Vec = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
Vec.Normalize(); Vec.Normalize();
}
TopLoc_Location aLocOrig = anOriginal.Location(); TopLoc_Location aLocOrig = anOriginal.Location();
gp_Trsf aTrsfOrig = aLocOrig.Transformation(); gp_Trsf aTrsfOrig = aLocOrig.Transformation();
@ -202,32 +202,36 @@ Standard_Integer GEOMImpl_TranslateDriver::Execute(TFunction_Logbook& log) const
} }
else if (aType == TRANSLATE_2D) { else if (aType == TRANSLATE_2D) {
Standard_Integer nbtimes1 = TI.GetNbIter1(), nbtimes2 = TI.GetNbIter2(); Standard_Integer nbtimes1 = TI.GetNbIter1(), nbtimes2 = TI.GetNbIter2();
Standard_Real DX, DY, DZ, step1 = TI.GetStep1(), step2 = TI.GetStep2(); Standard_Real DX, DY, DZ, step1 = TI.GetStep1(), step2 = TI.GetStep2();
gp_Vec aVec;
Handle(GEOM_Function) aVector = TI.GetVector(); Handle(GEOM_Function) aVector = TI.GetVector();
if(aVector.IsNull()) return 0;
TopoDS_Shape aV = aVector->GetValue();
if(aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
TopoDS_Edge anEdge = TopoDS::Edge(aV);
gp_Vec Vec1(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
Vec1.Normalize();
Handle(GEOM_Function) aVector2 = TI.GetVector2(); Handle(GEOM_Function) aVector2 = TI.GetVector2();
if(aVector2.IsNull()) return 0;
aV = aVector2->GetValue();
if(aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
anEdge = TopoDS::Edge(aV);
gp_Vec Vec2(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge))); gp_Vec Vec1 = gp::DX();
Vec2.Normalize(); gp_Vec Vec2 = gp::DY();
if (!aVector.IsNull()) {
TopoDS_Shape aV = aVector->GetValue();
if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
TopoDS_Edge anEdge = TopoDS::Edge(aV);
Vec1 = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
Vec1.Normalize();
}
if (!aVector2.IsNull()) {
TopoDS_Shape aV = aVector2->GetValue();
if (aV.IsNull() || aV.ShapeType() != TopAbs_EDGE) return 0;
TopoDS_Edge anEdge = TopoDS::Edge(aV);
Vec2 = gp_Vec(BRep_Tool::Pnt(TopExp::FirstVertex(anEdge)), BRep_Tool::Pnt(TopExp::LastVertex(anEdge)));
Vec2.Normalize();
}
TopoDS_Compound aCompound; TopoDS_Compound aCompound;
BRep_Builder B; BRep_Builder B;
B.MakeCompound( aCompound ); B.MakeCompound(aCompound);
TopLoc_Location aLocOrig = anOriginal.Location(); TopLoc_Location aLocOrig = anOriginal.Location();
gp_Trsf aTrsfOrig = aLocOrig.Transformation(); gp_Trsf aTrsfOrig = aLocOrig.Transformation();
gp_Vec aVec;
for (int i = 0; i < nbtimes1; i++) { for (int i = 0; i < nbtimes1; i++) {
for (int j = 0; j < nbtimes2; j++) { for (int j = 0; j < nbtimes2; j++) {

View File

@ -153,6 +153,7 @@
#define ROTATE_2D 4 #define ROTATE_2D 4
#define ROTATE_THREE_POINTS 5 #define ROTATE_THREE_POINTS 5
#define ROTATE_THREE_POINTS_COPY 6 #define ROTATE_THREE_POINTS_COPY 6
#define ROTATE_1D_STEP 7
#define MIRROR_PLANE 1 #define MIRROR_PLANE 1
#define MIRROR_PLANE_COPY 2 #define MIRROR_PLANE_COPY 2

View File

@ -518,6 +518,52 @@ CORBA::Double GEOM_IMeasureOperations_i::GetMinDistance
return GetOperations()->GetMinDistance(aShape1, aShape2, X1, Y1, Z1, X2, Y2, Z2); return GetOperations()->GetMinDistance(aShape1, aShape2, X1, Y1, Z1, X2, Y2, Z2);
} }
//=============================================================================
/*!
* ClosestPoints
*/
//=============================================================================
CORBA::Long GEOM_IMeasureOperations_i::ClosestPoints
(GEOM::GEOM_Object_ptr theShape1, GEOM::GEOM_Object_ptr theShape2,
GEOM::ListOfDouble_out theCoords)
{
//Set a not done flag
GetOperations()->SetNotDone();
// allocate the CORBA array
int nbSols = -1;
GEOM::ListOfDouble_var aDoublesArray = new GEOM::ListOfDouble();
//Get the reference shape
Handle(GEOM_Object) aShape1 = GetObjectImpl(theShape1);
Handle(GEOM_Object) aShape2 = GetObjectImpl(theShape2);
if (!aShape1.IsNull() && !aShape2.IsNull()) {
Handle(TColStd_HSequenceOfReal) aDoubles = new TColStd_HSequenceOfReal;
// Get shape parameters
//nbSols = GetOperations()->ClosestPoints(aShape1, aShape2, aDoubles);
//int nbDbls = aDoubles->Length();
//aDoublesArray->length(nbDbls);
//for (int id = 0; id < nbDbls; id++) {
// aDoublesArray[id] = aDoubles->Value(id + 1);
//}
// tmp
double X1, Y1, Z1, X2, Y2, Z2;
GetOperations()->GetMinDistance(aShape1, aShape2, X1, Y1, Z1, X2, Y2, Z2);
aDoublesArray->length(6);
aDoublesArray[0] = X1;
aDoublesArray[1] = Y1;
aDoublesArray[2] = Z1;
aDoublesArray[3] = X2;
aDoublesArray[4] = Y2;
aDoublesArray[5] = Z2;
nbSols = 1;
}
theCoords = aDoublesArray._retn();
return nbSols;
}
//============================================================================= //=============================================================================
/*! /*!
* PointCoordinates * PointCoordinates

View File

@ -103,6 +103,10 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i :
CORBA::Double& X1, CORBA::Double& Y1, CORBA::Double& Z1, CORBA::Double& X1, CORBA::Double& Y1, CORBA::Double& Z1,
CORBA::Double& X2, CORBA::Double& Y2, CORBA::Double& Z2); CORBA::Double& X2, CORBA::Double& Y2, CORBA::Double& Z2);
CORBA::Long ClosestPoints (GEOM::GEOM_Object_ptr theShape1,
GEOM::GEOM_Object_ptr theShape2,
GEOM::ListOfDouble_out theCoords);
void PointCoordinates (GEOM::GEOM_Object_ptr theShape, void PointCoordinates (GEOM::GEOM_Object_ptr theShape,
CORBA::Double& X, CORBA::Double& Y, CORBA::Double& Z); CORBA::Double& X, CORBA::Double& Y, CORBA::Double& Z);

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <Standard_Stream.hxx> #include <Standard_Stream.hxx>
@ -958,7 +957,7 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate1D
//Get the vector of translation //Get the vector of translation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector); Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
if (aVector.IsNull()) return aGEOMObject._retn(); //if (aVector.IsNull()) return aGEOMObject._retn(); // DX by default
//Perform the translation //Perform the translation
Handle(GEOM_Object) anObject = Handle(GEOM_Object) anObject =
@ -992,11 +991,11 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiTranslate2D (GEOM::GEOM_
//Get the vector1 of translation //Get the vector1 of translation
Handle(GEOM_Object) aVector1 = GetObjectImpl(theVector1); Handle(GEOM_Object) aVector1 = GetObjectImpl(theVector1);
if (aVector1.IsNull()) return aGEOMObject._retn(); //if (aVector1.IsNull()) return aGEOMObject._retn(); // DX by default
//Get the vector2 of translation //Get the vector2 of translation
Handle(GEOM_Object) aVector2 = GetObjectImpl(theVector2); Handle(GEOM_Object) aVector2 = GetObjectImpl(theVector2);
if (aVector2.IsNull()) return aGEOMObject._retn(); //if (aVector2.IsNull()) return aGEOMObject._retn(); // DY by default
//Perform the translation //Perform the translation
Handle(GEOM_Object) anObject = GetOperations()->Translate2D Handle(GEOM_Object) anObject = GetOperations()->Translate2D
@ -1026,7 +1025,7 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1D (GEOM::GEOM_Obj
//Get the a directon of rotation //Get the a directon of rotation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector); Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
if (aVector.IsNull()) return aGEOMObject._retn(); //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
//Perform the rotation //Perform the rotation
Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theNbTimes); Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theNbTimes);
@ -1035,6 +1034,101 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1D (GEOM::GEOM_Obj
return GetObject(anObject); return GetObject(anObject);
} }
//=============================================================================
/*!
* MultiRotate1DByStep
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate1DByStep (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector,
CORBA::Double theAngleStep,
CORBA::Long theNbSteps)
{
//Set a not done flag
GetOperations()->SetNotDone();
GEOM::GEOM_Object_var aGEOMObject;
//Get the object itself
Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
if (aBasicObject.IsNull()) return aGEOMObject._retn();
//Get the a directon of rotation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
//if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
//Perform the rotation
Handle(GEOM_Object) anObject = GetOperations()->Rotate1D(aBasicObject, aVector, theAngleStep, theNbSteps);
if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MultiRotate2DNbTimes
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2DNbTimes (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector,
CORBA::Long theNbObjects,
CORBA::Double theRadialStep,
CORBA::Long theNbSteps)
{
//Set a not done flag
GetOperations()->SetNotDone();
GEOM::GEOM_Object_var aGEOMObject;
//Get the object itself
Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
if (aBasicObject.IsNull()) return aGEOMObject._retn();
//Get the a directon of rotation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
//if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
//Perform the rotation
Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
(aBasicObject, aVector, theNbObjects, theRadialStep, theNbSteps);
if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MultiRotate2DByStep
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2DByStep (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector,
CORBA::Double theAngle,
CORBA::Long theNbTimes1,
CORBA::Double theStep,
CORBA::Long theNbTimes2)
{
//Set a not done flag
GetOperations()->SetNotDone();
GEOM::GEOM_Object_var aGEOMObject;
//Get the object itself
Handle(GEOM_Object) aBasicObject = GetObjectImpl(theObject);
if (aBasicObject.IsNull()) return aGEOMObject._retn();
//Get the a directon of rotation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
//if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
//Perform the rotation
Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
(aBasicObject, aVector, theAngle, theNbTimes1, theStep, theNbTimes2);
if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
return GetObject(anObject);
}
//============================================================================= //=============================================================================
/*! /*!
* MultiRotate2D * MultiRotate2D
@ -1058,11 +1152,13 @@ GEOM::GEOM_Object_ptr GEOM_ITransformOperations_i::MultiRotate2D (GEOM::GEOM_Obj
//Get the a directon of rotation //Get the a directon of rotation
Handle(GEOM_Object) aVector = GetObjectImpl(theVector); Handle(GEOM_Object) aVector = GetObjectImpl(theVector);
if (aVector.IsNull()) return aGEOMObject._retn(); //if (aVector.IsNull()) return aGEOMObject._retn(); // DZ by default
double anAngle = M_PI * theAngle / 180.;
//Perform the rotation //Perform the rotation
Handle(GEOM_Object) anObject = GetOperations()->Rotate2D Handle(GEOM_Object) anObject = GetOperations()->Rotate2D
(aBasicObject, aVector, theAngle, theNbTimes1, theStep, theNbTimes2); (aBasicObject, aVector, anAngle, theNbTimes1, theStep, theNbTimes2);
if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn();
return GetObject(anObject); return GetObject(anObject);

View File

@ -18,7 +18,6 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#ifndef _GEOM_ITransformOperations_i_HeaderFile #ifndef _GEOM_ITransformOperations_i_HeaderFile
#define _GEOM_ITransformOperations_i_HeaderFile #define _GEOM_ITransformOperations_i_HeaderFile
@ -39,17 +38,17 @@ class GEOM_I_EXPORT GEOM_ITransformOperations_i :
{ {
public: public:
GEOM_ITransformOperations_i (PortableServer::POA_ptr thePOA, GEOM_ITransformOperations_i (PortableServer::POA_ptr thePOA,
GEOM::GEOM_Gen_ptr theEngine, GEOM::GEOM_Gen_ptr theEngine,
::GEOMImpl_ITransformOperations* theImpl); ::GEOMImpl_ITransformOperations* theImpl);
~GEOM_ITransformOperations_i(); ~GEOM_ITransformOperations_i();
GEOM::GEOM_Object_ptr TranslateTwoPoints (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateTwoPoints (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2); GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr TranslateTwoPointsCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateTwoPointsCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2); GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr TranslateDXDYDZ (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateDXDYDZ (GEOM::GEOM_Object_ptr theObject,
CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ); CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ);
@ -59,15 +58,15 @@ class GEOM_I_EXPORT GEOM_ITransformOperations_i :
CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ); CORBA::Double theDX, CORBA::Double theDY, CORBA::Double theDZ);
GEOM::GEOM_Object_ptr TranslateVector (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateVector (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector); GEOM::GEOM_Object_ptr theVector);
GEOM::GEOM_Object_ptr TranslateVectorCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateVectorCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector); GEOM::GEOM_Object_ptr theVector);
GEOM::GEOM_Object_ptr TranslateVectorDistance (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TranslateVectorDistance (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector, GEOM::GEOM_Object_ptr theVector,
CORBA::Double theDistance, CORBA::Double theDistance,
CORBA::Boolean theCopy); CORBA::Boolean theCopy);
GEOM::GEOM_Object_ptr MultiTranslate1D (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MultiTranslate1D (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector, GEOM::GEOM_Object_ptr theVector,
@ -81,93 +80,111 @@ class GEOM_I_EXPORT GEOM_ITransformOperations_i :
GEOM::GEOM_Object_ptr Rotate (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr Rotate (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis, GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle); CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MultiRotate1D (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MultiRotate1D (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector, GEOM::GEOM_Object_ptr theVector,
CORBA::Long theNbTimes); CORBA::Long theNbTimes);
GEOM::GEOM_Object_ptr MultiRotate1DByStep (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngleStep,
CORBA::Long theNbSteps);
GEOM::GEOM_Object_ptr MultiRotate2DNbTimes (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Long theNbObjects,
CORBA::Double theRadialStep,
CORBA::Long theNbSteps);
GEOM::GEOM_Object_ptr MultiRotate2DByStep (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector,
CORBA::Double theAngle,
CORBA::Long theNbTimes1,
CORBA::Double theStep,
CORBA::Long theNbTimes2);
GEOM::GEOM_Object_ptr MultiRotate2D (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MultiRotate2D (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theVector, GEOM::GEOM_Object_ptr theVector,
CORBA::Double theAngle, CORBA::Double theAngle,
CORBA::Long theNbTimes1, CORBA::Long theNbTimes1,
CORBA::Double theStep, CORBA::Double theStep,
CORBA::Long theNbTimes2); CORBA::Long theNbTimes2);
GEOM::GEOM_Object_ptr RotateCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr RotateCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis, GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle); CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MirrorPlane (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorPlane (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePlane); GEOM::GEOM_Object_ptr thePlane);
GEOM::GEOM_Object_ptr MirrorPlaneCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorPlaneCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePlane); GEOM::GEOM_Object_ptr thePlane);
GEOM::GEOM_Object_ptr MirrorAxis (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorAxis (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis); GEOM::GEOM_Object_ptr theAxis);
GEOM::GEOM_Object_ptr MirrorAxisCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorAxisCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theAxis); GEOM::GEOM_Object_ptr theAxis);
GEOM::GEOM_Object_ptr MirrorPoint (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorPoint (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint); GEOM::GEOM_Object_ptr thePoint);
GEOM::GEOM_Object_ptr MirrorPointCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr MirrorPointCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint); GEOM::GEOM_Object_ptr thePoint);
GEOM::GEOM_Object_ptr OffsetShape (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr OffsetShape (GEOM::GEOM_Object_ptr theObject,
CORBA::Double theOffset); CORBA::Double theOffset);
GEOM::GEOM_Object_ptr OffsetShapeCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr OffsetShapeCopy (GEOM::GEOM_Object_ptr theObject,
CORBA::Double theOffset); CORBA::Double theOffset);
GEOM::GEOM_Object_ptr ProjectShapeCopy (GEOM::GEOM_Object_ptr theSource, GEOM::GEOM_Object_ptr ProjectShapeCopy (GEOM::GEOM_Object_ptr theSource,
GEOM::GEOM_Object_ptr theTarget); GEOM::GEOM_Object_ptr theTarget);
GEOM::GEOM_Object_ptr ScaleShape (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr ScaleShape (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint, GEOM::GEOM_Object_ptr thePoint,
CORBA::Double theFactor); CORBA::Double theFactor);
GEOM::GEOM_Object_ptr ScaleShapeCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr ScaleShapeCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint, GEOM::GEOM_Object_ptr thePoint,
CORBA::Double theFactor); CORBA::Double theFactor);
GEOM::GEOM_Object_ptr ScaleShapeAlongAxes (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr ScaleShapeAlongAxes (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint, GEOM::GEOM_Object_ptr thePoint,
CORBA::Double theFactorX, CORBA::Double theFactorX,
CORBA::Double theFactorY, CORBA::Double theFactorY,
CORBA::Double theFactorZ); CORBA::Double theFactorZ);
GEOM::GEOM_Object_ptr ScaleShapeAlongAxesCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr ScaleShapeAlongAxesCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePoint, GEOM::GEOM_Object_ptr thePoint,
CORBA::Double theFactorX, CORBA::Double theFactorX,
CORBA::Double theFactorY, CORBA::Double theFactorY,
CORBA::Double theFactorZ); CORBA::Double theFactorZ);
GEOM::GEOM_Object_ptr PositionShape (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr PositionShape (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theStartLCS, GEOM::GEOM_Object_ptr theStartLCS,
GEOM::GEOM_Object_ptr theEndLCS); GEOM::GEOM_Object_ptr theEndLCS);
GEOM::GEOM_Object_ptr PositionShapeCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr PositionShapeCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theStartLCS, GEOM::GEOM_Object_ptr theStartLCS,
GEOM::GEOM_Object_ptr theEndLCS); GEOM::GEOM_Object_ptr theEndLCS);
GEOM::GEOM_Object_ptr PositionAlongPath (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr PositionAlongPath (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr thePath, GEOM::GEOM_Object_ptr thePath,
CORBA::Double theDistance, CORBA::Double theDistance,
CORBA::Boolean theCopy, CORBA::Boolean theCopy,
CORBA::Boolean theReverse); CORBA::Boolean theReverse);
GEOM::GEOM_Object_ptr RotateThreePoints (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr RotateThreePoints (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theCentPoint, GEOM::GEOM_Object_ptr theCentPoint,
GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2); GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr RotateThreePointsCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr RotateThreePointsCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theCentPoint, GEOM::GEOM_Object_ptr theCentPoint,
GEOM::GEOM_Object_ptr thePoint1, GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2); GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr TransformLikeOtherCopy (GEOM::GEOM_Object_ptr theObject, GEOM::GEOM_Object_ptr TransformLikeOtherCopy (GEOM::GEOM_Object_ptr theObject,
GEOM::GEOM_Object_ptr theSample); GEOM::GEOM_Object_ptr theSample);

View File

@ -290,9 +290,8 @@ def TestAll (geompy, math):
#Create Patterns #Create Patterns
MultiTrans1D = geompy.MakeMultiTranslation1D(Fillet, vz, step1, nbtimes1) MultiTrans1D = geompy.MakeMultiTranslation1D(Fillet, vz, step1, nbtimes1)
MultiTrans2D = geompy.MakeMultiTranslation2D(Fillet, vz, step1, nbtimes1, vy, step2, nbtimes2) MultiTrans2D = geompy.MakeMultiTranslation2D(Fillet, vz, step1, nbtimes1, vy, step2, nbtimes2)
#!!!!Angle In Degree!!!! MultiRot1D = geompy.MultiRotate1DNbTimes(Chamfer, vx, nbtimes1)
MultiRot1D = geompy.MultiRotate1D(Chamfer, vx, nbtimes1) MultiRot2D = geompy.MultiRotate2DByStep(Chamfer, vx, angle1, nbtimes1, step1, nbtimes2)
MultiRot2D = geompy.MultiRotate2D(Chamfer, vx, angle, nbtimes1, step1, nbtimes2)
#Create Informations objects #Create Informations objects
CDG = geompy.MakeCDG(Prism) #(GEOM_Object)->GEOM_Object CDG = geompy.MakeCDG(Prism) #(GEOM_Object)->GEOM_Object

View File

@ -186,8 +186,8 @@ def TestOtherOperations (geompy, math):
pz = geompy.MakeVertex(0, 0, 100) pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0) vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot1D = geompy.MakeMultiRotation1D(f12, vy, pz, 6) MultiRot1D = geompy.MakeMultiRotation1DNbTimes(f12, vy, pz, 6)
MultiRot2D = geompy.MakeMultiRotation2D(f12, vy, pz, 45, 6, 30, 3) MultiRot2D = geompy.MakeMultiRotation2DByStep(f12, vy, pz, math.pi/4, 6, 30, 3)
id_MultiRot1D = geompy.addToStudy(MultiRot1D, "MakeMultiRotation1D") id_MultiRot1D = geompy.addToStudy(MultiRot1D, "MakeMultiRotation1D")
id_MultiRot2D = geompy.addToStudy(MultiRot2D, "MakeMultiRotation2D") id_MultiRot2D = geompy.addToStudy(MultiRot2D, "MakeMultiRotation2D")

View File

@ -169,6 +169,7 @@
## @defgroup l3_basic_op Basic Operations ## @defgroup l3_basic_op Basic Operations
## @defgroup l3_boolean Boolean Operations ## @defgroup l3_boolean Boolean Operations
## @defgroup l3_transform Transformation Operations ## @defgroup l3_transform Transformation Operations
## @defgroup l3_transform_d Transformation Operations deprecated methods
## @defgroup l3_local Local Operations (Fillet, Chamfer and other Features) ## @defgroup l3_local Local Operations (Fillet, Chamfer and other Features)
## @defgroup l3_blocks_op Blocks Operations ## @defgroup l3_blocks_op Blocks Operations
## @defgroup l3_healing Repairing Operations ## @defgroup l3_healing Repairing Operations
@ -7652,7 +7653,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Translate the given object along the given vector a given number times ## Translate the given object along the given vector a given number times
# @param theObject The object to be translated. # @param theObject The object to be translated.
# @param theVector Direction of the translation. # @param theVector Direction of the translation. DX if None.
# @param theStep Distance to translate on. # @param theStep Distance to translate on.
# @param theNbTimes Quantity of translations to be done. # @param theNbTimes Quantity of translations to be done.
# @param theName Object name; when specified, this parameter is used # @param theName Object name; when specified, this parameter is used
@ -7669,7 +7670,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
Parameters: Parameters:
theObject The object to be translated. theObject The object to be translated.
theVector Direction of the translation. theVector Direction of the translation. DX if None.
theStep Distance to translate on. theStep Distance to translate on.
theNbTimes Quantity of translations to be done. theNbTimes Quantity of translations to be done.
theName Object name; when specified, this parameter is used theName Object name; when specified, this parameter is used
@ -7693,10 +7694,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Conseqently apply two specified translations to theObject specified number of times. ## Conseqently apply two specified translations to theObject specified number of times.
# @param theObject The object to be translated. # @param theObject The object to be translated.
# @param theVector1 Direction of the first translation. # @param theVector1 Direction of the first translation. DX if None.
# @param theStep1 Step of the first translation. # @param theStep1 Step of the first translation.
# @param theNbTimes1 Quantity of translations to be done along theVector1. # @param theNbTimes1 Quantity of translations to be done along theVector1.
# @param theVector2 Direction of the second translation. # @param theVector2 Direction of the second translation. DY if None.
# @param theStep2 Step of the second translation. # @param theStep2 Step of the second translation.
# @param theNbTimes2 Quantity of translations to be done along theVector2. # @param theNbTimes2 Quantity of translations to be done along theVector2.
# @param theName Object name; when specified, this parameter is used # @param theName Object name; when specified, this parameter is used
@ -7714,10 +7715,10 @@ class geompyDC(GEOM._objref_GEOM_Gen):
Parameters: Parameters:
theObject The object to be translated. theObject The object to be translated.
theVector1 Direction of the first translation. theVector1 Direction of the first translation. DX if None.
theStep1 Step of the first translation. theStep1 Step of the first translation.
theNbTimes1 Quantity of translations to be done along theVector1. theNbTimes1 Quantity of translations to be done along theVector1.
theVector2 Direction of the second translation. theVector2 Direction of the second translation. DY if None.
theStep2 Step of the second translation. theStep2 Step of the second translation.
theNbTimes2 Quantity of translations to be done along theVector2. theNbTimes2 Quantity of translations to be done along theVector2.
theName Object name; when specified, this parameter is used theName Object name; when specified, this parameter is used
@ -7743,7 +7744,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
## Rotate the given object around the given axis a given number times. ## Rotate the given object around the given axis a given number times.
# Rotation angle will be 2*PI/theNbTimes. # Rotation angle will be 2*PI/theNbTimes.
# @param theObject The object to be rotated. # @param theObject The object to be rotated.
# @param theAxis The rotation axis. # @param theAxis The rotation axis. DZ if None.
# @param theNbTimes Quantity of rotations to be done. # @param theNbTimes Quantity of rotations to be done.
# @param theName Object name; when specified, this parameter is used # @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic # for result publication in the study. Otherwise, if automatic
@ -7753,14 +7754,14 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# shapes, obtained after each rotation. # shapes, obtained after each rotation.
# #
# @ref tui_multi_rotation "Example" # @ref tui_multi_rotation "Example"
def MultiRotate1D(self, theObject, theAxis, theNbTimes, theName=None): def MultiRotate1DNbTimes (self, theObject, theAxis, theNbTimes, theName=None):
""" """
Rotate the given object around the given axis a given number times. Rotate the given object around the given axis a given number times.
Rotation angle will be 2*PI/theNbTimes. Rotation angle will be 2*PI/theNbTimes.
Parameters: Parameters:
theObject The object to be rotated. theObject The object to be rotated.
theAxis The rotation axis. theAxis The rotation axis. DZ if None.
theNbTimes Quantity of rotations to be done. theNbTimes Quantity of rotations to be done.
theName Object name; when specified, this parameter is used theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic for result publication in the study. Otherwise, if automatic
@ -7771,26 +7772,68 @@ class geompyDC(GEOM._objref_GEOM_Gen):
shapes, obtained after each rotation. shapes, obtained after each rotation.
Example of usage: Example of usage:
rot1d = geompy.MultiRotate1D(prism, vect, 4) rot1d = geompy.MultiRotate1DNbTimes(prism, vect, 4)
""" """
# Example: see GEOM_TestAll.py # Example: see GEOM_TestAll.py
theAxis, theNbTimes, Parameters = ParseParameters(theAxis, theNbTimes) theNbTimes, Parameters = ParseParameters(theNbTimes)
anObj = self.TrsfOp.MultiRotate1D(theObject, theAxis, theNbTimes) anObj = self.TrsfOp.MultiRotate1D(theObject, theAxis, theNbTimes)
RaiseIfFailed("MultiRotate1D", self.TrsfOp) RaiseIfFailed("MultiRotate1DNbTimes", self.TrsfOp)
anObj.SetParameters(Parameters) anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "multirotation") self._autoPublish(anObj, theName, "multirotation")
return anObj return anObj
## Rotate the given object around the ## Rotate the given object around the given axis
# given axis on the given angle a given number # a given number times on the given angle.
# times and multi-translate each rotation result. # @param theObject The object to be rotated.
# @param theAxis The rotation axis. DZ if None.
# @param theAngleStep Rotation angle in radians.
# @param theNbTimes Quantity of rotations to be done.
# @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic
# publication is switched on, default value is used for result name.
#
# @return New GEOM.GEOM_Object, containing compound of all the
# shapes, obtained after each rotation.
#
# @ref tui_multi_rotation "Example"
def MultiRotate1DByStep(self, theObject, theAxis, theAngleStep, theNbTimes, theName=None):
"""
Rotate the given object around the given axis
a given number times on the given angle.
Parameters:
theObject The object to be rotated.
theAxis The rotation axis. DZ if None.
theAngleStep Rotation angle in radians.
theNbTimes Quantity of rotations to be done.
theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic
publication is switched on, default value is used for result name.
Returns:
New GEOM.GEOM_Object, containing compound of all the
shapes, obtained after each rotation.
Example of usage:
rot1d = geompy.MultiRotate1DByStep(prism, vect, math.pi/4, 4)
"""
# Example: see GEOM_TestAll.py
theAngleStep, theNbTimes, Parameters = ParseParameters(theAngleStep, theNbTimes)
anObj = self.TrsfOp.MultiRotate1DByStep(theObject, theAxis, theAngleStep, theNbTimes)
RaiseIfFailed("MultiRotate1DByStep", self.TrsfOp)
anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "multirotation")
return anObj
## Rotate the given object around the given axis a given
# number times and multi-translate each rotation result.
# Rotation angle will be 2*PI/theNbTimes1.
# Translation direction passes through center of gravity # Translation direction passes through center of gravity
# of rotated shape and its projection on the rotation axis. # of rotated shape and its projection on the rotation axis.
# @param theObject The object to be rotated. # @param theObject The object to be rotated.
# @param theAxis Rotation axis. # @param theAxis Rotation axis. DZ if None.
# @param theAngle Rotation angle in degrees.
# @param theNbTimes1 Quantity of rotations to be done. # @param theNbTimes1 Quantity of rotations to be done.
# @param theStep Translation distance. # @param theRadialStep Translation distance.
# @param theNbTimes2 Quantity of translations to be done. # @param theNbTimes2 Quantity of translations to be done.
# @param theName Object name; when specified, this parameter is used # @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic # for result publication in the study. Otherwise, if automatic
@ -7800,7 +7843,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# shapes, obtained after each transformation. # shapes, obtained after each transformation.
# #
# @ref tui_multi_rotation "Example" # @ref tui_multi_rotation "Example"
def MultiRotate2D(self, theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2, theName=None): def MultiRotate2DNbTimes(self, theObject, theAxis, theNbTimes1, theRadialStep, theNbTimes2, theName=None):
""" """
Rotate the given object around the Rotate the given object around the
given axis on the given angle a given number given axis on the given angle a given number
@ -7810,10 +7853,9 @@ class geompyDC(GEOM._objref_GEOM_Gen):
Parameters: Parameters:
theObject The object to be rotated. theObject The object to be rotated.
theAxis Rotation axis. theAxis Rotation axis. DZ if None.
theAngle Rotation angle in degrees.
theNbTimes1 Quantity of rotations to be done. theNbTimes1 Quantity of rotations to be done.
theStep Translation distance. theRadialStep Translation distance.
theNbTimes2 Quantity of translations to be done. theNbTimes2 Quantity of translations to be done.
theName Object name; when specified, this parameter is used theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic for result publication in the study. Otherwise, if automatic
@ -7827,6 +7869,163 @@ class geompyDC(GEOM._objref_GEOM_Gen):
rot2d = geompy.MultiRotate2D(prism, vect, 60, 4, 50, 5) rot2d = geompy.MultiRotate2D(prism, vect, 60, 4, 50, 5)
""" """
# Example: see GEOM_TestAll.py # Example: see GEOM_TestAll.py
theNbTimes1, theRadialStep, theNbTimes2, Parameters = ParseParameters(theNbTimes1, theRadialStep, theNbTimes2)
anObj = self.TrsfOp.MultiRotate2DNbTimes(theObject, theAxis, theNbTimes1, theRadialStep, theNbTimes2)
RaiseIfFailed("MultiRotate2DNbTimes", self.TrsfOp)
anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "multirotation")
return anObj
## Rotate the given object around the
# given axis on the given angle a given number
# times and multi-translate each rotation result.
# Translation direction passes through center of gravity
# of rotated shape and its projection on the rotation axis.
# @param theObject The object to be rotated.
# @param theAxis Rotation axis. DZ if None.
# @param theAngleStep Rotation angle in radians.
# @param theNbTimes1 Quantity of rotations to be done.
# @param theRadialStep Translation distance.
# @param theNbTimes2 Quantity of translations to be done.
# @param theName Object name; when specified, this parameter is used
# for result publication in the study. Otherwise, if automatic
# publication is switched on, default value is used for result name.
#
# @return New GEOM.GEOM_Object, containing compound of all the
# shapes, obtained after each transformation.
#
# @ref tui_multi_rotation "Example"
def MultiRotate2DByStep (self, theObject, theAxis, theAngleStep, theNbTimes1, theRadialStep, theNbTimes2, theName=None):
"""
Rotate the given object around the
given axis on the given angle a given number
times and multi-translate each rotation result.
Translation direction passes through center of gravity
of rotated shape and its projection on the rotation axis.
Parameters:
theObject The object to be rotated.
theAxis Rotation axis. DZ if None.
theAngleStep Rotation angle in radians.
theNbTimes1 Quantity of rotations to be done.
theRadialStep Translation distance.
theNbTimes2 Quantity of translations to be done.
theName Object name; when specified, this parameter is used
for result publication in the study. Otherwise, if automatic
publication is switched on, default value is used for result name.
Returns:
New GEOM.GEOM_Object, containing compound of all the
shapes, obtained after each transformation.
Example of usage:
rot2d = geompy.MultiRotate2D(prism, vect, math.pi/3, 4, 50, 5)
"""
# Example: see GEOM_TestAll.py
theAngleStep, theNbTimes1, theRadialStep, theNbTimes2, Parameters = ParseParameters(theAngleStep, theNbTimes1, theRadialStep, theNbTimes2)
anObj = self.TrsfOp.MultiRotate2DByStep(theObject, theAxis, theAngleStep, theNbTimes1, theRadialStep, theNbTimes2)
RaiseIfFailed("MultiRotate2DByStep", self.TrsfOp)
anObj.SetParameters(Parameters)
self._autoPublish(anObj, theName, "multirotation")
return anObj
## The same, as MultiRotate1DNbTimes(), but axis is given by direction and point
#
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation1DNbTimes(self, aShape, aDir, aPoint, aNbTimes, theName=None):
"""
The same, as geompy.MultiRotate1DNbTimes, but axis is given by direction and point
Example of usage:
pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot1D = geompy.MakeMultiRotation1DNbTimes(prism, vy, pz, 6)
"""
# Example: see GEOM_TestOthers.py
aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate1D()
anObj = self.MultiRotate1DNbTimes(aShape, aVec, aNbTimes, theName)
return anObj
## The same, as MultiRotate1DByStep(), but axis is given by direction and point
#
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation1DByStep(self, aShape, aDir, aPoint, anAngle, aNbTimes, theName=None):
"""
The same, as geompy.MultiRotate1D, but axis is given by direction and point
Example of usage:
pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot1D = geompy.MakeMultiRotation1DByStep(prism, vy, pz, math.pi/3, 6)
"""
# Example: see GEOM_TestOthers.py
aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate1D()
anObj = self.MultiRotate1DByStep(aShape, aVec, anAngle, aNbTimes, theName)
return anObj
## The same, as MultiRotate2DNbTimes(), but axis is given by direction and point
#
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation2DNbTimes(self, aShape, aDir, aPoint, nbtimes1, aStep, nbtimes2, theName=None):
"""
The same, as MultiRotate2DNbTimes(), but axis is given by direction and point
Example of usage:
pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot2D = geompy.MakeMultiRotation2DNbTimes(f12, vy, pz, 6, 30, 3)
"""
# Example: see GEOM_TestOthers.py
aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate2DNbTimes()
anObj = self.MultiRotate2DNbTimes(aShape, aVec, nbtimes1, aStep, nbtimes2, theName)
return anObj
## The same, as MultiRotate2DByStep(), but axis is given by direction and point
#
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation2DByStep(self, aShape, aDir, aPoint, anAngle, nbtimes1, aStep, nbtimes2, theName=None):
"""
The same, as MultiRotate2DByStep(), but axis is given by direction and point
Example of usage:
pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot2D = geompy.MakeMultiRotation2DByStep(f12, vy, pz, math.pi/4, 6, 30, 3)
"""
# Example: see GEOM_TestOthers.py
aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate2D()
anObj = self.MultiRotate2DByStep(aShape, aVec, anAngle, nbtimes1, aStep, nbtimes2, theName)
return anObj
# end of l3_transform
## @}
## @addtogroup l3_transform_d
## @{
## Deprecated method. Use MultiRotate1DNbTimes instead.
def MultiRotate1D(self, theObject, theAxis, theNbTimes, theName=None):
"""
Deprecated method. Use MultiRotate1DNbTimes instead.
"""
print "The method MultiRotate1D is DEPRECATED. Use MultiRotate1DNbTimes instead."
return self.MultiRotate1DNbTimes(theObject, theAxis, theNbTimes, theName)
## The same, as MultiRotate2DByStep(), but theAngle is in degrees.
# This method is DEPRECATED. Use MultiRotate2DByStep() instead.
def MultiRotate2D(self, theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2, theName=None):
"""
The same, as MultiRotate2DByStep(), but theAngle is in degrees.
This method is DEPRECATED. Use MultiRotate2DByStep() instead.
Example of usage:
rot2d = geompy.MultiRotate2D(prism, vect, 60, 4, 50, 5)
"""
print "The method MultiRotate2D is DEPRECATED. Use MultiRotate2DByStep instead."
theAngle, theNbTimes1, theStep, theNbTimes2, Parameters = ParseParameters(theAngle, theNbTimes1, theStep, theNbTimes2) theAngle, theNbTimes1, theStep, theNbTimes2, Parameters = ParseParameters(theAngle, theNbTimes1, theStep, theNbTimes2)
anObj = self.TrsfOp.MultiRotate2D(theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2) anObj = self.TrsfOp.MultiRotate2D(theObject, theAxis, theAngle, theNbTimes1, theStep, theNbTimes2)
RaiseIfFailed("MultiRotate2D", self.TrsfOp) RaiseIfFailed("MultiRotate2D", self.TrsfOp)
@ -7835,42 +8034,42 @@ class geompyDC(GEOM._objref_GEOM_Gen):
return anObj return anObj
## The same, as MultiRotate1D(), but axis is given by direction and point ## The same, as MultiRotate1D(), but axis is given by direction and point
# # This method is DEPRECATED. Use MakeMultiRotation1DNbTimes instead.
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation1D(self, aShape, aDir, aPoint, aNbTimes, theName=None): def MakeMultiRotation1D(self, aShape, aDir, aPoint, aNbTimes, theName=None):
""" """
The same, as geompy.MultiRotate1D, but axis is given by direction and point The same, as geompy.MultiRotate1D, but axis is given by direction and point.
This method is DEPRECATED. Use MakeMultiRotation1DNbTimes instead.
Example of usage: Example of usage:
pz = geompy.MakeVertex(0, 0, 100) pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0) vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot1D = geompy.MakeMultiRotation1D(prism, vy, pz, 6) MultiRot1D = geompy.MakeMultiRotation1D(prism, vy, pz, 6)
""" """
# Example: see GEOM_TestOthers.py print "The method MakeMultiRotation1D is DEPRECATED. Use MakeMultiRotation1DNbTimes instead."
aVec = self.MakeLine(aPoint,aDir) aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate1D() # note: auto-publishing is done in self.MultiRotate1D()
anObj = self.MultiRotate1D(aShape, aVec, aNbTimes, theName) anObj = self.MultiRotate1D(aShape, aVec, aNbTimes, theName)
return anObj return anObj
## The same, as MultiRotate2D(), but axis is given by direction and point ## The same, as MultiRotate2D(), but axis is given by direction and point
# # This method is DEPRECATED. Use MakeMultiRotation2DByStep instead.
# @ref swig_MakeMultiRotation "Example"
def MakeMultiRotation2D(self, aShape, aDir, aPoint, anAngle, nbtimes1, aStep, nbtimes2, theName=None): def MakeMultiRotation2D(self, aShape, aDir, aPoint, anAngle, nbtimes1, aStep, nbtimes2, theName=None):
""" """
The same, as MultiRotate2D(), but axis is given by direction and point The same, as MultiRotate2D(), but axis is given by direction and point
This method is DEPRECATED. Use MakeMultiRotation2DByStep instead.
Example of usage: Example of usage:
pz = geompy.MakeVertex(0, 0, 100) pz = geompy.MakeVertex(0, 0, 100)
vy = geompy.MakeVectorDXDYDZ(0, 100, 0) vy = geompy.MakeVectorDXDYDZ(0, 100, 0)
MultiRot2D = geompy.MakeMultiRotation2D(f12, vy, pz, 45, 6, 30, 3) MultiRot2D = geompy.MakeMultiRotation2D(f12, vy, pz, 45, 6, 30, 3)
""" """
# Example: see GEOM_TestOthers.py print "The method MakeMultiRotation2D is DEPRECATED. Use MakeMultiRotation2DByStep instead."
aVec = self.MakeLine(aPoint,aDir) aVec = self.MakeLine(aPoint,aDir)
# note: auto-publishing is done in self.MultiRotate2D() # note: auto-publishing is done in self.MultiRotate2D()
anObj = self.MultiRotate2D(aShape, aVec, anAngle, nbtimes1, aStep, nbtimes2, theName) anObj = self.MultiRotate2D(aShape, aVec, anAngle, nbtimes1, aStep, nbtimes2, theName)
return anObj return anObj
# end of l3_transform # end of l3_transform_d
## @} ## @}
## @addtogroup l3_local ## @addtogroup l3_local

View File

@ -162,7 +162,7 @@ void MeasureGUI_BndBoxDlg::ActivateThisDialog()
this, SLOT(SelectionIntoArgument())); this, SLOT(SelectionIntoArgument()));
globalSelection(); globalSelection();
displayPreview(true); redisplayPreview();
} }
//================================================================================= //=================================================================================

View File

@ -18,12 +18,11 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : MeasureGUI_DistanceDlg.cxx // File : MeasureGUI_DistanceDlg.cxx
// Author : Nicolas REJNERI, Open CASCADE S.A.S. // Author : Nicolas REJNERI, Open CASCADE S.A.S.
//
#include "MeasureGUI_DistanceDlg.h" #include "MeasureGUI_DistanceDlg.h"
#include "MeasureGUI_Widgets.h" #include "MeasureGUI_Widgets.h"
@ -36,6 +35,7 @@
#include <SUIT_ResourceMgr.h> #include <SUIT_ResourceMgr.h>
#include <SUIT_ViewWindow.h> #include <SUIT_ViewWindow.h>
#include <SUIT_ViewManager.h> #include <SUIT_ViewManager.h>
#include <SUIT_OverrideCursor.h>
#include <SOCC_Prs.h> #include <SOCC_Prs.h>
#include <SOCC_ViewModel.h> #include <SOCC_ViewModel.h>
#include <SalomeApp_Tools.h> #include <SalomeApp_Tools.h>
@ -61,7 +61,7 @@
// true to construct a modal dialog. // true to construct a modal dialog.
//================================================================================= //=================================================================================
MeasureGUI_DistanceDlg::MeasureGUI_DistanceDlg (GeometryGUI* GUI, QWidget* parent) MeasureGUI_DistanceDlg::MeasureGUI_DistanceDlg (GeometryGUI* GUI, QWidget* parent)
: MeasureGUI_Skeleton(GUI, parent) : GEOMBase_Skeleton(GUI, parent)
{ {
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr(); SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_MINDIST"))); QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_MINDIST")));
@ -72,8 +72,12 @@ MeasureGUI_DistanceDlg::MeasureGUI_DistanceDlg (GeometryGUI* GUI, QWidget* paren
/***************************************************************/ /***************************************************************/
mainFrame()->GroupConstructors->setTitle(tr("GEOM_DISTANCE")); mainFrame()->GroupConstructors->setTitle(tr("GEOM_DISTANCE"));
mainFrame()->RadioButton1->setIcon(image0); mainFrame()->RadioButton1->setIcon(image0);
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton2->close();
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close();
myGrp = new MeasureGUI_2Sel4LineEdit(centralWidget()); myGrp = new MeasureGUI_2Sel4LineEdit (centralWidget());
myGrp->GroupBox1->setTitle(tr("GEOM_MINDIST_OBJ")); myGrp->GroupBox1->setTitle(tr("GEOM_MINDIST_OBJ"));
myGrp->TextLabel1->setText(tr("GEOM_OBJECT_I").arg("1")); myGrp->TextLabel1->setText(tr("GEOM_OBJECT_I").arg("1"));
myGrp->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("2")); myGrp->TextLabel2->setText(tr("GEOM_OBJECT_I").arg("2"));
@ -90,12 +94,12 @@ MeasureGUI_DistanceDlg::MeasureGUI_DistanceDlg (GeometryGUI* GUI, QWidget* paren
myGrp->LineEdit5->setReadOnly(true); myGrp->LineEdit5->setReadOnly(true);
myGrp->LineEdit6->setReadOnly(true); myGrp->LineEdit6->setReadOnly(true);
QVBoxLayout* layout = new QVBoxLayout(centralWidget()); QVBoxLayout* layout = new QVBoxLayout (centralWidget());
layout->setMargin(0); layout->setSpacing(6); layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(myGrp); layout->addWidget(myGrp);
/***************************************************************/ /***************************************************************/
myHelpFileName = "using_measurement_tools_page.html#min_distance_anchor"; myHelpFileName = "min_distance_page.html";
// Initialisation // Initialisation
Init(); Init();
@ -115,21 +119,69 @@ MeasureGUI_DistanceDlg::~MeasureGUI_DistanceDlg()
//================================================================================= //=================================================================================
void MeasureGUI_DistanceDlg::Init() void MeasureGUI_DistanceDlg::Init()
{ {
// init variables
myGrp->LineEdit1->setText("");
myGrp->LineEdit2->setText("");
myObj = myObj2 = GEOM::GEOM_Object::_nil();
mySelBtn = myGrp->PushButton1;
mySelEdit = myGrp->LineEdit1;
myEditCurrentArgument = myGrp->LineEdit1; myEditCurrentArgument = myGrp->LineEdit1;
// signals and slots connections // signals and slots connections
connect(myGrp->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed())); connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(myGrp->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(myGrp->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
MeasureGUI_Skeleton::Init(); connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
this, SLOT(SelectionIntoArgument()));
initName(tr("GEOM_DISTANCE"));
globalSelection();
SelectionIntoArgument();
}
//=================================================================================
// function : ClickOnOk()
// purpose :
//=================================================================================
void MeasureGUI_DistanceDlg::ClickOnOk()
{
if (ClickOnApply())
ClickOnCancel();
}
//=================================================================================
// function : ClickOnApply()
// purpose :
//=================================================================================
bool MeasureGUI_DistanceDlg::ClickOnApply()
{
if (!onAccept())
return false;
initName();
return true;
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
//=================================================================================
void MeasureGUI_DistanceDlg::ActivateThisDialog()
{
GEOMBase_Skeleton::ActivateThisDialog();
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
this, SLOT(SelectionIntoArgument()));
globalSelection();
redisplayPreview();
}
//=================================================================================
// function : enterEvent()
// purpose :
//=================================================================================
void MeasureGUI_DistanceDlg::enterEvent(QEvent*)
{
if (!mainFrame()->GroupConstructors->isEnabled())
ActivateThisDialog();
} }
//================================================================================= //=================================================================================
@ -145,7 +197,7 @@ void MeasureGUI_DistanceDlg::SelectionIntoArgument()
GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil(); GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil();
if (aSelList.Extent() > 0) { if (aSelList.Extent() > 0) {
aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() ); aSelectedObject = GEOMBase::ConvertIOinGEOMObject(aSelList.First());
} }
// clear selection // clear selection
@ -155,82 +207,19 @@ void MeasureGUI_DistanceDlg::SelectionIntoArgument()
this, SLOT(SelectionIntoArgument())); this, SLOT(SelectionIntoArgument()));
if (myEditCurrentArgument == myGrp->LineEdit1) { if (myEditCurrentArgument == myGrp->LineEdit1) {
myObj = aSelectedObject; myObj1 = aSelectedObject;
if (!myObj->_is_nil() && myObj2->_is_nil()) if (!myObj1->_is_nil() && myObj2->_is_nil())
myGrp->PushButton2->click(); myGrp->PushButton2->click();
} }
else { else {
myObj2 = aSelectedObject; myObj2 = aSelectedObject;
if (!myObj2->_is_nil() && myObj->_is_nil()) if (!myObj2->_is_nil() && myObj1->_is_nil())
myGrp->PushButton1->click(); myGrp->PushButton1->click();
} }
processObject(); processObject();
} }
//=================================================================================
// function : processObject()
// purpose : Fill dialogs fields in accordance with myObj and myObj2
//=================================================================================
void MeasureGUI_DistanceDlg::processObject()
{
myGrp->LineEdit1->setText(!myObj->_is_nil() ? GEOMBase::GetName(myObj ) : "");
myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : "");
gp_Pnt aPnt1, aPnt2;
double aDist = 0.;
if (getParameters(aDist, aPnt1, aPnt2)) {
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist, aPrecision));
gp_XYZ aVec = aPnt2.XYZ() - aPnt1.XYZ();
myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X(), aPrecision));
myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y(), aPrecision));
myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z(), aPrecision));
redisplayPreview();
}
else {
myGrp->LineEdit3->setText("");
myGrp->LineEdit4->setText("");
myGrp->LineEdit5->setText("");
myGrp->LineEdit6->setText("");
erasePreview();
}
}
//=================================================================================
// function : getParameters()
// purpose : Get distance between objects
//=================================================================================
bool MeasureGUI_DistanceDlg::getParameters (double& theDistance,
gp_Pnt& thePnt1,
gp_Pnt& thePnt2)
{
QString msg;
if (isValid(msg)) {
GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow( getOperation() );
try {
double x1, y1, z1, x2, y2, z2;
theDistance = anOper->GetMinDistance(myObj, myObj2, x1, y1, z1, x2, y2, z2);
thePnt1.SetCoord(x1, y1, z1);
thePnt2.SetCoord(x2, y2, z2);
}
catch(const SALOME::SALOME_Exception& e) {
SalomeApp_Tools::QtCatchCorbaException(e);
return false;
}
return anOper->IsDone();
}
return false;
}
//================================================================================= //=================================================================================
// function : SetEditCurrentArgument() // function : SetEditCurrentArgument()
// purpose : // purpose :
@ -263,23 +252,64 @@ void MeasureGUI_DistanceDlg::SetEditCurrentArgument()
} }
//================================================================================= //=================================================================================
// function : LineEditReturnPressed() // function : processObject()
// purpose : // purpose : Fill dialogs fields in accordance with myObj1 and myObj2
//================================================================================= //=================================================================================
void MeasureGUI_DistanceDlg::LineEditReturnPressed() void MeasureGUI_DistanceDlg::processObject()
{ {
QLineEdit* send = (QLineEdit*)sender(); myGrp->LineEdit1->setText(!myObj1->_is_nil() ? GEOMBase::GetName(myObj1) : "");
myGrp->LineEdit2->setText(!myObj2->_is_nil() ? GEOMBase::GetName(myObj2) : "");
if (send == myGrp->LineEdit1 || send == myGrp->LineEdit2) { gp_Pnt aPnt1, aPnt2;
myEditCurrentArgument = send; double aDist = 0.;
if (getParameters(aDist, aPnt1, aPnt2)) {
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
int aPrecision = resMgr->integerValue( "Geometry", "length_precision", 6 );
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr(); myGrp->LineEdit3->setText(DlgRef::PrintDoubleValue(aDist, aPrecision));
SALOME_ListIO aSelList;
aSelMgr->selectedObjects(aSelList);
if (GEOMBase::SelectionByNameInDialogs(this, myGrp->LineEdit1->text(), aSelList)) gp_XYZ aVec = aPnt2.XYZ() - aPnt1.XYZ();
myGrp->LineEdit1->setText(myGrp->LineEdit1->text()); myGrp->LineEdit4->setText(DlgRef::PrintDoubleValue(aVec.X(), aPrecision));
myGrp->LineEdit5->setText(DlgRef::PrintDoubleValue(aVec.Y(), aPrecision));
myGrp->LineEdit6->setText(DlgRef::PrintDoubleValue(aVec.Z(), aPrecision));
redisplayPreview();
} }
else {
myGrp->LineEdit3->setText("");
myGrp->LineEdit4->setText("");
myGrp->LineEdit5->setText("");
myGrp->LineEdit6->setText("");
erasePreview();
}
}
//=================================================================================
// function : getParameters()
// purpose : Get distance between objects
//=================================================================================
bool MeasureGUI_DistanceDlg::getParameters (double& theDistance, gp_Pnt& thePnt1, gp_Pnt& thePnt2)
{
QString msg;
if (isValid(msg)) {
GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
try {
double x1, y1, z1, x2, y2, z2;
theDistance = anOper->GetMinDistance(myObj1, myObj2, x1, y1, z1, x2, y2, z2);
thePnt1.SetCoord(x1, y1, z1);
thePnt2.SetCoord(x2, y2, z2);
}
catch (const SALOME::SALOME_Exception& e) {
SalomeApp_Tools::QtCatchCorbaException(e);
return false;
}
return anOper->IsDone();
}
return false;
} }
//================================================================================= //=================================================================================
@ -289,46 +319,47 @@ void MeasureGUI_DistanceDlg::LineEditReturnPressed()
SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs() SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs()
{ {
double aDist = 0.; double aDist = 0.;
gp_Pnt aPnt1(0, 0, 0), aPnt2(0, 0, 0); gp_Pnt aPnt1 (0, 0, 0), aPnt2 (0, 0, 0);
SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow(); SUIT_ViewWindow* vw = SUIT_Session::session()->activeApplication()->desktop()->activeWindow();
if (myObj->_is_nil() || myObj2->_is_nil() || if (myObj1->_is_nil() || myObj2->_is_nil() ||
!getParameters(aDist, aPnt1, aPnt2) || !getParameters(aDist, aPnt1, aPnt2) ||
vw->getViewManager()->getType() != OCCViewer_Viewer::Type()) vw->getViewManager()->getType() != OCCViewer_Viewer::Type())
return 0; return 0;
try try
{ {
if (aDist <= 1.e-9) { if (aDist <= 1.e-9) {
BRepBuilderAPI_MakeVertex aMaker(aPnt1); BRepBuilderAPI_MakeVertex aMaker (aPnt1);
return getDisplayer()->BuildPrs(aMaker.Vertex()); return getDisplayer()->BuildPrs(aMaker.Vertex());
} }
else { else {
BRepBuilderAPI_MakeEdge MakeEdge(aPnt1, aPnt2); BRepBuilderAPI_MakeEdge MakeEdge (aPnt1, aPnt2);
TopoDS_Vertex aVert1 = BRepBuilderAPI_MakeVertex(aPnt1); TopoDS_Vertex aVert1 = BRepBuilderAPI_MakeVertex(aPnt1);
TopoDS_Vertex aVert2 = BRepBuilderAPI_MakeVertex(aPnt2); TopoDS_Vertex aVert2 = BRepBuilderAPI_MakeVertex(aPnt2);
QString aLabel; QString aLabel;
aLabel.sprintf("%.1f", aDist); aLabel.sprintf("%.1f", aDist);
gp_Pnt aPnt3((aPnt1.X() + aPnt2.X()) / 2, gp_Pnt aPnt3 ((aPnt1.X() + aPnt2.X()) / 2,
(aPnt1.Y() + aPnt2.Y()) / 2, (aPnt1.Y() + aPnt2.Y()) / 2,
(aPnt1.Z() + aPnt2.Z()) / 2); (aPnt1.Z() + aPnt2.Z()) / 2);
gp_Vec va(aPnt3, aPnt1); gp_Vec va (aPnt3, aPnt1);
gp_Vec vb(aPnt3, aPnt2); gp_Vec vb (aPnt3, aPnt2);
if (va.IsParallel(vb, Precision::Angular())) { if (va.IsParallel(vb, Precision::Angular())) {
aPnt3.SetY((aPnt1.Y() + aPnt2.Y()) / 2 + 100); aPnt3.SetY((aPnt1.Y() + aPnt2.Y()) / 2 + 100);
aPnt3.SetZ((aPnt1.Z() + aPnt2.Z()) / 2); aPnt3.SetZ((aPnt1.Z() + aPnt2.Z()) / 2);
} }
gce_MakePln gce_MP(aPnt1, aPnt2, aPnt3); gce_MakePln gce_MP (aPnt1, aPnt2, aPnt3);
Handle(Geom_Plane) P = new Geom_Plane(gce_MP.Value()); Handle(Geom_Plane) P = new Geom_Plane (gce_MP.Value());
Handle(AIS_LengthDimension) anIO = new AIS_LengthDimension( Handle(AIS_LengthDimension) anIO = new AIS_LengthDimension
aVert1, aVert2, P, aDist, TCollection_ExtendedString((Standard_CString)aLabel.toLatin1().constData())); (aVert1, aVert2, P, aDist,
TCollection_ExtendedString((Standard_CString)aLabel.toLatin1().constData()));
anIO->SetArrowSize(aDist/20); anIO->SetArrowSize(aDist/20);
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
@ -345,16 +376,76 @@ SALOME_Prs* MeasureGUI_DistanceDlg::buildPrs()
return aPrs; return aPrs;
} }
} }
catch(Standard_Failure) { catch (Standard_Failure) {
return 0; return 0;
} }
} }
//=================================================================================
// function : createOperation
// purpose :
//=================================================================================
GEOM::GEOM_IOperations_ptr MeasureGUI_DistanceDlg::createOperation()
{
return getGeomEngine()->GetIMeasureOperations(getStudyId());
}
//================================================================================= //=================================================================================
// function : isValid() // function : isValid()
// purpose : // purpose :
//================================================================================= //=================================================================================
bool MeasureGUI_DistanceDlg::isValid (QString& msg) bool MeasureGUI_DistanceDlg::isValid (QString& msg)
{ {
return MeasureGUI_Skeleton::isValid(msg) && !myObj2->_is_nil(); return !myObj1->_is_nil() && !myObj2->_is_nil();
}
//=================================================================================
// function : execute
// purpose :
//=================================================================================
bool MeasureGUI_DistanceDlg::execute (ObjectList& objects)
{
GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
GEOM::GEOM_IBasicOperations_var aBasicOper = getGeomEngine()->GetIBasicOperations(getStudyId());
double x1, y1, z1, x2, y2, z2;
double aDist = anOper->GetMinDistance(myObj1, myObj2, x1, y1, z1, x2, y2, z2);
GEOM::GEOM_Object_var anObj1 = aBasicOper->MakePointXYZ(x1, y1, z1);
GEOM::GEOM_Object_var anObj2 = aBasicOper->MakePointXYZ(x2, y2, z2);
if (!anObj1->_is_nil() && !anObj2->_is_nil()) {
objects.push_back(anObj1._retn());
objects.push_back(anObj2._retn());
}
return true;
}
//=================================================================================
// function : redisplayPreview()
// purpose :
//=================================================================================
void MeasureGUI_DistanceDlg::redisplayPreview()
{
QString aMess;
if (!isValid(aMess)) {
erasePreview(true);
return;
}
erasePreview(false);
try {
SUIT_OverrideCursor();
getDisplayer()->SetColor(Quantity_NOC_VIOLET);
getDisplayer()->SetToActivate(false);
if (SALOME_Prs* aPrs = buildPrs())
displayPreview(aPrs);
}
catch (const SALOME::SALOME_Exception& e) {
SalomeApp_Tools::QtCatchCorbaException(e);
}
} }

View File

@ -18,16 +18,15 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : MeasureGUI_DistanceDlg.h // File : MeasureGUI_DistanceDlg.h
// Author : Nicolas REJNERI, Open CASCADE S.A.S. // Author : Nicolas REJNERI, Open CASCADE S.A.S.
//
#ifndef MEASUREGUI_DISTANCEDLG_H #ifndef MEASUREGUI_DISTANCEDLG_H
#define MEASUREGUI_DISTANCEDLG_H #define MEASUREGUI_DISTANCEDLG_H
#include "MeasureGUI_Skeleton.h" #include <GEOMBase_Skeleton.h>
class MeasureGUI_2Sel4LineEdit; class MeasureGUI_2Sel4LineEdit;
class gp_Pnt; class gp_Pnt;
@ -36,36 +35,41 @@ class gp_Pnt;
// class : MeasureGUI_DistanceDlg // class : MeasureGUI_DistanceDlg
// purpose : // purpose :
//================================================================================= //=================================================================================
class MeasureGUI_DistanceDlg : public GEOMBase_Skeleton
class MeasureGUI_DistanceDlg : public MeasureGUI_Skeleton {
{
Q_OBJECT Q_OBJECT
public: public:
MeasureGUI_DistanceDlg( GeometryGUI*, QWidget* ); MeasureGUI_DistanceDlg (GeometryGUI*, QWidget*);
~MeasureGUI_DistanceDlg(); ~MeasureGUI_DistanceDlg();
protected: protected:
// redefined from GEOMBase_Helper and MeasureGUI_Skeleton // redefined from GEOMBase_Helper and GEOMBase_Skeleton
virtual GEOM::GEOM_IOperations_ptr createOperation();
virtual bool isValid (QString&);
virtual bool execute (ObjectList&);
void redisplayPreview();
virtual void processObject(); virtual void processObject();
virtual SALOME_Prs* buildPrs(); virtual SALOME_Prs* buildPrs();
virtual void SelectionIntoArgument();
virtual void LineEditReturnPressed();
virtual void SetEditCurrentArgument();
virtual bool isValid( QString& );
private: private:
void Init(); void Init();
bool getParameters( double&, void enterEvent (QEvent*);
gp_Pnt&, bool getParameters (double&, gp_Pnt&, gp_Pnt&);
gp_Pnt& );
private: private:
QLineEdit* myEditCurrentArgument; GEOM::GEOM_Object_var myObj1;
QLineEdit* mySelEdit2;
QPushButton* mySelBtn2;
MeasureGUI_2Sel4LineEdit* myGrp;
GEOM::GEOM_Object_var myObj2; GEOM::GEOM_Object_var myObj2;
MeasureGUI_2Sel4LineEdit* myGrp;
private slots:
void ClickOnOk();
bool ClickOnApply();
void ActivateThisDialog();
void SelectionIntoArgument();
void SetEditCurrentArgument();
}; };
#endif // MEASUREGUI_DISTANCEDLG_H #endif // MEASUREGUI_DISTANCEDLG_H

View File

@ -69,34 +69,29 @@ TransformationGUI_MultiRotationDlg::TransformationGUI_MultiRotationDlg
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose); mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close(); mainFrame()->RadioButton3->close();
GroupPoints = new DlgRef_2Sel1SpinInt(centralWidget()); bool isAngleStep = true;
GroupPoints->GroupBox1->setTitle(tr("GEOM_MULTIROTATION_SIMPLE"));
GroupPoints->TextLabel1->setText(tr("GEOM_MAIN_OBJECT"));
GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR"));
GroupPoints->TextLabel3->setText(tr("GEOM_NB_TIMES"));
GroupPoints->PushButton1->setIcon(image2);
GroupPoints->PushButton2->setIcon(image2);
GroupPoints->LineEdit1->setReadOnly(true);
GroupPoints->LineEdit2->setReadOnly(true);
GroupDimensions = new DlgRef_2Sel4Spin1Check(centralWidget()); GroupArgs = new TransformationGUI_2Sel4Spin1Check (centralWidget());
GroupDimensions->GroupBox1->setTitle(tr("GEOM_MULTIROTATION_DOUBLE")); GroupArgs->GroupBox1->setTitle(tr("GEOM_MULTIROTATION_DOUBLE"));
GroupDimensions->TextLabel1->setText(tr("GEOM_MAIN_OBJECT")); GroupArgs->TextLabel1->setText(tr("GEOM_MAIN_OBJECT"));
GroupDimensions->TextLabel2->setText(tr("GEOM_VECTOR")); GroupArgs->TextLabel2->setText(tr("GEOM_VECTOR"));
GroupDimensions->TextLabel3->setText(tr("GEOM_ANGLE")); //GroupArgs->TextLabel3->setText(tr("GEOM_ANGLE_STEP"));
GroupDimensions->TextLabel4->setText(tr("GEOM_NB_TIMES")); GroupArgs->CheckAngleStep->setText(tr("GEOM_ANGLE_STEP"));
GroupDimensions->TextLabel5->setText(tr("GEOM_STEP")); GroupArgs->CheckAngleStep->setChecked(isAngleStep);
GroupDimensions->TextLabel6->setText(tr("GEOM_NB_TIMES")); GroupArgs->TextLabel4->setText(tr("GEOM_NB_TIMES"));
GroupDimensions->CheckButton1->setText(tr("GEOM_REVERSE")); GroupArgs->TextLabel5->setText(tr("GEOM_STEP_R"));
GroupDimensions->PushButton1->setIcon(image2); GroupArgs->TextLabel6->setText(tr("GEOM_NB_TIMES"));
GroupDimensions->PushButton2->setIcon(image2); GroupArgs->CheckButton1->setText(tr("GEOM_REVERSE"));
GroupDimensions->LineEdit1->setReadOnly(true); GroupArgs->PushButton1->setIcon(image2);
GroupDimensions->LineEdit2->setReadOnly(true); GroupArgs->PushButton2->setIcon(image2);
GroupArgs->LineEdit1->setReadOnly(true);
GroupArgs->LineEdit2->setReadOnly(true);
GroupArgs->SpinBox_DX1->setEnabled(isAngleStep);
GroupArgs->CheckButton1->setEnabled(isAngleStep);
QVBoxLayout* layout = new QVBoxLayout(centralWidget()); QVBoxLayout* layout = new QVBoxLayout(centralWidget());
layout->setMargin(0); layout->setSpacing(6); layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(GroupPoints); layout->addWidget(GroupArgs);
layout->addWidget(GroupDimensions);
/***************************************************************/ /***************************************************************/
setHelpFileName("multi_rotation_operation_page.html"); setHelpFileName("multi_rotation_operation_page.html");
@ -119,38 +114,23 @@ TransformationGUI_MultiRotationDlg::~TransformationGUI_MultiRotationDlg()
//================================================================================= //=================================================================================
void TransformationGUI_MultiRotationDlg::Init() void TransformationGUI_MultiRotationDlg::Init()
{ {
// init variables
myAng = 45.0;
myStep = 50.0;
myNbTimes1 = myNbTimes2 = 3;
// Get setting of step value from file configuration // Get setting of step value from file configuration
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100); double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100);
int SpecificStep1 = 5; int SpecificStep1 = 5;
int SpecificStep2 = 1; int SpecificStep2 = 1;
// init variables
myAng = 45.0;
myStep = 50.0;
myNbTimes1 = myNbTimes2 = 2;
// min, max, step and decimals for spin boxes & initial values // min, max, step and decimals for spin boxes & initial values
initSpinBox(GroupPoints->SpinBox_DX, 1, 999, SpecificStep2); initSpinBox(GroupArgs->SpinBox_DX1, COORD_MIN, COORD_MAX, SpecificStep1, "angle_precision");
GroupPoints->SpinBox_DX->setValue(myNbTimes1); initSpinBox(GroupArgs->SpinBox_DY1, 1, 999, SpecificStep2);
initSpinBox(GroupArgs->SpinBox_DX2, COORD_MIN, COORD_MAX, step, "length_precision");
initSpinBox(GroupDimensions->SpinBox_DX1, COORD_MIN, COORD_MAX, SpecificStep1, "angle_precision" ); initSpinBox(GroupArgs->SpinBox_DY2, 1, 999, SpecificStep2);
initSpinBox(GroupDimensions->SpinBox_DY1, 1, 999, SpecificStep2);
initSpinBox(GroupDimensions->SpinBox_DX2, COORD_MIN, COORD_MAX, step,"length_precision" );
initSpinBox(GroupDimensions->SpinBox_DY2, 1, 999, SpecificStep2);
GroupDimensions->SpinBox_DX1->setValue(myAng);
GroupDimensions->SpinBox_DY1->setValue(myNbTimes1);
GroupDimensions->SpinBox_DX2->setValue(myStep);
GroupDimensions->SpinBox_DY2->setValue(myNbTimes2);
GroupPoints->LineEdit1->setText("");
GroupPoints->LineEdit2->setText("");
GroupDimensions->LineEdit1->setText("");
GroupDimensions->LineEdit2->setText("");
myBase.nullify();
myVector.nullify();
mainFrame()->GroupBoxPublish->show(); mainFrame()->GroupBoxPublish->show();
@ -158,25 +138,23 @@ void TransformationGUI_MultiRotationDlg::Init()
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk())); connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply())); connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int))); connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupArgs->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument())); connect(GroupArgs->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupDimensions->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupDimensions->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int))); connect(GroupArgs->SpinBox_DX1, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect(GroupDimensions->SpinBox_DX1, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); connect(GroupArgs->SpinBox_DY1, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int)));
connect(GroupDimensions->SpinBox_DY1, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int))); connect(GroupArgs->SpinBox_DX2, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect(GroupDimensions->SpinBox_DX2, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double))); connect(GroupArgs->SpinBox_DY2, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int)));
connect(GroupDimensions->SpinBox_DY2, SIGNAL(valueChanged(int)), this, SLOT(ValueChangedInSpinBox(int)));
connect(GroupDimensions->SpinBox_DX1,SIGNAL(textChanged( const QString& )), connect(GroupArgs->SpinBox_DX1, SIGNAL(textChanged(const QString&)),
this, SLOT(TextValueChangedInSpinBox( const QString& ))); this, SLOT(TextValueChangedInSpinBox(const QString&)));
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double))); connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double)));
connect(GroupDimensions->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(ReverseAngle())); connect(GroupArgs->CheckAngleStep, SIGNAL(toggled(bool)), this, SLOT(CheckAngleStep(bool)));
connect(GroupArgs->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(ReverseAngle()));
initName(tr("GEOM_MULTIROTATION")); initName(tr("GEOM_MULTIROTATION"));
@ -189,13 +167,7 @@ void TransformationGUI_MultiRotationDlg::Init()
//================================================================================= //=================================================================================
void TransformationGUI_MultiRotationDlg::SetDoubleSpinBoxStep (double step) void TransformationGUI_MultiRotationDlg::SetDoubleSpinBoxStep (double step)
{ {
GroupDimensions->SpinBox_DX2->setSingleStep(step); GroupArgs->SpinBox_DX2->setSingleStep(step);
// san: Commented so as not to override specific step settings
//GroupPoints->SpinBox_DX->setSingleStep((int)step);
//GroupDimensions->SpinBox_DX1->setSingleStep(step);
//GroupDimensions->SpinBox_DY1->setSingleStep((int)step);
//GroupDimensions->SpinBox_DY2->setSingleStep((int)step);
} }
//================================================================================= //=================================================================================
@ -206,42 +178,42 @@ void TransformationGUI_MultiRotationDlg::ConstructorsClicked (int constructorId)
{ {
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
myBase.nullify();
myVector.nullify();
GroupArgs->LineEdit1->setText("");
GroupArgs->LineEdit2->setText("");
GroupArgs->SpinBox_DX1->setValue(myAng);
GroupArgs->SpinBox_DY1->setValue(myNbTimes1);
GroupArgs->SpinBox_DX2->setValue(myStep);
GroupArgs->SpinBox_DY2->setValue(myNbTimes2);
switch (constructorId) { switch (constructorId) {
case 0: // Rotate simple case 0: // Rotate simple
{ {
GroupDimensions->hide(); GroupArgs->GroupBox1->setTitle(tr("GEOM_MULTIROTATION_SIMPLE"));
GroupPoints->show(); GroupArgs->TextLabel5->hide();
GroupArgs->TextLabel6->hide();
GroupPoints->LineEdit1->setText(""); GroupArgs->SpinBox_DX2->hide();
GroupPoints->LineEdit2->setText(""); GroupArgs->SpinBox_DY2->hide();
myBase.nullify(); GroupArgs->CheckButton1->hide();
myVector.nullify();
GroupPoints->SpinBox_DX->setValue(myNbTimes1);
GroupPoints->PushButton1->click();
} }
break; break;
case 1: // Rotate double case 1: // Rotate double
{ {
GroupPoints->hide(); GroupArgs->GroupBox1->setTitle(tr("GEOM_MULTIROTATION_DOUBLE"));
GroupDimensions->show(); GroupArgs->TextLabel5->show();
GroupArgs->TextLabel6->show();
GroupDimensions->LineEdit1->setText(""); GroupArgs->SpinBox_DX2->show();
GroupDimensions->LineEdit2->setText(""); GroupArgs->SpinBox_DY2->show();
myBase.nullify(); GroupArgs->CheckButton1->show();
myVector.nullify();
GroupDimensions->SpinBox_DX1->setValue(myAng);
GroupDimensions->SpinBox_DY1->setValue(myNbTimes1);
GroupDimensions->SpinBox_DX2->setValue(myStep);
GroupDimensions->SpinBox_DY2->setValue(myNbTimes2);
GroupDimensions->PushButton1->click();
} }
break; break;
} }
GroupArgs->PushButton1->click();
qApp->processEvents(); qApp->processEvents();
updateGeometry(); updateGeometry();
resize(minimumSizeHint()); resize(minimumSizeHint());
@ -289,33 +261,39 @@ void TransformationGUI_MultiRotationDlg::SelectionIntoArgument()
{ {
erasePreview(); erasePreview();
TopAbs_ShapeEnum aNeedType = ( myEditCurrentArgument == GroupPoints->LineEdit2 || TopAbs_ShapeEnum aNeedType = ( myEditCurrentArgument == GroupArgs->LineEdit2 ) ?
myEditCurrentArgument == GroupDimensions->LineEdit2 ) ?
TopAbs_EDGE : TopAbs_SHAPE; TopAbs_EDGE : TopAbs_SHAPE;
GEOM::GeomObjPtr aSelectedObject = getSelected( aNeedType ); GEOM::GeomObjPtr aSelectedObject = getSelected( aNeedType );
TopoDS_Shape aShape; TopoDS_Shape aShape;
if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) { if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) {
QString aName = GEOMBase::GetName( aSelectedObject.get() ); QString aName = GEOMBase::GetName( aSelectedObject.get() );
myEditCurrentArgument->setText( aName ); myEditCurrentArgument->setText( aName );
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) { if ( myEditCurrentArgument == GroupArgs->LineEdit1 ) {
myBase = aSelectedObject; myBase = aSelectedObject;
// recompute myAng and myStep (Mantis issue 0021718)
GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId());
double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
anOper->GetBoundingBox(myBase.get(), Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
if (anOper->IsDone()) {
// angular step
double diag = sqrt((Xmax-Xmin)*(Xmax-Xmin) + (Ymax-Ymin)*(Ymax-Ymin));
double d = sqrt((0.5*(Xmax+Xmin))*(0.5*(Xmax+Xmin)) + (0.5*(Ymax+Ymin))*(0.5*(Ymax+Ymin)));
myAng = floor(2.0 * atan(diag/d) * 180.0 / M_PI);
GroupArgs->SpinBox_DX1->setValue(myAng);
// radial step
myStep = Max(floor(1.5*(Xmax-Xmin)), floor(1.5*(Ymax-Ymin)));
GroupArgs->SpinBox_DX2->setValue(myStep);
}
if ( !myVector ) if ( !myVector )
GroupPoints->PushButton2->click(); GroupArgs->PushButton2->click();
} }
else if ( myEditCurrentArgument == GroupPoints->LineEdit2) { else if ( myEditCurrentArgument == GroupArgs->LineEdit2 ) {
myVector = aSelectedObject; myVector = aSelectedObject;
if ( !myBase ) if ( !myBase )
GroupPoints->PushButton1->click(); GroupArgs->PushButton1->click();
}
else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
myBase = aSelectedObject;
if ( !myVector )
GroupDimensions->PushButton2->click();
}
else if ( myEditCurrentArgument == GroupDimensions->LineEdit2 ) {
myVector = aSelectedObject;
if ( !myBase )
GroupDimensions->PushButton1->click();
} }
// clear selection // clear selection
@ -325,11 +303,9 @@ void TransformationGUI_MultiRotationDlg::SelectionIntoArgument()
this, SLOT(SelectionIntoArgument())); this, SLOT(SelectionIntoArgument()));
} }
else { else {
if ( myEditCurrentArgument == GroupPoints->LineEdit1 || if ( myEditCurrentArgument == GroupArgs->LineEdit1 )
myEditCurrentArgument == GroupDimensions->LineEdit1 )
myBase.nullify(); myBase.nullify();
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 || else if ( myEditCurrentArgument == GroupArgs->LineEdit2 )
myEditCurrentArgument == GroupDimensions->LineEdit2 )
myVector.nullify(); myVector.nullify();
myEditCurrentArgument->setText(""); myEditCurrentArgument->setText("");
} }
@ -348,33 +324,19 @@ void TransformationGUI_MultiRotationDlg::SetEditCurrentArgument()
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0); disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
globalSelection(GEOM_ALLSHAPES); globalSelection(GEOM_ALLSHAPES);
if (send == GroupPoints->PushButton1) { if (send == GroupArgs->PushButton1) {
myEditCurrentArgument = GroupPoints->LineEdit1; myEditCurrentArgument = GroupArgs->LineEdit1;
GroupPoints->PushButton2->setDown(false); GroupArgs->PushButton2->setDown(false);
GroupPoints->LineEdit2->setEnabled(false); GroupArgs->LineEdit2->setEnabled(false);
} }
else if (send == GroupPoints->PushButton2) { else if (send == GroupArgs->PushButton2) {
myEditCurrentArgument = GroupPoints->LineEdit2; myEditCurrentArgument = GroupArgs->LineEdit2;
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE); localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
GroupPoints->PushButton1->setDown(false); GroupArgs->PushButton1->setDown(false);
GroupPoints->LineEdit1->setEnabled(false); GroupArgs->LineEdit1->setEnabled(false);
}
else if (send == GroupDimensions->PushButton1) {
myEditCurrentArgument = GroupDimensions->LineEdit1;
GroupDimensions->PushButton2->setDown(false);
GroupDimensions->LineEdit2->setEnabled(false);
}
else if (send == GroupDimensions->PushButton2) {
myEditCurrentArgument = GroupDimensions->LineEdit2;
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
GroupDimensions->PushButton1->setDown(false);
GroupDimensions->LineEdit1->setEnabled(false);
} }
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()), connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
this, SLOT(SelectionIntoArgument())); this, SLOT(SelectionIntoArgument()));
@ -416,12 +378,13 @@ void TransformationGUI_MultiRotationDlg::enterEvent (QEvent*)
// function : TextValueChangedInSpinBox() // function : TextValueChangedInSpinBox()
// purpose : // purpose :
//================================================================================= //=================================================================================
void TransformationGUI_MultiRotationDlg::TextValueChangedInSpinBox(const QString& s){ void TransformationGUI_MultiRotationDlg::TextValueChangedInSpinBox (const QString& s)
{
bool isDigit; bool isDigit;
s.toDouble(&isDigit); s.toDouble(&isDigit);
if(!isDigit) if (!isDigit)
GroupDimensions->CheckButton1->setChecked(false); GroupArgs->CheckButton1->setChecked(false);
GroupDimensions->CheckButton1->setEnabled(isDigit); GroupArgs->CheckButton1->setEnabled(isDigit);
} }
//================================================================================= //=================================================================================
@ -432,9 +395,9 @@ void TransformationGUI_MultiRotationDlg::ValueChangedInSpinBox (double newValue)
{ {
QObject* send = (QObject*)sender(); QObject* send = (QObject*)sender();
if (send == GroupDimensions->SpinBox_DX1) if (send == GroupArgs->SpinBox_DX1)
myAng = newValue; myAng = newValue;
else if (send == GroupDimensions->SpinBox_DX2) else if (send == GroupArgs->SpinBox_DX2)
myStep = newValue; myStep = newValue;
processPreview(); processPreview();
@ -448,9 +411,9 @@ void TransformationGUI_MultiRotationDlg::ValueChangedInSpinBox (int newValue)
{ {
QObject* send = (QObject*)sender(); QObject* send = (QObject*)sender();
if (send == GroupPoints->SpinBox_DX || send == GroupDimensions->SpinBox_DY1) if (send == GroupArgs->SpinBox_DY1)
myNbTimes1 = newValue; myNbTimes1 = newValue;
else if (send == GroupDimensions->SpinBox_DY2) else if (send == GroupArgs->SpinBox_DY2)
myNbTimes2 = newValue; myNbTimes2 = newValue;
processPreview(); processPreview();
@ -458,7 +421,7 @@ void TransformationGUI_MultiRotationDlg::ValueChangedInSpinBox (int newValue)
//================================================================================= //=================================================================================
// function : ReverseAngle() // function : ReverseAngle()
// purpose : 'state' not used here // purpose :
//================================================================================= //=================================================================================
void TransformationGUI_MultiRotationDlg::ReverseAngle() void TransformationGUI_MultiRotationDlg::ReverseAngle()
{ {
@ -467,11 +430,22 @@ void TransformationGUI_MultiRotationDlg::ReverseAngle()
int aConstructorId = getConstructorId(); int aConstructorId = getConstructorId();
if (aConstructorId == 1) if (aConstructorId == 1)
GroupDimensions->SpinBox_DX1->setValue(myAng); GroupArgs->SpinBox_DX1->setValue(myAng);
processPreview(); processPreview();
} }
//=================================================================================
// function : CheckAngleStep()
// purpose :
//=================================================================================
void TransformationGUI_MultiRotationDlg::CheckAngleStep (bool isOn)
{
GroupArgs->SpinBox_DX1->setEnabled(isOn);
GroupArgs->CheckButton1->setEnabled(isOn);
processPreview();
}
//================================================================================= //=================================================================================
// function : createOperation // function : createOperation
// purpose : // purpose :
@ -488,16 +462,20 @@ GEOM::GEOM_IOperations_ptr TransformationGUI_MultiRotationDlg::createOperation()
bool TransformationGUI_MultiRotationDlg::isValid (QString& msg) bool TransformationGUI_MultiRotationDlg::isValid (QString& msg)
{ {
bool ok = false; bool ok = false;
switch(getConstructorId()){ switch (getConstructorId()) {
case 0: case 0:
ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) && myBase && myVector; ok = (GroupArgs->SpinBox_DX1->isValid( msg, !IsPreview() ) &&
GroupArgs->SpinBox_DY1->isValid( msg, !IsPreview() ) &&
//myBase && myVector); // myVector = DZ by default
myBase);
break; break;
case 1: case 1:
ok = GroupDimensions->SpinBox_DX1->isValid( msg, !IsPreview() ) && ok = (GroupArgs->SpinBox_DX1->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DY1->isValid( msg, !IsPreview() ) && GroupArgs->SpinBox_DY1->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DX2->isValid( msg, !IsPreview() ) && GroupArgs->SpinBox_DX2->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DY2->isValid( msg, !IsPreview() ) && GroupArgs->SpinBox_DY2->isValid( msg, !IsPreview() ) &&
myBase && myVector; //myBase && myVector); // myVector = DZ by default
myBase);
break; break;
default: default:
break; break;
@ -520,29 +498,38 @@ bool TransformationGUI_MultiRotationDlg::execute (ObjectList& objects)
switch (getConstructorId()) { switch (getConstructorId()) {
case 0: case 0:
if ( myBase && myVector ) { if (GroupArgs->CheckAngleStep->isChecked())
anObj = anOper->MultiRotate1DByStep(myBase.get(), myVector.get(), myAng * M_PI / 180., myNbTimes1);
else
anObj = anOper->MultiRotate1D(myBase.get(), myVector.get(), myNbTimes1); anObj = anOper->MultiRotate1D(myBase.get(), myVector.get(), myNbTimes1);
if(!IsPreview())
aParameters<<GroupPoints->SpinBox_DX->text(); if (!IsPreview()) {
res = true; if (GroupArgs->CheckAngleStep->isChecked())
aParameters << GroupArgs->SpinBox_DX1->text();
aParameters << GroupArgs->SpinBox_DY1->text();
} }
res = true;
break; break;
case 1: case 1:
if ( myBase && myVector ) { if (GroupArgs->CheckAngleStep->isChecked())
anObj = anOper->MultiRotate2D(myBase.get(), myVector.get(), myAng, myNbTimes1, myStep, myNbTimes2); anObj = anOper->MultiRotate2DByStep(myBase.get(), myVector.get(), myAng * M_PI / 180., myNbTimes1,
if(!IsPreview()) { myStep, myNbTimes2);
aParameters<<GroupDimensions->SpinBox_DX1->text(); else
aParameters<<GroupDimensions->SpinBox_DY1->text(); anObj = anOper->MultiRotate2DNbTimes(myBase.get(), myVector.get(), myNbTimes1, myStep, myNbTimes2);
aParameters<<GroupDimensions->SpinBox_DX2->text();
aParameters<<GroupDimensions->SpinBox_DY2->text(); if (!IsPreview()) {
} if (GroupArgs->CheckAngleStep->isChecked())
res = true; aParameters << GroupArgs->SpinBox_DX1->text();
aParameters << GroupArgs->SpinBox_DY1->text();
aParameters << GroupArgs->SpinBox_DX2->text();
aParameters << GroupArgs->SpinBox_DY2->text();
} }
res = true;
break; break;
} }
if (!anObj->_is_nil()) { if (!anObj->_is_nil()) {
if(!IsPreview()) if (!IsPreview())
anObj->SetParameters(aParameters.join(":").toLatin1().constData()); anObj->SetParameters(aParameters.join(":").toLatin1().constData());
objects.push_back(anObj._retn()); objects.push_back(anObj._retn());
} }
@ -586,3 +573,82 @@ void TransformationGUI_MultiRotationDlg::restoreSubShapes (SALOMEDS::Study_ptr
mainFrame()->CheckBoxAddPrefix->isChecked()); mainFrame()->CheckBoxAddPrefix->isChecked());
} }
} }
//=================================================================================
// function : TransformationGUI_2Sel4Spin1Check
// purpose :
//=================================================================================
TransformationGUI_2Sel4Spin1Check::TransformationGUI_2Sel4Spin1Check (QWidget *parent)
{
gridLayout = new QGridLayout (parent);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
gridLayout->setHorizontalSpacing(0);
gridLayout->setVerticalSpacing(0);
gridLayout->setContentsMargins(0, 0, 0, 0);
GroupBox1 = new QGroupBox (parent);
gridLayout1 = new QGridLayout (GroupBox1);
gridLayout1->setSpacing(6);
gridLayout1->setContentsMargins(11, 11, 11, 11);
gridLayout1->setHorizontalSpacing(6);
gridLayout1->setVerticalSpacing(6);
gridLayout1->setContentsMargins(9, 9, 9, 9);
// 2Sel
TextLabel1 = new QLabel(GroupBox1);
TextLabel2 = new QLabel(GroupBox1);
PushButton1 = new QPushButton (GroupBox1);
PushButton2 = new QPushButton (GroupBox1);
LineEdit2 = new QLineEdit(GroupBox1);
LineEdit1 = new QLineEdit(GroupBox1);
gridLayout1->addWidget(TextLabel1, 0, 0, 1, 1);
gridLayout1->addWidget(TextLabel2, 1, 0, 1, 1);
gridLayout1->addWidget(PushButton1, 0, 1, 1, 1);
gridLayout1->addWidget(PushButton2, 1, 1, 1, 1);
gridLayout1->addWidget(LineEdit1, 0, 2, 1, 1);
gridLayout1->addWidget(LineEdit2, 1, 2, 1, 1);
// 4Spin (double-int-double-int)
//TextLabel3 = new QLabel (GroupBox1);
CheckAngleStep = new QCheckBox (GroupBox1);
TextLabel4 = new QLabel (GroupBox1);
TextLabel5 = new QLabel (GroupBox1);
TextLabel6 = new QLabel (GroupBox1);
SpinBox_DX1 = new SalomeApp_DoubleSpinBox (GroupBox1);
SpinBox_DY1 = new SalomeApp_IntSpinBox (GroupBox1);
SpinBox_DX2 = new SalomeApp_DoubleSpinBox (GroupBox1);
SpinBox_DY2 = new SalomeApp_IntSpinBox (GroupBox1);
//gridLayout1->addWidget(TextLabel3, 2, 0, 1, 1);
gridLayout1->addWidget(CheckAngleStep, 2, 0, 1, 1);
gridLayout1->addWidget(TextLabel4, 3, 0, 1, 1);
gridLayout1->addWidget(TextLabel5, 5, 0, 1, 1);
gridLayout1->addWidget(TextLabel6, 6, 0, 1, 1);
gridLayout1->addWidget(SpinBox_DX1, 2, 1, 1, 2);
gridLayout1->addWidget(SpinBox_DY1, 3, 1, 1, 2);
gridLayout1->addWidget(SpinBox_DX2, 5, 1, 1, 2);
gridLayout1->addWidget(SpinBox_DY2, 6, 1, 1, 2);
// 1Check
CheckButton1 = new QCheckBox (GroupBox1);
gridLayout1->addWidget(CheckButton1, 4, 0, 1, 3);
gridLayout->addWidget(GroupBox1, 0, 0, 1, 1);
}
//=================================================================================
// function : ~TransformationGUI_2Sel4Spin1Check()
// purpose : Destroys the object and frees any allocated resources
//=================================================================================
TransformationGUI_2Sel4Spin1Check::~TransformationGUI_2Sel4Spin1Check()
{
// no need to delete child widgets, Qt does it all for us
}

View File

@ -18,34 +18,78 @@
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
// //
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
// GEOM GEOMGUI : GUI for Geometry component // GEOM GEOMGUI : GUI for Geometry component
// File : TransformationGUI_MultiRotationDlg.h // File : TransformationGUI_MultiRotationDlg.h
// Author : Damien COQUERET, Open CASCADE S.A.S. // Author : Damien COQUERET, Open CASCADE S.A.S.
//
#ifndef TRANSFORMATIONGUI_MULTIROTATIONDLG_H #ifndef TRANSFORMATIONGUI_MULTIROTATIONDLG_H
#define TRANSFORMATIONGUI_MULTIROTATIONDLG_H #define TRANSFORMATIONGUI_MULTIROTATIONDLG_H
#include "GEOMBase_Skeleton.h" #include "GEOMBase_Skeleton.h"
#include "GEOM_GenericObjPtr.h" #include "GEOM_GenericObjPtr.h"
class DlgRef_2Sel4Spin1Check; #include <SalomeApp_IntSpinBox.h>
class DlgRef_2Sel1SpinInt;
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QCheckBox>
//=================================================================================
// class : TransformationGUI_2Sel4Spin1Check
// purpose :
//=================================================================================
class TransformationGUI_2Sel4Spin1Check : public QWidget
{
Q_OBJECT
public:
TransformationGUI_2Sel4Spin1Check (QWidget *parent);
~TransformationGUI_2Sel4Spin1Check();
public:
QGridLayout *gridLayout;
QGroupBox *GroupBox1;
QGridLayout *gridLayout1;
// 2Sel
QLabel *TextLabel1;
QLabel *TextLabel2;
QPushButton *PushButton1;
QPushButton *PushButton2;
QLineEdit *LineEdit1;
QLineEdit *LineEdit2;
// 4Spin (double-int-double-int)
QCheckBox *CheckAngleStep;
QLabel *TextLabel4;
QLabel *TextLabel5;
QLabel *TextLabel6;
SalomeApp_DoubleSpinBox *SpinBox_DX1;
SalomeApp_IntSpinBox *SpinBox_DY1;
SalomeApp_DoubleSpinBox *SpinBox_DX2;
SalomeApp_IntSpinBox *SpinBox_DY2;
// 1Check
QCheckBox *CheckButton1;
};
//================================================================================= //=================================================================================
// class : TransformationGUI_MultiRotationDlg // class : TransformationGUI_MultiRotationDlg
// purpose : // purpose :
//================================================================================= //=================================================================================
class TransformationGUI_MultiRotationDlg : public GEOMBase_Skeleton class TransformationGUI_MultiRotationDlg : public GEOMBase_Skeleton
{ {
Q_OBJECT Q_OBJECT
public: public:
TransformationGUI_MultiRotationDlg( GeometryGUI*, QWidget* = 0, TransformationGUI_MultiRotationDlg (GeometryGUI*, QWidget* = 0,
bool = false, Qt::WindowFlags = 0 ); bool = false, Qt::WindowFlags = 0);
~TransformationGUI_MultiRotationDlg(); ~TransformationGUI_MultiRotationDlg();
protected: protected:
// redefined from GEOMBase_Helper // redefined from GEOMBase_Helper
virtual GEOM::GEOM_IOperations_ptr createOperation(); virtual GEOM::GEOM_IOperations_ptr createOperation();
@ -57,7 +101,7 @@ protected:
private: private:
void Init(); void Init();
void enterEvent( QEvent* ); void enterEvent( QEvent* );
private: private:
GEOM::GeomObjPtr myBase, myVector; GEOM::GeomObjPtr myBase, myVector;
int myNbTimes1; int myNbTimes1;
@ -67,9 +111,8 @@ private:
// to initialize the first selection field with a selected object on the dialog creation // to initialize the first selection field with a selected object on the dialog creation
bool myInitial; bool myInitial;
DlgRef_2Sel1SpinInt* GroupPoints; TransformationGUI_2Sel4Spin1Check* GroupArgs;
DlgRef_2Sel4Spin1Check* GroupDimensions;
private slots: private slots:
void ClickOnOk(); void ClickOnOk();
@ -77,6 +120,7 @@ private slots:
void ActivateThisDialog(); void ActivateThisDialog();
void SelectionIntoArgument(); void SelectionIntoArgument();
void SetEditCurrentArgument(); void SetEditCurrentArgument();
void CheckAngleStep (bool);
void ReverseAngle(); void ReverseAngle();
void ValueChangedInSpinBox( double ); void ValueChangedInSpinBox( double );
void ValueChangedInSpinBox( int ); void ValueChangedInSpinBox( int );

View File

@ -82,10 +82,10 @@ TransformationGUI_MultiTranslationDlg::TransformationGUI_MultiTranslationDlg
GroupPoints = new DlgRef_2Sel2Spin1Check(centralWidget()); GroupPoints = new DlgRef_2Sel2Spin1Check(centralWidget());
GroupPoints->GroupBox1->setTitle(tr("GEOM_MULTITRANSLATION_SIMPLE")); GroupPoints->GroupBox1->setTitle(tr("GEOM_MULTITRANSLATION_SIMPLE"));
GroupPoints->TextLabel1->setText(tr("GEOM_MAIN_OBJECT")); GroupPoints->TextLabel1->setText(tr("GEOM_MAIN_OBJECT"));
GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR_U")); GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR"));
GroupPoints->TextLabel3->setText(tr("GEOM_STEP_U")); GroupPoints->TextLabel3->setText(tr("GEOM_STEP"));
GroupPoints->TextLabel4->setText(tr("GEOM_NB_TIMES_U")); GroupPoints->TextLabel4->setText(tr("GEOM_NB_TIMES"));
GroupPoints->CheckButton1->setText(tr("GEOM_REVERSE_U")); GroupPoints->CheckButton1->setText(tr("GEOM_REVERSE_DIRECTION"));
GroupPoints->PushButton1->setIcon(image2); GroupPoints->PushButton1->setIcon(image2);
GroupPoints->PushButton2->setIcon(image2); GroupPoints->PushButton2->setIcon(image2);
GroupPoints->LineEdit1->setReadOnly(true); GroupPoints->LineEdit1->setReadOnly(true);
@ -142,7 +142,7 @@ void TransformationGUI_MultiTranslationDlg::Init()
int SpecificStep = 1; int SpecificStep = 1;
// init variables // init variables
myStepU = myStepV = 50.0; myStepU = myStepV = 50.0;
myNbTimesU = myNbTimesV = 2; myNbTimesU = myNbTimesV = 3;
// min, max, step and decimals for spin boxes & initial values // min, max, step and decimals for spin boxes & initial values
initSpinBox(GroupPoints->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" ); initSpinBox(GroupPoints->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" );
@ -328,9 +328,20 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) { if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ) {
QString aName = GEOMBase::GetName( aSelectedObject.get() ); QString aName = GEOMBase::GetName( aSelectedObject.get() );
myEditCurrentArgument->setText( aName ); myEditCurrentArgument->setText( aName );
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) { if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) {
myBase = aSelectedObject; myBase = aSelectedObject;
if ( !myVectorU )
// recompute myStepU (Mantis issue 0021718)
GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId());
double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
anOper->GetBoundingBox(myBase.get(), Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
if (anOper->IsDone()) {
myStepU = floor(1.5 * (Xmax - Xmin));
GroupPoints->SpinBox_DX->setValue(myStepU);
}
if (!myVectorU)
GroupPoints->PushButton2->click(); GroupPoints->PushButton2->click();
} }
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) { else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
@ -340,6 +351,18 @@ void TransformationGUI_MultiTranslationDlg::SelectionIntoArgument()
} }
else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) { else if ( myEditCurrentArgument == GroupDimensions->LineEdit1 ) {
myBase = aSelectedObject; myBase = aSelectedObject;
// recompute myStepU and myStepV (Mantis issue 0021718)
GEOM::GEOM_IMeasureOperations_var anOper = getGeomEngine()->GetIMeasureOperations(getStudyId());
double Xmin, Xmax, Ymin, Ymax, Zmin, Zmax;
anOper->GetBoundingBox(myBase.get(), Xmin, Xmax, Ymin, Ymax, Zmin, Zmax);
if (anOper->IsDone()) {
myStepU = floor(1.5 * (Xmax - Xmin));
myStepV = floor(1.5 * (Ymax - Ymin));
GroupDimensions->SpinBox_DX1->setValue(myStepU);
GroupDimensions->SpinBox_DX2->setValue(myStepV);
}
if ( !myVectorU ) if ( !myVectorU )
GroupDimensions->PushButton2->click(); GroupDimensions->PushButton2->click();
else if ( !myVectorV ) else if ( !myVectorV )
@ -597,18 +620,20 @@ GEOM::GEOM_IOperations_ptr TransformationGUI_MultiTranslationDlg::createOperatio
bool TransformationGUI_MultiTranslationDlg::isValid (QString& msg) bool TransformationGUI_MultiTranslationDlg::isValid (QString& msg)
{ {
bool ok = false; bool ok = false;
switch ( getConstructorId() ) { switch (getConstructorId()) {
case 0: case 0:
ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) && ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) &&
GroupPoints->SpinBox_DY->isValid( msg, !IsPreview() ) && GroupPoints->SpinBox_DY->isValid( msg, !IsPreview() ) &&
myBase && myVectorU; myBase;
//myBase && myVectorU; // Mantis issue 0021718
break; break;
case 1: case 1:
ok = GroupDimensions->SpinBox_DX1->isValid( msg, !IsPreview() ) && ok = GroupDimensions->SpinBox_DX1->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DY1->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DY1->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DX2->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DX2->isValid( msg, !IsPreview() ) &&
GroupDimensions->SpinBox_DY2->isValid( msg, !IsPreview() ) && GroupDimensions->SpinBox_DY2->isValid( msg, !IsPreview() ) &&
myBase && myVectorU && myVectorV; myBase;
//myBase && myVectorU && myVectorV; // Mantis issue 0021718
break; break;
default: default:
break; break;
@ -625,43 +650,38 @@ bool TransformationGUI_MultiTranslationDlg::execute (ObjectList& objects)
bool res = false; bool res = false;
GEOM::GEOM_Object_var anObj; GEOM::GEOM_Object_var anObj;
QStringList aParameters; QStringList aParameters;
GEOM::GEOM_ITransformOperations_var anOper = GEOM::GEOM_ITransformOperations::_narrow(getOperation()); GEOM::GEOM_ITransformOperations_var anOper = GEOM::GEOM_ITransformOperations::_narrow(getOperation());
switch (getConstructorId()) { switch (getConstructorId()) {
case 0: case 0:
if ( myBase && myVectorU ) { createPathPreview(myVectorU.get());
createPathPreview ( myVectorU.get() ); anObj = anOper->MultiTranslate1D(myBase.get(), myVectorU.get(), myStepU, myNbTimesU);
anObj = anOper->MultiTranslate1D(myBase.get(), myVectorU.get(), myStepU, myNbTimesU); if (!IsPreview()) {
if(!IsPreview()) { aParameters << GroupPoints->SpinBox_DX->text();
aParameters<<GroupPoints->SpinBox_DX->text(); aParameters << GroupPoints->SpinBox_DY->text();
aParameters<<GroupPoints->SpinBox_DY->text();
}
res = true;
} }
res = true;
break; break;
case 1: case 1:
if ( myBase && myVectorU && myVectorV ) { createPathPreview(myVectorU.get());
createPathPreview ( myVectorU.get() ); createPathPreview(myVectorV.get());
createPathPreview ( myVectorV.get() ); anObj = anOper->MultiTranslate2D(myBase.get(),
anObj = anOper->MultiTranslate2D(myBase.get(), myVectorU.get(), myStepU, myNbTimesU,
myVectorU.get(), myStepU, myNbTimesU, myVectorV.get(), myStepV, myNbTimesV);
myVectorV.get(), myStepV, myNbTimesV); if (!IsPreview()) {
if(!IsPreview()) { aParameters << GroupDimensions->SpinBox_DX1->text();
aParameters<<GroupDimensions->SpinBox_DX1->text(); aParameters << GroupDimensions->SpinBox_DY1->text();
aParameters<<GroupDimensions->SpinBox_DY1->text(); aParameters << GroupDimensions->SpinBox_DX2->text();
aParameters<<GroupDimensions->SpinBox_DX2->text(); aParameters << GroupDimensions->SpinBox_DY2->text();
aParameters<<GroupDimensions->SpinBox_DY2->text();
}
res = true;
} }
res = true;
break; break;
} }
if (!anObj->_is_nil()) { if (!anObj->_is_nil()) {
if(!IsPreview()) if (!IsPreview())
anObj->SetParameters(aParameters.join(":").toLatin1().constData()); anObj->SetParameters(aParameters.join(":").toLatin1().constData());
objects.push_back(anObj._retn()); objects.push_back(anObj._retn());
} }
@ -716,6 +736,7 @@ void TransformationGUI_MultiTranslationDlg::restoreSubShapes (SALOMEDS::Study_pt
void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Object_ptr thePath ) void TransformationGUI_MultiTranslationDlg::createPathPreview ( GEOM::GEOM_Object_ptr thePath )
{ {
if ( IsPreview() ) { if ( IsPreview() ) {
if (thePath->_is_nil()) return;
TopoDS_Shape aShape; TopoDS_Shape aShape;
GEOMBase::GetShape( thePath, aShape, TopAbs_SHAPE ); GEOMBase::GetShape( thePath, aShape, TopAbs_SHAPE );
TopoDS_Edge anEdge = TopoDS::Edge( aShape ); TopoDS_Edge anEdge = TopoDS::Edge( aShape );