]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
0016562: EDF 508 GEOM: Link the sketcher and the WP/LCS
authordmv <dmv@opencascade.com>
Fri, 22 May 2009 08:17:16 +0000 (08:17 +0000)
committerdmv <dmv@opencascade.com>
Fri, 22 May 2009 08:17:16 +0000 (08:17 +0000)
32 files changed:
doc/salome/gui/GEOM/images/neo-scetcher1.png
doc/salome/gui/GEOM/images/neo-scetcher2.png
doc/salome/gui/GEOM/images/plane1.png
doc/salome/gui/GEOM/images/plane2.png
doc/salome/gui/GEOM/images/plane3.png
doc/salome/gui/GEOM/images/plane4.png [new file with mode: 0644]
doc/salome/gui/GEOM/images/plane5.png [new file with mode: 0644]
doc/salome/gui/GEOM/input/creating_basic_go.doc
doc/salome/gui/GEOM/input/creating_plane.doc
doc/salome/gui/GEOM/input/creating_sketcher.doc
doc/salome/gui/GEOM/input/creating_wplane.doc [deleted file]
doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
src/BasicGUI/BasicGUI.cxx
src/BasicGUI/BasicGUI_PlaneDlg.cxx
src/BasicGUI/BasicGUI_PlaneDlg.h
src/DlgRef/DlgRef_3Radio1Sel1Spin_QTD.ui
src/EntityGUI/EntityGUI_SketcherDlg.cxx
src/EntityGUI/EntityGUI_SketcherDlg.h
src/GEOMGUI/GeometryGUI.cxx
src/GEOMImpl/GEOMImpl_IBasicOperations.cxx
src/GEOMImpl/GEOMImpl_IBasicOperations.hxx
src/GEOMImpl/GEOMImpl_IPlane.hxx
src/GEOMImpl/GEOMImpl_PlaneDriver.cxx
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOM_I/GEOM_IBasicOperations_i.cc
src/GEOM_I/GEOM_IBasicOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh
src/GEOM_SWIG/GEOM_TestAll.py
src/GEOM_SWIG/geompyDC.py

index 23ec1f3e678a03d07daa600ce187b1f71bea2086..d0d5d7132e396f7b397cdfc33f02e636d83c9ff1 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/neo-scetcher1.png and b/doc/salome/gui/GEOM/images/neo-scetcher1.png differ
index 837031035d57dfe4e1a4f1da760e45d133ccdb46..9097ffc0776e34eb27bcda0f90ff0fe60fe888af 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/neo-scetcher2.png and b/doc/salome/gui/GEOM/images/neo-scetcher2.png differ
index aaf7f12d5ad4e74d3d33de1a7cf2dcb8b257eb10..e336b7a2e763dc187c6bc5880ca9334709d1b750 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/plane1.png and b/doc/salome/gui/GEOM/images/plane1.png differ
index 3644d6b38498e5a336da626d0462f68a534474c8..5c202409e895b6cb06d2b5843c07ee1bb7a4f81e 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/plane2.png and b/doc/salome/gui/GEOM/images/plane2.png differ
index b815f8d0d666168bcee7ebd3ccf70ae2b7291a01..18c9f8088513e9bca7876eee79a6e764087514d1 100755 (executable)
Binary files a/doc/salome/gui/GEOM/images/plane3.png and b/doc/salome/gui/GEOM/images/plane3.png differ
diff --git a/doc/salome/gui/GEOM/images/plane4.png b/doc/salome/gui/GEOM/images/plane4.png
new file mode 100644 (file)
index 0000000..41b00fe
Binary files /dev/null and b/doc/salome/gui/GEOM/images/plane4.png differ
diff --git a/doc/salome/gui/GEOM/images/plane5.png b/doc/salome/gui/GEOM/images/plane5.png
new file mode 100644 (file)
index 0000000..76c668a
Binary files /dev/null and b/doc/salome/gui/GEOM/images/plane5.png differ
index 49e3b2f34e879f5aa62b8fd5221de9c36018507e..0553bffd1a7fbdebb03f5901ede9b9f7839e6b34 100644 (file)
@@ -14,7 +14,6 @@ geometrical objects as:
 <li>\subpage create_curve_page</li>
 <li>\subpage create_vector_page</li>
 <li>\subpage create_plane_page</li>
-<li>\subpage create_wplane_page</li>
 <li>\subpage create_lcs_page</li>
 </ul>
 
index c6116021bf289a98ca52a1aae6cc2176a49e0c0a..518d648675bd960aa748c23f32d94c24bcd8ea16 100644 (file)
@@ -26,15 +26,25 @@ of the plane).
 
 \image html plane2.png
 
-\n Finally, you can define a \b Plane by another \b Plane or <b>Local
-Coordinate System</b> and a <b>Size of the Plane</b>. To change selection type cilck the corresponding
-radio button "Face" or "Local Coordinate System".
+\n Also, you can define a \b Plane by another \b Plane or <b>Face</b> and a <b>Size of the Plane</b>.
 \n <b>TUI Command:</b> <em>geompy.MakePlaneFace(Face, TrimSize)</em>
-\n <b>Arguments:</b> Name + 1 face + 1 value (to define the size of
-the plane).
+\n <b>Arguments:</b> Name + 1 face + 1 value (to define the size of the plane).
 
 \image html plane3.png
 
+\n Also, you can define a \b Plane by two Vectors. The first vector defines the center point and the direction, 
+the second vector defines the normal to the Plane.
+\n <b>TUI Command:</b> <em>geompy.MakePlane2Vec(Vec1, Vec2, TrimSize)</em>
+\n <b>Arguments:</b> Name + 2 vectors + 1 value (to define the size of the plane).
+
+\image html plane4.png
+
+\n Finally, you can define a \b Plane by the Local Coordinate System and the orientation (OXY, OYZ, OZX). 
+\n <b>TUI Command:</b> <em>geompy.MakePlaneLCS(LCS, TrimSize, [1, 2, or 3])</em>
+\n <b>Arguments:</b> Name + LCS + 1 value (to define the size of the plane) + 1 value (to define the orientation)
+
+\image html plane5.png
+
 <b>Examples:</b>
 
 \image html planes1.png
index ce1a6e78de71c03db33f6a0ebd8e806cf355f3d9..f7be15bb691689672ad44ba501b5af1cd0de6654 100644 (file)
@@ -11,9 +11,8 @@ only) or destination direction coupled with length of a segment or
 angle and radius of an arc.
 
 \n Sketcher is able to create planar curves only. Therefore, it is
-necessary to select a working plane before starting a sketch (by
-default, XOY plane is used). Sketcher creates curves lying in the
-current working plane (New Entity -> Basic -> Working Plane).
+necessary to select coordinate system (Global or Local) before starting 
+a sketch. Sketcher creates curves lying in the XOY plane of the selected Coordinate System.
 
 \n This functionality is available from the main menu via <em>New
 Entity / Sketch</em>.
@@ -26,13 +25,14 @@ textual description, passed through the Command argument. The edges of
 the resulting wire or face will be arcs of circles and/or linear
 segments.
 \n \em Command is a string, defining the sketcher by the coordinates of
-points in the local working plane.
-\n <em>WorkingPlane</em> can be a plane or a planar face. The plane is
+points in the current LCS.
+\n <em>WorkingPlane</em> can be a Local CS, a plane, or a planar face. The plane is
 defined by the XYZ coordinates of three non-coincident points. The
 planar face is an existing GEOM_Object.
 
 \n <b>Arguments:</b>
 <ol>
+<li>Coordinate system (Local or Global CS can be selected)</li>
 <li>Element type (segment or arc).</li>
 <li>Destination type (point or direction).</li>
 <li>Destination point by means of:</li>
diff --git a/doc/salome/gui/GEOM/input/creating_wplane.doc b/doc/salome/gui/GEOM/input/creating_wplane.doc
deleted file mode 100644 (file)
index bb453c8..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/*!
-
-\page create_wplane_page Working Plane
-
-Definition of a <b>Working Plane</b> is necessary for work with 
-\ref create_sketcher_page "Sketcher".
-
-\n To create a <b>Working Plane</b> in the <b>Main Menu</b> select
-<b>New Entity - > Basic - > Working Plane</b>
-
-\n There is a number of algorithms to set the <b>Working Plane</b> and the
-Camera Position.
-
-\n Firstly, you can select a \b Plane, a <b>Planar Face</b> or a <b>Local Coordinate System</b> to be your <b>Working Plane</b>.
-\n <b>Arguments:</b> Name + 1 selection (plane or planar face).
-
-\image html workplane4.png
-
-\n Secondly, you can define a <b>Working Plane</b> by two <b>Vectors</b>.
-\n <b>Arguments:</b> Name +  2 vectors.
-
-\image html workplane5.png
-
-\n Finally, you can select one of three basic projections of XYZ
-coordinate system to be your <b>Working Plane</b>.
-
-\image html workplane6.png
-
-<b>Reverse the plane normal</b> checkbox allows changing the direction
-of the working plane.
-
-<b>Example:</b> Working plane on the upper face of a box.  
-
-\image html image36.gif
-<center>Normal Direction</center>
-
-\image html image47.gif
-<center>Reversed Direction</center>
-
-*/
index 51da40037ec1ec3eaead2d09370434a33539170f..a6eb9bf182cbfb769878b7aa7face89e62758bb9 100644 (file)
@@ -268,8 +268,9 @@ p3 = geompy.MakeVertex(200., 200., 200.)
 p4 = geompy.MakeVertex(100., 100.,   0.)
 p5 = geompy.MakeVertex(0.  , 100.,   0.)
 
-# create a vector from the given components
-vector = geompy.MakeVectorDXDYDZ(100., 100., 100.)
+# create a vectors from the given components
+vector1 = geompy.MakeVectorDXDYDZ(100., 100., 100.)
+vector2 = geompy.MakeVectorDXDYDZ(-100., 0., 100.)
 
 # create a vector from two points
 vector_arc = geompy.MakeVector(p2, p5)
@@ -285,8 +286,12 @@ isPlanarWanted = 1
 face = geompy.MakeFace(wire, isPlanarWanted)
 trimsize = 1000.
 
+# create a Local Coordinate System
+
+LCS = geompy.MakeMarker(100., 100., 101., 1, 0, 0, 0, 1, 0)
+
 # create a plane from a point, a vector and a trimsize
-plane1 = geompy.MakePlane(p1, vector, trimsize)
+plane1 = geompy.MakePlane(p1, vector1, trimsize)
 
 # create a plane from three points and a trimsize
 plane2 = geompy.MakePlaneThreePnt(p1, p2, p3, trimsize)
@@ -294,23 +299,37 @@ plane2 = geompy.MakePlaneThreePnt(p1, p2, p3, trimsize)
 # create a plane from the given face
 plane3 = geompy.MakePlaneFace(face, trimsize)
 
+# create a plane from two vectors and a trimsize
+plane4 = geompy.MakePlane2Vec(vector1, vector2, trimsize)
+
+# create a plane with the Local Coordinate System and a trimsize
+plane5 = geompy.MakePlaneLCS(LCS, trimsize, 1)
+
 # add objects in the study
 id_face   = geompy.addToStudy(face,  "Face")
 id_plane1 = geompy.addToStudy(plane1,"Plane1")
 id_plane2 = geompy.addToStudy(plane2,"Plane2")
 id_plane3 = geompy.addToStudy(plane3,"Plane3")
+id_plane4 = geompy.addToStudy(plane4,"Plane4")
+id_plane5 = geompy.addToStudy(plane5,"Plane5")
 
 # display the points and the vectors
 gg.createAndDisplayGO(id_face)
 gg.createAndDisplayGO(id_plane1)
 gg.createAndDisplayGO(id_plane2)
 gg.createAndDisplayGO(id_plane3)
+gg.createAndDisplayGO(id_plane4)
+gg.createAndDisplayGO(id_plane5)
 gg.setDisplayMode(id_plane1,1)
 gg.setTransparency(id_plane1,0.5)
 gg.setDisplayMode(id_plane2,1)
 gg.setTransparency(id_plane2,0.5)
 gg.setDisplayMode(id_plane3,1)
-gg.setTransparency(id_plane3,0.5) 
+gg.setTransparency(id_plane3,0.5)
+gg.setDisplayMode(id_plane4,1)
+gg.setTransparency(id_plane4,0.5)
+gg.setDisplayMode(id_plane5,1)
+gg.setTransparency(id_plane5,0.5)
 \endcode
 
 */
index 7c840499ac1d2771c5a0d78605c1193bdb5d2f7f..04aa32a406acfb94e30afbf2a7149bfd965b3f53 100644 (file)
@@ -435,6 +435,28 @@ module GEOM
      */
     GEOM_Object MakePlaneFace (in GEOM_Object theFace,
                               in double theTrimSize);
+                              
+    /*!
+     *  Create a plane, by two vectors.
+     *  \param theVec1 Vector1, the plane has to pass through first point of this vector.
+     *  \param theVec Vector2, defining the plane normal direction.
+     *  \param theTrimSize Half size of a side of quadrangle face, representing the plane.
+     *  \return New GEOM_Object, containing the created plane.
+     */
+    GEOM_Object MakePlane2Vec (in GEOM_Object theVec1,
+                              in GEOM_Object theVec2,
+                              in double theTrimSize);
+                              
+    /*!
+     *  Create a plane, defined by local coordinate system.
+     *  \param theLCS Referenced LCS(Marker).
+     *  \param theTrimSize Half size of a side of quadrangle face, representing the plane.
+     *  \param theOrientation OXY, OYZ or OZX orientation = (1, 2 or 3).
+     *  \return New GEOM_Object, containing the created plane.
+     */
+    GEOM_Object MakePlaneLCS (in GEOM_Object theLCS,
+                             in double theTrimSize,
+                             in double theOrientation);
 
     /*!
      *  Create a local coordinate system.
index 1ee41d6420ff901607ce0896622ca0a5ac92fa3a..ed433499404251d680405b16b003b5631d70873d 100644 (file)
@@ -94,6 +94,12 @@ module GEOM
                                 in double      theTrimSize) ;
     GEOM_Object MakePlaneFace (in GEOM_Object theFace,
                               in double      theTrimSize) ;
+    GEOM_Object MakePlane2Vec (in GEOM_Object theVec1,
+                              in GEOM_Object theVec2,
+                              in double      theTrimSize) ;
+    GEOM_Object MakePlaneLCS (in GEOM_Object theLCS,
+                             in double      theTrimSize,
+                             in double      theOrientation) ;
     GEOM_Object MakeMarker (in double theOX , in double theOY , in double theOZ,
                            in double theXDX, in double theXDY, in double theXDZ,
                            in double theYDX, in double theYDY, in double theYDZ) ;
index 47c7e1135039c41188ac7913da05c49510fcbcb9..ab7c09429e7e1326384422543996fb2807679bb8 100644 (file)
@@ -102,9 +102,9 @@ bool BasicGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
   case 4017: // PLANE
     aDlg = new BasicGUI_PlaneDlg( getGeometryGUI(), parent );
     break;
-  case 4018: // WORKING PLANE
+/*  case 4018: // WORKING PLANE
     aDlg = new BasicGUI_WorkingPlaneDlg( getGeometryGUI(), parent );
-    break;
+    break;*/ // DEPRECATED!
   case 4019: // CURVE
     aDlg = new BasicGUI_CurveDlg( getGeometryGUI(), parent );
     break;
index 8d5b14f37bdf17c11798a88ef6ba9f6bd7fa5512..b98ba15de2eb7d91a6cb20b656fa583c0bfb02bf 100644 (file)
@@ -60,6 +60,8 @@ BasicGUI_PlaneDlg::BasicGUI_PlaneDlg( GeometryGUI* theGeometryGUI, QWidget* pare
   QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_PLANE_3PNTS" ) ) );
   QPixmap image2( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_PLANE_FACE" ) ) );
   QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
+  QPixmap image4( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_WPLANE_VECTOR" ) ) );
+  QPixmap image5( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_WPLANE_ORIGIN" ) ) );
 
   setWindowTitle( tr( "GEOM_PLANE_TITLE" ) );
 
@@ -68,6 +70,10 @@ BasicGUI_PlaneDlg::BasicGUI_PlaneDlg( GeometryGUI* theGeometryGUI, QWidget* pare
   mainFrame()->RadioButton1->setIcon( image0 );
   mainFrame()->RadioButton2->setIcon( image1 );
   mainFrame()->RadioButton3->setIcon( image2 );
+  mainFrame()->RadioButton4->show();
+  mainFrame()->RadioButton4->setIcon( image4 );
+  mainFrame()->RadioButton5->show();
+  mainFrame()->RadioButton5->setIcon( image5 );
 
   GroupPntDir = new DlgRef_2Sel1Spin( centralWidget() );
   GroupPntDir->GroupBox1->setTitle( tr( "GEOM_PLANE_PV" ) );
@@ -100,12 +106,8 @@ BasicGUI_PlaneDlg::BasicGUI_PlaneDlg( GeometryGUI* theGeometryGUI, QWidget* pare
   Group3Pnts->LineEdit2->setEnabled( false );
   Group3Pnts->LineEdit3->setEnabled( false );
 
-  GroupFace = new DlgRef_3Radio1Sel1Spin( centralWidget() );
-  GroupFace->RadioButton1->setText(tr("GEOM_FACE"));
-  GroupFace->RadioButton2->setText(tr("GEOM_LCS"));
-  GroupFace->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
-  GroupFace->RadioButton3->close();
-  GroupFace->GroupBox1->setTitle( tr( "GEOM_FACE_OR_LCS" ) );
+  GroupFace = new DlgRef_1Sel1Spin( centralWidget() );
+  GroupFace->GroupBox1->setTitle( tr( "GEOM_FACE" ) );
   GroupFace->TextLabel1->setText( tr( "GEOM_SELECTION" ) );
   GroupFace->TextLabel2->setText( tr( "GEOM_PLANE_SIZE" ) );
   GroupFace->PushButton1->setIcon( image3 );
@@ -113,11 +115,37 @@ BasicGUI_PlaneDlg::BasicGUI_PlaneDlg( GeometryGUI* theGeometryGUI, QWidget* pare
 
   GroupFace->LineEdit1->setReadOnly( true );
 
+  Group2Vec = new DlgRef_2Sel1Spin( centralWidget() );
+
+  Group2Vec->GroupBox1->setTitle( tr( "GEOM_WPLANE_VECTOR" ) );
+  Group2Vec->TextLabel1->setText( tr( "GEOM_WPLANE_VX" ) );
+  Group2Vec->TextLabel2->setText( tr( "GEOM_WPLANE_VZ" ) );
+  Group2Vec->PushButton1->setIcon( image3 );
+  Group2Vec->PushButton2->setIcon( image3 );
+  Group2Vec->LineEdit1->setReadOnly( true );
+  Group2Vec->LineEdit2->setReadOnly( true );
+  Group2Vec->PushButton1->setDown( true );
+  Group2Vec->LineEdit1->setEnabled( true );
+  Group2Vec->LineEdit2->setEnabled( false );
+  Group2Vec->TextLabel3->setText( tr( "GEOM_PLANE_SIZE" ) );
+
+  GroupLCS = new DlgRef_3Radio1Sel1Spin( centralWidget() );
+  GroupLCS->GroupBox1->setTitle( tr( "GEOM_LCS" ) );
+  GroupLCS->TextLabel1->setText( tr( "GEOM_SELECTION" ) );
+  GroupLCS->TextLabel2->setText( tr( "GEOM_PLANE_SIZE" ) );
+  GroupLCS->RadioButton1->setText( tr( "GEOM_WPLANE_OXY" ) );
+  GroupLCS->RadioButton2->setText( tr( "GEOM_WPLANE_OYZ" ) );
+  GroupLCS->RadioButton3->setText( tr( "GEOM_WPLANE_OZX" ) );
+  GroupLCS->PushButton1->setIcon( image3 );
+  GroupLCS->PushButton1->setDown( true );
+
   QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
   layout->setMargin( 0 ); layout->setSpacing( 6 );
   layout->addWidget( GroupPntDir );
   layout->addWidget( Group3Pnts );
   layout->addWidget( GroupFace );
+  layout->addWidget( Group2Vec );
+  layout->addWidget( GroupLCS );
   /***************************************************************/
 
   setHelpFileName( "create_plane_page.html" );
@@ -143,11 +171,11 @@ void BasicGUI_PlaneDlg::Init()
 {
   /* init variables */
   myEditCurrentArgument = GroupPntDir->LineEdit1;
-  GroupFace->RadioButton1->setChecked(true);
 
   myPoint = myDir = myPoint1 = myPoint2 = myPoint3 = myFace = GEOM::GEOM_Object::_nil();
 
   // myGeomGUI->SetState( 0 );
+  myOriginType = 1;
 
   /* Get setting of step value from file configuration */
   SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
@@ -162,6 +190,10 @@ void BasicGUI_PlaneDlg::Init()
   Group3Pnts->SpinBox_DX->setValue( aTrimSize );
   initSpinBox( GroupFace->SpinBox_DX, 0.000001, COORD_MAX, aStep, 6 ); // VSR: TODO: DBL_DIGITS_DISPLAY
   GroupFace->SpinBox_DX->setValue( aTrimSize );
+  initSpinBox( Group2Vec->SpinBox_DX, 0.000001, COORD_MAX, aStep, 6 ); // VSR: TODO: DBL_DIGITS_DISPLAY
+  Group2Vec->SpinBox_DX->setValue( aTrimSize );
+  initSpinBox( GroupLCS->SpinBox_DX, 0.000001, COORD_MAX, aStep, 6 ); // VSR: TODO: DBL_DIGITS_DISPLAY
+  GroupLCS->SpinBox_DX->setValue( aTrimSize );
 
   /* signals and slots connections */
   connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
@@ -178,6 +210,12 @@ void BasicGUI_PlaneDlg::Init()
   connect( Group3Pnts->PushButton2,  SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
   connect( Group3Pnts->PushButton3,  SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
   connect( GroupFace->PushButton1,   SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
+  connect( Group2Vec->PushButton1,   SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
+  connect( Group2Vec->PushButton2,   SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
+
+  connect( GroupLCS->RadioButton1,   SIGNAL( clicked() ), this, SLOT( GroupClicked() ) );
+  connect( GroupLCS->RadioButton2,   SIGNAL( clicked() ), this, SLOT( GroupClicked() ) );
+  connect( GroupLCS->RadioButton3,   SIGNAL( clicked() ), this, SLOT( GroupClicked() ) );
 
   connect( GroupPntDir->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
   connect( GroupPntDir->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
@@ -185,12 +223,14 @@ void BasicGUI_PlaneDlg::Init()
   connect( Group3Pnts->LineEdit2,  SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
   connect( Group3Pnts->LineEdit3,  SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
   connect( GroupFace->LineEdit1,   SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
-  connect( GroupFace->RadioButton1,SIGNAL( clicked() ), this, SLOT( SelectionTypeClicked() ) );
-  connect( GroupFace->RadioButton2,SIGNAL( clicked() ), this, SLOT( SelectionTypeClicked() ) );
+  connect( Group2Vec->LineEdit1,   SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
+  connect( Group2Vec->LineEdit2,   SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
 
   connect( GroupPntDir->SpinBox_DX, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
   connect( Group3Pnts->SpinBox_DX,  SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
   connect( GroupFace->SpinBox_DX,   SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
+  connect( Group2Vec->SpinBox_DX,   SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
+  connect( GroupLCS->SpinBox_DX,   SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
 
   connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
 
@@ -210,28 +250,10 @@ void BasicGUI_PlaneDlg::SetDoubleSpinBoxStep( double step )
   GroupPntDir->SpinBox_DX->setSingleStep(step);
   Group3Pnts->SpinBox_DX->setSingleStep(step);
   GroupFace->SpinBox_DX->setSingleStep(step);
+  Group2Vec->SpinBox_DX->setSingleStep(step);
+  GroupLCS->SpinBox_DX->setSingleStep(step);
 }
 
-//=================================================================================
-// function : SelectionTypeClicked()
-// purpose  : Selection type radio buttons managment
-//=================================================================================
-void BasicGUI_PlaneDlg::SelectionTypeClicked()
-{
-  myFace   = GEOM::GEOM_Object::_nil();
-  if ( GroupFace->RadioButton1->isChecked()) {
-    globalSelection(); // close local contexts, if any
-    localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
-  } else if ( GroupFace->RadioButton2->isChecked()) {
-    TColStd_MapOfInteger aMap;
-    aMap.Add( GEOM_PLANE );
-    aMap.Add( GEOM_MARKER );
-    globalSelection( aMap );
-  }
-  displayPreview();
-}
-
-
 //=================================================================================
 // function : ConstructorsClicked()
 // purpose  : Radio button management
@@ -247,6 +269,8 @@ void BasicGUI_PlaneDlg::ConstructorsClicked( int constructorId )
       Group3Pnts->hide();
       GroupFace->hide();
       GroupPntDir->show();
+      Group2Vec->hide();
+      GroupLCS->hide();
       
       myEditCurrentArgument = GroupPntDir->LineEdit1;
       GroupPntDir->LineEdit1->setText( "" );
@@ -266,6 +290,8 @@ void BasicGUI_PlaneDlg::ConstructorsClicked( int constructorId )
       GroupPntDir->hide();
       GroupFace->hide();
       Group3Pnts->show();
+      Group2Vec->hide();
+      GroupLCS->hide();
       
       myEditCurrentArgument = Group3Pnts->LineEdit1;
       Group3Pnts->LineEdit1->setText( "" );
@@ -283,25 +309,53 @@ void BasicGUI_PlaneDlg::ConstructorsClicked( int constructorId )
       localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
       break;
     }
-  case 2: /* plane from a planar face or LSC selection */
+  case 2: /* plane from a planar face */
     {
       GroupPntDir->hide();
       Group3Pnts->hide();
       GroupFace->show();
+      Group2Vec->hide();
+      GroupLCS->hide();
       
       myEditCurrentArgument = GroupFace->LineEdit1;
       GroupFace->LineEdit1->setText( "" );
       GroupFace->PushButton1->setDown( true );
       
-      if ( GroupFace->RadioButton1->isChecked()) {
-       globalSelection(); // close local contexts, if any
-       localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
-      } else if ( GroupFace->RadioButton2->isChecked()) {
-       TColStd_MapOfInteger aMap;
-       aMap.Add( GEOM_PLANE );
-       aMap.Add( GEOM_MARKER );
-       globalSelection( aMap );
-      }
+      globalSelection(); // close local contexts, if any
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
+      break;
+    }
+  case 3: /* plane from a 2 Vectors */
+    {
+      GroupPntDir->hide();
+      Group3Pnts->hide();
+      GroupFace->hide();
+      Group2Vec->show();
+      GroupLCS->hide();
+      
+      myEditCurrentArgument = Group2Vec->LineEdit1;
+      Group2Vec->LineEdit1->setText( "" );
+      Group2Vec->PushButton1->setDown( true );
+      
+      globalSelection(); // close local contexts, if any
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
+      break;
+    }
+  case 4: /* plane from a LCS */
+    {
+      GroupPntDir->hide();
+      Group3Pnts->hide();
+      GroupFace->hide();
+      Group2Vec->hide();
+      GroupLCS->show();
+      
+      myEditCurrentArgument = GroupLCS->LineEdit1;
+      GroupLCS->LineEdit1->setText( "" );
+      GroupLCS->PushButton1->setDown( true );
+      GroupLCS->RadioButton1->setChecked( true );
+      myOriginType = 1;
+      
+      globalSelection(GEOM_MARKER);
       break;
     }
   }
@@ -313,6 +367,7 @@ void BasicGUI_PlaneDlg::ConstructorsClicked( int constructorId )
   myEditCurrentArgument->setFocus();
   connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
           this, SLOT( SelectionIntoArgument() ) );
+  displayPreview();
 }
 
 
@@ -341,6 +396,23 @@ bool BasicGUI_PlaneDlg::ClickOnApply()
   return true;
 }
 
+//=================================================================================
+// function : GroupClicked()
+// purpose  : OX OY OZ Radio button management
+//=================================================================================
+void BasicGUI_PlaneDlg::GroupClicked()
+{
+  QRadioButton* send = (QRadioButton*)sender();
+
+  if ( send == GroupLCS->RadioButton1 )
+    myOriginType = 1;
+  else if ( send == GroupLCS->RadioButton2 )
+    myOriginType = 2;
+  else if ( send == GroupLCS->RadioButton3 )
+    myOriginType = 3;
+  displayPreview();
+}
+
 //=================================================================================
 // function : SelectionIntoArgument()
 // purpose  : Called when selection has changed
@@ -360,6 +432,10 @@ void BasicGUI_PlaneDlg::SelectionIntoArgument()
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit2 )  myPoint2 = GEOM::GEOM_Object::_nil();
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit3 )  myPoint3 = GEOM::GEOM_Object::_nil();
     else if ( myEditCurrentArgument == GroupFace->LineEdit1 )   myFace   = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == Group2Vec->LineEdit1 )   myVec1   = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == Group2Vec->LineEdit2 )   myVec2   = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupLCS->LineEdit1 )    myLCS   = GEOM::GEOM_Object::_nil();
+    displayPreview();
     return;
   }
 
@@ -369,10 +445,12 @@ void BasicGUI_PlaneDlg::SelectionIntoArgument()
   if ( !CORBA::is_nil( aSelectedObject ) && aRes ) {
     QString aName = GEOMBase::GetName( aSelectedObject );
     TopAbs_ShapeEnum aNeedType = TopAbs_VERTEX;
-    if ( myEditCurrentArgument == GroupPntDir->LineEdit2 )
+    if ( myEditCurrentArgument == GroupPntDir->LineEdit2 || myEditCurrentArgument == Group2Vec->LineEdit1 || myEditCurrentArgument == Group2Vec->LineEdit2)
       aNeedType = TopAbs_EDGE;
     else if ( myEditCurrentArgument == GroupFace->LineEdit1 )
       aNeedType = TopAbs_FACE;
+    else if ( myEditCurrentArgument == GroupLCS->LineEdit1 )
+      aNeedType = TopAbs_FACE;
 
     TopoDS_Shape aShape;
     if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() ) {
@@ -447,6 +525,17 @@ void BasicGUI_PlaneDlg::SelectionIntoArgument()
     }
     else if ( myEditCurrentArgument == GroupFace->LineEdit1 )
       myFace   = aSelectedObject;
+    else if ( myEditCurrentArgument == Group2Vec->LineEdit1 ) {
+      myVec1 = aSelectedObject;
+      if ( !myVec1->_is_nil() && myVec2->_is_nil() )
+       Group2Vec->PushButton2->click();
+    } else if ( myEditCurrentArgument == Group2Vec->LineEdit2 ) {
+      myVec2 = aSelectedObject;
+      if ( !myVec2->_is_nil() && myVec1->_is_nil() )
+       Group2Vec->PushButton1->click();
+    } else if ( myEditCurrentArgument == GroupLCS->LineEdit1 )
+      myLCS = aSelectedObject;
+
   }
 
   displayPreview();
@@ -501,18 +590,34 @@ void BasicGUI_PlaneDlg::SetEditCurrentArgument()
   else if ( send == GroupFace->PushButton1 ) {
     myEditCurrentArgument = GroupFace->LineEdit1;
     GroupFace->PushButton1->setDown( true );
+  } else if ( send == Group2Vec->PushButton1 ) {
+    myEditCurrentArgument = Group2Vec->LineEdit1;
+    Group2Vec->PushButton2->setDown( false );
+    Group2Vec->LineEdit1->setEnabled( true );
+    Group2Vec->LineEdit2->setEnabled( false );
+  } else if ( send == Group2Vec->PushButton2 ) {
+    myEditCurrentArgument = Group2Vec->LineEdit2;
+    Group2Vec->PushButton1->setDown( false );
+    Group2Vec->LineEdit1->setEnabled( false );
+    Group2Vec->LineEdit2->setEnabled( true );
+  } else if ( send == GroupLCS->PushButton1 ) {
+    myEditCurrentArgument = GroupLCS->LineEdit1;
+    GroupLCS->LineEdit1->setEnabled( true );
   }
 
   myEditCurrentArgument->setFocus();
 
-  if ( myEditCurrentArgument == GroupPntDir->LineEdit2 ) {
+  if ( myEditCurrentArgument == GroupPntDir->LineEdit2 || 
+       myEditCurrentArgument == Group2Vec->LineEdit1   ||
+       myEditCurrentArgument == Group2Vec->LineEdit2 ) {
     localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE );
-  }
-  else if ( myEditCurrentArgument == GroupFace->LineEdit1 ) {
+  } else if ( myEditCurrentArgument == GroupFace->LineEdit1 ) {
     TColStd_MapOfInteger aMap;
     aMap.Add( GEOM_PLANE );
     aMap.Add( GEOM_MARKER );
     globalSelection( aMap );
+  } else if ( myEditCurrentArgument == GroupLCS->LineEdit1 ) {
+    globalSelection( GEOM_MARKER );
   }
   else { // 3 Pnts
     localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
@@ -537,7 +642,10 @@ void BasicGUI_PlaneDlg::LineEditReturnPressed()
        send == Group3Pnts->LineEdit1 ||
        send == Group3Pnts->LineEdit2 ||
        send == Group3Pnts->LineEdit3 ||
-       send == GroupFace->LineEdit1 ) {
+       send == GroupFace->LineEdit1  ||
+       send == Group2Vec->LineEdit1  ||
+       send == Group2Vec->LineEdit2  ||
+       send == GroupLCS->LineEdit1  ) {
     myEditCurrentArgument = send;
     GEOMBase_Skeleton::LineEditReturnPressed();
   }
@@ -555,6 +663,7 @@ void BasicGUI_PlaneDlg::ActivateThisDialog()
           this, SLOT( SelectionIntoArgument() ) );
 
   ConstructorsClicked( getConstructorId() );
+  SelectionIntoArgument();
 }
 
 //=================================================================================
@@ -596,6 +705,8 @@ double BasicGUI_PlaneDlg::getSize() const
   case 0 : return GroupPntDir->SpinBox_DX->value();
   case 1 : return Group3Pnts->SpinBox_DX->value();
   case 2 : return GroupFace->SpinBox_DX->value();
+  case 3 : return Group2Vec->SpinBox_DX->value();
+  case 4 : return GroupLCS->SpinBox_DX->value();
   }
   return 0.;
 }
@@ -610,6 +721,7 @@ QString BasicGUI_PlaneDlg::getSizeAsString() const
   case 0 : return GroupPntDir->SpinBox_DX->text();
   case 1 : return Group3Pnts->SpinBox_DX->text();
   case 2 : return GroupFace->SpinBox_DX->text();
+  case 3 : return Group2Vec->SpinBox_DX->text();
   }
   return QString();
 }
@@ -656,6 +768,12 @@ bool BasicGUI_PlaneDlg::isValid( QString& msg )
   else if ( id == 2 ) {
     bool ok = GroupFace->SpinBox_DX->isValid( msg, !IsPreview() );
     return !CORBA::is_nil( myFace ) && ok;
+  }   else if ( id == 3 ) {
+    bool ok = Group2Vec->SpinBox_DX->isValid( msg, !IsPreview() );
+    return !CORBA::is_nil( myVec1  ) && !CORBA::is_nil( myVec2 ) && !isEqual( myVec1, myVec2 ) && ok;
+  } else if ( id == 4 ) {
+    bool ok = GroupLCS->SpinBox_DX->isValid( msg, !IsPreview() );
+    return ok;
   }
   return false;
 }
@@ -683,6 +801,14 @@ bool BasicGUI_PlaneDlg::execute( ObjectList& objects )
     anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakePlaneFace( myFace, getSize() );
     res = true;
     break;
+  case 3 :
+    anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakePlane2Vec( myVec1, myVec2, getSize() );
+    res = true;
+    break;
+  case 4 :
+    anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakePlaneLCS( myLCS, getSize(), myOriginType );
+    res = true;
+    break;
   }
   
   if ( !anObj->_is_nil() ) {
@@ -713,6 +839,10 @@ void BasicGUI_PlaneDlg::addSubshapesToStudy()
   case 2:
     objMap[GroupFace->LineEdit1->text()] = myFace;
     break;
+  case 3:
+    objMap[Group2Vec->LineEdit1->text()] = myVec1;
+    objMap[Group2Vec->LineEdit2->text()] = myVec2;
+    break;
   }
   addSubshapesToFather( objMap );
 }
index 5d83df4e39d5630d81eeb85e1eb7011fd55ecb41..d8a0f2663c82050a06f7e942a4feded45e7173e9 100644 (file)
@@ -57,13 +57,16 @@ private:
   void                               enterEvent( QEvent* );
   double                             getSize() const;
   QString                            getSizeAsString() const; 
+  int                                myOriginType;
 
 private:
-  GEOM::GEOM_Object_var              myPoint, myDir, myPoint1, myPoint2, myPoint3, myFace;
+  GEOM::GEOM_Object_var              myPoint, myDir, myPoint1, myPoint2, myPoint3, myFace, myVec1, myVec2, myLCS;
 
   DlgRef_2Sel1Spin*                  GroupPntDir;
   DlgRef_3Sel1Spin*                  Group3Pnts;
-  DlgRef_3Radio1Sel1Spin*            GroupFace;
+  DlgRef_1Sel1Spin*                  GroupFace;
+  DlgRef_2Sel1Spin*                  Group2Vec;
+  DlgRef_3Radio1Sel1Spin*            GroupLCS;
 
 private slots:
   void                               ClickOnOk();
@@ -79,6 +82,7 @@ private slots:
   void                               ValueChangedInSpinBox( double );
   void                               SetDoubleSpinBoxStep( double );
   void                               SelectionTypeClicked();
+  void                               GroupClicked();
 };
 
 #endif // BASICGUI_PLANEDLG_H
index 74e1d6bcc4f012ba218ddbf8c837d93520a244a5..f6f82c007034e10ce15f60b296fa3dd5cee09c2e 100644 (file)
@@ -37,7 +37,7 @@
       <string/>
      </property>
      <layout class="QGridLayout" name="gridLayout" >
-      <item row="0" column="0" colspan="3" >
+      <item row="3" column="0" colspan="4" >
        <layout class="QHBoxLayout" name="horizontalLayout" >
         <item>
          <widget class="QRadioButton" name="RadioButton1" >
@@ -62,8 +62,8 @@
         </item>
        </layout>
       </item>
-      <item row="1" column="0" >
-       <widget class="QLabel" name="TextLabel1" >
+      <item row="5" column="0" >
+       <widget class="QLabel" name="TextLabel2" >
         <property name="sizePolicy" >
          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
           <horstretch>0</horstretch>
          </sizepolicy>
         </property>
         <property name="text" >
-         <string>TL1</string>
+         <string>TL2</string>
         </property>
         <property name="wordWrap" >
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="1" column="1" >
-       <widget class="QPushButton" name="PushButton1" >
-        <property name="sizePolicy" >
-         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
-          <horstretch>0</horstretch>
-          <verstretch>0</verstretch>
-         </sizepolicy>
+      <item row="5" column="1" colspan="3" >
+       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
+      </item>
+      <item row="6" column="3" >
+       <spacer name="verticalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Vertical</enum>
         </property>
-        <property name="text" >
-         <string/>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>256</width>
+          <height>19</height>
+         </size>
         </property>
-       </widget>
+       </spacer>
       </item>
-      <item row="1" column="2" >
+      <item row="1" column="3" >
        <widget class="QLineEdit" name="LineEdit1" />
       </item>
-      <item row="2" column="0" >
-       <widget class="QLabel" name="TextLabel2" >
+      <item row="1" column="0" >
+       <widget class="QLabel" name="TextLabel1" >
         <property name="sizePolicy" >
          <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
           <horstretch>0</horstretch>
          </sizepolicy>
         </property>
         <property name="text" >
-         <string>TL2</string>
+         <string>TL1</string>
         </property>
         <property name="wordWrap" >
          <bool>false</bool>
         </property>
        </widget>
       </item>
-      <item row="2" column="1" colspan="2" >
-       <widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
-      </item>
-      <item row="3" column="2" >
-       <spacer name="verticalSpacer" >
-        <property name="orientation" >
-         <enum>Qt::Vertical</enum>
+      <item row="1" 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="sizeHint" stdset="0" >
-         <size>
-          <width>256</width>
-          <height>19</height>
-         </size>
+        <property name="text" >
+         <string/>
         </property>
-       </spacer>
+       </widget>
       </item>
      </layout>
+     <zorder>TextLabel2</zorder>
+     <zorder>SpinBox_DX</zorder>
+     <zorder>RadioButton1</zorder>
+     <zorder>RadioButton2</zorder>
+     <zorder>RadioButton3</zorder>
+     <zorder>LineEdit1</zorder>
+     <zorder>TextLabel1</zorder>
+     <zorder>PushButton1</zorder>
     </widget>
    </item>
   </layout>
   </customwidget>
  </customwidgets>
  <tabstops>
-  <tabstop>PushButton1</tabstop>
-  <tabstop>LineEdit1</tabstop>
   <tabstop>SpinBox_DX</tabstop>
  </tabstops>
  <resources/>
index 140592cf2a123499441ef70810a8db7bef2e0e6d..d2b0db3300b70efda7446e468ad3f89ae651b90f 100644 (file)
@@ -30,6 +30,8 @@
 #include <GEOMBase.h>
 #include <GeometryGUI.h>
 #include <GEOMImpl_Types.hxx>
+#include <Geom_Surface.hxx>
+#include <Geom_Plane.hxx>
 
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <BRepBuilderAPI_MakeWire.hxx>
 #include <Sketcher_Profile.hxx>
 
+#include <SalomeApp_Study.h>
+
+#include <gp_Pln.hxx>
+
 //=================================================================================
 // class    : EntityGUI_SketcherDlg()
 // purpose  : Constructs a EntityGUI_SketcherDlg which is a child of 'parent', with the
@@ -75,7 +81,6 @@ EntityGUI_SketcherDlg::EntityGUI_SketcherDlg( GeometryGUI* GUI, QWidget* parent,
   MainWidget = new EntityGUI_Skeleton( this );
   QVBoxLayout* topLayout = new QVBoxLayout( this );
   topLayout->setMargin( 9 ); topLayout->setSpacing( 6 );
-  topLayout->addWidget( MainWidget );
 
   MainWidget->buttonCancel->setText( tr( "GEOM_BUT_CANCEL" ) );
   MainWidget->buttonEnd->setText( tr( "GEOM_BUT_END_SKETCH" ) );
@@ -97,6 +102,18 @@ EntityGUI_SketcherDlg::EntityGUI_SketcherDlg( GeometryGUI* GUI, QWidget* parent,
   MainWidget->RB_Dest2->setText( tr( "GEOM_SKETCHER_DIR" ) );
 
   /***************************************************************/
+
+  GroupBox1 = new QGroupBox(tr("GEOM_CS"), this);
+  QGridLayout* OwnLayout = new QGridLayout(GroupBox1);
+  OwnLayout->setSpacing(6);
+  OwnLayout->setMargin(11);
+
+  ComboBox1 = new QComboBox(GroupBox1);
+  OwnLayout->addWidget(ComboBox1);
+
+  topLayout->addWidget(GroupBox1);
+  topLayout->addWidget( MainWidget );
+
   GroupPt = new EntityGUI_Point( MainWidget->DestCnt );
 
   GroupPt->GroupPoint->setTitle( tr( "GEOM_SKETCHER_POINT" ) );
@@ -214,6 +231,8 @@ EntityGUI_SketcherDlg::EntityGUI_SketcherDlg( GeometryGUI* GUI, QWidget* parent,
   connect( Group4Spin->SpinBox_DZ, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
   connect( Group4Spin->SpinBox_DS, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
 
+  connect( ComboBox1, SIGNAL( activated( int ) ), this, SLOT( SelectionIntoArgument() ) );
+
   connect( myGeometryGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
 
   connect( myGeometryGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) );
@@ -329,6 +348,8 @@ void EntityGUI_SketcherDlg::Init()
   resize(100,100);
   TypeClicked( 0 );
 
+  FindLocalCS();
+
   GEOMBase_Helper::displayPreview( false, true, true, myLineWidth );
 }
 
@@ -879,7 +900,7 @@ void EntityGUI_SketcherDlg::SelectionIntoArgument()
       TopoDS_Shape aShape;
       if (GEOMBase::GetShape(aSelectedObject, aShape, TopAbs_VERTEX)) {
        gp_Trsf aTrans;
-       gp_Ax3 aWPlane = myGeometryGUI->GetWorkingPlane();
+       gp_Ax3 aWPlane = GetActiveLocalCS();
 
        aTrans.SetTransformation(aWPlane);
        BRepBuilderAPI_Transform aTransformation (aShape, aTrans, Standard_False);
@@ -1445,7 +1466,7 @@ bool EntityGUI_SketcherDlg::execute( ObjectList& objects )
     }
   }
 
-  gp_Ax3 myWPlane = myGeometryGUI->GetWorkingPlane();
+  gp_Ax3 myWPlane = GetActiveLocalCS();
   GEOM::ListOfDouble_var WPlane = new GEOM::ListOfDouble;
   WPlane->length( 9 );
   WPlane[0] = myWPlane.Location().X();
@@ -1607,3 +1628,85 @@ void EntityGUI_SketcherDlg::SetDoubleSpinBoxStep( double step )
   Group4Spin->SpinBox_DZ->setSingleStep(step);
   Group4Spin->SpinBox_DS->setSingleStep(step);
 }
+
+//=================================================================================
+// function : FindLocalCS()
+// purpose  : Find All Coordinates systems in study
+//=================================================================================
+void EntityGUI_SketcherDlg::FindLocalCS()
+{
+  ComboBox1->clear();
+  myLCSList.clear();
+  SalomeApp_Application* app =
+    dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+  if ( !app )
+    return;
+
+  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
+  if ( !appStudy )
+    return;
+
+  _PTR(Study) aStudy = appStudy->studyDS();
+
+  //add Global CS
+  ComboBox1->addItem(tr("GEOM_GCS"));
+  gp_Pnt aOrigin = gp_Pnt(0, 0, 0);
+  gp_Dir aDirZ = gp_Dir(0, 0, 1);
+  gp_Dir aDirX = gp_Dir(1, 0, 0);
+  gp_Ax3 globalCS = gp_Ax3(aOrigin, aDirZ, aDirX);
+  myLCSList.push_back(globalCS);
+
+  // get GEOM component
+  CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() );
+  _PTR(SObject) obj = aStudy->FindObjectIOR( geomIOR.in() );
+  if (!obj)
+    return;
+  _PTR(SComponent) fc = obj->GetFatherComponent();
+  QString geomComp = fc->GetID().c_str();
+  _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() );
+  if ( !comp )
+    return;
+
+  // browse through all GEOM data tree
+  _PTR(ChildIterator) it ( aStudy->NewChildIterator( comp ) );
+  for ( it->InitEx( true ); it->More(); it->Next() ) {
+    _PTR(SObject) child( it->Value() );
+    CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child );
+    GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
+    if( CORBA::is_nil( geomObj ) ) 
+      continue;
+    if (geomObj->GetType() == GEOM_MARKER) {
+      ComboBox1->addItem(geomObj->GetName());
+      TopoDS_Shape aShape = GEOM_Client().GetShape(GeometryGUI::GetGeomGen(), geomObj);
+      
+      gp_Ax3 aLCS;
+      aLCS.Transform(aShape.Location().Transformation());
+      if (aShape.ShapeType() == TopAbs_FACE) {
+       Handle(Geom_Surface) aGS = BRep_Tool::Surface(TopoDS::Face(aShape));
+       if (!aGS.IsNull() && aGS->IsKind(STANDARD_TYPE(Geom_Plane))) {
+         Handle(Geom_Plane) aGPlane = Handle(Geom_Plane)::DownCast(aGS);
+         gp_Pln aPln = aGPlane->Pln();
+         aLCS = aPln.Position();
+       }
+      }
+      myLCSList.push_back(aLCS);
+    }
+  }
+}
+
+//=================================================================================
+// function : GetActiveLocalCS()
+// purpose  : Find All Coordinates systems in study
+//=================================================================================
+gp_Ax3 EntityGUI_SketcherDlg::GetActiveLocalCS()
+{
+  int ind = ComboBox1->currentIndex();
+  if (ind == -1)
+    return myGeometryGUI->GetWorkingPlane();
+
+  gp_Ax3 aLCS = myLCSList.at(ind);
+
+  myGeometryGUI->SetWorkingPlane( aLCS );
+  myGeometryGUI->ActiveWorkingPlane();
+  return aLCS;
+}
index 3a304abf10c0950be352d841559cd5a65692567a..774068fc10f2403fa7d9220dedb23321bd62fd51 100644 (file)
 
 #include <GEOMBase_Helper.h>
 
+#include <QGroupBox>
+#include <QComboBox>
 #include <QDialog>
 
+#include <gp_Ax3.hxx>
+
 class QLineEdit;
 class SalomeApp_DoubleSpinBox;
 class EntityGUI_1Sel;
@@ -138,12 +142,17 @@ private:
   EntityGUI_3Spin*                   Group3Spin;
   EntityGUI_4Spin*                   Group4Spin;
 
+  QGroupBox*                         GroupBox1;
+  QComboBox*                         ComboBox1;
+
   GeometryGUI*                       myGeometryGUI;
 
   QString                            myHelpFileName;
   
   double                             myLineWidth;
 
+  QList<gp_Ax3>                      myLCSList;
+
 private:
   enum SketchState { FIRST_POINT, NEXT_POINT };
   
@@ -172,6 +181,8 @@ private slots:
   void                               Dir2Clicked( int );
   void                               ValueChangedInSpinBox( double );
   void                               SetDoubleSpinBoxStep( double );
+  void                               FindLocalCS();
+  gp_Ax3                             GetActiveLocalCS();
 };
 
 #endif // ENTITYGUI_SKETCHERDLG_H
index 37b3c8b494100441c4dfe7d15fd2b9bd4fb8969d..be3e9ca46a9e3392429871ad764ebacfd5256cd7 100644 (file)
@@ -417,7 +417,7 @@ void GeometryGUI::OnGUIEvent( int id )
           id == 4015 ||  // MENU BASIC - ARC
           id == 4016 ||  // MENU BASIC - VECTOR
           id == 4017 ||  // MENU BASIC - PLANE
-          id == 4018 ||  // MENU BASIC - WPLANE
+//        id == 4018 ||  // MENU BASIC - WPLANE // DEPRECATED
           id == 4019 ||  // MENU BASIC - CURVE
           id == 4020 ) { // MENU BASIC - REPAIR
 #ifndef WNT
@@ -783,7 +783,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createGeomAction( 4019, "CURVE" );
   createGeomAction( 4016, "VECTOR" );
   createGeomAction( 4017, "PLANE" );
-  createGeomAction( 4018, "WORK_PLANE" );
+//  createGeomAction( 4018, "WORK_PLANE" ); DEPRECATED
   createGeomAction( 4020, "LOCAL_CS" );
 
   createGeomAction( 4021, "BOX" );
@@ -928,7 +928,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createMenu( separator(), basicId, -1 );
   createMenu( 4016, basicId, -1 );
   createMenu( 4017, basicId, -1 );
-  createMenu( 4018, basicId, -1 );
+//  createMenu( 4018, basicId, -1 ); DEPRECATED
   createMenu( 4020, basicId, -1 );
 
   int primId = createMenu( tr( "MEN_PRIMITIVES" ), newEntId, -1 );
@@ -1086,7 +1086,7 @@ void GeometryGUI::initialize( CAM_Application* app )
   createTool( 4019, basicTbId );
   createTool( 4016, basicTbId );
   createTool( 4017, basicTbId );
-  createTool( 4018, basicTbId );
+//  createTool( 4018, basicTbId ); DEPRECATED
   createTool( 4020, basicTbId );
 
   int primTbId = createTool( tr( "TOOL_PRIMITIVES" ) );
index 1594f58279160e5ccf87bdf2360c30e67a66fdfd..140a887f67f9d346d7ce681a3cef078afad1318f 100644 (file)
@@ -840,6 +840,117 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlaneFace
   return aPlane;
 }
 
+//=============================================================================
+/*!
+ *  MakePlane2Vec
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlane2Vec
+                       (Handle(GEOM_Object) theVec1, Handle(GEOM_Object) theVec2,
+                        double theSize)
+{
+  SetErrorCode(KO);
+
+  if (theVec1.IsNull() || theVec2.IsNull()) return NULL;
+
+  //Add a new Plane object
+  Handle(GEOM_Object) aPlane = GetEngine()->AddObject(GetDocID(), GEOM_PLANE);
+
+  //Add a new Plane function
+  Handle(GEOM_Function) aFunction =
+    aPlane->AddFunction(GEOMImpl_PlaneDriver::GetID(), PLANE_2_VEC);
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_PlaneDriver::GetID()) return NULL;
+
+  GEOMImpl_IPlane aPI (aFunction);
+
+  Handle(GEOM_Function) aRefVec1 = theVec1->GetLastFunction();
+  Handle(GEOM_Function) aRefVec2 = theVec2->GetLastFunction();
+  if (aRefVec1.IsNull() || aRefVec2.IsNull()) return NULL;
+
+  aPI.SetVector1(aRefVec1);
+  aPI.SetVector2(aRefVec2);
+  aPI.SetSize(theSize);
+
+  //Compute the Plane value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Plane 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) << aPlane << " = geompy.MakePlane2Vec("
+    << theVec1 << ", " << theVec2 << ", " << theSize << ")";
+
+  SetErrorCode(OK);
+  return aPlane;
+}
+
+//=============================================================================
+/*!
+ *  MakePlaneLCS
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePlaneLCS
+                       (Handle(GEOM_Object) theLCS, double theSize, int theOrientation)
+{
+  SetErrorCode(KO);
+
+  //Add a new Plane object
+  Handle(GEOM_Object) aPlane = GetEngine()->AddObject(GetDocID(), GEOM_PLANE);
+
+  //Add a new Plane function
+  Handle(GEOM_Function) aFunction =
+    aPlane->AddFunction(GEOMImpl_PlaneDriver::GetID(), PLANE_LCS);
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_PlaneDriver::GetID()) return NULL;
+
+  GEOMImpl_IPlane aPI (aFunction);
+
+  if ( !theLCS.IsNull() ) {
+    Handle(GEOM_Function) aRef = theLCS->GetLastFunction();
+    aPI.SetLCS(aRef);
+  }
+
+  aPI.SetSize(theSize);
+  aPI.SetOrientation(theOrientation);
+
+  //Compute the Plane value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Plane 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) << aPlane << " = geompy.MakePlaneLCS("
+                               << theLCS << ", " << theSize << ", " << theOrientation << ")";
+
+  SetErrorCode(OK);
+  return aPlane;
+}
+
 
 //=============================================================================
 /*!
index 16c4af6ea93fa56c557b5271695dab8b2d9afa1c..0d211770e3d5db549da8e4185fe1cc8b3ff6a067 100644 (file)
@@ -79,6 +79,12 @@ class GEOMImpl_IBasicOperations : public GEOM_IOperations {
                                        double theSize);
 
   Standard_EXPORT Handle(GEOM_Object) MakePlaneFace (Handle(GEOM_Object) theFace, double theSize);
+  
+  Standard_EXPORT Handle(GEOM_Object) MakePlane2Vec (Handle(GEOM_Object) theVec1,
+                                                     Handle(GEOM_Object) theVec2,
+                                                    double theSize);
+                                                    
+  Standard_EXPORT Handle(GEOM_Object) MakePlaneLCS (Handle(GEOM_Object) theFace, double theSize, int theOrientation);
 
   // Marker
   Standard_EXPORT Handle(GEOM_Object) MakeMarker (double theOX,  double theOY,  double theOZ,
index fbd97d70548194d9c0936d6df2e515165afade41..cdbd5aae201d67598dd6880c03b4b788bad89f39 100644 (file)
 
 #define PLN_ARG_PARAM_V 8
 
+#define PLN_ARG_VEC1    9
+#define PLN_ARG_VEC2    10
+
+#define PLN_ARG_ORIENT  11
+
+#define PLN_ARG_LCS     12
+
 class GEOMImpl_IPlane
 {
  public:
@@ -46,11 +53,18 @@ class GEOMImpl_IPlane
   void SetSize(double theSize) { _func->SetReal(PLN_ARG_SIZE, theSize); }
 
   double GetSize() { return _func->GetReal(PLN_ARG_SIZE); }
+  
+  void SetOrientation(double theOrientation) { _func->SetReal(PLN_ARG_ORIENT, theOrientation); }
+
+  double GetOrientation() { return _func->GetReal(PLN_ARG_ORIENT); }
 
   void SetPoint (Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT1, theRef); }
   void SetVector(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_VEC , theRef); }
+  void SetVector1(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_VEC1 , theRef); }
+  void SetVector2(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_VEC2 , theRef); }
 
   void SetFace  (Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_REF , theRef); }
+  void SetLCS   (Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_LCS , theRef); }
 
   void SetPoint1(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT1, theRef); }
   void SetPoint2(Handle(GEOM_Function) theRef) { _func->SetReference(PLN_ARG_PNT2, theRef); }
@@ -58,8 +72,11 @@ class GEOMImpl_IPlane
 
   Handle(GEOM_Function) GetPoint () { return _func->GetReference(PLN_ARG_PNT1); }
   Handle(GEOM_Function) GetVector() { return _func->GetReference(PLN_ARG_VEC ); }
+  Handle(GEOM_Function) GetVector1() { return _func->GetReference(PLN_ARG_VEC1 ); }
+  Handle(GEOM_Function) GetVector2() { return _func->GetReference(PLN_ARG_VEC2 ); }
 
   Handle(GEOM_Function) GetFace  () { return _func->GetReference(PLN_ARG_REF ); }
+  Handle(GEOM_Function) GetLCS   () { return _func->GetReference(PLN_ARG_LCS ); }
 
   Handle(GEOM_Function) GetPoint1() { return _func->GetReference(PLN_ARG_PNT1); }
   Handle(GEOM_Function) GetPoint2() { return _func->GetReference(PLN_ARG_PNT2); }
index 534fc8565e498115de8cd1b098f1b51112c7069a..9000b30ac5eb7991b570310799fe86a7eb32cce7 100644 (file)
@@ -174,6 +174,58 @@ Standard_Integer GEOMImpl_PlaneDriver::Execute(TFunction_Logbook& log) const
     if(aTool.IsDone())
       aShape = aTool.Shape();
   }
+  else if (aType == PLANE_2_VEC) {
+    Handle(GEOM_Function) aRefVec1 = aPI.GetVector1();
+    Handle(GEOM_Function) aRefVec2 = aPI.GetVector2();
+    TopoDS_Shape aShape1 = aRefVec1->GetValue();
+    TopoDS_Shape aShape2 = aRefVec2->GetValue();
+    if (aShape1.ShapeType() != TopAbs_EDGE ||
+        aShape2.ShapeType() != TopAbs_EDGE) return 0;
+    TopoDS_Edge aVectX = TopoDS::Edge(aShape1);
+    TopoDS_Edge aVectZ = TopoDS::Edge(aShape2);
+
+    TopoDS_Vertex VX1, VX2, VZ1, VZ2;
+    TopExp::Vertices( aVectX, VX1, VX2, Standard_True );
+    TopExp::Vertices( aVectZ, VZ1, VZ2, Standard_True );
+
+    gp_Vec aVX = gp_Vec( BRep_Tool::Pnt( VX1 ), BRep_Tool::Pnt( VX2 ) );
+    gp_Vec aVZ = gp_Vec( BRep_Tool::Pnt( VZ1 ), BRep_Tool::Pnt( VZ2 ) );
+
+    if ( aVX.Magnitude() < Precision::Confusion() || aVZ.Magnitude() < Precision::Confusion())
+      Standard_TypeMismatch::Raise("Invalid vector selected");
+
+    gp_Dir aDirX = gp_Dir( aVX.X(), aVX.Y(), aVX.Z() );
+    gp_Dir aDirZ = gp_Dir( aVZ.X(), aVZ.Y(), aVZ.Z() );
+
+    if ( aDirX.IsParallel( aDirZ, Precision::Angular() ) )
+      Standard_TypeMismatch::Raise("Parallel vectors selected");
+
+    gp_Ax3 aPlane = gp_Ax3( BRep_Tool::Pnt( VX1 ), aDirZ, aDirX );
+    BRepBuilderAPI_MakeFace aTool(aPlane, -aSize, +aSize, -aSize, +aSize);
+    if(aTool.IsDone())
+      aShape = aTool.Shape();
+  }   else if (aType == PLANE_LCS) {
+    Handle(GEOM_Function) aRef = aPI.GetLCS();
+    double anOrientation = aPI.GetOrientation();    
+    gp_Ax3 anAx3;
+    if (aRef.IsNull()) {
+      gp_Ax2 anAx2 = gp::XOY();
+      anAx3 = gp_Ax3( anAx2 );
+    } else {
+      TopoDS_Shape aRefShape = aRef->GetValue();
+      if (aRefShape.ShapeType() != TopAbs_FACE)
+       return 0;
+      anAx3 = GEOMImpl_IMeasureOperations::GetPosition(aRefShape);
+    }
+
+    if ( anOrientation == 2)
+      anAx3 = gp_Ax3(anAx3.Location(), anAx3.XDirection(), anAx3.YDirection() );
+    else if ( anOrientation == 3 )
+      anAx3 = gp_Ax3(anAx3.Location(), anAx3.YDirection(), anAx3.XDirection() );
+
+    gp_Pln aPln(anAx3);
+    aShape = BRepBuilderAPI_MakeFace(aPln, -aSize, +aSize, -aSize, +aSize).Shape();
+  }
   else {
   }
 
index 49cf5542f0b0474d29f23f5342877efcd9575a81..01c24ccb0ac3164577f8d93406886fd77f9184cb 100755 (executable)
 #define VECTOR_TANGENT_CURVE_PAR 3
 #define VECTOR_FACE_NORMALE 4
 
-#define PLANE_PNT_VEC   1
-#define PLANE_FACE      2
-#define PLANE_THREE_PNT 3
+#define PLANE_PNT_VEC      1
+#define PLANE_FACE         2
+#define PLANE_THREE_PNT    3
 #define PLANE_TANGENT_FACE 4
+#define PLANE_2_VEC        5
+#define PLANE_LCS          6
 
 #define LINE_TWO_PNT   1
 #define LINE_PNT_DIR   2
index b4c3b9f8e0e21655d8f77d1f1590293f2e443775..f79e653088fb88f716cfa528579be1c16cff8aca 100644 (file)
@@ -422,6 +422,59 @@ GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePlaneFace
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakePlane2Vec
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePlane2Vec
+                 (GEOM::GEOM_Object_ptr theVec1, GEOM::GEOM_Object_ptr theVec2,
+                  CORBA::Double theTrimSize)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  //Get the references
+  Handle(GEOM_Object) aRef1 = GetObjectImpl(theVec1);
+  Handle(GEOM_Object) aRef2 = GetObjectImpl(theVec2);
+  if (aRef1.IsNull() || aRef2.IsNull()) return aGEOMObject._retn();
+
+  //Create the plane
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakePlane2Vec(aRef1, aRef2, theTrimSize);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ *  MakePlaneLCS
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePlaneLCS
+                 (GEOM::GEOM_Object_ptr theLCS, CORBA::Double theTrimSize,
+                 CORBA::Double theOrientation)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  //Get the references
+  Handle(GEOM_Object) aRef1 = GetObjectImpl(theLCS);
+
+  //Create the plane
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakePlaneLCS(aRef1, theTrimSize, theOrientation);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
 
 //=============================================================================
 /*!
index cc44faafcb34fe5173cbb8fa8c5796a02e182d28..0cf59342f14e631f347681fe6fd876cad94ec77d 100644 (file)
@@ -91,6 +91,14 @@ class GEOM_I_EXPORT GEOM_IBasicOperations_i :
 
    GEOM::GEOM_Object_ptr MakePlaneFace (GEOM::GEOM_Object_ptr theFace,
                                        CORBA::Double theTrimSize);
+                                       
+   GEOM::GEOM_Object_ptr MakePlane2Vec (GEOM::GEOM_Object_ptr theVec1,
+                                         GEOM::GEOM_Object_ptr theVec2,
+                                         CORBA::Double theTrimSize);
+                                         
+   GEOM::GEOM_Object_ptr MakePlaneLCS (GEOM::GEOM_Object_ptr theLCS,
+                                      CORBA::Double theTrimSize,
+                                      CORBA::Double theOrientation );
 
    GEOM::GEOM_Object_ptr MakeMarker (CORBA::Double theOX , CORBA::Double theOY , CORBA::Double theOZ,
                                     CORBA::Double theXDX, CORBA::Double theXDY, CORBA::Double theXDZ,
index 094b6e99fef0247b72851e5e733a0d9a97096db3..8d9dd32726cedec8cf71203517f8d7c2b790862c 100644 (file)
@@ -690,6 +690,36 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlaneFace (GEOM::GEOM_Object_ptr theFac
   return anObj;
 }
 
+//=============================================================================
+//  MakePlane2Vec:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlane2Vec (GEOM::GEOM_Object_ptr theVec1,
+                                                   GEOM::GEOM_Object_ptr theVec2,
+                                                   CORBA::Double theTrimSize)
+{ 
+  beginService( " GEOM_Superv_i::MakePlane2Vec" );
+  MESSAGE("GEOM_Superv_i::MakePlane2Vec");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePlane2Vec(theVec1, theVec2, theTrimSize);
+  endService( " GEOM_Superv_i::MakePlane2Vec" );
+  return anObj;
+}
+
+//=============================================================================
+//  MakePlaneLCS:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePlaneLCS (GEOM::GEOM_Object_ptr theLCS,
+                                                  CORBA::Double theTrimSize,
+                                                  CORBA::Double theOrientation)
+{ 
+  beginService( " GEOM_Superv_i::MakePlaneLCS" );
+  MESSAGE("GEOM_Superv_i::MakePlaneLCS");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePlaneLCS(theLCS, theTrimSize, theOrientation);
+  endService( " GEOM_Superv_i::MakePlaneLCS" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakeMarker:
 //=============================================================================
index e9e2dd24283dcf004dd501791c170ae5f47edc60..e5c37fe14cbe932402b61752b754ab1cf9291231 100644 (file)
@@ -166,6 +166,12 @@ public:
                                         CORBA::Double theTrimSize);
   GEOM::GEOM_Object_ptr MakePlaneFace (GEOM::GEOM_Object_ptr theFace,
                                       CORBA::Double theTrimSize);
+  GEOM::GEOM_Object_ptr MakePlane2Vec (GEOM::GEOM_Object_ptr theVec1,
+                                      GEOM::GEOM_Object_ptr theVec2,
+                                      CORBA::Double theTrimSize);
+  GEOM::GEOM_Object_ptr MakePlaneLCS (GEOM::GEOM_Object_ptr theLCS,
+                                     CORBA::Double theTrimSize,
+                                     CORBA::Double theOrientation);
   GEOM::GEOM_Object_ptr MakeMarker (CORBA::Double theOX , CORBA::Double theOY , CORBA::Double theOZ,
                                    CORBA::Double theXDX, CORBA::Double theXDY, CORBA::Double theXDZ,
                                    CORBA::Double theYDX, CORBA::Double theYDY, CORBA::Double theYDZ);
index df4fcbc6319fccd5506b3eeee67f0aa500fbd049..0a2983b40d3968877994f3e210f0d1b9c721f05e 100644 (file)
@@ -89,6 +89,8 @@ def TestAll (geompy, math):
   Line2  = geompy.MakeLineTwoPnt(pxyz, pz)                  #(2 GEOM_Object_ptr)->GEOM_Object_ptr
   Plane  = geompy.MakePlane(pz, vxyz, trimsize)             #(2 GEOM_Object_ptr, Double)->GEOM_Object_ptr
   Plane1 = geompy.MakePlaneThreePnt(px, pz, p200, trimsize) #(4 Doubles)->GEOM_Object_ptr
+  Plane2 = geompy.MakePlane2Vec(vx, vz, trimsize)          #(2 GEOM_Object_ptr, Double)->GEOM_Object_ptr
+  Plane3 = geompy.MakePlaneLCS(cs1, trimsize, 3)           #(1 GEOM_Object_ptr, 2 Double)->GEOM_Object_ptr
 
   Arc      = geompy.MakeArc(py, pz, px)                   #(3 GEOM_Object_ptr)->GEOM_Object_ptr
   Arc2     = geompy.MakeArcCenter(py, pz, px,0)           #(3 GEOM_Object_ptr,Boolean)->GEOM_Object_ptr
@@ -303,6 +305,8 @@ def TestAll (geompy, math):
   id_Line3  = geompy.addToStudy(Line3,  "Line on Two Faces Intersection")
   id_Plane  = geompy.addToStudy(Plane,  "Plane")
   id_Plane1 = geompy.addToStudy(Plane1,  "Plane by 3 points")
+  id_Plane2 = geompy.addToStudy(Plane2,  "Plane by 2 vectors")
+  id_Plane3 = geompy.addToStudy(Plane3,  "Plane by LCS")
 
   id_Arc      = geompy.addToStudy(Arc,      "Arc")
   id_Arc2     = geompy.addToStudy(Arc2,     "Arc2")
index 8214e3403626f994aec12151ee6993dc6124125e..72beea22a7f0922629272d1a76b1b5874a6c541e 100644 (file)
@@ -525,6 +525,37 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             RaiseIfFailed("MakePlaneFace", self.BasicOp)
             anObj.SetParameters(Parameters)
             return anObj
+           
+       ## Create a plane, passing through the 2 vectors
+        #  with center in a start point of the first vector.
+        #  @param theVec1 Vector, defining center point and plane direction.
+        #  @param theVec2 Vector, defining the plane normal direction.
+        #  @param theTrimSize Half size of a side of quadrangle face, representing the plane.
+        #  @return New GEOM_Object, containing the created plane.
+        #
+        #  @ref tui_creation_plane "Example"
+        def MakePlane2Vec(self,theVec1, theVec2, theTrimSize):
+            # Example: see GEOM_TestAll.py
+            theTrimSize, Parameters = ParseParameters(theTrimSize);
+            anObj = self.BasicOp.MakePlane2Vec(theVec1, theVec2, theTrimSize)
+            RaiseIfFailed("MakePlane2Vec", self.BasicOp)
+            anObj.SetParameters(Parameters)
+            return anObj
+           
+       ## Create a plane, based on a Local coordinate system.
+        #  @param theLCS  coordinate system, defining plane.
+        #  @param theTrimSize Half size of a side of quadrangle face, representing the plane.
+       #  @param theOrientation OXY, OYZ or OZX orientation - (1, 2 or 3)
+        #  @return New GEOM_Object, containing the created plane.
+        #
+        #  @ref tui_creation_plane "Example"
+        def MakePlaneLCS(self,theLCS, theTrimSize, theOrientation):
+            # Example: see GEOM_TestAll.py
+            theTrimSize, Parameters = ParseParameters(theTrimSize);
+            anObj = self.BasicOp.MakePlaneLCS(theLCS, theTrimSize, theOrientation)
+            RaiseIfFailed("MakePlaneLCS", self.BasicOp)
+            anObj.SetParameters(Parameters)
+            return anObj
 
         ## Create a local coordinate system.
         #  @param OX,OY,OZ Three coordinates of coordinate system origin.