Salome HOME
NPAL 16548, 16820, 16218, 16547 V3_2_9rc1
authordmv <dmv@opencascade.com>
Fri, 16 Nov 2007 10:03:51 +0000 (10:03 +0000)
committerdmv <dmv@opencascade.com>
Fri, 16 Nov 2007 10:03:51 +0000 (10:03 +0000)
43 files changed:
Makefile.in
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
resources/line2faces.png [new file with mode: 0755]
resources/point_line_intersection.png [new file with mode: 0755]
src/BasicGUI/BasicGUI_ArcDlg.cxx
src/BasicGUI/BasicGUI_LineDlg.cxx
src/BasicGUI/BasicGUI_LineDlg.h
src/BasicGUI/BasicGUI_PointDlg.cxx
src/BasicGUI/BasicGUI_PointDlg.h
src/DlgRef/DlgRef_3Sel1Check_QTD.cxx
src/DlgRef/DlgRef_3Sel1Check_QTD.h
src/DlgRef/UIFiles/DlgRef_3Sel1Check_QTD.ui
src/DlgRef/UIFiles/ui_to_cxx
src/GEOMContext/GEOM_icons.po
src/GEOMContext/GEOM_msg_en.po
src/GEOMGUI/GEOM_images.po
src/GEOMGUI/GEOM_msg_en.po
src/GEOMImpl/GEOMImpl_I3DPrimOperations.cxx
src/GEOMImpl/GEOMImpl_I3DPrimOperations.hxx
src/GEOMImpl/GEOMImpl_IBasicOperations.cxx
src/GEOMImpl/GEOMImpl_IBasicOperations.hxx
src/GEOMImpl/GEOMImpl_ILine.hxx
src/GEOMImpl/GEOMImpl_IPoint.hxx
src/GEOMImpl/GEOMImpl_LineDriver.cxx
src/GEOMImpl/GEOMImpl_PointDriver.cxx
src/GEOMImpl/GEOMImpl_PrismDriver.cxx
src/GEOMImpl/GEOMImpl_RevolutionDriver.cxx
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOMToolsGUI/GEOMToolsGUI.cxx
src/GEOM_I/GEOM_I3DPrimOperations_i.cc
src/GEOM_I/GEOM_I3DPrimOperations_i.hh
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/batchmode_geompy.py
src/GEOM_SWIG/geompy.py
src/GenerationGUI/GenerationGUI_PrismDlg.cxx
src/GenerationGUI/GenerationGUI_PrismDlg.h
src/GenerationGUI/GenerationGUI_RevolDlg.cxx
src/GenerationGUI/GenerationGUI_RevolDlg.h
src/GroupGUI/GroupGUI_GroupDlg.cxx

index 4359b01f27fde022b469bc0d9bedd56bbdff78ce..956dd5092d02504a33e517fefc9a8b1b12611950 100644 (file)
@@ -94,6 +94,7 @@ fuse.png \
 geometry.png \
 line.png \
 line2points.png \
+line2faces.png \
 lineedge.png \
 linepointvector.png \
 mindist.png \
@@ -126,6 +127,7 @@ planeworkingvector.png \
 planeworkingorigin.png \
 point2.png \
 pointonedge.png \
+point_line_intersection.png \
 polyline.png \
 prism.png \
 prism2.png \
index fa99c0db3d1e4f90a883c1f65d43952993d68a95..e5c82d5ce761ffd20502cd68e25f749594cf2aa2 100644 (file)
@@ -264,6 +264,13 @@ module GEOM
     GEOM_Object MakePointOnCurve (in GEOM_Object theRefCurve,
                                  in double theParameter);
 
+    /*!
+     *  Create a point, on two lines intersection.
+     *  \param theRefLine1, theRefLine2 The referenced lines.
+     *  \return New GEOM_Object, containing the created point.
+     */
+    GEOM_Object MakePointOnLinesIntersection (in GEOM_Object theRefLine1,
+                                             in GEOM_Object theRefLine2);
     
      /*!
      *  Create a vector, corresponding to tangent to the given parameter on the given curve.
@@ -312,6 +319,14 @@ module GEOM
      */
     GEOM_Object MakeLineTwoPnt (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
 
+    /*!
+     *  Create a line, given by two faces intersection.
+     *  \param theFace1 First of two faces, defining the line.
+     *  \param theFace2 Second of two faces, defining the line.
+     *  \return New GEOM_Object, containing the created line.
+     */
+    GEOM_Object MakeLineTwoFaces (in GEOM_Object theFace1, in GEOM_Object theFace2);
+
     /*!
      *  Create a plane, passing through the three given points
      *  \param thePnt1 First of three points, defining the plane.
@@ -806,6 +821,10 @@ module GEOM
     GEOM_Object MakePrismVecH (in GEOM_Object theBase,
                               in GEOM_Object theVec,
                               in double      theH);
+    /*  The Same Prism but in 2 directions (forward&backward) */
+    GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
+                                   in GEOM_Object theVec,
+                                   in double      theH);
 
     /*!
      *  Create a shape by extrusion of the base shape along a vector, defined by two points.
@@ -817,6 +836,10 @@ module GEOM
     GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
                                 in GEOM_Object thePoint1,
                                 in GEOM_Object thePoint2);
+    /*  The same prism but in two directions forward&backward */
+    GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
+                                     in GEOM_Object thePoint1,
+                                     in GEOM_Object thePoint2);
 
     /*!
      *  Create a shape by extrusion of the base shape along
@@ -839,6 +862,10 @@ module GEOM
     GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
                                         in GEOM_Object theAxis,
                                         in double theAngle);
+    /*  The Same Revolution but in both ways forward&backward */
+    GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
+                                             in GEOM_Object theAxis,
+                                             in double theAngle);
 
     /*!
      *  Create a filling from the given compound of contours.
index e217d4077d9a2a51ff7ca82eaf19a94e3835f97e..dcaecd95f154c65e4c2c4b893ec6640a2bd6440a 100644 (file)
@@ -83,6 +83,8 @@ module GEOM
                                  in GEOM_Object thePnt2) ;
     GEOM_Object MakeLineTwoPnt (in GEOM_Object thePnt1,
                                in GEOM_Object thePnt2) ;
+    GEOM_Object MakeLineTwoFaces (in GEOM_Object theFace1,
+                                 in GEOM_Object theFace2) ;
     GEOM_Object MakePlaneThreePnt (in GEOM_Object thePnt1,
                                   in GEOM_Object thePnt2,
                                   in GEOM_Object thePnt3,
@@ -154,14 +156,23 @@ module GEOM
     GEOM_Object MakePrismVecH (in GEOM_Object theBase,
                               in GEOM_Object theVec,
                               in double      theH) ;
+    GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
+                                   in GEOM_Object theVec,
+                                   in double      theH) ;
     GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
                                 in GEOM_Object thePoint1,
                                 in GEOM_Object thePoint2) ;
+    GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
+                                     in GEOM_Object thePoint1,
+                                     in GEOM_Object thePoint2) ;
     GEOM_Object MakePipe (in GEOM_Object theBase, 
                          in GEOM_Object thePath) ;
     GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
                                         in GEOM_Object theAxis,
                                         in double      theAngle) ;
+    GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
+                                             in GEOM_Object theAxis,
+                                             in double      theAngle) ;
     GEOM_Object MakeFilling (in GEOM_Object theShape,
                             in long theMinDeg, in long theMaxDeg,
                             in double theTol2D, in double theTol3D,
diff --git a/resources/line2faces.png b/resources/line2faces.png
new file mode 100755 (executable)
index 0000000..89c9d26
Binary files /dev/null and b/resources/line2faces.png differ
diff --git a/resources/point_line_intersection.png b/resources/point_line_intersection.png
new file mode 100755 (executable)
index 0000000..31f6c19
Binary files /dev/null and b/resources/point_line_intersection.png differ
index 86ea68832cf04e3b43592b8b4a33c5708e4f6967..11052a67de3c45524e3ad5c4c35c1a41bbcda01f 100644 (file)
@@ -34,6 +34,7 @@
 #include "LightApp_SelectionMgr.h"
 
 #include <qlabel.h>
+#include <qcheckbox.h>
 
 #include "GEOMImpl_Types.hxx"
 
@@ -93,7 +94,7 @@ BasicGUI_ArcDlg::BasicGUI_ArcDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
   Group3Pnts2->PushButton2->setPixmap(image2);
   Group3Pnts2->PushButton3->setPixmap(image2);
 
-  Group3Pnts2->radioButton4->setText(tr("GEOM_REVERSE"));
+  Group3Pnts2->CheckButton1->setText(tr("GEOM_REVERSE"));
 
   Layout1->addWidget( Group3Pnts, 2, 0 );
   Layout1->addWidget( Group3Pnts2, 2, 0 );
@@ -123,7 +124,7 @@ void BasicGUI_ArcDlg::Init()
   /* init variables */
   myEditCurrentArgument = Group3Pnts->LineEdit1;
   myPoint1 = myPoint2 = myPoint3 = GEOM::GEOM_Object::_nil();
-  Group3Pnts2->radioButton4->setChecked(FALSE);
+  Group3Pnts2->CheckButton1->setChecked(FALSE);
 
   /* signals and slots connections */
   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
@@ -151,7 +152,7 @@ void BasicGUI_ArcDlg::Init()
   connect(Group3Pnts2->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(Group3Pnts2->LineEdit3, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
 
-  connect(Group3Pnts2->radioButton4, SIGNAL(stateChanged(int)), this, SLOT(ReverseSense(int)));
+  connect(Group3Pnts2->CheckButton1, SIGNAL(stateChanged(int)), this, SLOT(ReverseSense(int)));
 
   connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
           SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
@@ -427,7 +428,7 @@ bool BasicGUI_ArcDlg::execute( ObjectList& objects )
   case 1:
     {
       bool Sense;
-      (Group3Pnts2->radioButton4->isChecked()) ? Sense = true : Sense = false;
+      (Group3Pnts2->CheckButton1->isChecked()) ? Sense = true : Sense = false;
       if ( !CORBA::is_nil(myPoint1) && !CORBA::is_nil(myPoint2) &&!CORBA::is_nil(myPoint3) )
       {
         anObj = GEOM::GEOM_ICurvesOperations::_narrow(getOperation())->
index f71fc7a18fc900f004c2ec11668c26c9d480f491..117c519f00df2e400d56ce9cfb743a42fb2d7c7b 100644 (file)
@@ -55,26 +55,39 @@ BasicGUI_LineDlg::BasicGUI_LineDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
 {
   QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_DLG_LINE_2P")));
   QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_SELECT")));
+  QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_DLG_LINE_2F")));
 
   setCaption(tr("GEOM_LINE_TITLE"));
 
+  QGroupBox* aFrame = new QGroupBox( 1, Qt::Horizontal, this );
+  aFrame->setInsideMargin( 0 );
+  aFrame->setFrameStyle( QFrame::NoFrame );
+
   /***************************************************************/
   GroupConstructors->setTitle(tr("GEOM_LINE"));
   RadioButton1->setPixmap(image0);
-  RadioButton2->close(TRUE);
+  RadioButton2->setPixmap(image2);
   RadioButton3->close(TRUE);
 
-  GroupPoints = new DlgRef_2Sel_QTD(this, "GroupPoints");
+  GroupPoints = new DlgRef_2Sel_QTD( aFrame, "GroupPoints");
   GroupPoints->GroupBox1->setTitle(tr("GEOM_POINTS"));
   GroupPoints->TextLabel1->setText(tr("GEOM_POINT_I").arg("1"));
   GroupPoints->TextLabel2->setText(tr("GEOM_POINT_I").arg("2"));
   GroupPoints->PushButton1->setPixmap(image1);
   GroupPoints->PushButton2->setPixmap(image1);
-
   GroupPoints->LineEdit1->setReadOnly( true );
   GroupPoints->LineEdit2->setReadOnly( true );
 
-  Layout1->addWidget(GroupPoints, 2, 0);
+  GroupFaces = new DlgRef_2Sel_QTD( aFrame, "GroupFaces");
+  GroupFaces->GroupBox1->setTitle(tr("GEOM_FACES"));
+  GroupFaces->TextLabel1->setText(tr("GEOM_FACE_I").arg("1"));
+  GroupFaces->TextLabel2->setText(tr("GEOM_FACE_I").arg("2"));
+  GroupFaces->PushButton1->setPixmap(image1);
+  GroupFaces->PushButton2->setPixmap(image1);
+  GroupFaces->LineEdit1->setReadOnly( true );
+  GroupFaces->LineEdit2->setReadOnly( true );
+
+  Layout1->addWidget(aFrame, 2, 0);
   /***************************************************************/
 
   setHelpFileName("line.htm");
@@ -110,19 +123,25 @@ void BasicGUI_LineDlg::Init()
   connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
   connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
   connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
+  connect(GroupConstructors, SIGNAL(clicked(int)), this, SLOT(ConstructorsClicked(int)));
 
   connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
   connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
 
   connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupFaces->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupFaces->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
 
   connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(GroupFaces->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(GroupFaces->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
 
   connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
          SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
   
+  ConstructorsClicked (0);
   initName( tr("GEOM_LINE") );
 }
 
@@ -159,6 +178,44 @@ bool BasicGUI_LineDlg::ClickOnApply()
   return true;
 }
 
+//=================================================================================
+// function : ConstructorsClicked()
+// purpose  : Radio button management
+//=================================================================================
+void BasicGUI_LineDlg::ConstructorsClicked(int constructorId)
+{  
+  switch ( constructorId )
+  {
+  case 0:
+    {
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
+      myEditCurrentArgument = GroupPoints->LineEdit1;
+      myEditCurrentArgument->setText("");
+      myPoint1 = GEOM::GEOM_Object::_nil();
+      myPoint2 = GEOM::GEOM_Object::_nil();
+      globalSelection( GEOM_POINT );
+      GroupPoints->show();
+      GroupFaces->hide();
+      break;
+    }
+  case 1:
+    {
+      localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
+      myEditCurrentArgument = GroupFaces->LineEdit1;
+      myEditCurrentArgument->setText("");
+      myFace1 = GEOM::GEOM_Object::_nil();
+      myFace2 = GEOM::GEOM_Object::_nil();
+      globalSelection( GEOM_FACE );
+      GroupPoints->hide();
+      GroupFaces->show();
+      break;
+    }
+   }
+
+  updateGeometry();
+  resize( minimumSize() );
+  SelectionIntoArgument();
+}
 
 //=================================================================================
 // function : SelectionIntoArgument()
@@ -172,6 +229,8 @@ void BasicGUI_LineDlg::SelectionIntoArgument()
   {
     if ( myEditCurrentArgument == GroupPoints->LineEdit1 )      myPoint1 = GEOM::GEOM_Object::_nil();
     else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupFaces->LineEdit1 ) myFace1 = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupFaces->LineEdit2 ) myFace2 = GEOM::GEOM_Object::_nil();
     return;
   }
 
@@ -183,6 +242,8 @@ void BasicGUI_LineDlg::SelectionIntoArgument()
     myEditCurrentArgument->setText( GEOMBase::GetName( aSelectedObject ) );
     if      ( myEditCurrentArgument == GroupPoints->LineEdit1 ) myPoint1 = aSelectedObject;
     else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = aSelectedObject;
+    else if ( myEditCurrentArgument == GroupFaces->LineEdit1 )  myFace1 = aSelectedObject;
+    else if ( myEditCurrentArgument == GroupFaces->LineEdit2 )  myFace2 = aSelectedObject;
   }
   
   displayPreview();
@@ -198,6 +259,8 @@ void BasicGUI_LineDlg::SetEditCurrentArgument()
   QPushButton* send = (QPushButton*)sender();
   if      ( send == GroupPoints->PushButton1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
   else if ( send == GroupPoints->PushButton2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
+  else if ( send == GroupFaces->PushButton1 ) myEditCurrentArgument = GroupFaces->LineEdit1;
+  else if ( send == GroupFaces->PushButton2 ) myEditCurrentArgument = GroupFaces->LineEdit2;
   myEditCurrentArgument->setFocus();
   SelectionIntoArgument();
 }
@@ -212,6 +275,8 @@ void BasicGUI_LineDlg::LineEditReturnPressed()
   QLineEdit* send = (QLineEdit*)sender();
   if      ( send == GroupPoints->LineEdit1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
   else if ( send == GroupPoints->LineEdit2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
+  else if ( send == GroupFaces->LineEdit1 ) myEditCurrentArgument = GroupFaces->LineEdit1;
+  else if ( send == GroupFaces->LineEdit2 ) myEditCurrentArgument = GroupFaces->LineEdit2;
   else return;
   GEOMBase_Skeleton::LineEditReturnPressed();
 }
@@ -235,7 +300,9 @@ void BasicGUI_LineDlg::ActivateThisDialog()
 
   GroupPoints->LineEdit1->setText( "" );
   GroupPoints->LineEdit2->setText( "" );
-  myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
+  GroupFaces->LineEdit1->setText( "" );
+  GroupFaces->LineEdit2->setText( "" );
+  myPoint1 = myPoint2 = myFace1 = myFace2 = GEOM::GEOM_Object::_nil();
 }
 
 //=================================================================================
@@ -273,7 +340,12 @@ GEOM::GEOM_IOperations_ptr BasicGUI_LineDlg::createOperation()
 //=================================================================================
 bool BasicGUI_LineDlg::isValid( QString& msg )
 {
-  return !myPoint1->_is_nil() && !myPoint2->_is_nil();
+  const int id = getConstructorId();
+  if ( id == 0 )
+    return !myPoint1->_is_nil() && !myPoint2->_is_nil();
+  else if ( id == 1 )
+    return !myFace1->_is_nil() && !myFace2->_is_nil();
+  return false;
 }
 
 //=================================================================================
@@ -282,10 +354,27 @@ bool BasicGUI_LineDlg::isValid( QString& msg )
 //=================================================================================
 bool BasicGUI_LineDlg::execute( ObjectList& objects )
 {
-  GEOM::GEOM_Object_var anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoPnt( myPoint1, myPoint2 );
+  bool res = false;
+  GEOM::GEOM_Object_var anObj;
+  switch ( getConstructorId() )
+    {
+    case 0 :
+      {
+       anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoPnt( myPoint1, myPoint2 );
+       res = true;
+       break;
+      }
+    case 1 :
+      {
+       anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoFaces( myFace1, myFace2 );
+       res = true;
+       break;
+      }
+    }
   if ( !anObj->_is_nil() )
     objects.push_back( anObj._retn() );
-  return true;
+
+  return res;
 }
 
 //=================================================================================
index 64fea7f1c3b3b34c4040a82cd8e7a216a2b0e64f..ef0f2bd3737588531efca5a2b921a5fdb27b8bb1 100644 (file)
@@ -64,8 +64,11 @@ private :
 
     GEOM::GEOM_Object_var myPoint1;   
     GEOM::GEOM_Object_var myPoint2;
+    GEOM::GEOM_Object_var myFace1;   
+    GEOM::GEOM_Object_var myFace2;
 
     DlgRef_2Sel_QTD* GroupPoints;
+    DlgRef_2Sel_QTD* GroupFaces;
     
 private slots:
     void ClickOnOk();
@@ -74,7 +77,7 @@ private slots:
 
     void ActivateThisDialog();
     void DeactivateActiveDialog();
-    
+    void ConstructorsClicked(int constructorId);    
     void LineEditReturnPressed();
     void SelectionIntoArgument();
     void SetEditCurrentArgument();
index 755a04b9b66bbb34578658ce17830ed0fbbf7ca0..93d2fb47037b0e044d8189972ae8b1c46396cb76 100644 (file)
@@ -65,6 +65,7 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
   QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_EDGE")));
   QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
   QPixmap image3(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_REF")));
+  QPixmap image4(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_LINES")));
 
   setCaption(tr("GEOM_POINT_TITLE"));
 
@@ -77,6 +78,8 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
   RadioButton1->setPixmap(image0);
   RadioButton2->setPixmap(image3);
   RadioButton3->setPixmap(image1);
+  RadioButton4->show();
+  RadioButton4->setPixmap(image4);
 
   GroupXYZ = new DlgRef_3Spin( aFrame, "GroupXYZ" );
   GroupXYZ->GroupBox1->setTitle(tr("GEOM_COORDINATES"));
@@ -98,6 +101,13 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
   GroupRefPoint->TextLabel3->setText(tr("GEOM_DY"));
   GroupRefPoint->TextLabel4->setText(tr("GEOM_DZ"));
 
+  GroupLineIntersection = new DlgRef_2Sel_QTD (aFrame, "GroupLineIntersection");
+  GroupLineIntersection->GroupBox1->setTitle(tr("GEOM_LINE_INTERSECTION"));
+  GroupLineIntersection->TextLabel1->setText(tr("GEOM_LINE1"));
+  GroupLineIntersection->PushButton1->setPixmap(image2);
+  GroupLineIntersection->TextLabel2->setText(tr("GEOM_LINE2"));
+  GroupLineIntersection->PushButton2->setPixmap(image2);
+  
   Layout1->addWidget( aFrame, 2, 0 );
   /***************************************************************/
 
@@ -146,6 +156,8 @@ void BasicGUI_PointDlg::Init()
 {
   GroupOnCurve->LineEdit1->setReadOnly( true );
   GroupRefPoint->LineEdit1->setReadOnly( true );
+  GroupLineIntersection->LineEdit1->setReadOnly( true );
+  GroupLineIntersection->LineEdit2->setReadOnly( true );
 
   myEdge = GEOM::GEOM_Object::_nil();
   myRefPoint = GEOM::GEOM_Object::_nil();
@@ -186,6 +198,10 @@ void BasicGUI_PointDlg::Init()
 
   connect(GroupOnCurve->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupOnCurve->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(GroupLineIntersection->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupLineIntersection->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupLineIntersection->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+  connect(GroupLineIntersection->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
 
   connect(GroupOnCurve->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
   connect(GroupXYZ->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
@@ -226,9 +242,8 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
 
       GroupRefPoint->hide();
       GroupOnCurve->hide();
-
+      GroupLineIntersection->hide();
       GroupXYZ->show();
-
       myCoordGrp->hide();
       break;
     }
@@ -242,9 +257,8 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
 
       GroupXYZ->hide();
       GroupOnCurve->hide();
-
       GroupRefPoint->show();
-      
+      GroupLineIntersection->hide();      
       myCoordGrp->show();
       break;
     }
@@ -258,12 +272,28 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
 
       GroupXYZ->hide();
       GroupRefPoint->hide();
-
       GroupOnCurve->show();
-      
+      GroupLineIntersection->hide();      
       myCoordGrp->show();
       break;
     }
+  case 3:
+    { 
+      myEditCurrentArgument = GroupLineIntersection->LineEdit1;
+      GroupLineIntersection->LineEdit1->setText("");
+      GroupLineIntersection->LineEdit2->setText("");
+      myLine1 = GEOM::GEOM_Object::_nil();
+      myLine2 = GEOM::GEOM_Object::_nil();
+
+      globalSelection( GEOM_EDGE );
+
+      GroupXYZ->hide();
+      GroupRefPoint->hide();
+      GroupOnCurve->hide();
+      GroupLineIntersection->show();      
+      myCoordGrp->hide();
+      break;
+    }
   }
 
   myX->setText( "" );
@@ -382,6 +412,17 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
         myEdge = aSelectedObject;
         GroupOnCurve->LineEdit1->setText( GEOMBase::GetName( aSelectedObject ) );
       }
+      else if ( id == 3 )
+      {
+       if (myEditCurrentArgument == GroupLineIntersection->LineEdit1) {
+        myLine1 = aSelectedObject;
+        GroupLineIntersection->LineEdit1->setText( GEOMBase::GetName( aSelectedObject ) );
+       }
+       else if (myEditCurrentArgument == GroupLineIntersection->LineEdit2) {
+        myLine2 = aSelectedObject;
+        GroupLineIntersection->LineEdit2->setText( GEOMBase::GetName( aSelectedObject ) );
+       }
+      }
     }
   }
 
@@ -396,7 +437,8 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
 void BasicGUI_PointDlg::LineEditReturnPressed()
 {
   QLineEdit* send = (QLineEdit*)sender();
-  if ( send == GroupRefPoint->LineEdit1 || send == GroupOnCurve->LineEdit1 )
+  if ( send == GroupRefPoint->LineEdit1 || send == GroupOnCurve->LineEdit1 ||
+       send == GroupLineIntersection->LineEdit1 || send == GroupLineIntersection->LineEdit2  )
     {
       myEditCurrentArgument = send;
       GEOMBase_Skeleton::LineEditReturnPressed();
@@ -424,11 +466,24 @@ void BasicGUI_PointDlg::SetEditCurrentArgument()
     GroupOnCurve->LineEdit1->setFocus();
     myEditCurrentArgument = GroupOnCurve->LineEdit1;
     
+    globalSelection( GEOM_EDGE );
+  }
+  else if ( send == GroupLineIntersection->PushButton1 )
+  {
+    GroupLineIntersection->LineEdit1->setFocus();
+    myEditCurrentArgument = GroupLineIntersection->LineEdit1;
+    
+    globalSelection( GEOM_EDGE );
+  }
+  else if ( send == GroupLineIntersection->PushButton2 )
+  {
+    GroupLineIntersection->LineEdit2->setFocus();
+    myEditCurrentArgument = GroupLineIntersection->LineEdit2;
+    
     globalSelection( GEOM_EDGE );
   }
 }
 
-
 //=================================================================================
 // function : enterEvent()
 // purpose  : to reactivate this dialog box when mouse enter onto the window
@@ -519,6 +574,8 @@ bool BasicGUI_PointDlg::isValid( QString& msg )
     return !myRefPoint->_is_nil();
   else if ( id == 2 )
     return !myEdge->_is_nil();
+  else if ( id == 3)
+    return ( !myLine1->_is_nil() && !myLine2->_is_nil() );
   return false;
 }
 
@@ -560,6 +617,11 @@ bool BasicGUI_PointDlg::execute( ObjectList& objects )
       MakePointOnCurve( myEdge, getParameter() );
     res = true;
     break;
+  case 3 :
+    anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->
+      MakePointOnLinesIntersection( myLine1, myLine2 );
+      res = true;
+      break;
   }
 
   if ( getConstructorId() == 1 || getConstructorId() == 2 )
index c47e091125f8607805104689312b63af65d74b3d..cb4b02d60f83262dee98e390c699a5e0e91c98bd 100644 (file)
@@ -31,6 +31,7 @@
 #include "GEOMBase_Skeleton.h"
 #include "DlgRef_1Sel1Spin.h"
 #include "DlgRef_3Spin.h"
+#include "DlgRef_2Sel_QTD.h"
 #include "DlgRef_1Sel3Spin.h"
 
 class QLineEdit;
@@ -73,10 +74,13 @@ private :
 
     GEOM::GEOM_Object_var myEdge;
     GEOM::GEOM_Object_var myRefPoint; 
+    GEOM::GEOM_Object_var myLine1; 
+    GEOM::GEOM_Object_var myLine2;
 
     DlgRef_3Spin*     GroupXYZ;
     DlgRef_1Sel3Spin* GroupRefPoint;
     DlgRef_1Sel1Spin* GroupOnCurve;
+    DlgRef_2Sel_QTD*  GroupLineIntersection;
 
     QGroupBox*        myCoordGrp;
     QLineEdit*        myX;
index a1442eab44c387baa939cf1d64d809c40f6eae5a..e30a066a735e79f29b5ff7088db62c7dcc9fb712 100644 (file)
@@ -1,7 +1,7 @@
 /****************************************************************************
-** Form implementation generated from reading ui file 'UIFiles/DlgRef_3Sel1Check_QTD.ui'
+** Form implementation generated from reading ui file 'DlgRef_3Sel1Check_QTD.ui'
 **
-** Created: Wed Feb 21 10:49:18 2007
+** Created: Mon Oct 29 18:14:59 2007
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
@@ -14,7 +14,7 @@
 #include <qgroupbox.h>
 #include <qlineedit.h>
 #include <qlabel.h>
-#include <qradiobutton.h>
+#include <qcheckbox.h>
 #include <qlayout.h>
 #include <qtooltip.h>
 #include <qwhatsthis.h>
@@ -46,7 +46,7 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
 
     LineEdit1 = new QLineEdit( GroupBox1, "LineEdit1" );
 
-    GroupBox1Layout->addWidget( LineEdit1, 0, 2 );
+    GroupBox1Layout->addMultiCellWidget( LineEdit1, 0, 0, 2, 3 );
 
     TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
     TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
@@ -60,7 +60,7 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
 
     LineEdit2 = new QLineEdit( GroupBox1, "LineEdit2" );
 
-    GroupBox1Layout->addWidget( LineEdit2, 1, 2 );
+    GroupBox1Layout->addMultiCellWidget( LineEdit2, 1, 1, 2, 3 );
 
     TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
     TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
@@ -74,22 +74,22 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
 
     LineEdit3 = new QLineEdit( GroupBox1, "LineEdit3" );
 
-    GroupBox1Layout->addWidget( LineEdit3, 2, 2 );
+    GroupBox1Layout->addMultiCellWidget( LineEdit3, 2, 2, 2, 3 );
 
     TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
     TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
 
     GroupBox1Layout->addWidget( TextLabel3, 2, 0 );
+    Spacer3 = new QSpacerItem( 16, 721, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    GroupBox1Layout->addItem( Spacer3, 4, 3 );
 
-    radioButton4 = new QRadioButton( GroupBox1, "radioButton4" );
+    CheckButton1 = new QCheckBox( GroupBox1, "CheckButton1" );
 
-    GroupBox1Layout->addMultiCellWidget( radioButton4, 3, 3, 0, 1 );
-    Spacer3 = new QSpacerItem( 16, 721, QSizePolicy::Minimum, QSizePolicy::Expanding );
-    GroupBox1Layout->addItem( Spacer3, 4, 2 );
+    GroupBox1Layout->addMultiCellWidget( CheckButton1, 3, 3, 0, 2 );
 
     DlgRef_3Sel1Check_QTDLayout->addWidget( GroupBox1, 0, 0 );
     languageChange();
-    resize( QSize(490, 878).expandedTo(minimumSizeHint()) );
+    resize( QSize(403, 441).expandedTo(minimumSizeHint()) );
     clearWState( WState_Polished );
 
     // tab order
@@ -122,6 +122,6 @@ void DlgRef_3Sel1Check_QTD::languageChange()
     TextLabel2->setText( tr( "TL2" ) );
     PushButton3->setText( QString::null );
     TextLabel3->setText( tr( "TL3" ) );
-    radioButton4->setText( tr( "radioButton4" ) );
+    CheckButton1->setText( tr( "CheckButton1" ) );
 }
 
index 0498e7b298182f79ac724aa674c15de3ff389b57..67fa9c31d43f2a944627cca81bd1edc98612aeb9 100644 (file)
@@ -1,7 +1,7 @@
 /****************************************************************************
-** Form interface generated from reading ui file 'UIFiles/DlgRef_3Sel1Check_QTD.ui'
+** Form interface generated from reading ui file 'DlgRef_3Sel1Check_QTD.ui'
 **
-** Created: Wed Feb 21 10:48:39 2007
+** Created: Mon Oct 29 18:14:59 2007
 **      by: The User Interface Compiler ($Id$)
 **
 ** WARNING! All changes made in this file will be lost!
@@ -21,7 +21,7 @@ class QGroupBox;
 class QPushButton;
 class QLineEdit;
 class QLabel;
-class QRadioButton;
+class QCheckBox;
 
 class DlgRef_3Sel1Check_QTD : public QWidget
 {
@@ -41,7 +41,7 @@ public:
     QPushButton* PushButton3;
     QLineEdit* LineEdit3;
     QLabel* TextLabel3;
-    QRadioButton* radioButton4;
+    QCheckBox* CheckButton1;
 
 protected:
     QGridLayout* DlgRef_3Sel1Check_QTDLayout;
index 6f9ef127c658e43382824e385d03a34357fbbcd4..b14325d36e8a7ab994f9f2e2cf2eb800db8b0381 100644 (file)
@@ -8,8 +8,8 @@
         <rect>
             <x>0</x>
             <y>0</y>
-            <width>490</width>
-            <height>878</height>
+            <width>403</width>
+            <height>441</height>
         </rect>
     </property>
     <property name="sizePolicy">
@@ -74,7 +74,7 @@
                         <string></string>
                     </property>
                 </widget>
-                <widget class="QLineEdit" row="0" column="2">
+                <widget class="QLineEdit" row="0" column="2" rowspan="1" colspan="2">
                     <property name="name">
                         <cstring>LineEdit1</cstring>
                     </property>
                         <string></string>
                     </property>
                 </widget>
-                <widget class="QLineEdit" row="1" column="2">
+                <widget class="QLineEdit" row="1" column="2" rowspan="1" colspan="2">
                     <property name="name">
                         <cstring>LineEdit2</cstring>
                     </property>
                         <string></string>
                     </property>
                 </widget>
-                <widget class="QLineEdit" row="2" column="2">
+                <widget class="QLineEdit" row="2" column="2" rowspan="1" colspan="2">
                     <property name="name">
                         <cstring>LineEdit3</cstring>
                     </property>
                         <string>TL3</string>
                     </property>
                 </widget>
-                <widget class="QRadioButton" row="3" column="0" rowspan="1" colspan="2">
-                    <property name="name">
-                        <cstring>radioButton4</cstring>
-                    </property>
-                    <property name="text">
-                        <string>radioButton4</string>
-                    </property>
-                </widget>
-                <spacer row="4" column="2">
+                <spacer row="4" column="3">
                     <property name="name">
                         <cstring>Spacer3</cstring>
                     </property>
                         </size>
                     </property>
                 </spacer>
+                <widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
+                    <property name="name">
+                        <cstring>CheckButton1</cstring>
+                    </property>
+                    <property name="text">
+                        <string>CheckButton1</string>
+                    </property>
+                </widget>
             </grid>
         </widget>
     </grid>
index 6165851a851b622b05e278e5857aa841b87815b6..477665ff925d661cf2633f314b8c2b68e3d484ac 100755 (executable)
 #uic -o DlgRef_4Sel1Spin2Check_QTD.h DlgRef_4Sel1Spin2Check_QTD.ui
 #uic -o DlgRef_4Sel1Spin2Check_QTD.cxx -impl DlgRef_4Sel1Spin2Check_QTD.h DlgRef_4Sel1Spin2Check_QTD.ui
 
-uic -o DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
-uic -o DlgRef_2Sel3Spin2Rb_QTD.cxx -impl DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
\ No newline at end of file
+#uic -o DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
+#uic -o DlgRef_2Sel3Spin2Rb_QTD.cxx -impl DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
+
+uic -o DlgRef_3Sel1Check_QTD.h DlgRef_3Sel1Check_QTD.ui
+uic -o DlgRef_3Sel1Check_QTD.cxx -impl DlgRef_3Sel1Check_QTD.h DlgRef_3Sel1Check_QTD.ui
\ No newline at end of file
index 2af178b9cdc94614d0ced04cfa7c6f7f9df16188..770de62ce6e02b4ee7c1b502f2f7494d7132e892 100644 (file)
@@ -117,6 +117,10 @@ msgstr "conedxyz.png"
 msgid "ICON_DLG_LINE_2P"
 msgstr "line2points.png"
 
+#LineDlg
+msgid "ICON_DLG_LINE_2F"
+msgstr "line2faces.png"
+
 #LineDlg
 msgid "ICON_DLG_LINE_EDGE"
 msgstr "lineedge.png"
@@ -166,6 +170,10 @@ msgstr "point2.png"
 msgid "ICON_DLG_POINT_EDGE"
 msgstr "pointonedge.png"
 
+#PoinDlg
+msgid "ICON_DLG_POINT_LINES"
+msgstr "point_line_intersection.png"
+
 #ArcDlg
 msgid "ICON_DLG_ARC"
 msgstr "arc.png"
index 9d956d7223e44389fc9c961e3aade3f7f13afa33..6a3bd3ae3c0fe765284fbcd85d90e8af73a8b37a 100644 (file)
@@ -310,6 +310,10 @@ msgstr "Points"
 msgid "GEOM_POINT_I"
 msgstr "Point %1"
 
+#Face i
+msgid "GEOM_FACE_I"
+msgstr "Face %1"
+
 #Arguments
 msgid "GEOM_ARGUMENTS"
 msgstr "Arguments"
@@ -362,6 +366,10 @@ msgstr "Coord. :"
 msgid "GEOM_REVERSE"
 msgstr "Reverse"
 
+#Bothway
+msgid "GEOM_BOTHWAY"
+msgstr "Bothway"
+
 #Reverse U
 msgid "GEOM_REVERSE_U"
 msgstr "Reverse U"
@@ -633,6 +641,14 @@ msgstr "Faces"
 msgid "GEOM_LINE"
 msgstr "Line"
 
+#Line 1
+msgid "GEOM_LINE1"
+msgstr "Line 1"
+
+#Line 2
+msgid "GEOM_LINE2"
+msgstr "Line 2"
+
 #Plane
 msgid "GEOM_PLANE"
 msgstr "Plane"
index 157ec0807755cca7298b670427a128cf0d661dcc..9a93018a8fa769f230a2c409a4f844c983f3079d 100644 (file)
@@ -121,6 +121,10 @@ msgstr "conedxyz.png"
 msgid "ICON_DLG_LINE_2P"
 msgstr "line2points.png"
 
+#LineDlg
+msgid "ICON_DLG_LINE_2F"
+msgstr "line2faces.png"
+
 #LineDlg
 msgid "ICON_DLG_LINE_EDGE"
 msgstr "lineedge.png"
@@ -181,6 +185,10 @@ msgstr "point3.png"
 msgid "ICON_DLG_POINT_EDGE"
 msgstr "pointonedge.png"
 
+#PoinDlg
+msgid "ICON_DLG_POINT_LINES"
+msgstr "point_line_intersection.png"
+
 #ArcDlg
 msgid "ICON_DLG_ARC"
 msgstr "arc.png"
index 722993755b16a13c55e51ade2f72a16e0471fdbe..7b0f7dc80d8994fb8168112f7ec906fe2936d595 100644 (file)
@@ -235,7 +235,7 @@ msgstr "Warning"
 
 #: GeometryGUI.cxx:3854
 msgid "GEOM_REALLY_DELETE"
-msgstr "Do you really want to delete object(s) ?"
+msgstr "Do you really want to delete this %1 object(s): %2"
 
 #
 #==============================================================================
@@ -301,6 +301,10 @@ msgstr "Points"
 msgid "GEOM_POINT_I"
 msgstr "Point %1"
 
+#Face i
+msgid "GEOM_FACE_I"
+msgstr "Face %1"
+
 #Arguments
 msgid "GEOM_ARGUMENTS"
 msgstr "Arguments"
@@ -353,6 +357,10 @@ msgstr "Coord. :"
 msgid "GEOM_REVERSE"
 msgstr "Reverse"
 
+#Bothway
+msgid "GEOM_BOTHWAY"
+msgstr "Bothway"
+
 #Reverse U
 msgid "GEOM_REVERSE_U"
 msgstr "Reverse U"
@@ -678,6 +686,14 @@ msgstr "Face or LCS"
 msgid "GEOM_LINE"
 msgstr "Line"
 
+#Line 1
+msgid "GEOM_LINE1"
+msgstr "Line 1"
+
+#Line 2
+msgid "GEOM_LINE2"
+msgstr "Line 2"
+
 #Plane
 msgid "GEOM_PLANE"
 msgstr "Plane"
@@ -1348,6 +1364,9 @@ msgstr "Parametric point"
 msgid "GEOM_REF_POINT"
 msgstr "Point with reference"
 
+msgid "GEOM_LINE_INTERSECTION"
+msgstr "Point On Lines Intersection"
+
 #
 #==============================================================================
 #
index 2571cae0bcf3674515c4fd473f4b611caed9ef82..6eefda984d37440e759d320cfa42e569db60bb7b 100644 (file)
@@ -692,6 +692,66 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Objec
   return aPrism;
 }
 
+//=============================================================================
+/*!
+ *  MakePrismVecH2Ways
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH2Ways (Handle(GEOM_Object) theBase,
+                                                                   Handle(GEOM_Object) theVec,
+                                                                   double theH)
+{
+  SetErrorCode(KO);
+
+  if (theBase.IsNull() || theVec.IsNull()) return NULL;
+
+  //Add a new Prism object
+  Handle(GEOM_Object) aPrism = GetEngine()->AddObject(GetDocID(), GEOM_PRISM);
+
+  //Add a new Prism function for creation a Prism relatively to vector
+  Handle(GEOM_Function) aFunction =
+    aPrism->AddFunction(GEOMImpl_PrismDriver::GetID(), PRISM_BASE_VEC_H_2WAYS);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_PrismDriver::GetID()) return NULL;
+
+  GEOMImpl_IPrism aCI (aFunction);
+
+  Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
+  Handle(GEOM_Function) aRefVec  = theVec->GetLastFunction();
+
+  if (aRefBase.IsNull() || aRefVec.IsNull()) return NULL;
+
+  aCI.SetBase(aRefBase);
+  aCI.SetVector(aRefVec);
+  aCI.SetH(theH);
+
+  //Compute the Prism value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      //SetErrorCode("Prism driver failed");
+      SetErrorCode("Extrusion can not be created, check input data");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  //Make a Python command
+  GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrismVecH2Ways("
+    << theBase << ", " << theVec << ", " << theH << ")";
+
+  SetErrorCode(OK);
+  return aPrism;
+}
+
 //=============================================================================
 /*!
  *  MakePrismTwoPnt
@@ -753,6 +813,67 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt
   return aPrism;
 }
 
+//=============================================================================
+/*!
+ *  MakePrismTwoPnt2Ways
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt2Ways
+       (Handle(GEOM_Object) theBase,
+        Handle(GEOM_Object) thePoint1, Handle(GEOM_Object) thePoint2)
+{
+  SetErrorCode(KO);
+
+  if (theBase.IsNull() || thePoint1.IsNull() || thePoint2.IsNull()) return NULL;
+
+  //Add a new Prism object
+  Handle(GEOM_Object) aPrism = GetEngine()->AddObject(GetDocID(), GEOM_PRISM);
+
+  //Add a new Prism function for creation a Prism relatively to two points
+  Handle(GEOM_Function) aFunction =
+    aPrism->AddFunction(GEOMImpl_PrismDriver::GetID(), PRISM_BASE_TWO_PNT_2WAYS);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_PrismDriver::GetID()) return NULL;
+
+  GEOMImpl_IPrism aCI (aFunction);
+
+  Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
+  Handle(GEOM_Function) aRefPnt1 = thePoint1->GetLastFunction();
+  Handle(GEOM_Function) aRefPnt2 = thePoint2->GetLastFunction();
+
+  if (aRefBase.IsNull() || aRefPnt1.IsNull() || aRefPnt2.IsNull()) return NULL;
+
+  aCI.SetBase(aRefBase);
+  aCI.SetFirstPoint(aRefPnt1);
+  aCI.SetLastPoint(aRefPnt2);
+
+  //Compute the Prism value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      //SetErrorCode("Prism driver failed");
+      SetErrorCode("Extrusion can not be created, check input data");
+      return NULL;
+    }
+  }
+  catch (Standard_Failure) {
+    Handle(Standard_Failure) aFail = Standard_Failure::Caught();
+    SetErrorCode(aFail->GetMessageString());
+    return NULL;
+  }
+
+  //Make a Python command
+  GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrism2Ways("
+    << theBase << ", " << thePoint1 << ", " << thePoint2 << ")";
+
+  SetErrorCode(OK);
+  return aPrism;
+}
+
 
 //=============================================================================
 /*!
@@ -871,6 +992,63 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle (Handle(
   return aRevolution;
 }
 
+//=============================================================================
+/*!
+ *  MakeRevolutionAxisAngle2Ways
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle2Ways
+                   (Handle(GEOM_Object) theBase, Handle(GEOM_Object) theAxis, double theAngle)
+{
+  SetErrorCode(KO);
+
+  if (theBase.IsNull() || theAxis.IsNull()) return NULL;
+
+  //Add a new Revolution object
+  Handle(GEOM_Object) aRevolution = GetEngine()->AddObject(GetDocID(), GEOM_REVOLUTION);
+
+  //Add a new Revolution function for creation a revolution relatively to axis
+  Handle(GEOM_Function) aFunction =
+    aRevolution->AddFunction(GEOMImpl_RevolutionDriver::GetID(), REVOLUTION_BASE_AXIS_ANGLE_2WAYS);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_RevolutionDriver::GetID()) return NULL;
+
+  GEOMImpl_IRevolution aCI (aFunction);
+
+  Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
+  Handle(GEOM_Function) aRefAxis = theAxis->GetLastFunction();
+
+  if (aRefBase.IsNull() || aRefAxis.IsNull()) return NULL;
+
+  aCI.SetBase(aRefBase);
+  aCI.SetAxis(aRefAxis);
+  aCI.SetAngle(theAngle);
+
+  //Compute the Revolution value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Revolution 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) << aRevolution << " = geompy.MakeRevolution2Ways("
+    << theBase << ", " << theAxis << ", " << theAngle * 180.0 / PI << "*math.pi/180.0)";
+
+  SetErrorCode(OK);
+  return aRevolution;
+}
 
 //=============================================================================
 /*!
index d3d7ba49caf426556a4f731f51c7ab7abcfc15ef..f87ddd5d500a599cfc5e318da3c1f992d94dfa50 100644 (file)
@@ -59,10 +59,17 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakePrismVecH (Handle(GEOM_Object) theBase,
                                      Handle(GEOM_Object) theVec, double theH);
 
+  Standard_EXPORT Handle(GEOM_Object) MakePrismVecH2Ways (Handle(GEOM_Object) theBase,
+                                              Handle(GEOM_Object) theVec, double theH);
+
   Standard_EXPORT Handle(GEOM_Object) MakePrismTwoPnt (Handle(GEOM_Object) theBase,
                                        Handle(GEOM_Object) thePoint1,
                                        Handle(GEOM_Object) thePoint2);
 
+  Standard_EXPORT Handle(GEOM_Object) MakePrismTwoPnt2Ways (Handle(GEOM_Object) theBase,
+                                       Handle(GEOM_Object) thePoint1,
+                                       Handle(GEOM_Object) thePoint2);
+
   Standard_EXPORT Handle(GEOM_Object) MakePipe (Handle(GEOM_Object) theBase,
                                 Handle(GEOM_Object) thePath);
 
@@ -70,6 +77,10 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
                                                Handle(GEOM_Object) theAxis,
                                                double theAngle);
 
+  Standard_EXPORT Handle(GEOM_Object) MakeRevolutionAxisAngle2Ways (Handle(GEOM_Object) theBase,
+                                                                   Handle(GEOM_Object) theAxis,
+                                                                   double theAngle);
+
   Standard_EXPORT Handle(GEOM_Object) MakeSolidShell (Handle(GEOM_Object) theShell);
 
   Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape, int theMinDeg, int theMaxDeg, double theTol2D, double theTol3D, int theNbIter);
index 6ed1de04e75fb247927505a244717e003029fc01..08d1fde184e77359d8d50259c25305b2e53edaa6 100644 (file)
@@ -231,6 +231,60 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointOnCurve
   return aPoint;
 }
 
+//=============================================================================
+/*!
+ *  MakePointOnLinesIntersection
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointOnLinesIntersection
+                            (Handle(GEOM_Object) theLine1, Handle(GEOM_Object) theLine2)
+{
+  SetErrorCode(KO);
+
+  if (theLine1.IsNull() || theLine2.IsNull()) return NULL;
+
+  //Add a new Point object
+  Handle(GEOM_Object) aPoint = GetEngine()->AddObject(GetDocID(), GEOM_POINT);
+
+  //Add a new Point function for creation a point relativley another point
+  Handle(GEOM_Function) aFunction = aPoint->AddFunction(GEOMImpl_PointDriver::GetID(), POINT_LINES_INTERSECTION);
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_PointDriver::GetID()) return NULL;
+
+  GEOMImpl_IPoint aPI (aFunction);
+
+  Handle(GEOM_Function) aRef1 = theLine1->GetLastFunction();
+  Handle(GEOM_Function) aRef2 = theLine2->GetLastFunction();
+  if (aRef1.IsNull() || aRef2.IsNull()) return NULL;
+
+  aPI.SetLine1(aRef1);
+  aPI.SetLine2(aRef2);
+
+  //Compute the point value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Point 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) << aPoint << " = geompy.MakeVertexOnLinesIntersection("
+                               << theLine1 << ", " << theLine2 << ")";
+
+  SetErrorCode(OK);
+  return aPoint;
+}
+
 //=============================================================================
 /*!
  *  MakeTangentOnCurve
@@ -501,6 +555,60 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoPnt
   return aLine;
 }
 
+//=============================================================================
+/*!
+ *  MakeLineTwoFaces
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoFaces
+                     (Handle(GEOM_Object) theFace1, Handle(GEOM_Object) theFace2)
+{
+  SetErrorCode(KO);
+
+  if (theFace1.IsNull() || theFace2.IsNull()) return NULL;
+
+  //Add a new Line object
+  Handle(GEOM_Object) aLine = GetEngine()->AddObject(GetDocID(), GEOM_LINE);
+
+  //Add a new Line function
+  Handle(GEOM_Function) aFunction =
+    aLine->AddFunction(GEOMImpl_LineDriver::GetID(), LINE_TWO_FACES);
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_LineDriver::GetID()) return NULL;
+
+  GEOMImpl_ILine aPI (aFunction);
+
+  Handle(GEOM_Function) aRef1 = theFace1->GetLastFunction();
+  Handle(GEOM_Function) aRef2 = theFace2->GetLastFunction();
+  if (aRef1.IsNull() || aRef2.IsNull()) return NULL;
+
+  aPI.SetFace1(aRef1);
+  aPI.SetFace2(aRef2);
+
+  //Compute the Line value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Line 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) << aLine << " = geompy.MakeLineTwoFaces("
+                               << theFace1 << ", " << theFace2 << ")";
+
+  SetErrorCode(OK);
+  return aLine;
+}
 
 //=============================================================================
 /*!
index 1b44aa4e82d56053271bd1b41ba9acb9ce3f8eda..e6155178bf89a67618f6cfdcce59bd0eec4e96f8 100644 (file)
@@ -41,6 +41,9 @@ class GEOMImpl_IBasicOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakePointOnCurve (Handle(GEOM_Object) theCurve,
                                         double theParameter);
 
+  Standard_EXPORT Handle(GEOM_Object) MakePointOnLinesIntersection
+                                      (Handle(GEOM_Object) theLine1, Handle(GEOM_Object) theLine2);
+
   // Vector
   Standard_EXPORT Handle(GEOM_Object) MakeVectorDXDYDZ (double theDX, double theDY, double theDZ);
 
@@ -54,6 +57,9 @@ class GEOMImpl_IBasicOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakeLineTwoPnt (Handle(GEOM_Object) thePnt1,
                                       Handle(GEOM_Object) thePnt2);
 
+  Standard_EXPORT Handle(GEOM_Object) MakeLineTwoFaces (Handle(GEOM_Object) theFace1,
+                                      Handle(GEOM_Object) theFace2);
+
   Standard_EXPORT Handle(GEOM_Object) MakeLine (Handle(GEOM_Object) thePnt,
                                 Handle(GEOM_Object) theDir);
 
index 09d5fba74d2924edf011e412de17ca62ef39e6d8..99a60b7780b5e3e1e301d7478a78519169c2a33e 100644 (file)
 
 #include "GEOM_Function.hxx"
 
-#define LINE_ARG_PNT1 1
-#define LINE_ARG_PNT2 2
+#define LINE_ARG_PNT1  1
+#define LINE_ARG_PNT2  2
+#define LINE_ARG_FACE1 3
+#define LINE_ARG_FACE2 4
 
 class GEOMImpl_ILine
 {
@@ -33,9 +35,13 @@ class GEOMImpl_ILine
 
   void SetPoint1(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_PNT1, theRef); }
   void SetPoint2(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_PNT2, theRef); }
+  void SetFace1(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_FACE1, theRef); }
+  void SetFace2(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_FACE2, theRef); }
 
   Handle(GEOM_Function) GetPoint1() { return _func->GetReference(LINE_ARG_PNT1); }
   Handle(GEOM_Function) GetPoint2() { return _func->GetReference(LINE_ARG_PNT2); }
+  Handle(GEOM_Function) GetFace1() { return _func->GetReference(LINE_ARG_FACE1); }
+  Handle(GEOM_Function) GetFace2() { return _func->GetReference(LINE_ARG_FACE2); }
 
  private:
 
index 91dd9838389509af16aa807b8bbb889d86987d82..b796a51f5f2a9a58623a2b2d5459fd6f4e1bf635 100755 (executable)
@@ -30,6 +30,8 @@
 
 #define ARG_PARAM 5
 #define ARG_CURVE 6
+#define ARG_LINE1 7
+#define ARG_LINE2 8 
 
 class GEOMImpl_IPoint
 {
@@ -50,8 +52,12 @@ class GEOMImpl_IPoint
   Handle(GEOM_Function) GetRef() { return _func->GetReference(ARG_REF); }
 
   void SetCurve(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_CURVE, theRef); }
+  void SetLine1(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_LINE1, theRef); }
+  void SetLine2(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_LINE2, theRef); }
 
   Handle(GEOM_Function) GetCurve() { return _func->GetReference(ARG_CURVE); }
+  Handle(GEOM_Function) GetLine1() { return _func->GetReference(ARG_LINE1); }
+  Handle(GEOM_Function) GetLine2() { return _func->GetReference(ARG_LINE2); }
 
   void SetParameter(double theParam) { _func->SetReal(ARG_PARAM, theParam); }
 
index a7bf8d433b86970c5addbe27a797b562c6801b8c..4f7b9263c7ba1f0464bea707051609fa0d389fbc 100644 (file)
 
 #include <BRep_Tool.hxx>
 #include <BRepBuilderAPI_MakeEdge.hxx>
-
+#include <BRepAlgoAPI_Section.hxx>
 #include <TopAbs.hxx>
 #include <TopExp.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
 #include <TopoDS_Shape.hxx>
 #include <TopoDS_Vertex.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_MapOfShape.hxx>
 
 #include <gp_Pnt.hxx>
 #include <Precision.hxx>
@@ -92,6 +94,40 @@ Standard_Integer GEOMImpl_LineDriver::Execute(TFunction_Logbook& log) const
     }
     aShape = BRepBuilderAPI_MakeEdge(P1, P2).Shape();
 
+  } else if (aType == LINE_TWO_FACES) {
+    Handle(GEOM_Function) aRefFace1 = aPI.GetFace1();
+    Handle(GEOM_Function) aRefFace2 = aPI.GetFace2();
+    TopoDS_Shape aShape1 = aRefFace1->GetValue();
+    TopoDS_Shape aShape2 = aRefFace2->GetValue();
+    if (aShape1.ShapeType() != TopAbs_FACE ||
+        aShape2.ShapeType() != TopAbs_FACE) {
+      Standard_ConstructionError::Raise("Wrong arguments: two faces must be given");
+    }
+    if (aShape1.IsSame(aShape2)) {
+      Standard_ConstructionError::Raise("The end faces must be different");
+    }
+    BRepAlgoAPI_Section E (aShape1, aShape2, Standard_False);
+    E.Approximation(Standard_True);
+    E.Build();
+    if (!E.IsDone()) {
+      Standard_ConstructionError::Raise("Line can not be performed on the given faces");
+    }
+    else
+    {
+       TopExp_Explorer Exp (E, TopAbs_EDGE);
+       if ( Exp.More() ){
+           aShape = Exp.Current();
+           Exp.Next();
+       }
+       else
+         {
+           Standard_ConstructionError::Raise("Faces not have intersection line");
+           aShape = E.Shape();
+         }
+       if ( Exp.More() )
+         aShape = E.Shape();
+    }
+
   } else if (aType == LINE_PNT_DIR) {
     Handle(GEOM_Function) aRefPnt = aPI.GetPoint1();
     Handle(GEOM_Function) aRefDir = aPI.GetPoint2();
index 3b8f5270d0af87080f26cb561ff61b5a48650fa8..a511c53ea6cc30977f2bafb1c7e5b7238b3d965a 100644 (file)
@@ -27,7 +27,8 @@
 
 #include <BRep_Tool.hxx>
 #include <BRepBuilderAPI_MakeVertex.hxx>
-
+#include <BRepExtrema_DistShapeShape.hxx>
+#include <Precision.hxx>
 #include <TopAbs.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Edge.hxx>
@@ -97,7 +98,34 @@ Standard_Integer GEOMImpl_PointDriver::Execute(TFunction_Logbook& log) const
     aP = aFP + (aLP - aFP) * aPI.GetParameter();
     aPnt = aCurve->Value(aP);
 
-  } else {
+  } else if (aType == POINT_LINES_INTERSECTION) {
+    Handle(GEOM_Function) aRef1 = aPI.GetLine1();
+    Handle(GEOM_Function) aRef2 = aPI.GetLine2();
+
+    TopoDS_Shape aRefShape1 = aRef1->GetValue();
+    TopoDS_Shape aRefShape2 = aRef2->GetValue();
+
+    if (aRefShape1.ShapeType() != TopAbs_EDGE || aRefShape2.ShapeType() != TopAbs_EDGE ) {
+      Standard_TypeMismatch::Raise
+        ("Creation Point On Lines Intersection Aborted : Line shape is not an edge");
+    }
+    //Calculate Lines Intersection Point
+    BRepExtrema_DistShapeShape dst (aRefShape1, aRefShape2);
+    if (dst.IsDone())
+      {
+       gp_Pnt P1, P2;
+       for (int i = 1; i <= dst.NbSolution(); i++) {
+         P1 = dst.PointOnShape1(i);
+         P2 = dst.PointOnShape2(i);
+         Standard_Real Dist = P1.Distance(P2);
+         if ( Dist <= Precision::Confusion() )
+           aPnt = P1;
+         else 
+           Standard_TypeMismatch::Raise ("Lines not have an Intersection Point");
+       }
+      }
+  }
+  else {
     return 0;
   }
 
index 8d049aa56b23fbbe1f044e4f521ecfaa1424b375..1818018b0cd426758df2ab0de57ad8c903bf8131 100644 (file)
@@ -28,6 +28,7 @@
 #include <GEOM_Function.hxx>
 
 #include <BRepPrimAPI_MakePrism.hxx>
+#include <BRepBuilderAPI_Transform.hxx>
 #include <BRep_Tool.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Shape.hxx>
@@ -38,6 +39,8 @@
 
 #include <Precision.hxx>
 #include <gp_Pnt.hxx>
+#include <gp_Trsf.hxx>
+#include <gp_Vec.hxx>
 #include <Standard_ConstructionError.hxx>
 
 //=======================================================================
@@ -93,7 +96,35 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
         }
       }
     }
-  } else if (aType == PRISM_BASE_TWO_PNT) {
+  } else if (aType == PRISM_BASE_VEC_H_2WAYS) {
+    Handle(GEOM_Function) aRefBase = aCI.GetBase();
+    Handle(GEOM_Function) aRefVector = aCI.GetVector();
+    TopoDS_Shape aShapeBase = aRefBase->GetValue();
+    TopoDS_Shape aShapeVec = aRefVector->GetValue();
+    if (aShapeVec.ShapeType() == TopAbs_EDGE) {
+      TopoDS_Edge anE = TopoDS::Edge(aShapeVec);
+      TopoDS_Vertex V1, V2;
+      gp_Trsf aTrsf;
+      gp_Pnt aP1, aP2;
+      TopExp::Vertices(anE, V1, V2, Standard_True);
+      if (!V1.IsNull() && !V2.IsNull()) {
+        gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
+        if (Abs(aCI.GetH()) < Precision::Confusion()) {
+          Standard_ConstructionError::Raise("Absolute value of prism height is too small");
+        }
+        if (aV.Magnitude() > Precision::Confusion()) {
+         gp_Vec aVec;
+          aV.Normalize();
+         aVec.Normalize();
+         aVec  = aV * (-aCI.GetH());
+          aTrsf.SetTranslation(aVec);
+         BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
+         aShapeBase = aTransformation.Shape();
+          aShape = BRepPrimAPI_MakePrism(aShapeBase, (aV * aCI.GetH() * 2), Standard_False).Shape();
+        }
+      }
+    }
+  } else if (aType == PRISM_BASE_TWO_PNT || aType == PRISM_BASE_TWO_PNT_2WAYS) {
     Handle(GEOM_Function) aRefBase = aCI.GetBase();
     Handle(GEOM_Function) aRefPnt1 = aCI.GetFirstPoint();
     Handle(GEOM_Function) aRefPnt2 = aCI.GetLastPoint();
@@ -107,6 +138,14 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
       if (!V1.IsNull() && !V2.IsNull()) {
         gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
         if (aV.Magnitude() > gp::Resolution()) {
+         if (aType == PRISM_BASE_TWO_PNT_2WAYS)
+           {
+             gp_Trsf aTrsf;
+             aTrsf.SetTranslation(-aV);
+             BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
+             aShapeBase = aTransformation.Shape();
+             aV = aV * 2;
+           }
           aShape = BRepPrimAPI_MakePrism(aShapeBase, aV, Standard_False).Shape();
         }
       }
index 2f790ca3ee055a4435d3a86da8324f7dcf52a7e7..9d3d91ca39a462037ca96e69a39d0fd75b7e2396 100644 (file)
@@ -28,6 +28,7 @@
 #include <GEOM_Function.hxx>
 
 #include <BRepPrimAPI_MakeRevol.hxx>
+#include <BRepBuilderAPI_Transform.hxx>
 #include <BRep_Tool.hxx>
 #include <TopoDS.hxx>
 #include <TopoDS_Shape.hxx>
@@ -35,7 +36,7 @@
 #include <TopoDS_Vertex.hxx>
 #include <TopAbs.hxx>
 #include <TopExp.hxx>
-
+#include <gp_Trsf.hxx>
 #include <gp_Pnt.hxx>
 #include <gp_Lin.hxx>
 #include <gp_Dir.hxx>
@@ -77,7 +78,7 @@ Standard_Integer GEOMImpl_RevolutionDriver::Execute(TFunction_Logbook& log) cons
 
   TopoDS_Shape aShape;
 
-  if (aType == REVOLUTION_BASE_AXIS_ANGLE) {
+  if (aType == REVOLUTION_BASE_AXIS_ANGLE || aType == REVOLUTION_BASE_AXIS_ANGLE_2WAYS) {
     Handle(GEOM_Function) aRefBase = aCI.GetBase();
     Handle(GEOM_Function) aRefAxis = aCI.GetAxis();
     TopoDS_Shape aShapeBase = aRefBase->GetValue();
@@ -106,9 +107,17 @@ Standard_Integer GEOMImpl_RevolutionDriver::Execute(TFunction_Logbook& log) cons
        Standard_ConstructionError::Raise("Vertex to be rotated is too close to Revolution Axis");
       }
     }
-
+    double anAngle = aCI.GetAngle();
     gp_Ax1 anAxis (BRep_Tool::Pnt(V1), aV);
-    BRepPrimAPI_MakeRevol MR (aShapeBase, anAxis, aCI.GetAngle(), Standard_False);
+    if (aType == REVOLUTION_BASE_AXIS_ANGLE_2WAYS)
+      {
+       gp_Trsf aTrsf;
+       aTrsf.SetRotation(anAxis, ( -anAngle ));
+       BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
+       aShapeBase = aTransformation.Shape();
+       anAngle = anAngle * 2;
+      }
+    BRepPrimAPI_MakeRevol MR (aShapeBase, anAxis, anAngle, Standard_False);
     if (!MR.IsDone()) MR.Build();
     if (!MR.IsDone()) StdFail_NotDone::Raise("Revolution algorithm has failed");
     aShape = MR.Shape();
index c33d81b14d7f3609fa5ef23362254b4f38632289..be924b3f7d9eed2a21c2f86671ceef0e91a25573 100755 (executable)
 #define EXPORT_SHAPE 1
 #define IMPORT_SHAPE 1
 
-#define POINT_XYZ       1
-#define POINT_XYZ_REF   2
-#define POINT_CURVE_PAR 3
-//#define POINT_FACE_PAR 4
+#define POINT_XYZ                1
+#define POINT_XYZ_REF            2
+#define POINT_CURVE_PAR          3
+#define POINT_LINES_INTERSECTION 4
+//#define POINT_FACE_PAR 5
 
 #define VECTOR_TWO_PNT  1
 #define VECTOR_DX_DY_DZ 2
 #define PLANE_THREE_PNT 3
 #define PLANE_TANGENT_FACE 4
 
-#define LINE_TWO_PNT 1
-#define LINE_PNT_DIR 2
+#define LINE_TWO_PNT   1
+#define LINE_PNT_DIR   2
+#define LINE_TWO_FACES 3
 
 #define TRANSLATE_TWO_POINTS      1
 #define TRANSLATE_VECTOR          2
 #define SPHERE_R     1
 #define SPHERE_PNT_R 2
 
-#define PRISM_BASE_VEC_H   1
-#define PRISM_BASE_TWO_PNT 2
+#define PRISM_BASE_VEC_H         1
+#define PRISM_BASE_TWO_PNT       2
+#define PRISM_BASE_VEC_H_2WAYS   3
+#define PRISM_BASE_TWO_PNT_2WAYS 4
 
-#define REVOLUTION_BASE_AXIS_ANGLE 1
+#define REVOLUTION_BASE_AXIS_ANGLE       1
+#define REVOLUTION_BASE_AXIS_ANGLE_2WAYS 2
 
 #define PIPE_BASE_PATH 1
 #define PIPE_DIFFERENT_SECTIONS 2
index b5dbedc5ef990eec35f0df4e0aaabf6a8c2c6069..75e6d670b5d6c3e5664d493aa851245cc8a4bdc6 100644 (file)
@@ -31,6 +31,7 @@
 #include "GeometryGUI.h"
 #include "GEOM_Actor.h"
 #include "GEOMBase.h"
+
 #include "GEOM_Operation.h"
 #include "GEOM_Displayer.h"
 
@@ -313,10 +314,18 @@ void GEOMToolsGUI::OnEditDelete()
          return;
        }
        // VSR 17/11/04: check if all objects selected belong to GEOM component <-- finish
-
+       QString aNameList;
+       int nbSel = selected.Extent();
+       for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
+         {
+         Handle(SALOME_InteractiveObject) io = It.Value();
+         aNameList.append("\n    - ");
+         aNameList.append(io->getName());
+         }
+       
        if ( SUIT_MessageBox::warn2( app->desktop(),
                                     QObject::tr( "GEOM_WRN_WARNING" ),
-                                    QObject::tr( "GEOM_REALLY_DELETE" ),
+                                    QObject::tr( "GEOM_REALLY_DELETE" ).arg( nbSel ).arg( aNameList ),
                                     QObject::tr( "GEOM_BUT_YES" ),
                                     QObject::tr( "GEOM_BUT_NO" ), 1, 0, 0 ) != 1 )
          return;
index e730e0e0302df5827e339b6463a90785939633ac..276a9d556a1a5623b5c5defb2ca7142db494f2ee 100644 (file)
@@ -349,6 +349,39 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakePrismVecH2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
+                      (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
+                      CORBA::Double theH)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theBase == NULL || theVec == NULL) return aGEOMObject._retn();
+
+  //Get the reference objects
+  Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
+    (theBase->GetStudyID(), theBase->GetEntry());
+  Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject
+    (theVec->GetStudyID(), theVec->GetEntry());
+
+  if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
+
+  //Create the Prism
+  Handle(GEOM_Object) anObject =
+      GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakePrismTwoPnt
@@ -387,6 +420,44 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakePrismTwoPnt2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
+                                             (GEOM::GEOM_Object_ptr theBase,
+                                             GEOM::GEOM_Object_ptr thePoint1,
+                                             GEOM::GEOM_Object_ptr thePoint2)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theBase == NULL || thePoint1 == NULL || thePoint2 == NULL)
+    return aGEOMObject._retn();
+
+  //Get the reference objects
+  Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
+    (theBase->GetStudyID(), theBase->GetEntry());
+  Handle(GEOM_Object) aPoint1 = GetOperations()->GetEngine()->GetObject
+    (thePoint1->GetStudyID(), thePoint1->GetEntry());
+  Handle(GEOM_Object) aPoint2 = GetOperations()->GetEngine()->GetObject
+    (thePoint2->GetStudyID(), thePoint2->GetEntry());
+
+  if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
+    return aGEOMObject._retn();
+
+  //Create the Prism
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakePipe
@@ -452,6 +523,39 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeRevolutionAxisAngle2Ways
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
+                      (GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
+                      CORBA::Double theAngle)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theBase == NULL || theAxis == NULL) return aGEOMObject._retn();
+
+  //Get the reference objects
+  Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
+    (theBase->GetStudyID(), theBase->GetEntry());
+  Handle(GEOM_Object) anAxis = GetOperations()->GetEngine()->GetObject
+    (theAxis->GetStudyID(), theAxis->GetEntry());
+
+  if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
+
+  //Create the Revolution
+  Handle(GEOM_Object) anObject =
+      GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeFilling
index 936fc1330712814ede4796a8b757149202d5f471..5647709468b45c11711fbc7088239eeb36c9f133 100644 (file)
@@ -81,10 +81,18 @@ class GEOM_I3DPrimOperations_i :
                                       GEOM::GEOM_Object_ptr theVec,
                                       CORBA::Double theH);
 
+  GEOM::GEOM_Object_ptr MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
+                                           GEOM::GEOM_Object_ptr theVec,
+                                           CORBA::Double theH);
+
   GEOM::GEOM_Object_ptr MakePrismTwoPnt (GEOM::GEOM_Object_ptr theBase,
                                         GEOM::GEOM_Object_ptr thePoint1,
                                         GEOM::GEOM_Object_ptr thePoint2);
 
+  GEOM::GEOM_Object_ptr MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
+                                             GEOM::GEOM_Object_ptr thePoint1,
+                                             GEOM::GEOM_Object_ptr thePoint2);
+
   GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase,
                                  GEOM::GEOM_Object_ptr thePath);
 
@@ -92,6 +100,10 @@ class GEOM_I3DPrimOperations_i :
                                                 GEOM::GEOM_Object_ptr theAxis,
                                                 CORBA::Double theAngle);
 
+  GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
+                                                     GEOM::GEOM_Object_ptr theAxis,
+                                                     CORBA::Double theAngle);
+
   GEOM::GEOM_Object_ptr MakeFilling(GEOM::GEOM_Object_ptr theShape, CORBA::Long theMinDeg, CORBA::Long theMaxDeg, CORBA::Double theTol2D, CORBA::Double theTol3D, CORBA::Long theNbIter);
 
   GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections,
index 4257ae0a2c60bda215bd9162dac177b4182439d6..fe525509c27373495937fae0c32f2ba904f62d13 100644 (file)
@@ -105,6 +105,39 @@ GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePointWithReference
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakePointOnLinesIntersection
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePointOnLinesIntersection
+                  (GEOM::GEOM_Object_ptr theLine1,  GEOM::GEOM_Object_ptr theLine2)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theLine1 == NULL || theLine2 == NULL) return aGEOMObject._retn();
+
+  //Get the reference Lines
+
+  Handle(GEOM_Object) aRef1 = GetOperations()->GetEngine()->GetObject
+    (theLine1->GetStudyID(), theLine1->GetEntry());
+  Handle(GEOM_Object) aRef2 = GetOperations()->GetEngine()->GetObject
+    (theLine2->GetStudyID(), theLine2->GetEntry());
+  if (aRef1.IsNull() || aRef2.IsNull()) return aGEOMObject._retn();
+
+  //Create the point
+
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakePointOnLinesIntersection(aRef1, aRef2);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakePointOnCurve
@@ -290,6 +323,38 @@ GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakeLineTwoPnt
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeLineTwoFaces
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakeLineTwoFaces
+                 (GEOM::GEOM_Object_ptr theFace1, GEOM::GEOM_Object_ptr theFace2)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (theFace1 == NULL || theFace2 == NULL) return aGEOMObject._retn();
+
+  //Get the reference points
+
+  Handle(GEOM_Object) aRef1 = GetOperations()->GetEngine()->GetObject
+    (theFace1->GetStudyID(), theFace1->GetEntry());
+  Handle(GEOM_Object) aRef2 = GetOperations()->GetEngine()->GetObject
+    (theFace2->GetStudyID(), theFace2->GetEntry());
+  if (aRef1.IsNull() || aRef2.IsNull()) return aGEOMObject._retn();
+
+  //Create the Line
+
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeLineTwoFaces(aRef1, aRef2);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
 
 //=============================================================================
 /*!
index 23ca696e7ea538b3819e4c495f1ac10ece87b852..2915b95348a0d9120a7ac92ac8546eb323aa0f9d 100644 (file)
@@ -52,6 +52,9 @@ class GEOM_IBasicOperations_i :
    GEOM::GEOM_Object_ptr MakePointOnCurve (GEOM::GEOM_Object_ptr theCurve,
                                           CORBA::Double theParameter);
 
+   GEOM::GEOM_Object_ptr MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theLine1,
+                                                      GEOM::GEOM_Object_ptr theLine2);
+
    GEOM::GEOM_Object_ptr MakeTangentOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
                                             CORBA::Double theParameter);
 
@@ -68,6 +71,9 @@ class GEOM_IBasicOperations_i :
    GEOM::GEOM_Object_ptr MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
                                         GEOM::GEOM_Object_ptr thePnt2);
 
+   GEOM::GEOM_Object_ptr MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
+                                          GEOM::GEOM_Object_ptr theFace2);
+
    GEOM::GEOM_Object_ptr MakePlaneThreePnt (GEOM::GEOM_Object_ptr thePnt1,
                                            GEOM::GEOM_Object_ptr thePnt2,
                                            GEOM::GEOM_Object_ptr thePnt3,
index 5694df6da40d7e711721340e27f2710214f50d51..666ec08611870b4bc0b114ff8ac91c81daa2e4e7 100644 (file)
@@ -545,6 +545,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointOnCurve (GEOM::GEOM_Object_ptr the
   return anObj;
 }
 
+//=============================================================================
+//  MakePointOnLinesIntersection:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theRefLine1,
+                                                                  GEOM::GEOM_Object_ptr theRefLine2)
+{
+  beginService( " GEOM_Superv_i::MakePointOnLinesIntersection" );
+  MESSAGE("GEOM_Superv_i::MakePointOnLinesIntersection");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePointOnLinesIntersection(theRefLine1, theRefLine2);
+  endService( " GEOM_Superv_i::MakePointOnLinesIntersection" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakeTangentOnCurve:
 //=============================================================================
@@ -602,6 +616,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePn
   return anObj;
 }
 
+//=============================================================================
+//  MakeLineTwoFaces:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
+                                                      GEOM::GEOM_Object_ptr theFace2)
+{
+  beginService( " GEOM_Superv_i::MakeLineTwoFaces");
+  MESSAGE("GEOM_Superv_i::MakeLineTwoFaces");
+  getBasicOp();
+  GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeLineTwoFaces(theFace1, theFace2);
+  endService( " GEOM_Superv_i::MakeLineTwoFaces");
+  return anObj;
+}
+
 //=============================================================================
 //  MakePlaneThreePnt:
 //=============================================================================
@@ -880,6 +908,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismVecH (GEOM::GEOM_Object_ptr theBas
   return anObj;
 }
 
+//=============================================================================
+//  MakePrismVecH2Ways:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
+                                                        GEOM::GEOM_Object_ptr theVec,
+                                                        CORBA::Double         theH)
+{
+  beginService( " GEOM_Superv_i::MakePrismVecH2Ways" );
+  MESSAGE("GEOM_Superv_i::MakePrismVecH2Ways");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismVecH2Ways(theBase, theVec, theH);
+  endService( " GEOM_Superv_i::MakePrismVecH2Ways" );
+  return anObj;
+}
 
 //=============================================================================
 //  MakePrismTwoPnt:
@@ -896,6 +938,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt (GEOM::GEOM_Object_ptr theB
   return anObj;
 }
 
+//=============================================================================
+//  MakePrismTwoPnt2Ways:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
+                                                          GEOM::GEOM_Object_ptr thePoint1,
+                                                          GEOM::GEOM_Object_ptr thePoint2)
+{
+  beginService( " GEOM_Superv_i::MakePrismTwoPnt2Ways" );
+  MESSAGE("GEOM_Superv_i::MakePrismTwoPnt2Ways");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismTwoPnt2Ways(theBase, thePoint1, thePoint2);
+  endService( " GEOM_Superv_i::MakePrismTwoPnt2Ways" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakePipe:
 //=============================================================================
@@ -925,6 +982,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeRevolutionAxisAngle (GEOM::GEOM_Object_
   return anObj;
 }
 
+//=============================================================================
+//  MakeRevolutionAxisAngle:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
+                                                                  GEOM::GEOM_Object_ptr theAxis,
+                                                                  CORBA::Double theAngle)
+{
+  beginService( " GEOM_Superv_i::MakeRevolutionAxisAngle2Ways" );
+  MESSAGE("GEOM_Superv_i::MakeRevolutionAxisAngle2Ways");
+  get3DPrimOp();
+  GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeRevolutionAxisAngle2Ways(theBase, theAxis, theAngle);
+  endService( " GEOM_Superv_i::MakeRevolutionAxisAngle2Ways" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakeFilling:
 //=============================================================================
index da845122221aa45d2da6d6d6128ab951ba76e789..0d303970496751e0e5a07a2c15078bda6dd62567 100644 (file)
@@ -142,6 +142,8 @@ public:
                                                CORBA::Double theZ);
   GEOM::GEOM_Object_ptr MakePointOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
                                          CORBA::Double theParameter);
+  GEOM::GEOM_Object_ptr MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theRefLine1,
+                                                     GEOM::GEOM_Object_ptr theRefLine2);
   GEOM::GEOM_Object_ptr MakeTangentOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
                                             CORBA::Double theParameter);
   GEOM::GEOM_Object_ptr MakeVectorDXDYDZ (CORBA::Double theDX,
@@ -151,6 +153,8 @@ public:
                                          GEOM::GEOM_Object_ptr thePnt2);
   GEOM::GEOM_Object_ptr MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
                                        GEOM::GEOM_Object_ptr thePnt2);
+  GEOM::GEOM_Object_ptr MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
+                                         GEOM::GEOM_Object_ptr theFace2);
   GEOM::GEOM_Object_ptr MakePlaneThreePnt (GEOM::GEOM_Object_ptr thePnt1,
                                           GEOM::GEOM_Object_ptr thePnt2,
                                           GEOM::GEOM_Object_ptr thePnt3,
@@ -213,14 +217,23 @@ public:
   GEOM::GEOM_Object_ptr MakePrismVecH (GEOM::GEOM_Object_ptr theBase,
                                       GEOM::GEOM_Object_ptr theVec,
                                       CORBA::Double         theH);
+  GEOM::GEOM_Object_ptr MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
+                                           GEOM::GEOM_Object_ptr theVec,
+                                           CORBA::Double         theH);
   GEOM::GEOM_Object_ptr MakePrismTwoPnt (GEOM::GEOM_Object_ptr theBase,
                                         GEOM::GEOM_Object_ptr thePoint1,
                                         GEOM::GEOM_Object_ptr thePoint2);
+  GEOM::GEOM_Object_ptr MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
+                                             GEOM::GEOM_Object_ptr thePoint1,
+                                             GEOM::GEOM_Object_ptr thePoint2);
   GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase, 
                                  GEOM::GEOM_Object_ptr thePath);
   GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle (GEOM::GEOM_Object_ptr theBase,
                                                 GEOM::GEOM_Object_ptr theAxis,
                                                 CORBA::Double theAngle);
+  GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
+                                                     GEOM::GEOM_Object_ptr theAxis,
+                                                     CORBA::Double theAngle);
   GEOM::GEOM_Object_ptr MakeFilling (GEOM::GEOM_Object_ptr theShape,
                                     CORBA::Long theMinDeg, CORBA::Long theMaxDeg,
                                     CORBA::Double theTol2D, CORBA::Double theTol3D,
index 8ea2a03bca6ba4d56e99dd7675ebdbc51c4fd4c7..6485368cfe40729cd577b809f0bf3ca1cdf0a10b 100644 (file)
@@ -394,12 +394,24 @@ def MakePrism(baseShape,point1,point2):
       print "MakePrismTwoPnt : ", PrimOp.GetErrorCode()
     return anObj
 
+def MakePrism2Ways(baseShape,point1,point2):
+    anObj = PrimOp.MakePrismTwoPnt2Ways(baseShape,point1,point2)
+    if PrimOp.IsDone() == 0:
+      print "MakePrismTwoPnt2Ways : ", PrimOp.GetErrorCode()
+    return anObj
+
 def MakePrismVecH(baseShape,vector,height):
     anObj = PrimOp.MakePrismVecH(baseShape,vector,height)
     if PrimOp.IsDone() == 0:
       print "MakePrismVecH : ", PrimOp.GetErrorCode()
     return anObj
 
+def MakePrismVecH2Ways(baseShape,vector,height):
+    anObj = PrimOp.MakePrismVecH2Ways(baseShape,vector,height)
+    if PrimOp.IsDone() == 0:
+      print "MakePrismVecH2Ways : ", PrimOp.GetErrorCode()
+    return anObj
+
 def MakePipe(baseShape,pathShape):
     anObj = PrimOp.MakePipe(baseShape,pathShape)
     if PrimOp.IsDone() == 0:
@@ -412,6 +424,12 @@ def MakeRevolution(aShape,axis,angle):
       print "MakeRevolutionAxisAngle : ", PrimOp.GetErrorCode()
     return anObj
 
+def MakeRevolution2Ways(aShape,axis,angle):
+    anObj = PrimOp.MakeRevolutionAxisAngle2Ways(aShape,axis,angle)
+    if PrimOp.IsDone() == 0:
+      print "MakeRevolutionAxisAngle2Ways : ", PrimOp.GetErrorCode()
+    return anObj
+
 # -----------------------------------------------------------------------------
 # Create base shapes
 # -----------------------------------------------------------------------------
index 7099489f129147cd024872a98b772cac4879352f..aa985f00aa51b2a1726175e0724f8ba2d59db19c 100644 (file)
@@ -667,6 +667,11 @@ def MakePrism(theBase, thePoint1, thePoint2):
     anObj = PrimOp.MakePrismTwoPnt(theBase, thePoint1, thePoint2)
     RaiseIfFailed("MakePrismTwoPnt", PrimOp)
     return anObj
+## The same prism but in two directions forward&backward.
+def MakePrism2Ways(theBase, thePoint1, thePoint2):
+    anObj = PrimOp.MakePrismTwoPnt2Ways(theBase, thePoint1, thePoint2)
+    RaiseIfFailed("MakePrismTwoPnt2Ways", PrimOp)
+    return anObj
 
 ## Create a shape by extrusion of the base shape along the vector,
 #  i.e. all the space, transfixed by the base shape during its translation
@@ -682,6 +687,20 @@ def MakePrismVecH(theBase, theVec, theH):
     RaiseIfFailed("MakePrismVecH", PrimOp)
     return anObj
 
+## Create a shape by extrusion of the base shape along the vector,
+#  i.e. all the space, transfixed by the base shape during its translation
+#  along the vector on the given distance in 2 Ways (forward/backward) .
+#  @param theBase Base shape to be extruded.
+#  @param theVec Direction of extrusion.
+#  @param theH Prism dimension along theVec in forward direction.
+#  @return New GEOM_Object, containing the created prism.
+#
+#  Example: see GEOM_TestAll.py
+def MakePrismVecH2Ways(theBase, theVec, theH):
+    anObj = PrimOp.MakePrismVecH2Ways(theBase, theVec, theH)
+    RaiseIfFailed("MakePrismVecH2Ways", PrimOp)
+    return anObj
+
 ## Create a shape by extrusion of the base shape along
 #  the path shape. The path shape can be a wire or an edge.
 #  @param theBase Base shape to be extruded.
@@ -707,6 +726,11 @@ def MakeRevolution(theBase, theAxis, theAngle):
     anObj = PrimOp.MakeRevolutionAxisAngle(theBase, theAxis, theAngle)
     RaiseIfFailed("MakeRevolutionAxisAngle", PrimOp)
     return anObj
+## The Same Revolution but in both ways forward&backward.
+def MakeRevolution2Ways(theBase, theAxis, theAngle):
+    anObj = PrimOp.MakeRevolutionAxisAngle2Ways(theBase, theAxis, theAngle)
+    RaiseIfFailed("MakeRevolutionAxisAngle2Ways", PrimOp)
+    return anObj
 
 ## Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
 #  @param theSeqSections - set of specified sections.
index c1b1ffe5a1ae707bd58bff6ef9ebc8352be75ce2..61072b77a709b497a9d37b21c519f75ccf1c04b4 100644 (file)
@@ -66,9 +66,9 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
   RadioButton3->close(TRUE);
 
   RadioButton1->setChecked(true);
+  myBothway = myBothway2 = false;
 
   GroupPoints = new DlgRef_2Sel1Spin2Check(this, "GroupPoints");
-  GroupPoints->CheckButton1->hide();
   GroupPoints->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV"));
   GroupPoints->TextLabel1->setText(tr("GEOM_BASE"));
   GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR"));
@@ -77,9 +77,11 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
   GroupPoints->PushButton2->setPixmap(image1);
   GroupPoints->LineEdit1->setReadOnly( true );
   GroupPoints->LineEdit2->setReadOnly( true );
+  GroupPoints->CheckButton1->setText(tr("GEOM_BOTHWAY"));
+  GroupPoints->CheckButton1->setChecked(myBothway);
   GroupPoints->CheckButton2->setText(tr("GEOM_REVERSE"));
 
-  GroupPoints2 = new DlgRef_3Sel_QTD(this, "GroupPoints2");
+  GroupPoints2 = new DlgRef_3Sel1Check_QTD(this, "GroupPoints2");
   GroupPoints2->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV_2P"));
   GroupPoints2->TextLabel1->setText(tr("GEOM_BASE"));
   GroupPoints2->TextLabel2->setText(tr("GEOM_POINT_I").arg("1"));
@@ -87,6 +89,8 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
   GroupPoints2->PushButton1->setPixmap(image1);
   GroupPoints2->PushButton2->setPixmap(image1);
   GroupPoints2->PushButton3->setPixmap(image1);
+  GroupPoints2->CheckButton1->setText(tr("GEOM_BOTHWAY"));
+  GroupPoints2->CheckButton1->setChecked(myBothway2);
 
   Layout1->addWidget(GroupPoints, 2, 0);
   Layout1->addWidget(GroupPoints2, 2, 0);
@@ -150,12 +154,13 @@ void GenerationGUI_PrismDlg::Init()
   connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)),
           GroupPoints->SpinBox_DX, SLOT(SetStep(double)));
 
+  connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
   connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(onReverse()));
 
-
   connect(GroupPoints2->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupPoints2->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(GroupPoints2->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupPoints2->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway2()));
 
   connect(GroupPoints2->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(GroupPoints2->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
@@ -432,7 +437,7 @@ void GenerationGUI_PrismDlg::ValueChangedInSpinBox()
 //=================================================================================
 double GenerationGUI_PrismDlg::getHeight() const
 {
-  return GroupPoints->SpinBox_DX->GetValue();
+    return GroupPoints->SpinBox_DX->GetValue();
 }
 
 //=================================================================================
@@ -451,11 +456,9 @@ GEOM::GEOM_IOperations_ptr GenerationGUI_PrismDlg::createOperation()
 bool GenerationGUI_PrismDlg::isValid( QString& )
 {
   if (getConstructorId() == 0)
-    // by vector and height
-    return (myOkBase && myOkVec);
-
-  // by two points
-  return (myOkBase && myOkPnt1 && myOkPnt2);
+    return (myOkBase && myOkVec);     // by vector and height
+  else
+    return (myOkBase && myOkPnt1 && myOkPnt2);   // by two points
 }
 
 //=================================================================================
@@ -470,14 +473,22 @@ bool GenerationGUI_PrismDlg::execute( ObjectList& objects )
   {
   case 0:
     {
-      anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
-        MakePrismVecH(myBase, myVec, getHeight());
+      if (!myBothway)
+       anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
+         MakePrismVecH(myBase, myVec, getHeight());
+      else
+       anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
+       MakePrismVecH2Ways(myBase, myVec, ( fabs(getHeight()) ) );
       break;
     }
   case 1:
     {
-      anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
+      if (!myBothway2)
+       anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
         MakePrismTwoPnt(myBase, myPoint1, myPoint2);
+      else
+       anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
+        MakePrismTwoPnt2Ways(myBase, myPoint1, myPoint2);
       break;
     }
   }
@@ -497,3 +508,22 @@ void GenerationGUI_PrismDlg::onReverse()
   double anOldValue = GroupPoints->SpinBox_DX->GetValue();
   GroupPoints->SpinBox_DX->SetValue( -anOldValue );
 }
+
+//=================================================================================
+// function :  onBothway()
+// purpose  :  
+//=================================================================================
+void GenerationGUI_PrismDlg::onBothway()
+{
+  bool anOldValue = myBothway;
+  myBothway = !anOldValue;
+  GroupPoints->CheckButton2->setEnabled(!myBothway);
+  displayPreview();
+}
+
+void GenerationGUI_PrismDlg::onBothway2()
+{
+  bool anOldValue = myBothway2;
+  myBothway2 = !anOldValue;
+  displayPreview();
+}
index cf6efe6f44d104b87935765ff915aa33ff16f45a..a8b81837ab745b19806939efeea10dedaf27df4b 100644 (file)
@@ -30,7 +30,7 @@
 
 #include "GEOMBase_Skeleton.h"
 #include "DlgRef_2Sel1Spin2Check.h"
-#include "DlgRef_3Sel_QTD.h"
+#include "DlgRef_3Sel1Check_QTD.h"
 
 //=================================================================================
 // class    : GenerationGUI_PrismDlg
@@ -64,9 +64,11 @@ private:
     bool myOkVec;
     bool myOkPnt1;
     bool myOkPnt2;
+    bool myBothway;
+    bool myBothway2;
 
     DlgRef_2Sel1Spin2Check* GroupPoints;
-    DlgRef_3Sel_QTD* GroupPoints2; // for second layout for extrusion using 2 points
+    DlgRef_3Sel1Check_QTD* GroupPoints2; // for second layout for extrusion using 2 points
 
 private slots:
     void ClickOnOk();
@@ -79,6 +81,8 @@ private slots:
     void SetEditCurrentArgument();
     void ValueChangedInSpinBox();
     void onReverse();
+    void onBothway();
+    void onBothway2();
 };
 
 #endif // DIALOGBOX_PRISM_H
index 1956395acefd6961061edd4a2bb873731ce1be66..7d8a7dc0827d02c4833e92e281cab06c1c64bf37 100644 (file)
@@ -66,9 +66,9 @@ GenerationGUI_RevolDlg::GenerationGUI_RevolDlg(GeometryGUI* theGeometryGUI, QWid
   RadioButton1->setPixmap(image0);
   RadioButton2->close(TRUE);
   RadioButton3->close(TRUE);
+  myBothway = false;
 
   GroupPoints = new DlgRef_2Sel1Spin2Check(this, "GroupPoints");
-  GroupPoints->CheckButton1->hide();
   GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
   GroupPoints->TextLabel1->setText(tr("GEOM_OBJECT"));
   GroupPoints->TextLabel2->setText(tr("GEOM_AXIS"));
@@ -77,6 +77,7 @@ GenerationGUI_RevolDlg::GenerationGUI_RevolDlg(GeometryGUI* theGeometryGUI, QWid
   GroupPoints->PushButton2->setPixmap(image1);
   GroupPoints->LineEdit1->setReadOnly( true );
   GroupPoints->LineEdit2->setReadOnly( true );
+  GroupPoints->CheckButton1->setText(tr("GEOM_BOTHWAY"));
   GroupPoints->CheckButton2->setText(tr("GEOM_REVERSE"));
 
   Layout1->addWidget(GroupPoints, 2, 0);
@@ -128,6 +129,7 @@ void GenerationGUI_RevolDlg::Init()
   connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
 
   connect(GroupPoints->SpinBox_DX,   SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
+  connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)),        this, SLOT(onBothway()));
   connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)),        this, SLOT(onReverse()));
 
   connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_DX, SLOT(SetStep(double)));
@@ -345,8 +347,12 @@ bool GenerationGUI_RevolDlg::execute( ObjectList& objects )
 {
   GEOM::GEOM_Object_var anObj;
 
-  anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
-    getOperation() )->MakeRevolutionAxisAngle( myBase, myAxis, getAngle() * PI180 );
+  if (!myBothway)
+    anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
+      getOperation() )->MakeRevolutionAxisAngle( myBase, myAxis, getAngle() * PI180 );
+  else
+    anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
+      getOperation() )->MakeRevolutionAxisAngle2Ways( myBase, myAxis, getAngle() * PI180 );
 
   if ( !anObj->_is_nil() )
     objects.push_back( anObj._retn() );
@@ -364,3 +370,15 @@ void GenerationGUI_RevolDlg::onReverse()
   double anOldValue = GroupPoints->SpinBox_DX->GetValue();
   GroupPoints->SpinBox_DX->SetValue( -anOldValue );
 }
+
+//=================================================================================
+// function :  onBothway()
+// purpose  :
+//=================================================================================
+void GenerationGUI_RevolDlg::onBothway()
+{
+  bool anOldValue = myBothway;
+  myBothway = !anOldValue;
+  GroupPoints->CheckButton2->setEnabled(!myBothway);  
+  displayPreview();
+}
index 6e99281f81654d3c81d784977093040486e8f20a..0c7d8e5bbdf0d91953f936b15c5134ca15e392c3 100644 (file)
@@ -61,6 +61,7 @@ private :
     GEOM::GEOM_Object_var myAxis; /* Axis of the revolution */
     bool myOkBase; 
     bool myOkAxis;
+    bool myBothway;
 
     DlgRef_2Sel1Spin2Check* GroupPoints;
 
@@ -73,6 +74,7 @@ private slots:
     void SetEditCurrentArgument();
     void ValueChangedInSpinBox();
     void onReverse();
+    void onBothway();
 };
 
 #endif // DIALOGBOX_REVOLUTION_H
index d2fa4198ae2b7cb829090f1e44ac112cec7ad1c9..ef57e4f47e48f450daff35e0c3faa114acd5881c 100644 (file)
@@ -181,6 +181,12 @@ void GroupGUI_GroupDlg::Init()
   connect( myIdList,    SIGNAL( selectionChanged() ), this, SLOT( selectionChanged() ) );
 
   activateSelection();
+  // activate subshapes selection if Main Shape is Selected
+  if ( !CORBA::is_nil( myMainObj ) ) {
+    myEditCurrentArgument = 0;
+    activateSelection();
+    updateState();
+  }
 }
 
 //=================================================================================
@@ -296,7 +302,10 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
       if ( aResult && !anObj->_is_nil() && GEOMBase::IsShape( anObj ) ) {
         myMainObj = anObj;
         myEditCurrentArgument->setText( GEOMBase::GetName( anObj ) );
-        updateState();
+       // activate subshapes selection by default
+       myEditCurrentArgument = 0;
+       activateSelection();
+       updateState();
         return;
       }
     }
@@ -654,7 +663,6 @@ void GroupGUI_GroupDlg::updateState()
           break;
         }
       }
-
       if ( !isAdd ) {
         aMapIndex.Clear();
         break;