]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
NPAL: 16557, 16558, 16578, 16549, 16561 V4_1_0a2
authordmv <dmv@opencascade.com>
Thu, 18 Oct 2007 13:09:07 +0000 (13:09 +0000)
committerdmv <dmv@opencascade.com>
Thu, 18 Oct 2007 13:09:07 +0000 (13:09 +0000)
46 files changed:
idl/GEOM_Gen.idl
idl/GEOM_Superv.idl
resources/Makefile.am
resources/chamferall.png
resources/chamferedge.png
resources/chamferedgefromface.png [new file with mode: 0755]
resources/chamferface.png
resources/circlecenter2pnts.png [new file with mode: 0755]
src/BasicGUI/BasicGUI_CircleDlg.cxx
src/BasicGUI/BasicGUI_CircleDlg.h
src/DlgRef/DlgRef_2Sel3Spin2Rb.cxx [new file with mode: 0755]
src/DlgRef/DlgRef_2Sel3Spin2Rb.h [new file with mode: 0755]
src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.cxx [new file with mode: 0755]
src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.h [new file with mode: 0755]
src/DlgRef/Makefile.am
src/DlgRef/UIFiles/DlgRef_2Sel3Spin2Rb_QTD.ui [new file with mode: 0644]
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_ChamferDriver.cxx
src/GEOMImpl/GEOMImpl_CircleDriver.cxx
src/GEOMImpl/GEOMImpl_FilletDriver.cxx
src/GEOMImpl/GEOMImpl_IChamfer.hxx
src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx
src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx
src/GEOMImpl/GEOMImpl_IFillet.hxx
src/GEOMImpl/GEOMImpl_ILocalOperations.cxx
src/GEOMImpl/GEOMImpl_ILocalOperations.hxx
src/GEOMImpl/GEOMImpl_Types.hxx
src/GEOM_I/GEOM_ICurvesOperations_i.cc
src/GEOM_I/GEOM_ICurvesOperations_i.hh
src/GEOM_I/GEOM_ILocalOperations_i.cc
src/GEOM_I/GEOM_ILocalOperations_i.hh
src/GEOM_I_Superv/GEOM_Superv_i.cc
src/GEOM_I_Superv/GEOM_Superv_i.hh
src/GEOM_SWIG/GEOM_TestAll.py
src/GEOM_SWIG/GEOM_example6.py [new file with mode: 0755]
src/GEOM_SWIG/Makefile.am
src/GEOM_SWIG/batchmode_geompy.py
src/GEOM_SWIG/geompyDC.py
src/OperationGUI/OperationGUI_ChamferDlg.cxx
src/OperationGUI/OperationGUI_ChamferDlg.h
src/OperationGUI/OperationGUI_FilletDlg.cxx
src/OperationGUI/OperationGUI_FilletDlg.h

index 256df8ce5219136c9fa90058827297cf4d0d0e88..9c161c2e3951dd576a59203af9a1d41287ef33ad 100644 (file)
@@ -1792,7 +1792,15 @@ module GEOM
     GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
                                    in GEOM_Object thePnt2,
                                    in GEOM_Object thePnt3);
-
+/*!
+     *  Create a circle with given center, with a radius equals the distance from center to Point1
+     *  and on a plane defined by all of three points.
+     *  \param thePnt1,thePnt2,thePnt3 Points, defining the circle.
+     *  \return New GEOM_Object, containing the created circle.
+     */
+    GEOM_Object MakeCircleCenter2Pnt (in GEOM_Object thePnt1,
+                                     in GEOM_Object thePnt2,
+                                     in GEOM_Object thePnt3);
     /*!
      *  Create an ellipse with given center, normal vector and radiuses.
      *  \param thePnt Ellipse center.
@@ -1926,7 +1934,10 @@ module GEOM
     GEOM_Object MakeFilletEdges (in GEOM_Object theShape,
                                 in double      theR,
                                 in ListOfLong  theEdges);
-
+    GEOM_Object MakeFilletEdgesR1R2 (in GEOM_Object theShape,
+                                    in double      theR1,
+                                    in double      theR2,
+                                    in ListOfLong  theEdges);
     /*!
      *  Perform a fillet on all edges of the specified faces of the given shape.
      *  \param theShape Shape, to perform fillet on.
@@ -1939,7 +1950,10 @@ module GEOM
     GEOM_Object MakeFilletFaces (in GEOM_Object theShape,
                                 in double      theR,
                                 in ListOfLong  theFaces);
-
+    GEOM_Object MakeFilletFacesR1R2 (in GEOM_Object theShape,
+                                    in double      theR1,
+                                    in double      theR2,
+                                    in ListOfLong  theFaces);
     /*!
      *  Perform a symmetric chamfer on all edges of the given shape.
      *  \param theShape Shape, to perform chamfer on.
@@ -1963,7 +1977,13 @@ module GEOM
     GEOM_Object MakeChamferEdge (in GEOM_Object theShape,
                                 in double theD1, in double theD2,
                                 in long theFace1, in long theFace2);
-
+    /*! 
+     *  The Same but with params theD = Chamfer Lenght
+     *  and theAngle = Chamfer Angle (Angle in radians)
+     */
+    GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
+                                  in double theD, in double theAngle,
+                                  in long theFace1, in long theFace2);
     /*!
      *  Perform a chamfer on all edges of the specified faces.
      *  with distance D1 on the first specified face (if several for one edge)
@@ -1980,7 +2000,32 @@ module GEOM
     GEOM_Object MakeChamferFaces (in GEOM_Object theShape,
                                  in double theD1, in double theD2,
                                  in ListOfLong theFaces);
-
+    /*! 
+     *  The Same but with params theD = Chamfer Lenght
+     *  and theAngle = Chamfer Angle (Angle in radians)
+     */
+    GEOM_Object MakeChamferFacesAD (in GEOM_Object theShape,
+                                   in double theD, in double theAngle,
+                                   in ListOfLong theFaces);
+
+   /*!
+    *  Perform a chamfer on edges,
+    *  with distance D1 on the first specified face (if several for one edge)
+    *  \param theShape Shape, to perform chamfer on.
+    *  \param theD1 theD2 Chamfer size
+    *  \param theEdges Sequence of edges of \a theShape.
+    *  \return New GEOM_Object, containing the result shape.
+    */
+    GEOM_Object MakeChamferEdges (in GEOM_Object theShape,
+                                 in double theD1, in double theD2,
+                                 in ListOfLong theEdges);
+    /*! 
+     *  The Same but with params theD = Chamfer Lenght
+     *  and theAngle = Chamfer Angle (Angle in radians)
+     */
+    GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
+                                   in double theD, in double theAngle,
+                                   in ListOfLong theEdges);
     /*!
      *  Perform an Archimde operation on the given shape with given parameters.
      *                    The object presenting the resulting face is returned
index 4ad14db98f405e221cf56fdcfd7537b30666cad0..7eaab4b6c81a5654b50aeadc0441a0396011dc3e 100644 (file)
@@ -411,6 +411,9 @@ module GEOM
     GEOM_Object MakeCircleThreePnt (in GEOM_Object thePnt1,
                                    in GEOM_Object thePnt2,
                                    in GEOM_Object thePnt3) ;
+    GEOM_Object MakeCircleCenter2Pnt (in GEOM_Object thePnt1,
+                                     in GEOM_Object thePnt2,
+                                     in GEOM_Object thePnt3) ;
     GEOM_Object MakeEllipse (in GEOM_Object thePnt,
                             in GEOM_Object theVec,
                             in double      theRMajor,
@@ -436,17 +439,37 @@ module GEOM
     GEOM_Object MakeFilletEdges (in GEOM_Object theShape,
                                 in double      theR,
                                 in GEOM_List   theEdges) ;
+    GEOM_Object MakeFilletEdgesR1R2 (in GEOM_Object theShape,
+                                    in double      theR1,
+                                    in double      theR2,
+                                    in GEOM_List   theEdges) ;
     GEOM_Object MakeFilletFaces (in GEOM_Object theShape,
                                 in double      theR,
                                 in GEOM_List   theFaces) ;
+    GEOM_Object MakeFilletFacesR1R2 (in GEOM_Object theShape,
+                                    in double      theR1,
+                                    in double      theR2,
+                                    in GEOM_List   theFaces) ;
     GEOM_Object MakeChamferAll (in GEOM_Object theShape,
                                in double      theD) ;
     GEOM_Object MakeChamferEdge (in GEOM_Object theShape,
                                 in double theD1, in double theD2,
                                 in long theFace1, in long theFace2) ;
+    GEOM_Object MakeChamferEdgeAD (in GEOM_Object theShape,
+                                  in double theD, in double theAngle,
+                                  in long theFace1, in long theFace2) ;
     GEOM_Object MakeChamferFaces (in GEOM_Object theShape,
                                  in double theD1, in double theD2,
                                  in GEOM_List theFaces) ;
+    GEOM_Object MakeChamferFacesAD (in GEOM_Object theShape,
+                                   in double theD, in double theAngle,
+                                   in GEOM_List theFaces) ;
+    GEOM_Object MakeChamferEdges (in GEOM_Object theShape,
+                                 in double theD1, in double theD2,
+                                 in GEOM_List theEdges) ;
+    GEOM_Object MakeChamferEdgesAD (in GEOM_Object theShape,
+                                   in double theD, in double theAngle,
+                                   in GEOM_List theEdges) ;
     GEOM_Object MakeArchimede (in GEOM_Object theShape,
                               in double      theWeight,
                               in double      theWaterDensity,
index 273ff97138585536a1bdac43b15ca7b76d69cb44..9db0990858f7066f483f31d218646d7ff6ef2eb3 100644 (file)
@@ -55,11 +55,13 @@ chamfer.png \
 chamferall.png \
 chamferedge.png \
 chamferface.png \
+chamferedgefromface.png \
 change_orientation.png \
 check.png \
 circle.png \
 circlepointvector.png \
 circle3points.png \
+circlecenter2pnts.png \
 common.png \
 cone.png \
 conedxyz.png \
index c90b6740ee7c5d52d46bb167e5cf423353a41e44..7fdbd13256086392e51f32832f660bf448ea2eb1 100644 (file)
Binary files a/resources/chamferall.png and b/resources/chamferall.png differ
index e8d5ccd579df606e77d6e7355ce281fadce21507..c6ea12222f96e37e922ec887b0a595a6b67e8aec 100644 (file)
Binary files a/resources/chamferedge.png and b/resources/chamferedge.png differ
diff --git a/resources/chamferedgefromface.png b/resources/chamferedgefromface.png
new file mode 100755 (executable)
index 0000000..816125a
Binary files /dev/null and b/resources/chamferedgefromface.png differ
index 4e3f36b25f47ef5667acc116e9ad160b66c79f49..68d5959cda5991c7b428dd6702b3082fa8013d01 100644 (file)
Binary files a/resources/chamferface.png and b/resources/chamferface.png differ
diff --git a/resources/circlecenter2pnts.png b/resources/circlecenter2pnts.png
new file mode 100755 (executable)
index 0000000..7b3daa2
Binary files /dev/null and b/resources/circlecenter2pnts.png differ
index 42c3e5aa5ff0cb4aa33b11b20886d03a270f6846..83b2591667b9a8169367ecabf183d5350f9ddf72 100644 (file)
@@ -36,7 +36,6 @@
 #include <qlabel.h>
 
 #include "GEOMImpl_Types.hxx"
-
 #include "utilities.h"
 
 //=================================================================================
@@ -53,6 +52,7 @@ BasicGUI_CircleDlg::BasicGUI_CircleDlg(GeometryGUI* theGeometryGUI, QWidget* par
 {
   QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CIRCLE_PV")));
   QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CIRCLE_PNTS")));
+  QPixmap image3(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CIRCLE_C2P")));
   QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
 
   setCaption(tr("GEOM_CIRCLE_TITLE"));
@@ -61,7 +61,7 @@ BasicGUI_CircleDlg::BasicGUI_CircleDlg(GeometryGUI* theGeometryGUI, QWidget* par
   GroupConstructors->setTitle(tr("GEOM_CIRCLE"));
   RadioButton1->setPixmap(image0);
   RadioButton2->setPixmap(image2);
-  RadioButton3->close(TRUE);
+  RadioButton3->setPixmap(image3);
 
   GroupPntVecR = new DlgRef_2Sel1Spin(this, "GroupPntVecR");
   GroupPntVecR->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
@@ -88,8 +88,22 @@ BasicGUI_CircleDlg::BasicGUI_CircleDlg(GeometryGUI* theGeometryGUI, QWidget* par
   Group3Pnts->LineEdit2->setReadOnly( true );
   Group3Pnts->LineEdit3->setReadOnly( true );
 
+  GroupCenter2Pnts = new DlgRef_3Sel_QTD(this, "GroupCenter2Pnts");
+  GroupCenter2Pnts->GroupBox1->setTitle(tr("GEOM_CENTER_2POINTS"));
+  GroupCenter2Pnts->TextLabel1->setText(tr("GEOM_CENTER_POINT"));
+  GroupCenter2Pnts->TextLabel2->setText(tr("GEOM_POINT1"));
+  GroupCenter2Pnts->TextLabel3->setText(tr("GEOM_POINT2"));
+  GroupCenter2Pnts->PushButton1->setPixmap(image1);
+  GroupCenter2Pnts->PushButton2->setPixmap(image1);
+  GroupCenter2Pnts->PushButton3->setPixmap(image1);
+
+  GroupCenter2Pnts->LineEdit1->setReadOnly( true );
+  GroupCenter2Pnts->LineEdit2->setReadOnly( true );
+  GroupCenter2Pnts->LineEdit3->setReadOnly( true );
+
   Layout1->addWidget( GroupPntVecR, 2, 0 );
   Layout1->addWidget( Group3Pnts, 2, 0 );
+  Layout1->addWidget( GroupCenter2Pnts, 2, 0 );
   /***************************************************************/
 
   setHelpFileName("circle.htm");
@@ -143,6 +157,10 @@ void BasicGUI_CircleDlg::Init()
   connect(Group3Pnts->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
   connect(Group3Pnts->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
 
+  connect(GroupCenter2Pnts->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupCenter2Pnts->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+  connect(GroupCenter2Pnts->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+
   connect(GroupPntVecR->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
   connect(GroupPntVecR->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
 
@@ -155,6 +173,7 @@ void BasicGUI_CircleDlg::Init()
   initName( tr( "GEOM_CIRCLE" ) );
 
   Group3Pnts->hide();
+  GroupCenter2Pnts->hide();
   ConstructorsClicked( 0 );
 }
 
@@ -172,6 +191,7 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId )
     case 0:
       {
        Group3Pnts->hide();
+       GroupCenter2Pnts->hide();
        resize(0, 0);
        GroupPntVecR->show();
        
@@ -183,6 +203,7 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId )
   case 1:
     {
       GroupPntVecR->hide();
+      GroupCenter2Pnts->hide();
       resize( 0, 0 );
       Group3Pnts->show();
       
@@ -192,6 +213,19 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId )
       Group3Pnts->LineEdit3->setText("");
       break;
       }
+   case 2:
+      {
+       GroupPntVecR->hide();
+        Group3Pnts->hide();            
+        resize( 0, 0 );
+        GroupCenter2Pnts->show();
+
+       myEditCurrentArgument = GroupCenter2Pnts->LineEdit1;
+       GroupCenter2Pnts->LineEdit1->setText("");
+        GroupCenter2Pnts->LineEdit2->setText("");
+        GroupCenter2Pnts->LineEdit3->setText("");
+        break;
+      }
   }
   
   myEditCurrentArgument->setFocus();
@@ -248,6 +282,9 @@ void BasicGUI_CircleDlg::SelectionIntoArgument()
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit1 )   myPoint1 = GEOM::GEOM_Object::_nil();
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit2 )   myPoint2 = GEOM::GEOM_Object::_nil();
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit3 )   myPoint3 = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit1 ) myPoint4  = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit2 ) myPoint5  = GEOM::GEOM_Object::_nil();
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit3 ) myPoint6  = GEOM::GEOM_Object::_nil();
     return;
   }
 
@@ -255,15 +292,18 @@ void BasicGUI_CircleDlg::SelectionIntoArgument()
   Standard_Boolean aRes = Standard_False;
   GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aRes );
   if ( !CORBA::is_nil( aSelectedObject ) && aRes )
-  {  
+  { 
     myEditCurrentArgument->setText( GEOMBase::GetName( aSelectedObject ) );
     if      ( myEditCurrentArgument == GroupPntVecR->LineEdit1 ) myPoint  = aSelectedObject;
     else if ( myEditCurrentArgument == GroupPntVecR->LineEdit2 ) myDir    = aSelectedObject;
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit1 )   myPoint1 = aSelectedObject;
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit2 )   myPoint2 = aSelectedObject;
     else if ( myEditCurrentArgument == Group3Pnts->LineEdit3 )   myPoint3 = aSelectedObject;
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit1 ) myPoint4 = aSelectedObject;
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit2 ) myPoint5 = aSelectedObject;
+    else if ( myEditCurrentArgument == GroupCenter2Pnts->LineEdit3 ) myPoint6 = aSelectedObject;
   }
-
   displayPreview();
 }
 
@@ -281,6 +321,9 @@ void BasicGUI_CircleDlg::SetEditCurrentArgument()
   else if ( send == Group3Pnts->PushButton1 )   myEditCurrentArgument = Group3Pnts->LineEdit1;
   else if ( send == Group3Pnts->PushButton2 )   myEditCurrentArgument = Group3Pnts->LineEdit2;
   else if ( send == Group3Pnts->PushButton3 )   myEditCurrentArgument = Group3Pnts->LineEdit3;
+  else if ( send == GroupCenter2Pnts->PushButton1 )   myEditCurrentArgument = GroupCenter2Pnts->LineEdit1;
+  else if ( send == GroupCenter2Pnts->PushButton2 )   myEditCurrentArgument = GroupCenter2Pnts->LineEdit2;
+  else if ( send == GroupCenter2Pnts->PushButton3 )   myEditCurrentArgument = GroupCenter2Pnts->LineEdit3;
   
   myEditCurrentArgument->setFocus();
   
@@ -302,7 +345,10 @@ void BasicGUI_CircleDlg::LineEditReturnPressed()
        send == GroupPntVecR->LineEdit2 ||
        send == Group3Pnts->LineEdit1 ||
        send == Group3Pnts->LineEdit2 ||
-       send == Group3Pnts->LineEdit3 )
+       send == Group3Pnts->LineEdit3 ||
+       send == GroupCenter2Pnts->LineEdit1 ||
+       send == GroupCenter2Pnts->LineEdit2 ||
+       send == GroupCenter2Pnts->LineEdit3 )
   {
     myEditCurrentArgument = send;
     GEOMBase_Skeleton::LineEditReturnPressed();
@@ -362,7 +408,11 @@ void BasicGUI_CircleDlg::ValueChangedInSpinBox()
 //=================================================================================
 double BasicGUI_CircleDlg::getRadius() const
 {
-  return GroupPntVecR->SpinBox_DX->GetValue();
+  switch ( getConstructorId() )
+    {
+    case 0 :
+      return GroupPntVecR->SpinBox_DX->GetValue();
+    }
 }
 
 //=================================================================================
@@ -395,6 +445,9 @@ bool BasicGUI_CircleDlg::isValid( QString& msg )
   else if ( id == 1 )
     return !myPoint1->_is_nil() && !myPoint2->_is_nil() && !myPoint3->_is_nil() &&
       !isEqual( myPoint1, myPoint2 ) && !isEqual( myPoint1, myPoint3 ) && !isEqual( myPoint2, myPoint3 );
+  else if ( id == 2 )
+      return !myPoint4->_is_nil() && !myPoint5->_is_nil() && !myPoint6->_is_nil() &&
+      !isEqual( myPoint4, myPoint5 ) && !isEqual( myPoint5, myPoint6 ) && !isEqual( myPoint4, myPoint6 );
   return false;
 }
 
@@ -410,6 +463,7 @@ bool BasicGUI_CircleDlg::execute( ObjectList& objects )
   
   switch ( getConstructorId() )
   {
+    cout << "constructior ID = " << getConstructorId() << endl;
   case 0 :
     anObj = GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeCirclePntVecR( myPoint, myDir, getRadius() );
     res = true;
@@ -418,10 +472,15 @@ bool BasicGUI_CircleDlg::execute( ObjectList& objects )
     anObj = GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeCircleThreePnt( myPoint1, myPoint2, myPoint3 );
     res = true;
     break;
+  case 2 :
+    anObj = GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeCircleCenter2Pnt( myPoint4, myPoint5, myPoint6 );
+    res = true;
+    break;
   }
   
   if ( !anObj->_is_nil() )
     objects.push_back( anObj._retn() );
+  else cout << "Execute Object is NULL!" << endl;
   
   return res;
 }
index fb0f51315100ac5efbf3cef90095103b32a15fa6..3bf6e2015cb6ee003c5f3a5545e12219cb3050e6 100644 (file)
@@ -62,11 +62,12 @@ private:
     void   enterEvent(QEvent* e);
     double getRadius() const;
 
-    GEOM::GEOM_Object_var myPoint, myDir, myPoint1, myPoint2, myPoint3;
+    GEOM::GEOM_Object_var myPoint, myDir, myPoint1, myPoint2, myPoint3, myPoint4, myPoint5, myPoint6;
+    CORBA::Double myRadius;
 
     DlgRef_2Sel1Spin* GroupPntVecR;
     DlgRef_3Sel_QTD*  Group3Pnts;
-
+    DlgRef_3Sel_QTD*  GroupCenter2Pnts;
 private slots:
     void ClickOnOk();
     void ClickOnCancel();
diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb.cxx b/src/DlgRef/DlgRef_2Sel3Spin2Rb.cxx
new file mode 100755 (executable)
index 0000000..a17d55e
--- /dev/null
@@ -0,0 +1,41 @@
+//  File   : DlgRef_2Sel2Spin.cxx\r
+//  Author : Dmitry MATVEITCHEV\r
+//  Module : GEOM\r
+//  $Header: \r
+\r
+#include "DlgRef_2Sel3Spin2Rb.h"\r
+#include <iostream.h>\r
+\r
+#include <qlayout.h>\r
+#include <qspinbox.h>\r
+#include <qgroupbox.h>\r
+#include <qradiobutton.h>\r
+\r
+/* \r
+ *  Constructs a DlgRef_2Sel3Spin2Rb which is a child of 'parent', with the \r
+ *  name 'name' and widget flags set to 'f' \r
+ */\r
+DlgRef_2Sel3Spin2Rb::DlgRef_2Sel3Spin2Rb(QWidget* parent,  const char* name, WFlags fl)\r
+  :DlgRef_2Sel3Spin2Rb_QTD(parent, name, fl)\r
+{\r
+  SpinBox1->close(TRUE);\r
+  SpinBox2->close(TRUE);\r
+  SpinBox3->close(TRUE);\r
+  RadioButton1->setChecked(true);\r
+  SpinBox_DX = new DlgRef_SpinBox(GroupBox1, "SpinBox_DX");\r
+  Layout2->addMultiCellWidget(SpinBox_DX, 0, 0, 2, 4);\r
+  SpinBox_DY = new DlgRef_SpinBox(GroupBox1, "SpinBox_DY");\r
+  Layout2->addWidget(SpinBox_DY, 1, 2);\r
+  SpinBox_DZ = new DlgRef_SpinBox(GroupBox1, "SpinBox_DZ");\r
+  Layout2->addWidget(SpinBox_DZ, 1, 4);\r
+  SpinBox_DY->setEnabled(false);\r
+  SpinBox_DZ->setEnabled(false);\r
+}\r
+\r
+/*  \r
+ *  Destroys the object and frees any allocated resources\r
+ */\r
+DlgRef_2Sel3Spin2Rb::~DlgRef_2Sel3Spin2Rb()\r
+{\r
+    // no need to delete child widgets, Qt does it all for us\r
+}\r
diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb.h b/src/DlgRef/DlgRef_2Sel3Spin2Rb.h
new file mode 100755 (executable)
index 0000000..e651662
--- /dev/null
@@ -0,0 +1,34 @@
+//  File   : DlgRef_2Sel3Spin2Rb.h\r
+//  Author : Dmitry MATVEITCHEV\r
+//  Module : GEOM\r
+//  $Header: \r
+\r
+#ifndef DLGREF_2SEL3SPIN2RB_H\r
+#define DLGREF_2SEL3SPIN2RB_H\r
+\r
+#include "DlgRef_2Sel3Spin2Rb_QTD.h"\r
+#include "DlgRef_SpinBox.h"\r
+//#if defined WNT \r
+//#include <SALOME_WNT.hxx>\r
+//#else\r
+//#define SALOME_WNT_EXPORT\r
+//#endif\r
+#if defined WNT && defined WIN32 && defined SALOME_WNT_EXPORTS\r
+#define DLGREF_WNT_EXPORT __declspec( dllexport )\r
+#else\r
+#define DLGREF_WNT_EXPORT\r
+#endif\r
+class DLGREF_WNT_EXPORT DlgRef_2Sel3Spin2Rb : public DlgRef_2Sel3Spin2Rb_QTD\r
+{ \r
+    Q_OBJECT\r
+\r
+public:\r
+    DlgRef_2Sel3Spin2Rb(QWidget* parent = 0, const char* name = 0, WFlags fl = 0);\r
+    ~DlgRef_2Sel3Spin2Rb();\r
+\r
+    DlgRef_SpinBox* SpinBox_DX;\r
+    DlgRef_SpinBox* SpinBox_DY;\r
+    DlgRef_SpinBox* SpinBox_DZ;\r
+};\r
+\r
+#endif // DLGREF_2SEL3SPIN2RB_H\r
diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.cxx b/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.cxx
new file mode 100755 (executable)
index 0000000..bcbd3d6
--- /dev/null
@@ -0,0 +1,129 @@
+/****************************************************************************
+** Form implementation generated from reading ui file 'DlgRef_2Sel3Spin2Rb_QTD.ui'
+**
+** Created: Tue Oct 9 15:16:54 2007
+**      by: The User Interface Compiler ($Id$)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#include "DlgRef_2Sel3Spin2Rb_QTD.h"
+
+#include <qvariant.h>
+#include <qpushbutton.h>
+#include <qgroupbox.h>
+#include <qlineedit.h>
+#include <qlabel.h>
+#include <qradiobutton.h>
+#include <qspinbox.h>
+#include <qlayout.h>
+#include <qtooltip.h>
+#include <qwhatsthis.h>
+
+/*
+ *  Constructs a DlgRef_2Sel3Spin2Rb_QTD as a child of 'parent', with the
+ *  name 'name' and widget flags set to 'f'.
+ */
+DlgRef_2Sel3Spin2Rb_QTD::DlgRef_2Sel3Spin2Rb_QTD( QWidget* parent, const char* name, WFlags fl )
+    : QWidget( parent, name, fl )
+{
+    if ( !name )
+       setName( "DlgRef_2Sel3Spin2Rb_QTD" );
+    DlgRef_2Sel3Spin2Rb_QTDLayout = new QGridLayout( this, 1, 1, 0, 6, "DlgRef_2Sel3Spin2Rb_QTDLayout"); 
+
+    GroupBox1 = new QGroupBox( this, "GroupBox1" );
+    GroupBox1->setColumnLayout(0, Qt::Vertical );
+    GroupBox1->layout()->setSpacing( 6 );
+    GroupBox1->layout()->setMargin( 11 );
+    GroupBox1Layout = new QGridLayout( GroupBox1->layout() );
+    GroupBox1Layout->setAlignment( Qt::AlignTop );
+
+    Layout1 = new QGridLayout( 0, 1, 1, 0, 6, "Layout1"); 
+
+    PushButton1 = new QPushButton( GroupBox1, "PushButton1" );
+    PushButton1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( PushButton1, 0, 1 );
+
+    LineEdit1 = new QLineEdit( GroupBox1, "LineEdit1" );
+
+    Layout1->addWidget( LineEdit1, 0, 2 );
+
+    TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
+    TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( TextLabel2, 1, 0 );
+
+    Layout2 = new QGridLayout( 0, 1, 1, 0, 6, "Layout2"); 
+
+    TextLabel5 = new QLabel( GroupBox1, "TextLabel5" );
+    TextLabel5->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel5->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( TextLabel5, 1, 3 );
+
+    RadioButton2 = new QRadioButton( GroupBox1, "RadioButton2" );
+
+    Layout2->addWidget( RadioButton2, 1, 0 );
+
+    TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
+    TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( TextLabel3, 0, 1 );
+
+    SpinBox1 = new QSpinBox( GroupBox1, "SpinBox1" );
+    SpinBox1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addMultiCellWidget( SpinBox1, 0, 0, 2, 4 );
+
+    RadioButton1 = new QRadioButton( GroupBox1, "RadioButton1" );
+
+    Layout2->addWidget( RadioButton1, 0, 0 );
+
+    SpinBox3 = new QSpinBox( GroupBox1, "SpinBox3" );
+    SpinBox3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox3->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( SpinBox3, 1, 4 );
+
+    SpinBox2 = new QSpinBox( GroupBox1, "SpinBox2" );
+    SpinBox2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)7, (QSizePolicy::SizeType)0, 0, 0, SpinBox2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( SpinBox2, 1, 2 );
+
+    TextLabel4 = new QLabel( GroupBox1, "TextLabel4" );
+    TextLabel4->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel4->sizePolicy().hasHeightForWidth() ) );
+
+    Layout2->addWidget( TextLabel4, 1, 1 );
+
+    Layout1->addMultiCellLayout( Layout2, 2, 2, 0, 2 );
+
+    PushButton2 = new QPushButton( GroupBox1, "PushButton2" );
+    PushButton2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, PushButton2->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( PushButton2, 1, 1 );
+    Spacer5 = new QSpacerItem( 0, 207, QSizePolicy::Minimum, QSizePolicy::Expanding );
+    Layout1->addItem( Spacer5, 3, 2 );
+
+    LineEdit2 = new QLineEdit( GroupBox1, "LineEdit2" );
+
+    Layout1->addWidget( LineEdit2, 1, 2 );
+
+    TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
+    TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
+
+    Layout1->addWidget( TextLabel1, 0, 0 );
+
+    GroupBox1Layout->addLayout( Layout1, 0, 0 );
+
+    DlgRef_2Sel3Spin2Rb_QTDLayout->addWidget( GroupBox1, 0, 0 );
+    resize( QSize(439, 340).expandedTo(minimumSizeHint()) );
+    clearWState( WState_Polished );
+}
+
+/*
+ *  Destroys the object and frees any allocated resources
+ */
+DlgRef_2Sel3Spin2Rb_QTD::~DlgRef_2Sel3Spin2Rb_QTD()
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+
diff --git a/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.h b/src/DlgRef/DlgRef_2Sel3Spin2Rb_QTD.h
new file mode 100755 (executable)
index 0000000..89f145a
--- /dev/null
@@ -0,0 +1,60 @@
+/****************************************************************************
+** Form interface generated from reading ui file 'DlgRef_2Sel3Spin2Rb_QTD.ui'
+**
+** Created: Tue Oct 9 15:16:54 2007
+**      by: The User Interface Compiler ($Id$)
+**
+** WARNING! All changes made in this file will be lost!
+****************************************************************************/
+
+#ifndef DLGREF_2SEL3SPIN2RB_QTD_H
+#define DLGREF_2SEL3SPIN2RB_QTD_H
+
+#include <qvariant.h>
+#include <qwidget.h>
+
+class QVBoxLayout;
+class QHBoxLayout;
+class QGridLayout;
+class QSpacerItem;
+class QGroupBox;
+class QPushButton;
+class QLineEdit;
+class QLabel;
+class QRadioButton;
+class QSpinBox;
+
+class DlgRef_2Sel3Spin2Rb_QTD : public QWidget
+{
+    Q_OBJECT
+
+public:
+    DlgRef_2Sel3Spin2Rb_QTD( QWidget* parent = 0, const char* name = 0, WFlags fl = 0 );
+    ~DlgRef_2Sel3Spin2Rb_QTD();
+
+    QGroupBox* GroupBox1;
+    QPushButton* PushButton1;
+    QLineEdit* LineEdit1;
+    QLabel* TextLabel2;
+    QLabel* TextLabel5;
+    QRadioButton* RadioButton2;
+    QLabel* TextLabel3;
+    QSpinBox* SpinBox1;
+    QRadioButton* RadioButton1;
+    QSpinBox* SpinBox3;
+    QSpinBox* SpinBox2;
+    QLabel* TextLabel4;
+    QPushButton* PushButton2;
+    QLineEdit* LineEdit2;
+    QLabel* TextLabel1;
+
+protected:
+    QGridLayout* DlgRef_2Sel3Spin2Rb_QTDLayout;
+    QGridLayout* GroupBox1Layout;
+    QGridLayout* Layout1;
+    QSpacerItem* Spacer5;
+    QGridLayout* Layout2;
+
+};
+
+#endif // DLGREF_2SEL3SPIN2RB_QTD_H
index 27a7a9d8b2cda06c878c0d7f6c832ca0bc757f4c..4db37c6eb693b90bf078d5e77f55c77fac7053d6 100644 (file)
@@ -54,6 +54,8 @@ dist_libDlgRef_la_SOURCES = \
        DlgRef_2Sel2Spin1Check_QTD.cxx \
        DlgRef_2Sel4Spin1Check_QTD.cxx \
        DlgRef_3Sel4Spin2Check_QTD.cxx \
+       DlgRef_2Sel3Spin2Rb_QTD.cxx \
+       DlgRef_2Sel3Spin2Rb.cxx \
        DlgRef_4Sel1List_QTD.cxx \
        DlgRef_2Sel1List_QTD.cxx \
        DlgRef_2Sel1List1Check_QTD.cxx \
@@ -106,6 +108,8 @@ MOC_FILES = \
        DlgRef_2Sel1Spin_QTD_moc.cxx \
        DlgRef_2Sel2Spin_QTD_moc.cxx \
        DlgRef_2Sel3Spin_QTD_moc.cxx \
+       DlgRef_2Sel3Spin2Rb_QTD_moc.cxx \
+       DlgRef_2Sel3Spin2Rb_moc.cxx \
        DlgRef_1Sel1Spin1Check_QTD_moc.cxx \
        DlgRef_2Sel1Spin2Check_QTD_moc.cxx \
        DlgRef_2Sel2Spin1Check_QTD_moc.cxx \
@@ -170,6 +174,8 @@ salomeinclude_HEADERS = \
        DlgRef_2Sel2Spin1Check_QTD.h \
        DlgRef_2Sel4Spin1Check_QTD.h \
        DlgRef_3Sel4Spin2Check_QTD.h \
+       DlgRef_2Sel3Spin2Rb_QTD.h \
+       DlgRef_2Sel3Spin2Rb.h \
        DlgRef_4Sel1List_QTD.h \
        DlgRef_2Sel1List_QTD.h \
        DlgRef_2Sel1List1Check_QTD.h \
diff --git a/src/DlgRef/UIFiles/DlgRef_2Sel3Spin2Rb_QTD.ui b/src/DlgRef/UIFiles/DlgRef_2Sel3Spin2Rb_QTD.ui
new file mode 100644 (file)
index 0000000..ca4821c
--- /dev/null
@@ -0,0 +1,279 @@
+<!DOCTYPE UI><UI version="3.3" stdsetdef="1">
+<class>DlgRef_2Sel3Spin2Rb_QTD</class>
+<widget class="QWidget">
+    <property name="name">
+        <cstring>DlgRef_2Sel3Spin2Rb_QTD</cstring>
+    </property>
+    <property name="geometry">
+        <rect>
+            <x>0</x>
+            <y>0</y>
+            <width>439</width>
+            <height>340</height>
+        </rect>
+    </property>
+    <property name="caption">
+        <string>DlgRef_2Sel3Spin2Rb_QTD</string>
+    </property>
+    <grid>
+        <property name="name">
+            <cstring>unnamed</cstring>
+        </property>
+        <property name="margin">
+            <number>0</number>
+        </property>
+        <property name="spacing">
+            <number>6</number>
+        </property>
+        <widget class="QGroupBox" row="0" column="0">
+            <property name="name">
+                <cstring>GroupBox1</cstring>
+            </property>
+            <property name="title">
+                <string></string>
+            </property>
+            <grid>
+                <property name="name">
+                    <cstring>unnamed</cstring>
+                </property>
+                <property name="margin">
+                    <number>11</number>
+                </property>
+                <property name="spacing">
+                    <number>6</number>
+                </property>
+                <widget class="QLayoutWidget" row="0" column="0">
+                    <property name="name">
+                        <cstring>Layout1</cstring>
+                    </property>
+                    <grid>
+                        <property name="name">
+                            <cstring>unnamed</cstring>
+                        </property>
+                        <property name="margin">
+                            <number>0</number>
+                        </property>
+                        <property name="spacing">
+                            <number>6</number>
+                        </property>
+                        <widget class="QPushButton" row="0" column="1">
+                            <property name="name">
+                                <cstring>PushButton1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <widget class="QLineEdit" row="0" column="2">
+                            <property name="name">
+                                <cstring>LineEdit1</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="1" column="0">
+                            <property name="name">
+                                <cstring>TextLabel2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL2</string>
+                            </property>
+                        </widget>
+                        <widget class="QLayoutWidget" row="2" column="0" rowspan="1" colspan="3">
+                            <property name="name">
+                                <cstring>Layout2</cstring>
+                            </property>
+                            <grid>
+                                <property name="name">
+                                    <cstring>unnamed</cstring>
+                                </property>
+                                <property name="margin">
+                                    <number>0</number>
+                                </property>
+                                <property name="spacing">
+                                    <number>6</number>
+                                </property>
+                                <widget class="QLabel" row="1" column="3">
+                                    <property name="name">
+                                        <cstring>TextLabel5</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string>TL5</string>
+                                    </property>
+                                </widget>
+                                <widget class="QRadioButton" row="1" column="0">
+                                    <property name="name">
+                                        <cstring>RadioButton2</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QLabel" row="0" column="1">
+                                    <property name="name">
+                                        <cstring>TextLabel3</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string>TL3</string>
+                                    </property>
+                                </widget>
+                                <widget class="QSpinBox" row="0" column="2" rowspan="1" colspan="3">
+                                    <property name="name">
+                                        <cstring>SpinBox1</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>7</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                </widget>
+                                <widget class="QRadioButton" row="0" column="0">
+                                    <property name="name">
+                                        <cstring>RadioButton1</cstring>
+                                    </property>
+                                    <property name="text">
+                                        <string></string>
+                                    </property>
+                                </widget>
+                                <widget class="QSpinBox" row="1" column="4">
+                                    <property name="name">
+                                        <cstring>SpinBox3</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>7</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                </widget>
+                                <widget class="QSpinBox" row="1" column="2">
+                                    <property name="name">
+                                        <cstring>SpinBox2</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>7</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                </widget>
+                                <widget class="QLabel" row="1" column="1">
+                                    <property name="name">
+                                        <cstring>TextLabel4</cstring>
+                                    </property>
+                                    <property name="sizePolicy">
+                                        <sizepolicy>
+                                            <hsizetype>0</hsizetype>
+                                            <vsizetype>0</vsizetype>
+                                            <horstretch>0</horstretch>
+                                            <verstretch>0</verstretch>
+                                        </sizepolicy>
+                                    </property>
+                                    <property name="text">
+                                        <string>TL4</string>
+                                    </property>
+                                </widget>
+                            </grid>
+                        </widget>
+                        <widget class="QPushButton" row="1" column="1">
+                            <property name="name">
+                                <cstring>PushButton2</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string></string>
+                            </property>
+                        </widget>
+                        <spacer row="3" column="2">
+                            <property name="name">
+                                <cstring>Spacer5</cstring>
+                            </property>
+                            <property name="orientation">
+                                <enum>Vertical</enum>
+                            </property>
+                            <property name="sizeType">
+                                <enum>Expanding</enum>
+                            </property>
+                            <property name="sizeHint">
+                                <size>
+                                    <width>0</width>
+                                    <height>207</height>
+                                </size>
+                            </property>
+                        </spacer>
+                        <widget class="QLineEdit" row="1" column="2">
+                            <property name="name">
+                                <cstring>LineEdit2</cstring>
+                            </property>
+                        </widget>
+                        <widget class="QLabel" row="0" column="0">
+                            <property name="name">
+                                <cstring>TextLabel1</cstring>
+                            </property>
+                            <property name="sizePolicy">
+                                <sizepolicy>
+                                    <hsizetype>0</hsizetype>
+                                    <vsizetype>0</vsizetype>
+                                    <horstretch>0</horstretch>
+                                    <verstretch>0</verstretch>
+                                </sizepolicy>
+                            </property>
+                            <property name="text">
+                                <string>TL1</string>
+                            </property>
+                        </widget>
+                    </grid>
+                </widget>
+            </grid>
+        </widget>
+    </grid>
+</widget>
+<slots>
+    <slot>RadioButton_Clicked()</slot>
+</slots>
+<layoutdefaults spacing="6" margin="11"/>
+</UI>
index bd1f907c1c77f1fce47a6fa4823a068ef65ae3d7..54fd541d35277ddb6cfa1d895243b3f2ee2c73e8 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
+
index 82eaeadd299769c11b8721f5f598c8a7a2ca39ac..2af178b9cdc94614d0ced04cfa7c6f7f9df16188 100644 (file)
@@ -129,6 +129,11 @@ msgstr "linepointvector.png"
 msgid "ICON_DLG_CIRCLE_PV"
 msgstr "circlepointvector.png"
 
+#CircleDlg
+msgid "ICON_DLG_CIRCLE_C2P"
+msgstr "circlecenter2pnts.png"
+
+
 #VectorDlg
 msgid "ICON_DLG_VECTOR_2P"
 msgstr "vector2points.png"
index 7dc8d22eac5cadb4aa684cd28ca3477776dab61a..9d956d7223e44389fc9c961e3aade3f7f13afa33 100644 (file)
@@ -322,6 +322,18 @@ msgstr "Center"
 msgid "GEOM_RADIUS"
 msgstr "Radius :"
 
+#Radius
+msgid "GEOM_CONSTANT_RADIUS"
+msgstr "Radius :"
+
+#Radius
+msgid "GEOM_R1"
+msgstr "R1 :"
+
+#Radius
+msgid "GEOM_R2"
+msgstr "R2 :"
+
 #Radius i
 msgid "GEOM_RADIUS_I"
 msgstr "Radius %1 :"
index e555f35ef4829c7757c832e84a90103dd6a8e650..f968ecac8d35917dfd6695cf9c37d3a01eab90fd 100644 (file)
@@ -133,6 +133,10 @@ msgstr "linepointvector.png"
 msgid "ICON_DLG_CIRCLE_PV"
 msgstr "circlepointvector.png"
 
+#CircleDlg
+msgid "ICON_DLG_CIRCLE_C2P"
+msgstr "circlecenter2pnts.png"
+
 #VectorDlg
 msgid "ICON_DLG_VECTOR_2P"
 msgstr "vector2points.png"
@@ -370,6 +374,11 @@ msgstr "filletedge.png"
 msgid "ICON_DLG_CHAMFER_EDGE"
 msgstr "chamferedge.png"
 
+#ChamferDlg
+msgid "ICON_DLG_CHAMFER_EDGE_FROM_FACE"
+msgstr "chamferedgefromface.png"
+
+
 #FilletDlg
 msgid "ICON_DLG_FILLET_FACE"
 msgstr "filletface.png"
index 6489e4de0b64f9efba97abfa1749b8442fd2f945..958384b10d6b7c8d172cf9177cb7e12215c2fc86 100644 (file)
@@ -313,6 +313,18 @@ msgstr "Center"
 msgid "GEOM_RADIUS"
 msgstr "Radius :"
 
+#Radius
+msgid "GEOM_CONSTANT_RADIUS"
+msgstr "Radius :"
+
+#Radius
+msgid "GEOM_R1"
+msgstr "R1 :"
+
+#Radius
+msgid "GEOM_R2"
+msgstr "R2 :"
+
 #Radius i
 msgid "GEOM_RADIUS_I"
 msgstr "Radius %1 :"
@@ -782,6 +794,10 @@ msgstr "D1 :"
 msgid "GEOM_D2"
 msgstr "D2 :"
 
+#D
+msgid "GEOM_D"
+msgstr "D :"
+
 #
 #==============================================================================
 #
@@ -826,6 +842,14 @@ msgstr "Chamfer On Whole Shape"
 msgid "GEOM_CHAMFER_EDGES"
 msgstr "Chamfer On Edges From Shape"
 
+#: GeometryGUI_ChamferDlg.cxx:58
+msgid "GEOM_CHAMFER_EDGE"
+msgstr "Chamfer On Selected Edges"
+
+#: GeometryGUI_ChamferDlg.cxx:58
+msgid "SELECTED_EDGE"
+msgstr "Selected Edges"
+
 #: GeometryGUI_ChamferDlg.cxx:58
 msgid "GEOM_CHAMFER_FACES"
 msgstr "Chamfer On Faces From Shape"
@@ -1485,6 +1509,9 @@ msgstr "Chamfer can't be computed with %1 and %2"
 msgid "GEOM_3_POINTS"
 msgstr "3 points"
 
+msgid "GEOM_CENTER_2POINTS"
+msgstr "Center and two points"
+
 msgid "GEOM_POINT1"
 msgstr "Point 1"
 
@@ -2857,13 +2884,13 @@ msgid "STB_ERASE_ALL"
 msgstr "Erase all"
 
 msgid "TOP_DISPLAY"
-msgstr "Display"
+msgstr "Show"
 
 msgid "MEN_DISPLAY"
-msgstr "Display"
+msgstr "Show"
 
 msgid "STB_DISPLAY"
-msgstr "Display"
+msgstr "Show object(s)"
 
 msgid "TOP_DISPLAY_ONLY"
 msgstr "Display only"
@@ -2875,13 +2902,13 @@ msgid "STB_DISPLAY_ONLY"
 msgstr "Display only"
 
 msgid "TOP_ERASE"
-msgstr "Erase"
+msgstr "Hide"
 
 msgid "MEN_ERASE"
-msgstr "Erase"
+msgstr "Hide"
 
 msgid "STB_ERASE"
-msgstr "Erase"
+msgstr "Hide object(s)"
 
 msgid "TOP_POP_RENAME"
 msgstr "Rename"
index 57cc91748359d4f83a70e5f144002adaff6fdacd..61a812b552aa91be7a15cb58250025912ec07ffd 100644 (file)
@@ -132,37 +132,50 @@ Standard_Integer GEOMImpl_ChamferDriver::Execute(TFunction_Logbook& log) const
           M.FindFromIndex(i).Extent() == 2)
         fill.Add(aD, E, F);
     }
-  } else if (aType == CHAMFER_SHAPE_EDGE) {
+  }else if (aType == CHAMFER_SHAPE_EDGE || aType == CHAMFER_SHAPE_EDGE_AD) {
     // chamfer on edges, common to two faces, with D1 on the first face
-    double aD1 = aCI.GetD1();
-    double aD2 = aCI.GetD2();
+   
     TopoDS_Shape aFace1, aFace2;
     if (GEOMImpl_ILocalOperations::GetSubShape(aShapeBase, aCI.GetFace1(), aFace1) &&
-        GEOMImpl_ILocalOperations::GetSubShape(aShapeBase, aCI.GetFace2(), aFace2)) {
-      TopoDS_Face F = TopoDS::Face(aFace1);
-
-      // fill map of edges of the second face
-      TopTools_MapOfShape aMap;
-      TopExp_Explorer Exp2 (aFace2, TopAbs_EDGE);
-      for (; Exp2.More(); Exp2.Next()) {
-        aMap.Add(Exp2.Current());
+        GEOMImpl_ILocalOperations::GetSubShape(aShapeBase, aCI.GetFace2(), aFace2))
+      {
+       TopoDS_Face F = TopoDS::Face(aFace1);
+
+       // fill map of edges of the second face
+       TopTools_MapOfShape aMap;
+       TopExp_Explorer Exp2 (aFace2, TopAbs_EDGE);
+       for (; Exp2.More(); Exp2.Next()) {
+         aMap.Add(Exp2.Current());
+       }
+       
+       // find edges of the first face, common with the second face
+       TopExp_Explorer Exp (aFace1, TopAbs_EDGE);
+       for (; Exp.More(); Exp.Next()) {
+         if (aMap.Contains(Exp.Current())) {
+           TopoDS_Edge E = TopoDS::Edge(Exp.Current());
+           if (!BRepTools::IsReallyClosed(E, F) && !BRep_Tool::Degenerated(E))
+             {
+               if ( aType == CHAMFER_SHAPE_EDGE )
+                 {
+                   double aD1 = aCI.GetD1();
+                   double aD2 = aCI.GetD2();
+                   fill.Add(aD1, aD2, E, F);
+                 }
+               else
+                 {
+                   double aD = aCI.GetD();
+                   double anAngle = aCI.GetAngle();
+                   fill.AddDA(aD, anAngle, E, F);
+                 }
+             }
+         }
+       }
       }
-
-      // find edges of the first face, common with the second face
-      TopExp_Explorer Exp (aFace1, TopAbs_EDGE);
-      for (; Exp.More(); Exp.Next()) {
-        if (aMap.Contains(Exp.Current())) {
-          TopoDS_Edge E = TopoDS::Edge(Exp.Current());
-          if (!BRepTools::IsReallyClosed(E, F) && !BRep_Tool::Degenerated(E))
-            fill.Add(aD1, aD2, E, F);
-        }
-      }
-    }
-  } else if (aType == CHAMFER_SHAPE_FACES) {
+  }
+  else if (aType == CHAMFER_SHAPE_FACES || aType == CHAMFER_SHAPE_FACES_AD) {
     // chamfer on all edges of the selected faces, with D1 on the selected face
     // (on first selected face, if the edge belongs to two selected faces)
-    double aD1 = aCI.GetD1();
-    double aD2 = aCI.GetD2();
+
     int aLen = aCI.GetLength();
     int ind = 1;
     TopTools_MapOfShape aMap;
@@ -171,22 +184,67 @@ Standard_Integer GEOMImpl_ChamferDriver::Execute(TFunction_Logbook& log) const
     for (; ind <= aLen; ind++)
     {
       TopoDS_Shape aShapeFace;
-      if (GEOMImpl_ILocalOperations::GetSubShape
-          (aShapeBase, aCI.GetFace(ind), aShapeFace)) {
-        TopoDS_Face F = TopoDS::Face(aShapeFace);
-        TopExp_Explorer Exp (F, TopAbs_EDGE);
-        for (; Exp.More(); Exp.Next()) {
-          if (!aMap.Contains(Exp.Current())) {
-            TopoDS_Edge E = TopoDS::Edge(Exp.Current());
-            if (!BRepTools::IsReallyClosed(E, F) &&
-                !BRep_Tool::Degenerated(E) &&
-                M.FindFromKey(E).Extent() == 2)
-              fill.Add(aD1, aD2, E, F);
-          }
-        }
-      }
+      if (GEOMImpl_ILocalOperations::GetSubShape(aShapeBase, aCI.GetFace(ind), aShapeFace))
+       {
+         TopoDS_Face F = TopoDS::Face(aShapeFace);
+         TopExp_Explorer Exp (F, TopAbs_EDGE);
+         for (; Exp.More(); Exp.Next()) {
+           if (!aMap.Contains(Exp.Current()))
+             {
+               TopoDS_Edge E = TopoDS::Edge(Exp.Current());
+               if (!BRepTools::IsReallyClosed(E, F) &&
+                   !BRep_Tool::Degenerated(E) &&
+                   M.FindFromKey(E).Extent() == 2)
+                 if (aType == CHAMFER_SHAPE_FACES)
+                   {
+                     double aD1 = aCI.GetD1();
+                     double aD2 = aCI.GetD2();
+                     fill.Add(aD1, aD2, E, F);
+                   }
+                 else
+                   {
+                     double aD = aCI.GetD();
+                     double anAngle = aCI.GetAngle();
+                     fill.AddDA(aD, anAngle, E, F);
+                   }
+             }
+         }
+       }
     }
-  } else {
+  }  
+else if (aType == CHAMFER_SHAPE_EDGES || aType == CHAMFER_SHAPE_EDGES_AD)
+  {
+    // chamfer on selected edges with lenght param D1 & D2.
+
+    int aLen = aCI.GetLength();
+    int ind = 1;
+    TopTools_MapOfShape aMap;
+    TopTools_IndexedDataMapOfShapeListOfShape M;
+    GEOMImpl_Block6Explorer::MapShapesAndAncestors(aShapeBase, TopAbs_EDGE, TopAbs_FACE, M);
+    for (; ind <= aLen; ind++)
+    {
+      TopoDS_Shape aShapeEdge;
+      if (GEOMImpl_ILocalOperations::GetSubShape(aShapeBase, aCI.GetEdge(ind), aShapeEdge))
+       {
+         TopoDS_Edge E = TopoDS::Edge(aShapeEdge);
+         const TopTools_ListOfShape& aFacesList = M.FindFromKey(E);
+         TopoDS_Face F = TopoDS::Face( aFacesList.First() );
+         if (aType == CHAMFER_SHAPE_EDGES)
+           {
+             double aD1 = aCI.GetD1();
+             double aD2 = aCI.GetD2();
+             fill.Add(aD1, aD2, E, F);
+           }
+         else
+           {
+             double aD = aCI.GetD();
+             double anAngle = aCI.GetAngle();
+             fill.AddDA(aD, anAngle, E, F);
+           }
+       } 
+    } 
+  }
+  else {
   }
 
   fill.Build();
index 7d33433663ab336796c3fa6f67d27d4e172ba8f9..79184422b9616e9a88c21370cca98049aafcdf17 100644 (file)
@@ -95,6 +95,48 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const
       }
     }
   }
+ else if (aType == CIRCLE_CENTER_TWO_PNT) {
+       Handle(GEOM_Function) aRefPoint1 = aCI.GetPoint1();
+       Handle(GEOM_Function) aRefPoint2 = aCI.GetPoint2();
+       Handle(GEOM_Function) aRefPoint3 = aCI.GetPoint3();
+       TopoDS_Shape aShapePnt1 = aRefPoint1->GetValue();
+       TopoDS_Shape aShapePnt2 = aRefPoint2->GetValue();
+       TopoDS_Shape aShapePnt3 = aRefPoint3->GetValue();
+       if (aShapePnt1.ShapeType() == TopAbs_VERTEX && aShapePnt2.ShapeType() == TopAbs_VERTEX &&
+          aShapePnt3.ShapeType() == TopAbs_VERTEX)
+       {
+        gp_Pnt aP1 = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt1));
+        gp_Pnt aP2 = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt2));
+        gp_Pnt aP3 = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt3));
+
+        if (aP1.Distance(aP2) < gp::Resolution() ||
+            aP1.Distance(aP3) < gp::Resolution() ||
+            aP2.Distance(aP3) < gp::Resolution())
+          Standard_ConstructionError::Raise("Circle creation aborted: coincident points given");
+        if (gp_Vec(aP1, aP2).IsParallel(gp_Vec(aP1, aP3), Precision::Angular()))
+          Standard_ConstructionError::Raise("Circle creation aborted: points lay on one line");
+         double x, y, z, x1, y1, z1, x2, y2, z2, dx, dy, dz, dx2, dy2, dz2, dx3, dy3, dz3, aRadius;
+        //Calculations for Radius
+        x = aP1.X(); y = aP1.Y(); z = aP1.Z();
+        x1 = aP2.X(); y1 = aP2.Y(); z1 = aP2.Z();
+        dx = x1 - x;
+         dy = y1 - y;
+        dz = z1 - z;
+        aRadius = sqrt(dx*dx + dy*dy + dz*dz);
+        //Calculations for Plane Vector
+        x2 = aP3.X(); y2 = aP3.Y(); z2 = aP3.Z();
+        dx2 = x2 - x; dy2 = y2 - y; dz2 = z2 - z;
+        dx3 = ((dy*dz2) - (dy2*dz))/100;
+        dy3 = ((dx2*dz) - (dx*dz2))/100;
+        dz3 = ((dx*dy2) - (dx2*dy))/100;
+        //Make Plane Vector
+        gp_Dir aDir ( dx3, dy3, dz3 );
+        //Make Circle
+        gp_Ax2 anAxes (aP1, aDir);
+        gp_Circ aCirc (anAxes, aRadius);
+        aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge();  
+       }
+  }
   else if (aType == CIRCLE_THREE_PNT) {
     Handle(GEOM_Function) aRefPoint1 = aCI.GetPoint1();
     Handle(GEOM_Function) aRefPoint2 = aCI.GetPoint2();
@@ -116,9 +158,9 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const
         Standard_ConstructionError::Raise("Circle creation aborted: points lay on one line");
       Handle(Geom_Circle) aCirc = GC_MakeCircle(aP1, aP2, aP3).Value();
       aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge();
-    }
+    }  
   }
-  else {
+   else {
   }
 
   if (aShape.IsNull()) return 0;
index 3114733df9beb4d18a9ba09734bc15f4654aeebf..e662d4cac496318b54bf15169f35c3b349d0fe4f 100644 (file)
@@ -83,17 +83,17 @@ Standard_Integer GEOMImpl_FilletDriver::Execute(TFunction_Logbook& log) const
       TopoDS_Edge E = TopoDS::Edge(Exp.Current());
       fill.Add(E);
     }
-  } else if (aType == FILLET_SHAPE_EDGES) {
+  } else if (aType == FILLET_SHAPE_EDGES || aType == FILLET_SHAPE_EDGES_2R) {
     int aLen = aCI.GetLength();
     int ind = 1;
     for (; ind <= aLen; ind++) {
       TopoDS_Shape aShapeEdge;
       if (GEOMImpl_ILocalOperations::GetSubShape
           (aShapeBase, aCI.GetEdge(ind), aShapeEdge)) {
-        fill.Add(TopoDS::Edge(aShapeEdge));
+         fill.Add(TopoDS::Edge(aShapeEdge));
       }
     }
-  } else if (aType == FILLET_SHAPE_FACES) {
+  } else if (aType == FILLET_SHAPE_FACES || aType == FILLET_SHAPE_FACES_2R) {
     int aLen = aCI.GetLength();
     int ind = 1;
     for (; ind <= aLen; ind++) {
@@ -108,10 +108,15 @@ Standard_Integer GEOMImpl_FilletDriver::Execute(TFunction_Logbook& log) const
     }
   } else {
   }
+  if (aType == FILLET_SHAPE_FACES || aType == FILLET_SHAPE_EDGES || aType == FILLET_SHAPE_ALL)
+    for (int i = 1; i <= fill.NbContours(); i++)
+      fill.SetRadius(aCI.GetR(), i, 1);
+    else if (aType == FILLET_SHAPE_FACES_2R || aType == FILLET_SHAPE_EDGES_2R)
+      for (int i = 1; i <= fill.NbContours(); i++)
+       {
+       fill.SetRadius(aCI.GetR1(), aCI.GetR2(), i, 1);
+       }
 
-  for (int i = 1; i <= fill.NbContours(); i++) {
-    fill.SetRadius(aCI.GetR(), i, 1);
-  }
   fill.Build();
   if (!fill.IsDone()) {
     StdFail_NotDone::Raise("Fillet can't be computed on the given shape with the given radius");
index 6c12fd184867fda749365eb6f75c26d144eef303..17f7e5afcd793e4e67bace07bdca3dadafadeefd 100644 (file)
 
 #include "GEOM_Function.hxx"
 
-#define CHAM_ARG_SH   1
-#define CHAM_ARG_D1   2
-#define CHAM_ARG_D2   3
-#define CHAM_ARG_LENG 4
-#define CHAM_ARG_LAST 4
+#define CHAM_ARG_SH    1
+#define CHAM_ARG_D1    2
+#define CHAM_ARG_D2    3
+#define CHAM_ARG_ANGLE 3
+#define CHAM_ARG_LENG  4
+#define CHAM_ARG_LAST  4
 
 class GEOMImpl_IChamfer
 {
@@ -41,10 +42,12 @@ class GEOMImpl_IChamfer
   void SetD (double theD) { _func->SetReal(CHAM_ARG_D1, theD); }
   void SetD1(double theD) { _func->SetReal(CHAM_ARG_D1, theD); }
   void SetD2(double theD) { _func->SetReal(CHAM_ARG_D2, theD); }
+  void SetAngle(double theAngle) { _func->SetReal(CHAM_ARG_ANGLE, theAngle); }
 
   double GetD () { return _func->GetReal(CHAM_ARG_D1); }
   double GetD1() { return _func->GetReal(CHAM_ARG_D1); }
   double GetD2() { return _func->GetReal(CHAM_ARG_D2); }
+  double GetAngle() { return _func->GetReal(CHAM_ARG_ANGLE); }
 
   void SetLength(int theLen) { _func->SetInteger(CHAM_ARG_LENG, theLen); }
 
@@ -56,10 +59,13 @@ class GEOMImpl_IChamfer
               { _func->SetInteger(CHAM_ARG_LAST + 1, theFace); }
   void SetFace2(int theFace)
               { _func->SetInteger(CHAM_ARG_LAST + 2, theFace); }
+  void SetEdge(int theInd, int theEdge)
+              { _func->SetInteger(CHAM_ARG_LAST + theInd, theEdge); }
 
   int GetFace(int theInd) { return _func->GetInteger(CHAM_ARG_LAST + theInd); }
   int GetFace1() { return _func->GetInteger(CHAM_ARG_LAST + 1); }
   int GetFace2() { return _func->GetInteger(CHAM_ARG_LAST + 2); }
+  int GetEdge(int theInd) { return _func->GetInteger(CHAM_ARG_LAST + theInd); }
 
  private:
 
index 3643e6f39072cfcf7d669f202063ea33b3c8897d..1cf41ed4ea2526017d7bf4bb97c4531b04202a46 100644 (file)
@@ -196,6 +196,67 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleThreePnt (Handle(GEOM_
   return aCircle;
 }
 
+//=============================================================================
+/*!
+ *  MakeCircleCenter2Pnt
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCircleCenter2Pnt (Handle(GEOM_Object) thePnt1,
+                                                                      Handle(GEOM_Object) thePnt2,
+                                                                      Handle(GEOM_Object) thePnt3)
+{
+  SetErrorCode(KO);
+
+  if (thePnt1.IsNull() || thePnt2.IsNull() || thePnt3.IsNull()) return NULL;
+
+  //Add a new Circle object
+  Handle(GEOM_Object) aCircle = GetEngine()->AddObject(GetDocID(), GEOM_CIRCLE);
+
+  //Add a new Circle function for creation a circle relatively to center and 2 points
+  Handle(GEOM_Function) aFunction =
+    aCircle->AddFunction(GEOMImpl_CircleDriver::GetID(), CIRCLE_CENTER_TWO_PNT);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_CircleDriver::GetID()) return NULL;
+
+  GEOMImpl_ICircle aCI (aFunction);
+
+  Handle(GEOM_Function) aRefPnt1 = thePnt1->GetLastFunction();
+  Handle(GEOM_Function) aRefPnt2 = thePnt2->GetLastFunction();
+  Handle(GEOM_Function) aRefPnt3 = thePnt3->GetLastFunction();
+
+  if (aRefPnt1.IsNull() || aRefPnt2.IsNull() || aRefPnt3.IsNull()) return NULL;
+
+  aCI.SetPoint1(aRefPnt1);
+  aCI.SetPoint2(aRefPnt2);
+  aCI.SetPoint3(aRefPnt3);
+
+  //Compute the Circle value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Circle 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) << aCircle << " = geompy.MakeCircleCenter2Pnt("
+    << thePnt1 << ", " << thePnt2 << ", " << thePnt3 << ")";
+
+  SetErrorCode(OK);
+  return aCircle;
+}
+
 //=============================================================================
 /*!
  *  MakeCirclePntVecR
index b0aa3cd39b579192e3583a29f1ba6bb54db86ba7..34bb01148b69bdfbc849d39450086314b1edb93c 100644 (file)
@@ -41,6 +41,9 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakeCircleThreePnt (Handle(GEOM_Object) thePnt1,
                                                           Handle(GEOM_Object) thePnt2,
                                                           Handle(GEOM_Object) thePnt3);
+  Standard_EXPORT Handle(GEOM_Object) MakeCircleCenter2Pnt (Handle(GEOM_Object) thePnt1,
+                                                            Handle(GEOM_Object) thePnt2,
+                                                            Handle(GEOM_Object) thePnt3);
   Standard_EXPORT Handle(GEOM_Object) MakeCirclePntVecR  (Handle(GEOM_Object) thePnt,
                                                           Handle(GEOM_Object) theVec, double theR);
 
index 703c0f74f22620175cba54893e586f978edf01bc..f9deb9b8639bbb5603c38444da3b65de5c1a92f5 100644 (file)
@@ -24,6 +24,8 @@
 
 #define FILLET_ARG_SH   1
 #define FILLET_ARG_R    2
+#define FILLET_ARG_R1   4
+#define FILLET_ARG_R2   5
 #define FILLET_ARG_LENG 3
 #define FILLET_ARG_LAST 3
 
@@ -38,8 +40,12 @@ class GEOMImpl_IFillet
   Handle(GEOM_Function) GetShape() { return _func->GetReference(FILLET_ARG_SH); }
 
   void SetR(double theR) { _func->SetReal(FILLET_ARG_R, theR); }
+  void SetR1(double theR1) { _func->SetReal(FILLET_ARG_R1, theR1); }
+  void SetR2(double theR2) { _func->SetReal(FILLET_ARG_R2, theR2); }
 
   double GetR() { return _func->GetReal(FILLET_ARG_R); }
+  double GetR1() { return _func->GetReal(FILLET_ARG_R1); }
+  double GetR2() { return _func->GetReal(FILLET_ARG_R2); }
 
   void SetLength(int theLen) { _func->SetInteger(FILLET_ARG_LENG, theLen); }
 
index 63e0126b02b48a997493bf77b341f9896ae5fcce..3dcf6e9afa31592b8afb3efa51df9c5346abf3f8 100644 (file)
@@ -198,6 +198,77 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdges
   return aFillet;
 }
 
+//=============================================================================
+/*!
+ *  MakeFilletEdges R1 R2
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletEdgesR1R2
+       (Handle(GEOM_Object) theShape, double theR1, double theR2, list<int> theEdges)
+{
+  SetErrorCode(KO);
+
+  //Add a new Fillet object
+  Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
+
+  //Add a new Fillet function
+  Handle(GEOM_Function) aFunction =
+    aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_EDGES_2R);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
+
+  GEOMImpl_IFillet aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) return NULL;
+
+  aCI.SetShape(aRefShape);
+  aCI.SetR1(theR1);
+  aCI.SetR2(theR2);
+  int aLen = theEdges.size();
+  aCI.SetLength(aLen);
+
+  int ind = 1;
+  list<int>::iterator it = theEdges.begin();
+  for (; it != theEdges.end(); it++, ind++) {
+    aCI.SetEdge(ind, (*it));
+  }
+
+  //Compute the Fillet value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Fillet 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 pd (aFunction);
+  pd << aFillet << " = geompy.MakeFilletR1R2(" << theShape
+    << ", " << theR1 << ", " <<theR2 << ", geompy.ShapeType[\"EDGE\"], [";
+
+  it = theEdges.begin();
+  pd << (*it++);
+  while (it != theEdges.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "])";
+
+  SetErrorCode(OK);
+  return aFillet;
+}
+
+
 //=============================================================================
 /*!
  *  MakeFilletFaces
@@ -267,6 +338,76 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFaces
   return aFillet;
 }
 
+//=============================================================================
+/*!
+ *  MakeFilletFaces R1 R2
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeFilletFacesR1R2
+       (Handle(GEOM_Object) theShape, double theR1, double theR2, list<int> theFaces)
+{
+  SetErrorCode(KO);
+
+  //Add a new Fillet object
+  Handle(GEOM_Object) aFillet = GetEngine()->AddObject(GetDocID(), GEOM_FILLET);
+
+  //Add a new Fillet function
+  Handle(GEOM_Function) aFunction =
+    aFillet->AddFunction(GEOMImpl_FilletDriver::GetID(), FILLET_SHAPE_FACES_2R);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_FilletDriver::GetID()) return NULL;
+
+  GEOMImpl_IFillet aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) return NULL;
+
+  aCI.SetShape(aRefShape);
+  aCI.SetR1(theR1);
+  aCI.SetR2(theR2);
+  int aLen = theFaces.size();
+  aCI.SetLength(aLen);
+
+  int ind = 1;
+  list<int>::iterator it = theFaces.begin();
+  for (; it != theFaces.end(); it++, ind++) {
+    aCI.SetFace(ind, (*it));
+  }
+
+  //Compute the Fillet value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Fillet 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 pd (aFunction);
+  pd << aFillet << " = geompy.MakeFilletR1R2(" << theShape
+    << ", " << theR1 << ", " << theR2 << ", geompy.ShapeType[\"FACE\"], [";
+
+  it = theFaces.begin();
+  pd << (*it++);
+  while (it != theFaces.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "])";
+
+  SetErrorCode(OK);
+  return aFillet;
+}
+
 //=============================================================================
 /*!
  *  MakeChamferAll
@@ -377,6 +518,64 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdge
   return aChamfer;
 }
 
+//=============================================================================
+/*!
+ *  MakeChamferEdgeAD
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgeAD
+                            (Handle(GEOM_Object) theShape, double theD, double theAngle,
+                             int theFace1, int theFace2)
+{
+  SetErrorCode(KO);
+
+  //Add a new Chamfer object
+  Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
+
+  //Add a new Chamfer function
+  Handle(GEOM_Function) aFunction =
+    aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGE_AD);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
+
+  GEOMImpl_IChamfer aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) return NULL;
+
+  aCI.SetShape(aRefShape);
+  aCI.SetD(theD);
+  aCI.SetAngle(theAngle);
+  aCI.SetFace1(theFace1);
+  aCI.SetFace2(theFace2);
+
+  //Compute the Chamfer value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Chamfer 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) << aChamfer
+    << " = geompy.MakeChamferEdgeAD(" << theShape << ", " << theD
+      << ", " << theAngle << ", " << theFace1 << ", " << theFace2 << ")";
+  cout << "ANGLE = " << theAngle << endl;
+  SetErrorCode(OK);
+  return aChamfer;
+}
+
 //=============================================================================
 /*!
  *  MakeChamferFaces
@@ -448,6 +647,221 @@ Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFaces
   return aChamfer;
 }
 
+//=============================================================================
+/*!
+ *  MakeChamferFacesAD
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferFacesAD
+                            (Handle(GEOM_Object) theShape, double theD, double theAngle,
+                             list<int> theFaces)
+{
+  SetErrorCode(KO);
+
+  //Add a new Chamfer object
+  Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
+
+  //Add a new Chamfer function
+  Handle(GEOM_Function) aFunction =
+    aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_FACES_AD);
+  if (aFunction.IsNull()) return NULL;
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID()) return NULL;
+
+  GEOMImpl_IChamfer aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) return NULL;
+
+  aCI.SetShape(aRefShape);
+  aCI.SetD(theD);
+  aCI.SetAngle(theAngle);
+  int aLen = theFaces.size();
+  aCI.SetLength(aLen);
+
+  int ind = 1;
+  list<int>::iterator it = theFaces.begin();
+  for (; it != theFaces.end(); it++, ind++) {
+    aCI.SetFace(ind, (*it));
+  }
+
+  //Compute the Chamfer value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Chamfer 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 pd (aFunction);
+  pd << aChamfer << " = geompy.MakeChamferFacesAD(" << theShape
+    << ", " << theD << ", " << theAngle << ", [";
+
+  it = theFaces.begin();
+  pd << (*it++);
+  while (it != theFaces.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "])";
+
+  SetErrorCode(OK);
+  return aChamfer;
+}
+
+//=============================================================================
+/*!
+ *  MakeChamferEdges
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdges
+                            (Handle(GEOM_Object) theShape, double theD1, double theD2,
+                             list<int> theEdges)
+{
+  SetErrorCode(KO);
+
+  //Add a new Chamfer object
+  Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
+
+  //Add a new Chamfer function
+  Handle(GEOM_Function) aFunction =
+    aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGES);
+  if (aFunction.IsNull()) { return NULL; cout << "Edges Function is NULL!!!" << endl; }
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID())
+       { return NULL; cout << "Chamfer Driver is NULL!!!" << endl; }
+
+  GEOMImpl_IChamfer aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) { return NULL; cout << "Shape is NULL!!!" << endl; }
+
+  aCI.SetShape(aRefShape);
+  aCI.SetD1(theD1);
+  aCI.SetD2(theD2);
+  int aLen = theEdges.size();
+  aCI.SetLength(aLen);
+
+  int ind = 1;
+  list<int>::iterator it = theEdges.begin();
+  for (; it != theEdges.end(); it++, ind++) {
+    aCI.SetEdge(ind, (*it));
+  }
+
+  //Compute the Chamfer value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Chamfer 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 pd (aFunction);
+  pd << aChamfer << " = geompy.MakeChamferEdges(" << theShape
+    << ", " << theD1 << ", " << theD2 << ", [";
+
+  it = theEdges.begin();
+  pd << (*it++);
+  while (it != theEdges.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "])";
+
+  SetErrorCode(OK);
+  return aChamfer;
+}
+
+//=============================================================================
+/*!
+ *  MakeChamferEdgesAD
+ */
+//=============================================================================
+Handle(GEOM_Object) GEOMImpl_ILocalOperations::MakeChamferEdgesAD
+                            (Handle(GEOM_Object) theShape, double theD, double theAngle,
+                             list<int> theEdges)
+{
+  SetErrorCode(KO);
+
+  //Add a new Chamfer object
+  Handle(GEOM_Object) aChamfer = GetEngine()->AddObject(GetDocID(), GEOM_CHAMFER);
+
+  //Add a new Chamfer function
+  Handle(GEOM_Function) aFunction =
+    aChamfer->AddFunction(GEOMImpl_ChamferDriver::GetID(), CHAMFER_SHAPE_EDGES_AD);
+  if (aFunction.IsNull()) { return NULL; cout << "Edges Function is NULL!!!" << endl; }
+
+  //Check if the function is set correctly
+  if (aFunction->GetDriverGUID() != GEOMImpl_ChamferDriver::GetID())
+       { return NULL; cout << "Chamfer Driver is NULL!!!" << endl; }
+
+  GEOMImpl_IChamfer aCI (aFunction);
+
+  Handle(GEOM_Function) aRefShape = theShape->GetLastFunction();
+  if (aRefShape.IsNull()) { return NULL; cout << "Shape is NULL!!!" << endl; }
+
+  aCI.SetShape(aRefShape);
+  aCI.SetD(theD);
+  aCI.SetAngle(theAngle);
+  int aLen = theEdges.size();
+  aCI.SetLength(aLen);
+
+  int ind = 1;
+  list<int>::iterator it = theEdges.begin();
+  for (; it != theEdges.end(); it++, ind++) {
+    aCI.SetEdge(ind, (*it));
+  }
+
+  //Compute the Chamfer value
+  try {
+#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
+    OCC_CATCH_SIGNALS;
+#endif
+    if (!GetSolver()->ComputeFunction(aFunction)) {
+      SetErrorCode("Chamfer 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 pd (aFunction);
+  pd << aChamfer << " = geompy.MakeChamferEdgesAD(" << theShape
+    << ", " << theD << ", " << theAngle << ", [";
+
+  it = theEdges.begin();
+  pd << (*it++);
+  while (it != theEdges.end()) {
+    pd << ", " << (*it++);
+  }
+  pd << "])";
+
+  SetErrorCode(OK);
+  return aChamfer;
+}
+
 //=============================================================================
 /*!
  *  Archimede
index a079bc569f8ecf59dcd9f11cc1d3db4f9f406523..479d1dc8b8180fb2325959382911e8d1b3e7aff6 100644 (file)
@@ -37,17 +37,34 @@ class GEOMImpl_ILocalOperations : public GEOM_IOperations {
   Standard_EXPORT Handle(GEOM_Object) MakeFilletAll   (Handle(GEOM_Object) theShape, double theR);
   Standard_EXPORT Handle(GEOM_Object) MakeFilletEdges (Handle(GEOM_Object) theShape, double theR,
                                        list<int> theEdges);
+  Standard_EXPORT Handle(GEOM_Object) MakeFilletEdgesR1R2 (Handle(GEOM_Object) theShape,
+                                                           double theR1, double theR2,
+                                                           list<int> theEdges);
   Standard_EXPORT Handle(GEOM_Object) MakeFilletFaces (Handle(GEOM_Object) theShape, double theR,
                                        list<int> theFaces);
+  Standard_EXPORT Handle(GEOM_Object) MakeFilletFacesR1R2 (Handle(GEOM_Object) theShape,
+                                                           double theR1, double theR2,
+                                                           list<int> theFaces);
 
   Standard_EXPORT Handle(GEOM_Object) MakeChamferAll   (Handle(GEOM_Object) theShape, double theD);
   Standard_EXPORT Handle(GEOM_Object) MakeChamferEdge  (Handle(GEOM_Object) theShape,
                                         double theD1, double theD2,
                                         int theFace1, int theFace2);
+  Standard_EXPORT Handle(GEOM_Object) MakeChamferEdgeAD  (Handle(GEOM_Object) theShape,
+                                        double theD, double theAngle,
+                                        int theFace1, int theFace2);
   Standard_EXPORT Handle(GEOM_Object) MakeChamferFaces (Handle(GEOM_Object) theShape,
                                         double theD1, double theD2,
                                         list<int> theFaces);
-
+  Standard_EXPORT Handle(GEOM_Object) MakeChamferFacesAD (Handle(GEOM_Object) theShape,
+                                        double theD, double theAngle,
+                                        list<int> theFaces);
+  Standard_EXPORT Handle(GEOM_Object) MakeChamferEdges (Handle(GEOM_Object) theShape,
+                                        double theD1, double theD2,
+                                        list<int> theEdges);
+  Standard_EXPORT Handle(GEOM_Object) MakeChamferEdgesAD (Handle(GEOM_Object) theShape,
+                                        double theD, double theAngle,
+                                        list<int> theEdges);
   Standard_EXPORT Handle(GEOM_Object) MakeArchimede (Handle(GEOM_Object) theShape,
                                      double theWeight, double theWaterDensity,
                                      double theMeshingDeflection);
index adf62991755cde5a01708b519ce6ab97d87a52c5..23b93efd56bd3a5bb1beb626d7a5ca1137abfe71 100755 (executable)
 #define PIPE_BASE_PATH 1
 #define PIPE_DIFFERENT_SECTIONS 2
 #define PIPE_SHELL_SECTIONS 3
+#define PIPE_SHELLS_WITHOUT_PATH 4
 
 #define THRUSECTIONS_RULED 1
 #define THRUSECTIONS_SMOOTHED 2
 
 #define CIRCLE_THREE_PNT 1
 #define CIRCLE_PNT_VEC_R 2
+#define CIRCLE_CENTER_TWO_PNT 3
 
 #define SPLINE_BEZIER        1
 #define SPLINE_INTERPOLATION 2
 #define CIRC_ARC_THREE_PNT 1
 #define CIRC_ARC_CENTER    2
 
-#define FILLET_SHAPE_ALL   1
-#define FILLET_SHAPE_EDGES 2
-#define FILLET_SHAPE_FACES 3
-
-#define CHAMFER_SHAPE_ALL   1
-#define CHAMFER_SHAPE_EDGE  2
-#define CHAMFER_SHAPE_FACES 3
+#define FILLET_SHAPE_ALL      1
+#define FILLET_SHAPE_EDGES    2
+#define FILLET_SHAPE_FACES    3
+#define FILLET_SHAPE_EDGES_2R 4
+#define FILLET_SHAPE_FACES_2R 5
+
+#define CHAMFER_SHAPE_ALL      1
+#define CHAMFER_SHAPE_EDGE     2
+#define CHAMFER_SHAPE_FACES    3
+#define CHAMFER_SHAPE_EDGES    4
+#define CHAMFER_SHAPE_EDGE_AD  5
+#define CHAMFER_SHAPE_FACES_AD 6
+#define CHAMFER_SHAPE_EDGES_AD 7
 
 #define WIRE_EDGES          1
 #define FACE_WIRE           2
index ea89b37092885c20d87bdf74e6b067d4bb58991b..3a15afb1b22a13b134b2db3fca8cd71ee8dae219 100644 (file)
@@ -119,6 +119,40 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCircleThreePnt
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeCircleCenter2Pnt
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCircleCenter2Pnt
+                      (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2,
+                      GEOM::GEOM_Object_ptr thePnt3)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  //Set a not done flag
+  GetOperations()->SetNotDone();
+
+  if (thePnt1 == NULL || thePnt2 == NULL || thePnt3 == NULL) return aGEOMObject._retn();
+
+  //Get the reference points
+  Handle(GEOM_Object) aPnt1 = GetOperations()->GetEngine()->GetObject
+    (thePnt1->GetStudyID(), thePnt1->GetEntry());
+  Handle(GEOM_Object) aPnt2 = GetOperations()->GetEngine()->GetObject
+    (thePnt2->GetStudyID(), thePnt2->GetEntry());
+  Handle(GEOM_Object) aPnt3 = GetOperations()->GetEngine()->GetObject
+    (thePnt3->GetStudyID(), thePnt3->GetEntry());
+
+  if (aPnt1.IsNull() || aPnt2.IsNull() || aPnt3.IsNull()) return aGEOMObject._retn();
+
+  // Make Circle
+  Handle(GEOM_Object) anObject = GetOperations()->MakeCircleCenter2Pnt(aPnt1, aPnt2, aPnt3);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeEllipse
index f316dab52290ea16effa5f0e864dd1cf1ea1fcda..d341c457528365b0cc1dc49bb3d758c2cd8ed6c5 100644 (file)
@@ -48,6 +48,10 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i :
                                            GEOM::GEOM_Object_ptr thePnt2,
                                            GEOM::GEOM_Object_ptr thePnt3);
 
+  GEOM::GEOM_Object_ptr MakeCircleCenter2Pnt (GEOM::GEOM_Object_ptr thePnt1,
+                                             GEOM::GEOM_Object_ptr thePnt2,
+                                             GEOM::GEOM_Object_ptr thePnt3);
+
   GEOM::GEOM_Object_ptr MakeEllipse (GEOM::GEOM_Object_ptr theCenter,
                                     GEOM::GEOM_Object_ptr theVector,
                                     double theRMajor, double theRMinor);
index 5b2430e9fc97d052fe0259970752816b825415b0..a9ec1fc6dae486a1f7e085f30232a641bd152da5 100644 (file)
@@ -114,6 +114,41 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdges
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeFilletEdges R1 R2
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletEdgesR1R2
+                     (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
+                      CORBA::Double theR2, const GEOM::ListOfLong& theEdges)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Get the reference edges
+  int ind = 0;
+  int aLen = theEdges.length();
+  list<int> anEdges;
+  for (; ind < aLen; ind++) {
+    anEdges.push_back(theEdges[ind]);
+  }
+
+  //Create the Fillet
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeFilletEdgesR1R2(aShapeRef, theR1, theR2, anEdges);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeFilletFaces
@@ -149,6 +184,41 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFaces
   return GetObject(anObject);
 }
 
+//=============================================================================
+/*!
+ *  MakeFilletFaces R1 R2
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeFilletFacesR1R2
+                      (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
+                       CORBA::Double theR2, const GEOM::ListOfLong& theFaces)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Get the reference faces
+  int ind = 0;
+  int aLen = theFaces.length();
+  list<int> aFaces;
+  for (; ind < aLen; ind++) {
+    aFaces.push_back(theFaces[ind]);
+  }
+
+  //Create the Fillet
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeFilletFacesR1R2(aShapeRef, theR1, theR2, aFaces);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
 //=============================================================================
 /*!
  *  MakeChamferAll
@@ -203,6 +273,33 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdge
 
   return GetObject(anObject);
 }
+//=============================================================================
+/*!
+ *  MakeChamferEdgeAD
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgeAD
+                      (GEOM::GEOM_Object_ptr theShape,
+                      CORBA::Double theD, CORBA::Double theAngle,
+                      CORBA::Long theFace1, CORBA::Long theFace2)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Create the Chamfer
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeChamferEdgeAD(aShapeRef, theD, theAngle, theFace1, theFace2);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
 
 //=============================================================================
 /*!
@@ -239,6 +336,113 @@ GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFaces
 
   return GetObject(anObject);
 }
+//=============================================================================
+/*!
+ *  MakeChamferFacesAD
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferFacesAD
+                      (GEOM::GEOM_Object_ptr theShape,
+                      CORBA::Double theD, CORBA::Double theAngle,
+                      const GEOM::ListOfLong& theFaces)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Get the reference faces
+  int ind = 0;
+  int aLen = theFaces.length();
+  list<int> aFaces;
+  for (; ind < aLen; ind++) {
+    aFaces.push_back(theFaces[ind]);
+  }
+
+  //Create the Chamfer
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeChamferFacesAD(aShapeRef, theD, theAngle, aFaces);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ *  MakeChamferEdges
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdges
+                      (GEOM::GEOM_Object_ptr theShape,
+                      CORBA::Double theD1, CORBA::Double theD2,
+                      const GEOM::ListOfLong& theEdges)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Get the reference edges
+  int ind = 0;
+  int aLen = theEdges.length();
+  list<int> aEdges;
+  for (; ind < aLen; ind++) {
+    aEdges.push_back(theEdges[ind]);
+  }
+
+  //Create the Chamfer
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeChamferEdges(aShapeRef, theD1, theD2, aEdges);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
+
+//=============================================================================
+/*!
+ *  MakeChamferEdgesAD
+ */
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_ILocalOperations_i::MakeChamferEdgesAD
+                      (GEOM::GEOM_Object_ptr theShape,
+                      CORBA::Double theD, CORBA::Double theAngle,
+                      const GEOM::ListOfLong& theEdges)
+{
+  GEOM::GEOM_Object_var aGEOMObject;
+
+  if (theShape == NULL) return aGEOMObject._retn();
+
+  //Get the reference shape
+  Handle(GEOM_Object) aShapeRef = GetOperations()->GetEngine()->GetObject
+    (theShape->GetStudyID(), theShape->GetEntry());
+  if (aShapeRef.IsNull()) return aGEOMObject._retn();
+
+  //Get the reference edges
+  int ind = 0;
+  int aLen = theEdges.length();
+  list<int> aEdges;
+  for (; ind < aLen; ind++) {
+    aEdges.push_back(theEdges[ind]);
+  }
+
+  //Create the Chamfer
+  Handle(GEOM_Object) anObject =
+    GetOperations()->MakeChamferEdgesAD(aShapeRef, theD, theAngle, aEdges);
+  if (!GetOperations()->IsDone() || anObject.IsNull())
+    return aGEOMObject._retn();
+
+  return GetObject(anObject);
+}
 
 //=============================================================================
 /*!
index c8f4a6565a25fc493938fca0a14bdcdbef848446..79a80acfc2f0fc5e46afe60e0ed457aaec4183c4 100644 (file)
@@ -42,19 +42,49 @@ class GEOM_I_EXPORT GEOM_ILocalOperations_i :
 
   GEOM::GEOM_Object_ptr MakeFilletAll   (GEOM::GEOM_Object_ptr theShape,
                                         CORBA::Double theR);
+
   GEOM::GEOM_Object_ptr MakeFilletEdges (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
                                         const GEOM::ListOfLong& theEdges);
+
+  GEOM::GEOM_Object_ptr MakeFilletEdgesR1R2 (GEOM::GEOM_Object_ptr theShape,
+                                             CORBA::Double theR1,
+                                             CORBA::Double theR2,
+                                            const GEOM::ListOfLong& theEdges);
+
   GEOM::GEOM_Object_ptr MakeFilletFaces (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
                                         const GEOM::ListOfLong& theFaces);
 
+  GEOM::GEOM_Object_ptr MakeFilletFacesR1R2 (GEOM::GEOM_Object_ptr theShape,
+                                             CORBA::Double theR1,
+                                             CORBA::Double theR2,
+                                            const GEOM::ListOfLong& theFaces);
+
   GEOM::GEOM_Object_ptr MakeChamferAll   (GEOM::GEOM_Object_ptr theShape, CORBA::Double theD);
+
   GEOM::GEOM_Object_ptr MakeChamferEdge  (GEOM::GEOM_Object_ptr theShape,
                                          CORBA::Double theD1, CORBA::Double theD2,
                                          CORBA::Long theFace1, CORBA::Long theFace2);
+
+  GEOM::GEOM_Object_ptr MakeChamferEdgeAD  (GEOM::GEOM_Object_ptr theShape,
+                                           CORBA::Double theD, CORBA::Double theAngle,
+                                           CORBA::Long theFace1, CORBA::Long theFace2);
+
   GEOM::GEOM_Object_ptr MakeChamferFaces (GEOM::GEOM_Object_ptr theShape,
                                          CORBA::Double theD1, CORBA::Double theD2,
                                          const GEOM::ListOfLong& theFaces);
 
+  GEOM::GEOM_Object_ptr MakeChamferFacesAD (GEOM::GEOM_Object_ptr theShape,
+                                           CORBA::Double theD, CORBA::Double theAngle,
+                                           const GEOM::ListOfLong& theFaces);
+
+  GEOM::GEOM_Object_ptr MakeChamferEdges (GEOM::GEOM_Object_ptr theShape,
+                                         CORBA::Double theD1, CORBA::Double theD2,
+                                         const GEOM::ListOfLong& theEdges);
+
+  GEOM::GEOM_Object_ptr MakeChamferEdgesAD (GEOM::GEOM_Object_ptr theShape,
+                                           CORBA::Double theD, CORBA::Double theAngle,
+                                           const GEOM::ListOfLong& theEdges);
+
   GEOM::GEOM_Object_ptr MakeArchimede (GEOM::GEOM_Object_ptr theShape,
                                        CORBA::Double theWeight,
                                       CORBA::Double theWaterDensity,
index fa0a64a0e70081a9cfcf5cefb2a60935cd624bcf..31c215150d7bd884917e92158a91d8d7827c5dcd 100644 (file)
@@ -993,7 +993,6 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithDifferentSections
   return anObj;
 }
 
-
 //=============================================================================
 //  MakePipe:
 //=============================================================================
@@ -1016,7 +1015,6 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePipeWithShellSections
   return anObj;
 }
 
-
 //=============================================================================
 //  MakeFuse:
 //=============================================================================
@@ -2166,6 +2164,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCircleThreePnt (GEOM::GEOM_Object_ptr t
   endService( " GEOM_Superv_i::MakeCircleThreePnt" );
   return anObj;
 }
+//=============================================================================
+//  MakeCircleCenter2Pnt:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeCircleCenter2Pnt (GEOM::GEOM_Object_ptr thePnt1,
+                                                          GEOM::GEOM_Object_ptr thePnt2,
+                                                          GEOM::GEOM_Object_ptr thePnt3)
+{
+  beginService( " GEOM_Superv_i::MakeCircleCenter2Pnt" );
+  MESSAGE("GEOM_Superv_i::MakeCircleCenter2Pnt");
+  getCurvesOp();
+  GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeCircleCenter2Pnt(thePnt1, thePnt2, thePnt3);
+  endService( " GEOM_Superv_i::MakeCircleCenter2Pnt" );
+  return anObj;
+}
 
 //=============================================================================
 //  MakeEllipse:
@@ -2322,6 +2334,28 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletEdges (GEOM::GEOM_Object_ptr theS
   return NULL;
 }
 
+//=============================================================================
+//  MakeFilletEdges R1 R2:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletEdgesR1R2 (GEOM::GEOM_Object_ptr theShape, 
+                                                         CORBA::Double theR1,
+                                                         CORBA::Double theR2,
+                                                         GEOM::GEOM_List_ptr theEdges)
+{
+  beginService( " GEOM_Superv_i::MakeFilletEdgesR1R2" );
+  MESSAGE("GEOM_Superv_i::MakeFilletEdgesR1R2");
+  if (GEOM_List_i<GEOM::ListOfLong>* aListImplE = 
+      dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theEdges, myPOA).in())) {
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeFilletEdgesR1R2(theShape, theR1,
+                                                                 theR2, aListImplE->GetList());
+    endService( " GEOM_Superv_i::MakeFilletEdgesR1R2" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeFilletEdgesR1R2" );
+  return NULL;
+}
+
 //=============================================================================
 //  MakeFilletFaces:
 //=============================================================================
@@ -2342,6 +2376,28 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletFaces (GEOM::GEOM_Object_ptr theS
   return NULL;
 }
 
+//=============================================================================
+//  MakeFilletFaces R1 R2:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilletFacesR1R2 (GEOM::GEOM_Object_ptr theShape, 
+                                                         CORBA::Double theR1,
+                                                         CORBA::Double theR2,
+                                                         GEOM::GEOM_List_ptr theFaces)
+{
+  beginService( " GEOM_Superv_i::MakeFilletFacesR1R2" );
+  MESSAGE("GEOM_Superv_i::MakeFilletFacesR1R2");
+  if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
+      dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theFaces, myPOA).in())) {
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeFilletFacesR1R2(theShape, theR1, theR2,
+                                                                 aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeFilletFacesR1R2" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeFilletFacesR1R2" );
+  return NULL;
+}
+
 //=============================================================================
 //  MakeChamferAll:
 //=============================================================================
@@ -2370,6 +2426,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferEdge (GEOM::GEOM_Object_ptr theS
   return anObj;
 }
 
+//=============================================================================
+//  MakeChamferEdgeAD:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferEdgeAD (GEOM::GEOM_Object_ptr theShape,
+                                                       CORBA::Double theD, CORBA::Double theAngle,
+                                                       CORBA::Long theFace1, CORBA::Long theFace2)
+{
+  beginService( " GEOM_Superv_i::MakeChamferEdgeAD" );
+  MESSAGE("GEOM_Superv_i::MakeChamferEdgeAD");
+  getLocalOp();
+  GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferEdgeAD(theShape, theD, theAngle, theFace1, theFace2);
+  endService( " GEOM_Superv_i::MakeChamferEdgeAD" );
+  return anObj;
+}
+
 //=============================================================================
 //  MakeChamferFaces:
 //=============================================================================
@@ -2390,6 +2461,66 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferFaces (GEOM::GEOM_Object_ptr the
   return NULL;
 }
 
+//=============================================================================
+//  MakeChamferFacesAD:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferFacesAD (GEOM::GEOM_Object_ptr theShape,
+                                                        CORBA::Double theD, CORBA::Double theAngle,
+                                                        GEOM::GEOM_List_ptr theFaces)
+{
+  beginService( " GEOM_Superv_i::MakeChamferFacesAD" );
+  MESSAGE("GEOM_Superv_i::MakeChamferFacesAD");
+  if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
+      dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theFaces, myPOA).in())) {
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferFacesAD(theShape, theD, theAngle, aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeChamferFacesAD" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeChamferFacesAD" );
+  return NULL;
+}
+
+//=============================================================================
+//  MakeChamferEdges:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferEdges (GEOM::GEOM_Object_ptr theShape,
+                                                      CORBA::Double theD1, CORBA::Double theD2,
+                                                      GEOM::GEOM_List_ptr theEdges)
+{
+  beginService( " GEOM_Superv_i::MakeChamferEdges" );
+  MESSAGE("GEOM_Superv_i::MakeChamferEdges");
+  if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
+      dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theEdges, myPOA).in())) {
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferEdges(theShape, theD1, theD2, aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeChamferEdges" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeChamferEdges" );
+  return NULL;
+}
+
+//=============================================================================
+//  MakeChamferEdgesAD:
+//=============================================================================
+GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeChamferEdgesAD (GEOM::GEOM_Object_ptr theShape,
+                                                        CORBA::Double theD, CORBA::Double theAngle,
+                                                        GEOM::GEOM_List_ptr theEdges)
+{
+  beginService( " GEOM_Superv_i::MakeChamferEdgesAD" );
+  MESSAGE("GEOM_Superv_i::MakeChamferEdgesAD");
+  if (GEOM_List_i<GEOM::ListOfLong>* aListImplF = 
+      dynamic_cast<GEOM_List_i<GEOM::ListOfLong>*>(GetServant(theEdges, myPOA).in())) {
+    getLocalOp();
+    GEOM::GEOM_Object_ptr anObj = myLocalOp->MakeChamferEdgesAD(theShape, theD, theAngle, aListImplF->GetList());
+    endService( " GEOM_Superv_i::MakeChamferEdgesAD" );
+    return anObj;
+  }
+  endService( " GEOM_Superv_i::MakeChamferEdgesAD" );
+  return NULL;
+}
+
 //=============================================================================
 //  MakeArchimede:
 //=============================================================================
index 84773c8c4ca0b71ce7a8b8d5e7f101dda9b4b0f2..6075d24051925f14e93c48470727789c9d27bf30 100644 (file)
@@ -243,7 +243,7 @@ public:
                                                  GEOM::GEOM_Object_ptr thePath,
                                                  CORBA::Boolean theWithContact,
                                                  CORBA::Boolean theWithCorrections);
-  
+
   //-----------------------------------------------------------//
   // BooleanOperations                                         //
   //-----------------------------------------------------------//
@@ -477,6 +477,9 @@ public:
   GEOM::GEOM_Object_ptr MakeCircleThreePnt (GEOM::GEOM_Object_ptr thePnt1,
                                            GEOM::GEOM_Object_ptr thePnt2,
                                            GEOM::GEOM_Object_ptr thePnt3);
+  GEOM::GEOM_Object_ptr MakeCircleCenter2Pnt (GEOM::GEOM_Object_ptr thePnt1,
+                                             GEOM::GEOM_Object_ptr thePnt2,
+                                             GEOM::GEOM_Object_ptr thePnt3);
   GEOM::GEOM_Object_ptr MakeEllipse (GEOM::GEOM_Object_ptr theCenter,
                                     GEOM::GEOM_Object_ptr theVector,
                                     CORBA::Double theRMajor, CORBA::Double theRMinor);
@@ -500,15 +503,31 @@ public:
                                       CORBA::Double theR);
   GEOM::GEOM_Object_ptr MakeFilletEdges (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
                                         GEOM::GEOM_List_ptr theEdges);
+  GEOM::GEOM_Object_ptr MakeFilletEdgesR1R2 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
+                                            CORBA::Double theR2, GEOM::GEOM_List_ptr theEdges);
   GEOM::GEOM_Object_ptr MakeFilletFaces (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR,
                                         GEOM::GEOM_List_ptr theFaces);
+  GEOM::GEOM_Object_ptr MakeFilletFacesR1R2 (GEOM::GEOM_Object_ptr theShape, CORBA::Double theR1,
+                                            CORBA::Double theR2, GEOM::GEOM_List_ptr theFaces);
   GEOM::GEOM_Object_ptr MakeChamferAll (GEOM::GEOM_Object_ptr theShape, CORBA::Double theD);
   GEOM::GEOM_Object_ptr MakeChamferEdge (GEOM::GEOM_Object_ptr theShape,
                                         CORBA::Double theD1, CORBA::Double theD2,
                                         CORBA::Long theFace1, CORBA::Long theFace2);
+  GEOM::GEOM_Object_ptr MakeChamferEdgeAD (GEOM::GEOM_Object_ptr theShape,
+                                          CORBA::Double theD, CORBA::Double theAngle,
+                                          CORBA::Long theFace1, CORBA::Long theFace2);
   GEOM::GEOM_Object_ptr MakeChamferFaces (GEOM::GEOM_Object_ptr theShape,
                                          CORBA::Double theD1, CORBA::Double theD2,
                                          GEOM::GEOM_List_ptr theFaces);
+  GEOM::GEOM_Object_ptr MakeChamferFacesAD (GEOM::GEOM_Object_ptr theShape,
+                                           CORBA::Double theD, CORBA::Double theAngle,
+                                           GEOM::GEOM_List_ptr theFaces);
+  GEOM::GEOM_Object_ptr MakeChamferEdges (GEOM::GEOM_Object_ptr theShape,
+                                         CORBA::Double theD1, CORBA::Double theD2,
+                                         GEOM::GEOM_List_ptr theEdges);
+  GEOM::GEOM_Object_ptr MakeChamferEdgesAD (GEOM::GEOM_Object_ptr theShape,
+                                           CORBA::Double theD, CORBA::Double theAngle,
+                                           GEOM::GEOM_List_ptr theEdges);
   GEOM::GEOM_Object_ptr MakeArchimede (GEOM::GEOM_Object_ptr theShape,
                                        CORBA::Double theWeight,
                                       CORBA::Double theWaterDensity,
index a044befec569c5af172c3c90844eefaccd61b355..54b2762d6477b0bce9fe193af92470ae605929be 100644 (file)
@@ -1,6 +1,7 @@
 #  GEOM GEOM_SWIG : binding of C++ omplementaion with Python
 #
 #  Copyright (C) 2003  CEA
+
 #
 #  This library is free software; you can redistribute it and/or
 #  modify it under the terms of the GNU Lesser General Public
@@ -24,6 +25,7 @@
 #  Module : GEOM
 #  $Header$
 
+
 def TestAll (geompy, math):
 
   #Create base Variables
@@ -87,6 +89,7 @@ def TestAll (geompy, math):
   Arc2     = geompy.MakeArcCenter(py, pz, px,0)           #(3 GEOM_Object_ptr,Boolean)->GEOM_Object_ptr
   Circle   = geompy.MakeCircle(p0, vz, radius1)           #(2 GEOM_Object_ptr, Double)->GEOM_Object_ptr
   Circle1  = geompy.MakeCircleThreePnt(p0, pxyz, px)      #(3 GEOM_Object_ptr)->GEOM_Object_ptr
+  Circle2  = geompy.MakeCircleCenter2Pnt(p0, pxyz, py)    #(3 GEOM_Object_ptr)->GEOM_Object_ptr
   Ellipse  = geompy.MakeEllipse(p0, vy, radius2, radius1) #(2 GEOM_Object_ptr, 2 Doubles)->GEOM_Object_ptr
   Polyline = geompy.MakePolyline([p0, pz, py, p200])      #(List of GEOM_Object_ptr)->GEOM_Object_ptr
   Bezier   = geompy.MakeBezier([p0, pz, p200, px])        #(List of GEOM_Object_ptr)->GEOM_Object_ptr
@@ -191,14 +194,20 @@ def TestAll (geompy, math):
   f_ind_2 = geompy.GetSubShapeID(Prism, prism_faces[1])
 
   IDlist_f = [f_ind_1, f_ind_2]
-
+  
   #Local operations
   Fillet   = geompy.MakeFillet (Prism, radius, ShapeTypeEdge,
                                 IDlist_e) #(GEOM_Object_ptr, Double, Short, ListOfLong)->GEOM_Object_ptr
+  Fillet2  = geompy.MakeFilletR1R2 (Prism, 7., 13., ShapeTypeEdge,
+                                    IDlist_e) #(GEOM_Object_ptr, Double, Double, Short, ListOfLong)->GEOM_Object_ptr
   Chamfer  = geompy.MakeChamferEdge(Prism, d1, d2,
                                     f_ind_1, f_ind_2) #(GEOM_Object_ptr, 2 Doubles, 2 Long)->GEOM_Object_ptr
   Chamfer2 = geompy.MakeChamferFaces(Prism, d1, d2,
                                      IDlist_f) #(GEOM_Object_ptr, 2 Doubles, ListOfLong)->GEOM_Object_ptr
+  Chamfer3 = geompy.MakeChamferEdges(Prism, d1, d2,
+                                     IDlist_e) #(GEOM_Object_ptr, 2 Doubles, ListOfLong)->GEOM_Object_ptr
+  Chamfer4 = geompy.MakeChamferFacesAD(Prism, d1, 0.2,
+                                       IDlist_f) #(GEOM_Object_ptr, 2 Doubles, ListOfLong)->GEOM_Object_ptr
 
   #Create Patterns
   MultiTrans1D = geompy.MakeMultiTranslation1D(Fillet, vz, step1, nbtimes1)
@@ -244,6 +253,7 @@ def TestAll (geompy, math):
   id_Arc      = geompy.addToStudy(Arc,      "Arc")
   id_Circle   = geompy.addToStudy(Circle,   "Circle")
   id_Circle1  = geompy.addToStudy(Circle1,  "Circle by 3 points")
+  id_Circle2  = geompy.addToStudy(Circle2,  "Circle by center and 2 points")
   id_Ellipse  = geompy.addToStudy(Ellipse,  "Ellipse")
   id_Polyline = geompy.addToStudy(Polyline, "Polyline")
   id_Bezier   = geompy.addToStudy(Bezier,   "Bezier")
@@ -304,8 +314,11 @@ def TestAll (geompy, math):
   id_Orientation = geompy.addToStudy(Orientation, "Orientation")
 
   id_Fillet   = geompy.addToStudy(Fillet,   "Fillet")
+  id_Fillet2  = geompy.addToStudy(Fillet2,  "Fillet2")
   id_Chamfer  = geompy.addToStudy(Chamfer,  "Chamfer on Edge")
   id_Chamfer2 = geompy.addToStudy(Chamfer2, "Chamfer on Faces")
+  id_Chamfer3 = geompy.addToStudy(Chamfer3, "Chamfer on Edges")
+  id_Chamfer4 = geompy.addToStudy(Chamfer4, "Chamfer on Faces with params D Angle")
 
   id_MultiTrans1D = geompy.addToStudy(MultiTrans1D, "MultiTrans1D")
   id_MultiTrans2D = geompy.addToStudy(MultiTrans2D, "MultiTrans2D")
diff --git a/src/GEOM_SWIG/GEOM_example6.py b/src/GEOM_SWIG/GEOM_example6.py
new file mode 100755 (executable)
index 0000000..91c3739
--- /dev/null
@@ -0,0 +1,60 @@
+#  GEOM GEOM_SWIG : binding of C++ omplementaion with Python\r
+#\r
+#  Copyright (C) 2003  CEA\r
+#\r
+#  This library is free software; you can redistribute it and/or\r
+#  modify it under the terms of the GNU Lesser General Public\r
+#  License as published by the Free Software Foundation; either\r
+#  version 2.1 of the License.\r
+#\r
+#  This library is distributed in the hope that it will be useful,\r
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+#  Lesser General Public License for more details.\r
+#\r
+#  You should have received a copy of the GNU Lesser General Public\r
+#  License along with this library; if not, write to the Free Software\r
+#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA\r
+#\r
+# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
+#\r
+#\r
+#  File   : GEOM_example6.py\r
+#  Author : Dmitry MATVEITCHEV\r
+#  Module : GEOM\r
+#  $Header$\r
+\r
+\r
+import salome\r
+import geompy\r
+\r
+ind = 1\r
+circlelist = []\r
+while ind < 6:\r
+    x1 = 0. + (10. * ind)\r
+    y1 = 0.\r
+    z1 = 0.\r
+    x2 = 10. + (10. * ind)\r
+    y2 = 20. * (ind+1)\r
+    z2 = 30. * (ind+1)\r
+    x3 = 50. + (10. * ind)\r
+    y3 = 0. * (ind+1)\r
+    z3 = -10. * (ind+1)\r
+\r
+    print x1, y1, z1, x2, y2, z2, x3, y3, z3\r
+\r
+    point1 = geompy.MakeVertex(x1, y1, z1)\r
+    name1 = "point1_%d"%(ind)\r
+    id_pt1 = geompy.addToStudy(point1, name1)\r
+    point2 = geompy.MakeVertex(x2, y2, z2)\r
+    name2 = "point2_%d"%(ind)\r
+    id_pt2 = geompy.addToStudy(point2, name2)\r
+    point3 = geompy.MakeVertex(x3, y3, z3)\r
+    name3 = "point3_%d"%(ind)\r
+    id_pt3 = geompy.addToStudy(point3, name3)\r
+\r
+    name = "circle%d"%(ind)\r
+    circle = geompy.MakeCircleCenter2Pnt(point1, point2, point3)\r
+    id_circle = geompy.addToStudy(circle, name)\r
+    circlelist.append(circle)\r
+    ind = ind + 1\r
index ca9cc2ea7a0f29672998a7d4fd557f840395f3a1..040d500ce75578ceb7db88f7163306b944e8920c 100644 (file)
@@ -54,6 +54,7 @@ dist_salomescript_DATA= \
        GEOM_example3.py \
        GEOM_example4.py \
        GEOM_example5.py \
+       GEOM_example6.py \
        GEOM_moteur.py \
        GEOM_TestAll.py  \
        GEOM_TestOthers.py \
index 42e9ec5c292f961cb4086fd7a53ccf15f22d3a0c..145f962fb8730a4ee0ab66df4dbc6693183abde9 100644 (file)
@@ -249,6 +249,12 @@ def MakeCircleThreePnt(p1,p2,p3):
       print "MakeCircleThreePnt : ", CurvesOp.GetErrorCode()
     return anObj
 
+def MakeCircleCenter2Pnt(p1,p2,p3):
+    anObj = CurvesOp.MakeCircleCenter2Pnt(p1,p2,p3)
+    if CurvesOp.IsDone() == 0:
+      print "MakeCircleCenter2Pnt : ", CurvesOp.GetErrorCode()
+    return anObj
+
 def MakeEllipse(p1,v1,radiusMaj,radiusMin):
     anObj = CurvesOp.MakeEllipse(p1,v1,radiusMaj, radiusMin)
     if CurvesOp.IsDone() == 0:
@@ -852,6 +858,16 @@ def MakeFillet(aShape,radius,aShapeType,ListShape):
       print "MakeFillet : ", LocalOp.GetErrorCode()
     return anObj
 
+def MakeFilletR1R2(aShape,radius1,radius2,aShapeType,ListShape):
+    anObj = None
+    if aShapeType == ShapeType["EDGE"]:
+        anObj = LocalOp.MakeFilletEdgesR1R2(aShape,radius1,radius2,ListShape)
+    else:
+        anObj = LocalOp.MakeFilletFacesR1R2(aShape,radius1,radius2,ListShape)
+    if LocalOp.IsDone() == 0:
+      print "MakeFilletR1R2 : ", LocalOp.GetErrorCode()
+    return anObj
+
 def MakeChamferAll(aShape,d):
     anObj = LocalOp.MakeChamferAll(aShape,d)
     if LocalOp.IsDone() == 0:
@@ -864,12 +880,36 @@ def MakeChamferEdge(aShape,d1,d2,face1,face2):
       print "MakeChamferEdge : ", LocalOp.GetErrorCode()
     return anObj
 
+def MakeChamferEdgeAD(aShape,d,angle,face1,face2):
+    anObj = LocalOp.MakeChamferEdgeAD(aShape,d,angle,face1,face2)
+    if LocalOp.IsDone() == 0:
+      print "MakeChamferEdgeAD : ", LocalOp.GetErrorCode()
+    return anObj
+
 def MakeChamferFaces(aShape,d1,d2,ListShape):
     anObj = LocalOp.MakeChamferFaces(aShape,d1,d2,ListShape)
     if LocalOp.IsDone() == 0:
       print "MakeChamferFaces : ", LocalOp.GetErrorCode()
     return anObj
 
+def MakeChamferFacesAD(aShape,d,angle,ListShape):
+    anObj = LocalOp.MakeChamferFacesAD(aShape,d,angle,ListShape)
+    if LocalOp.IsDone() == 0:
+      print "MakeChamferFacesAD : ", LocalOp.GetErrorCode()
+    return anObj
+
+def MakeChamferEdges(aShape,d1,d2,ListShape):
+    anObj = LocalOp.MakeChamferEdges(aShape,d1,d2,ListShape)
+    if LocalOp.IsDone() == 0:
+      print "MakeChamferEdges : ", LocalOp.GetErrorCode()
+    return anObj
+
+def MakeChamferEdgesAD(aShape,d,angle,ListShape):
+    anObj = LocalOp.MakeChamferEdgesAD(aShape,d,angle,ListShape)
+    if LocalOp.IsDone() == 0:
+      print "MakeChamferEdgesAD : ", LocalOp.GetErrorCode()
+    return anObj
+
 def MakeChamfer(aShape,d1,d2,aShapeType,ListShape):
     anObj = None
     if aShapeType == ShapeType["EDGE"]:
index 0e1cb2aeb481003294a5c16747191f9bb80268e8..011711d177f51f4f4d257cc79bbb3613b33543d2 100644 (file)
@@ -371,6 +371,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             if self.CurvesOp.IsDone() == 0:
                 print "MakeCircleThreePnt : ", self.CurvesOp.GetErrorCode()
             return anObj
+
+        ## Create a circle, with given point1 as center,
+        #  passing through the point2 as radius and laying in the plane,
+        #  defined by all three given points.
+        #  @param thePnt1,thePnt2,thePnt3 Points, defining the circle.
+        #  @return New GEOM_Object, containing the created circle.
+        #
+        #  Example: see GEOM_example6.py
+        def MakeCircleCenter2Pnt(self,thePnt1, thePnt2, thePnt3):
+            anObj = self.CurvesOp.MakeCircleCenter2Pnt(thePnt1, thePnt2, thePnt3)
+            if self.CurvesOp.IsDone() == 0:
+                print "MakeCircleCenter2Pnt : ", self.CurvesOp.GetErrorCode()
+            return anObj
         
         ## Create an ellipse with given center, normal vector and radiuses.
         #  @param thePnt Ellipse center.
@@ -1841,6 +1854,16 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             if self.LocalOp.IsDone() == 0:
                 print "MakeFillet : ", self.LocalOp.GetErrorCode()
             return anObj
+        ## The same but with two Fillet Radius R1 and R2
+        def MakeFilletR1R2(self, theShape, theR1, theR2, theShapeType, theListShapes):
+            anObj = None
+            if theShapeType == ShapeType["EDGE"]:
+                anObj = self.LocalOp.MakeFilletEdgesR1R2(theShape, theR1, theR2, theListShapes)
+            else:
+                anObj = self.LocalOp.MakeFilletFacesR1R2(theShape, theR1, theR2, theListShapes)
+            if self.LocalOp.IsDone() == 0:
+                print "MakeFilletR1R2 : ", self.LocalOp.GetErrorCode()
+            return anObj
         
         ## Perform a symmetric chamfer on all edges of the given shape.
         #  @param theShape Shape, to perform chamfer on.
@@ -1869,6 +1892,13 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             if self.LocalOp.IsDone() == 0:
                 print "MakeChamferEdge : ", self.LocalOp.GetErrorCode()
             return anObj
+        ## The Same chamfer but with params theD is chamfer lenght and
+        #  theAngle is Angle of chamfer (angle in radians)
+        def MakeChamferEdgeAD(self, theShape, theD, theAngle, theFace1, theFace2):
+            anObj = self.LocalOp.MakeChamferEdgeAD(theShape, theD, theAngle, theFace1, theFace2)
+            if self.LocalOp.IsDone() == 0:
+                print "MakeChamferEdgeAD : ", self.LocalOp.GetErrorCode()
+            return anObj
         
         ## Perform a chamfer on all edges of the specified faces,
         #  with distance D1 on the first specified face (if several for one edge)
@@ -1887,6 +1917,34 @@ class geompyDC(GEOM._objref_GEOM_Gen):
             if self.LocalOp.IsDone() == 0:
                 print "MakeChamferFaces : ", self.LocalOp.GetErrorCode()
             return anObj
+        ## The Same chamfer but with params theD is chamfer lenght and
+        #  theAngle is Angle of chamfer (angle in radians)
+        def MakeChamferFacesAD(self, theShape, theD, theAngle, theFaces):
+            anObj = self.LocalOp.MakeChamferFacesAD(theShape, theD, theAngle, theFaces)
+            if self.LocalOp.IsDone() == 0:
+                print "MakeChamferFacesAD : ", self.LocalOp.GetErrorCode()
+            return anObj
+        
+        ## Perform a chamfer on edges,
+        #  with distance D1 on the first specified face (if several for one edge)
+        #  @param theShape Shape, to perform chamfer on.
+        #  @param theD1 and theD2 Chamfer size 
+        #  @param theEdges Sequence of edges of \a theShape.
+        #  @return New GEOM_Object, containing the result shape.
+        #
+        #  Example:
+        def MakeChamferEdges(self, theShape, theD1, theD2, theEdges):
+            anObj = self.LocalOp.MakeChamferEdges(theShape, theD1, theD2, theEdges)
+            if self.LocalOp.IsDone() == 0:
+                print "MakeChamferEdges : ", self.LocalOp.GetErrorCode()
+            return anObj
+        ## The Same chamfer but with params theD is chamfer lenght and
+        #  theAngle is Angle of chamfer (angle in radians)
+        def MakeChamferEdgesAD(self, theShape, theD, theAngle, theEdges):
+            anObj = self.LocalOp.MakeChamferEdgesAD(theShape, theD, theAngle, theEdges)
+            if self.LocalOp.IsDone() == 0:
+                print "MakeChamferEdgesAD : ", self.LocalOp.GetErrorCode()
+            return anObj
         
         ## Shortcut to MakeChamferEdge() and MakeChamferFaces()
         #
index 29ecc1795def759b24192f801cd8b4c9896227fb..b1d3aefff8f4c8ec5cb2793d4c95a7149bd46b49 100644 (file)
@@ -1,22 +1,22 @@
 //  GEOM GEOMGUI : GUI for Geometry component
 //
 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 // 
+//  This library is free software; you can redistribute it and/or
+//  modify it under the terms of the GNU Lesser General Public
+//  License as published by the Free Software Foundation; either
+//  version 2.1 of the License.
+//
+//  This library is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+//  Lesser General Public License for more details.
+//
+//  You should have received a copy of the GNU Lesser General Public
+//  License along with this library; if not, write to the Free Software
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 //
@@ -57,8 +57,9 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   myConstructorId = -1;
 
   QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CHAMFER_ALL")));
-  QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CHAMFER_EDGE")));
+  QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CHAMFER_EDGE_FROM_FACE")));
   QPixmap image3(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CHAMFER_FACE")));
+  QPixmap image4(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_CHAMFER_EDGE")));
   QPixmap iconSelect(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
 
   setCaption( tr( "GEOM_CHAMFER_TITLE" ) );
@@ -68,6 +69,8 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   RadioButton1->setPixmap( image1 );
   RadioButton2->setPixmap( image2 );
   RadioButton3->setPixmap( image3 );
+  RadioButton4->show();
+  RadioButton4->setPixmap( image4 );
 
   // Create first group
 
@@ -82,7 +85,7 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   QGroupBox* aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp1 );
   aSpinGrp->setFrameStyle( QFrame::NoFrame );
   aSpinGrp->setInsideMargin( 0 );
-
+  
   new QLabel( tr( "D" ), aSpinGrp );
   mySpinBox[ SpinBox1 ] = new DlgRef_SpinBox( aSpinGrp );
 
@@ -101,15 +104,32 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   createSelWg( tr( "FACE_1" ), iconSelect, aSelGrp2, Face1 );
   createSelWg( tr( "FACE_2" ), iconSelect, aSelGrp2, Face2 );
 
-  aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp2 );
-  aSpinGrp->setFrameStyle( QFrame::NoFrame );
-  aSpinGrp->setInsideMargin( 0 );
+  QGroupBox* aSpinGrp1 = new QGroupBox( 1, Qt::Vertical, myGrp2 );
+  aSpinGrp1->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp1->setInsideMargin( 0 );
+  
+  myRadioButton[ RadioButton21] = new QRadioButton( aSpinGrp1 );
+
+  new QLabel( tr( "GEOM_D1" ), aSpinGrp1 );
+  mySpinBox[ SpinBox21 ] = new DlgRef_SpinBox( aSpinGrp1 );
+
+  new QLabel( tr( "GEOM_D2" ), aSpinGrp1 );
+  mySpinBox[ SpinBox22 ] = new DlgRef_SpinBox( aSpinGrp1 );
+
+  QGroupBox* aSpinGrp2 = new QGroupBox( 1, Qt::Vertical, myGrp2 );
+  aSpinGrp2->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp2->setInsideMargin( 0 );
+
+  myRadioButton[ RadioButton22] = new QRadioButton( aSpinGrp2 );
 
-  new QLabel( tr( "GEOM_D1" ), aSpinGrp );
-  mySpinBox[ SpinBox21 ] = new DlgRef_SpinBox( aSpinGrp );
+  new QLabel( tr( "GEOM_D" ), aSpinGrp2 );
+  mySpinBox[ SpinBox23 ] = new DlgRef_SpinBox( aSpinGrp2 );
 
-  new QLabel( tr( "GEOM_D2" ), aSpinGrp );
-  mySpinBox[ SpinBox22 ] = new DlgRef_SpinBox( aSpinGrp );
+  new QLabel( tr( "GEOM_ANGLE" ), aSpinGrp2 );
+  mySpinBox[ SpinBox24 ] = new DlgRef_SpinBox( aSpinGrp2 );
+
+ ( new QLabel( myGrp2 ) )->setSizePolicy(
+       QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
 
   // Create third group
 
@@ -122,17 +142,69 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, aSelGrp3, MainObj3 );
   createSelWg( tr( "SELECTED_FACES" ), iconSelect, aSelGrp3, Faces );
 
-  aSpinGrp = new QGroupBox( 1, Qt::Vertical, myGrp3 );
-  aSpinGrp->setFrameStyle( QFrame::NoFrame );
-  aSpinGrp->setInsideMargin( 0 );
+  aSpinGrp1 = new QGroupBox( 1, Qt::Vertical, myGrp3 );
+  aSpinGrp1->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp1->setInsideMargin( 0 );
+
+  myRadioButton[ RadioButton31] = new QRadioButton( aSpinGrp1 );
+
+  new QLabel( tr( "GEOM_D1" ), aSpinGrp1 );
+  mySpinBox[ SpinBox31 ] = new DlgRef_SpinBox( aSpinGrp1 );
 
-  new QLabel( tr( "GEOM_D1" ), aSpinGrp );
-  mySpinBox[ SpinBox31 ] = new DlgRef_SpinBox( aSpinGrp );
+  new QLabel( tr( "GEOM_D2" ), aSpinGrp1 );
+  mySpinBox[ SpinBox32 ] = new DlgRef_SpinBox( aSpinGrp1 );
 
-  new QLabel( tr( "GEOM_D2" ), aSpinGrp );
-  mySpinBox[ SpinBox32 ] = new DlgRef_SpinBox( aSpinGrp );
+  aSpinGrp2 = new QGroupBox( 1, Qt::Vertical, myGrp3 );
+  aSpinGrp2->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp2->setInsideMargin( 0 );
+
+  myRadioButton[ RadioButton32] = new QRadioButton( aSpinGrp2 );
+
+  new QLabel( tr( "GEOM_D" ), aSpinGrp2 );
+  mySpinBox[ SpinBox33 ] = new DlgRef_SpinBox( aSpinGrp2 );
+
+  new QLabel( tr( "GEOM_ANGLE" ), aSpinGrp2 );
+  mySpinBox[ SpinBox34 ] = new DlgRef_SpinBox( aSpinGrp2 );
 
   ( new QLabel( myGrp3 ) )->setSizePolicy(
+       QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
+
+  // Create fourth group
+
+  myGrp4 = new QGroupBox( 1, Qt::Horizontal, tr( "GEOM_CHAMFER_EDGE" ), this );
+
+  QGroupBox* aSelGrp4 = new QGroupBox( 3, Qt::Horizontal, myGrp4 );
+  aSelGrp4->setFrameStyle( QFrame::NoFrame );
+  aSelGrp4->setInsideMargin( 0 );
+
+  createSelWg( tr( "GEOM_MAIN_OBJECT" ), iconSelect, aSelGrp4, MainObj4 );
+  createSelWg( tr( "SELECTED_EDGE" ), iconSelect, aSelGrp4, Edges );
+
+  aSpinGrp1 = new QGroupBox( 1, Qt::Vertical, myGrp4 );
+  aSpinGrp1->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp1->setInsideMargin( 0 );
+
+  myRadioButton[ RadioButton41] = new QRadioButton( aSpinGrp1 );
+
+  new QLabel( tr( "GEOM_D1" ), aSpinGrp1 );
+  mySpinBox[ SpinBox41 ] = new DlgRef_SpinBox( aSpinGrp1 );
+
+  new QLabel( tr( "GEOM_D2" ), aSpinGrp1 );
+  mySpinBox[ SpinBox42 ] = new DlgRef_SpinBox( aSpinGrp1 );
+
+  aSpinGrp2 = new QGroupBox( 1, Qt::Vertical, myGrp4 );
+  aSpinGrp2->setFrameStyle( QFrame::NoFrame );
+  aSpinGrp2->setInsideMargin( 0 );
+
+  myRadioButton[ RadioButton42] = new QRadioButton( aSpinGrp2 );
+
+  new QLabel( tr( "GEOM_D" ), aSpinGrp2 );
+  mySpinBox[ SpinBox43 ] = new DlgRef_SpinBox( aSpinGrp2 );
+
+  new QLabel( tr( "GEOM_ANGLE" ), aSpinGrp2 );
+  mySpinBox[ SpinBox44 ] = new DlgRef_SpinBox( aSpinGrp2 );
+
+  ( new QLabel( myGrp4 ) )->setSizePolicy(
     QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ) );
 
   // Add groups to layout
@@ -140,17 +212,23 @@ OperationGUI_ChamferDlg::OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QW
   Layout1->addWidget( myGrp1, 2, 0 );
   Layout1->addWidget( myGrp2, 2, 0 );
   Layout1->addWidget( myGrp3, 2, 0 );
+  Layout1->addWidget( myGrp4, 2, 0 );
 
   // Set range of spinboxes
-
+  
   double SpecificStep = 10.0;
   QMap< int, DlgRef_SpinBox* >::iterator anIter;
   for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter )
-    anIter.data()->RangeStepAndValidator( 0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY );
+    {
+      anIter.data()->RangeStepAndValidator( 0.001, COORD_MAX, SpecificStep, 3 );
+      if ( anIter.key() == SpinBox44 || anIter.key() == SpinBox34 || anIter.key() == SpinBox24 )
+           anIter.data()->RangeStepAndValidator( 0, 90, 5, 0 );
+    }
 
   setHelpFileName("chamfer.htm");
 
   /* Initialisations */
+  RadioButtonPressed();
   Init();
 }
 
@@ -203,14 +281,21 @@ void OperationGUI_ChamferDlg::Init()
     connect( anIterSpin.data(), SIGNAL( valueChanged( double ) ),
              this, SLOT( ValueChangedInSpinBox( double ) ) );
 
+  // radio buttons
+  QMap< int, QRadioButton* >::iterator anIterRadio;
+  for ( anIterRadio = myRadioButton.begin(); anIterRadio != myRadioButton.end(); ++anIterRadio )
+    connect( anIterRadio.data(), SIGNAL( clicked() ),
+            this, SLOT( RadioButtonPressed() ) );
+
   // selection
   connect(myGeomGUI->getApp()->selectionMgr(), 
           SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
 
   initName( tr( "GEOM_CHAMFER" ) );
 
-  myGrp2->hide();
+  myGrp4->hide();
   myGrp3->hide();
+  myGrp2->hide();
   myGrp1->show();
 }
 
@@ -233,18 +318,29 @@ void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId )
     return;
 
   // Get values from previous widget
-  double D1 = 5, D2 = 5;
+  double D1 = 5, D2 = 5, D = 5, Angle = 5;
   if ( myConstructorId == 0 )
     D1 = D2 = mySpinBox[ SpinBox1 ]->GetValue();
   else if ( myConstructorId == 1 )
   {
     D1 = mySpinBox[ SpinBox21 ]->GetValue();
     D2 = mySpinBox[ SpinBox22 ]->GetValue();
+    D =  mySpinBox[ SpinBox23 ]->GetValue();
+    Angle = mySpinBox[ SpinBox24 ]->GetValue();
   }
   else if ( myConstructorId == 2 )
   {
     D1 = mySpinBox[ SpinBox31 ]->GetValue();
     D2 = mySpinBox[ SpinBox32 ]->GetValue();
+    D =  mySpinBox[ SpinBox33 ]->GetValue();
+    Angle = mySpinBox[ SpinBox34 ]->GetValue();
+  }
+  else if ( myConstructorId == 3 )
+  {
+    D1 = mySpinBox[ SpinBox41 ]->GetValue();
+    D2 = mySpinBox[ SpinBox42 ]->GetValue();
+    D =  mySpinBox[ SpinBox43 ]->GetValue();
+    Angle = mySpinBox[ SpinBox44 ]->GetValue();
   }
 
   myConstructorId = constructorId;
@@ -255,21 +351,38 @@ void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId )
         myGrp1->show();
         myGrp2->hide();
         myGrp3->hide();
+       myGrp4->hide();
         mySpinBox[ SpinBox1 ]->SetValue( D1 );
     break;
     case 1:
         myGrp1->hide();
         myGrp2->show();
         myGrp3->hide();
+       myGrp4->hide();
         mySpinBox[ SpinBox21 ]->SetValue( D1 );
         mySpinBox[ SpinBox22 ]->SetValue( D2 );
+        mySpinBox[ SpinBox23 ]->SetValue( D );
+        mySpinBox[ SpinBox24 ]->SetValue( Angle );
     break;
     case 2:
         myGrp1->hide();
         myGrp2->hide();
         myGrp3->show();
+       myGrp4->hide();
         mySpinBox[ SpinBox31 ]->SetValue( D1 );
-        mySpinBox[ SpinBox32 ]->SetValue( D2 );        
+        mySpinBox[ SpinBox32 ]->SetValue( D2 );       
+        mySpinBox[ SpinBox33 ]->SetValue( D );
+        mySpinBox[ SpinBox34 ]->SetValue( Angle );
+    break;
+       case 3:
+        myGrp1->hide();
+        myGrp2->hide();
+        myGrp3->hide();
+               myGrp4->show();
+        mySpinBox[ SpinBox41 ]->SetValue( D1 );
+        mySpinBox[ SpinBox42 ]->SetValue( D2 );        
+        mySpinBox[ SpinBox43 ]->SetValue( D );
+        mySpinBox[ SpinBox44 ]->SetValue( Angle );
     break;
     default:
     break;
@@ -277,7 +390,8 @@ void OperationGUI_ChamferDlg::ConstructorsClicked( int constructorId )
 
   if      ( constructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ];
   else if ( constructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ];
-  else                           myEditCurrentArgument = mySelName[ MainObj3 ];
+  else if ( constructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ];
+  else                           myEditCurrentArgument = mySelName[ MainObj4 ];
 
   activateSelection(); 
   enableWidgets();
@@ -317,7 +431,6 @@ bool OperationGUI_ChamferDlg::ClickOnApply()
   return true;
 }
 
-
 //=================================================================================
 // function : SelectionIntoArgument()
 // purpose  : Called when selection has changed
@@ -338,7 +451,7 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument()
     }
 
   // If selection of main object is activated
-  if ( aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 )
+  if ( aCurrFocus == MainObj1 || aCurrFocus == MainObj2 || aCurrFocus == MainObj3 || aCurrFocus == MainObj4)
   {
     if ( IObjectCount() == 1 )
     {
@@ -379,7 +492,7 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument()
             QString aFaceName = QString( GEOMBase::GetName( anObj ) ) + ":%1";
             myEditCurrentArgument->setText( aFaceName.arg( anIndex ) );
             myFace[ aCurrFocus ] = anIndex;
-            displayPreview();
+           displayPreview();
             return;
          }
       }
@@ -387,8 +500,8 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument()
 
     myFace[ aCurrFocus ] = -1;
   }
-  // If face selection of third tab is activated
-  else if ( aCurrFocus == Faces )
+  // If face selection of third or fourth tab is activated
+  else if ( aCurrFocus == Faces  || aCurrFocus == Edges )
   {
     if ( IObjectCount() == 1 )
     {
@@ -403,24 +516,30 @@ void OperationGUI_ChamferDlg::SelectionIntoArgument()
 
          if ( anIndexes.Extent() > 0 )
          {
-           QString aFaceName;
+           QString aName;
            if ( anIndexes.Extent() == 1 )
            {
              int anIndex = anIndexes( 1 );
 
-             aFaceName = QString( GEOMBase::GetName( anObj ) ) + QString( ":%1" ).arg( anIndex );
+             aName = QString( GEOMBase::GetName( anObj ) ) + QString( ":%1" ).arg( anIndex );
            }
            else
-             aFaceName = tr( "GEOM_MEN_POPUP_NAME" ).arg( anIndexes.Extent() );
-
-           myEditCurrentArgument->setText( aFaceName );
-           myFaces = anIndexes;
+             aName = tr( "GEOM_MEN_POPUP_NAME" ).arg( anIndexes.Extent() );
+
+           myEditCurrentArgument->setText( aName );
+          int aConstructorId = getConstructorId();
+          if ( aConstructorId == 2)
+            myFaces = anIndexes;
+          else if (aConstructorId == 3)
+            myEdges = anIndexes;
+            
            displayPreview();
            return;
          }
       }
     }
     myFaces.Clear();
+    myEdges.Clear();
   }
 }
 
@@ -441,6 +560,38 @@ void OperationGUI_ChamferDlg::LineEditReturnPressed()
   GEOMBase_Skeleton::LineEditReturnPressed();
 }
 
+//=================================================================================
+// function : RadioButtonPressed()
+// purpose  :
+//=================================================================================
+void OperationGUI_ChamferDlg::RadioButtonPressed()
+{
+  bool flag;
+  flag = ( myRadioButton[ RadioButton21 ]->isChecked() &&
+          myRadioButton[ RadioButton31 ]->isChecked() &&
+          myRadioButton[ RadioButton41 ]->isChecked() );
+    
+  myRadioButton[ RadioButton21 ]->setChecked(!flag);
+  myRadioButton[ RadioButton31 ]->setChecked(!flag);
+  myRadioButton[ RadioButton41 ]->setChecked(!flag);
+  myRadioButton[ RadioButton22 ]->setChecked(flag);
+  myRadioButton[ RadioButton32 ]->setChecked(flag);
+  myRadioButton[ RadioButton42 ]->setChecked(flag);
+  mySpinBox[ SpinBox21 ]->setDisabled(flag);
+  mySpinBox[ SpinBox22 ]->setDisabled(flag); 
+  mySpinBox[ SpinBox31 ]->setDisabled(flag); 
+  mySpinBox[ SpinBox32 ]->setDisabled(flag); 
+  mySpinBox[ SpinBox41 ]->setDisabled(flag); 
+  mySpinBox[ SpinBox42 ]->setDisabled(flag);
+  mySpinBox[ SpinBox23 ]->setDisabled(!flag);
+  mySpinBox[ SpinBox24 ]->setDisabled(!flag); 
+  mySpinBox[ SpinBox33 ]->setDisabled(!flag); 
+  mySpinBox[ SpinBox34 ]->setDisabled(!flag); 
+  mySpinBox[ SpinBox43 ]->setDisabled(!flag); 
+  mySpinBox[ SpinBox44 ]->setDisabled(!flag);
+  displayPreview();
+}
+
 
 //=================================================================================
 // function : SetEditCurrentArgument()
@@ -448,7 +599,7 @@ void OperationGUI_ChamferDlg::LineEditReturnPressed()
 //=================================================================================
 void OperationGUI_ChamferDlg::SetEditCurrentArgument()
 {
 QPushButton* aSender = ( QPushButton* )sender();
+ QPushButton* aSender = ( QPushButton* )sender();
 
   QMap< int, QPushButton* >::iterator anIter;
   for ( anIter = mySelBtn.begin(); anIter != mySelBtn.end(); ++anIter )
@@ -521,7 +672,7 @@ void OperationGUI_ChamferDlg::createSelWg( const QString& theLbl,
 //=================================================================================
 void OperationGUI_ChamferDlg::reset()
 {
 // Set Initial values of spinboxes
+ // Set Initial values of spinboxes
   QMap< int, DlgRef_SpinBox* >::iterator anIter;
   for ( anIter = mySpinBox.begin(); anIter != mySpinBox.end(); ++anIter )
     anIter.data()->SetValue( 5 );
@@ -536,11 +687,13 @@ void OperationGUI_ChamferDlg::reset()
 
   if      ( aConstructorId == 0 ) myEditCurrentArgument = mySelName[ MainObj1 ];
   else if ( aConstructorId == 1 ) myEditCurrentArgument = mySelName[ MainObj2 ];
-  else                            myEditCurrentArgument = mySelName[ MainObj3 ];
+  else if ( aConstructorId == 2 ) myEditCurrentArgument = mySelName[ MainObj3 ];
+  else                            myEditCurrentArgument = mySelName[ MainObj4 ];
 
   myShape = GEOM::GEOM_Object::_nil();
 
   myFaces.Clear();
+  myEdges.Clear();
   myFace[ Face1 ] = -1;
   myFace[ Face2 ] = -1;
 
@@ -569,8 +722,10 @@ void OperationGUI_ChamferDlg::activateSelection()
   if (  !myShape->_is_nil() &&
        ( myEditCurrentArgument == mySelName[ Face1 ] ||
          myEditCurrentArgument == mySelName[ Face2 ] ||
-         myEditCurrentArgument == mySelName[ Faces ] ) )
+                myEditCurrentArgument == mySelName[ Faces ] ) )
     localSelection( myShape, TopAbs_FACE );
+  else if (!myShape->_is_nil() && myEditCurrentArgument == mySelName[ Edges ] )
+       localSelection( myShape, TopAbs_EDGE );
   else
   {
     TColStd_MapOfInteger aMap;
@@ -611,9 +766,21 @@ void OperationGUI_ChamferDlg::enableWidgets()
   else if ( anId == 2 )
   {
     mySelName[ Faces ]->setEnabled( toEnable );
+    if ( !toEnable )
+       {
+         mySelName[ Faces ]->setText( "" );
+         myFaces = -1;
+       }
+  }
+  else if ( anId == 3 )
+  {
+    mySelName[ Edges ]->setEnabled( toEnable );
 
     if ( !toEnable )
-      myFaces.Clear();
+       {
+         mySelName[ Edges ]->setText( "" );
+         myEdges = -1;
+       }
   }
 }
 
@@ -625,7 +792,6 @@ GEOM::GEOM_IOperations_ptr OperationGUI_ChamferDlg::createOperation()
 {
   return getGeomEngine()->GetILocalOperations( getStudyId() );
 }
-
 //=================================================================================
 // function : ClickOnApply()
 // purpose  : Verify validity of input data
@@ -637,6 +803,7 @@ bool OperationGUI_ChamferDlg::isValid( QString& )
     case 0: return !myShape->_is_nil();
     case 1: return !myShape->_is_nil() && myFace[ Face1 ] > 0 && myFace[ Face2 ] > 0;
     case 2: return !myShape->_is_nil() && myFaces.Extent() > 0;
+    case 3: return !myShape->_is_nil() && myEdges.Extent() > 0;
     default: return false;
   }
 }
@@ -648,6 +815,9 @@ bool OperationGUI_ChamferDlg::isValid( QString& )
 bool OperationGUI_ChamferDlg::execute( ObjectList& objects )
 {
   GEOM::GEOM_Object_var anObj;
+  bool flag = ( myRadioButton[ RadioButton21 ]->isChecked() &&
+                myRadioButton[ RadioButton31 ]->isChecked() &&
+                myRadioButton[ RadioButton41 ]->isChecked() );
 
   int anId = getConstructorId();
   if ( anId == 0 )
@@ -655,30 +825,55 @@ bool OperationGUI_ChamferDlg::execute( ObjectList& objects )
       getOperation() )->MakeChamferAll( myShape,
                                         mySpinBox[ SpinBox1 ]->GetValue() );
   else if ( anId == 1 )
-    anObj = GEOM::GEOM_ILocalOperations::_narrow(
-      getOperation() )->MakeChamferEdge( myShape,
-                                         mySpinBox[ SpinBox21 ]->GetValue(),
-                                         mySpinBox[ SpinBox22 ]->GetValue(),
-                                         myFace[ Face1 ],
-                                         myFace[ Face2 ] );
+    {
+      if ( flag )
+         anObj = GEOM::GEOM_ILocalOperations::_narrow(
+                 getOperation() )->MakeChamferEdge( myShape,
+                                                    mySpinBox[ SpinBox21 ]->GetValue(),
+                                                    mySpinBox[ SpinBox22 ]->GetValue(),
+                                                    myFace[ Face1 ],
+                                                    myFace[ Face2 ] );
+      else
+         anObj = GEOM::GEOM_ILocalOperations::_narrow(
+                 getOperation() )->MakeChamferEdgeAD( myShape,
+                                                      mySpinBox[ SpinBox23 ]->GetValue(),
+                                                      mySpinBox[ SpinBox24 ]->GetValue() * PI180,
+                                                      myFace[ Face1 ],
+                                                      myFace[ Face2 ]);
+    }
   else if ( anId == 2 )
   {
-
-    int i = 0;
     GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
     anArray->length( myFaces.Extent() );
-
-
     for ( int i = 1, n = myFaces.Extent(); i <= n; i++ )
-      anArray[ i - 1 ] = myFaces( i );             
-    
+      anArray[ i - 1 ] = myFaces( i );            
+    if ( flag )
     anObj = GEOM::GEOM_ILocalOperations::_narrow(
       getOperation() )->MakeChamferFaces( myShape,
                                           mySpinBox[ SpinBox31 ]->GetValue(),
                                           mySpinBox[ SpinBox32 ]->GetValue(),
                                           anArray );
+    else
+    anObj = GEOM::GEOM_ILocalOperations::_narrow(
+      getOperation() )->MakeChamferFacesAD( myShape,
+                                            mySpinBox[ SpinBox33 ]->GetValue(),
+                                            mySpinBox[ SpinBox34 ]->GetValue() * PI180,
+                                            anArray );
+  }
+  else if ( anId == 3 )
+  { GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
+    anArray->length( myEdges.Extent() );
+    for ( int i = 1, n = myEdges.Extent(); i <= n; i++ )
+      anArray[ i - 1 ] = myEdges( i );             
+    if ( flag )
+      anObj = GEOM::GEOM_ILocalOperations::_narrow(
+      getOperation() )->MakeChamferEdges( myShape, mySpinBox[ SpinBox41 ]->GetValue(),
+                                          mySpinBox[ SpinBox42 ]->GetValue(), anArray );
+    else
+      anObj = GEOM::GEOM_ILocalOperations::_narrow(
+      getOperation() )->MakeChamferEdgesAD( myShape, mySpinBox[ SpinBox43 ]->GetValue(),
+                                            mySpinBox[ SpinBox44 ]->GetValue() * PI180, anArray );
   }
-
 
   if ( !anObj->_is_nil() )
     objects.push_back( anObj._retn() );
@@ -687,10 +882,3 @@ bool OperationGUI_ChamferDlg::execute( ObjectList& objects )
 }
 
 
-
-
-
-
-
-
-
index 664e718be39f73add70b8690ea0279dfcf962149..76f06f594333a8278592b537f386f4f7dec775f3 100644 (file)
-//  GEOM GEOMGUI : GUI for Geometry component
-//
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-//
-//
-//
-//  File   : OperationGUI_ChamferDlg.h
-//  Author : Damien COQUERET
-//  Module : GEOM
-
-#ifndef DIALOGBOX_CHAMFER_H
-#define DIALOGBOX_CHAMFER_H
-
-#include "GEOMBase_Skeleton.h"
-#include <TColStd_IndexedMapOfInteger.hxx>
-
-class DlgRef_SpinBox;
-
-//=================================================================================
-// class    : OperationGUI_ChamferDlg
-// purpose  :
-//=================================================================================
-class OperationGUI_ChamferDlg : public GEOMBase_Skeleton
-{ 
-    Q_OBJECT
-
-  enum { MainObj1, MainObj2, Face1, Face2, MainObj3, Faces };
-  enum { SpinBox1, SpinBox21, SpinBox22, SpinBox31, SpinBox32 };
-
-public:
-  OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QWidget* parent);
-  virtual ~OperationGUI_ChamferDlg();
-
-protected:
-    // redefined from GEOMBase_Helper
-    virtual                             GEOM::GEOM_IOperations_ptr createOperation();
-    virtual                             bool isValid( QString& msg );
-    virtual                             bool execute( ObjectList& objects );    
-
-private slots:
-    void                                ClickOnOk();
-    bool                                ClickOnApply();
-    void                                ActivateThisDialog();
-    void                                LineEditReturnPressed();
-    void                                SelectionIntoArgument();
-    void                                SetEditCurrentArgument();
-    void                                ValueChangedInSpinBox( double newValue );
-    void                                ConstructorsClicked( int constructorId );
-
-private:
-    void                                Init();
-    void                                enterEvent( QEvent* e );
-    void                                reset();
-    void                                createSelWg( const QString&, QPixmap&, QWidget*, const int );
-    int                                 getConstructorId() const;
-    void                                activateSelection();
-    void                                enableWidgets();
-
-private:
-    int                                 myConstructorId;
-
-    GEOM::GEOM_Object_var               myShape; 
-    QMap< int, int >                    myFace;  // indexes of faces from second tab ( Face1,2 )
-    TColStd_IndexedMapOfInteger         myFaces; // indexes of faces from first tab ( Faces )
-    
-    QFrame*                             myGrp1;
-    QFrame*                             myGrp2;
-    QFrame*                             myGrp3;
-
-    QMap< int, QPushButton* >           mySelBtn;
-    QMap< int, QLineEdit* >             mySelName;
-    QMap< int, DlgRef_SpinBox* >        mySpinBox;
-};
-
-#endif // DIALOGBOX_CHAMFER_H
+//  GEOM GEOMGUI : GUI for Geometry component\r
+//\r
+//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,\r
+//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS \r
+// \r
+//  This library is free software; you can redistribute it and/or \r
+//  modify it under the terms of the GNU Lesser General Public \r
+//  License as published by the Free Software Foundation; either \r
+//  version 2.1 of the License. \r
+// \r
+//  This library is distributed in the hope that it will be useful, \r
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of \r
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU \r
+//  Lesser General Public License for more details. \r
+// \r
+//  You should have received a copy of the GNU Lesser General Public \r
+//  License along with this library; if not, write to the Free Software \r
+//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA \r
+// \r
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com\r
+//\r
+//\r
+//\r
+//  File   : OperationGUI_ChamferDlg.h\r
+//  Author : Damien COQUERET\r
+//  Module : GEOM\r
+\r
+#ifndef DIALOGBOX_CHAMFER_H\r
+#define DIALOGBOX_CHAMFER_H\r
+\r
+#include "GEOMBase_Skeleton.h"\r
+#include <TColStd_IndexedMapOfInteger.hxx>\r
+\r
+class DlgRef_SpinBox;\r
+\r
+//=================================================================================\r
+// class    : OperationGUI_ChamferDlg\r
+// purpose  :\r
+//=================================================================================\r
+class OperationGUI_ChamferDlg : public GEOMBase_Skeleton\r
+{ \r
+    Q_OBJECT\r
+\r
+  enum { MainObj1, MainObj2, Face1, Face2, MainObj3, Faces, MainObj4, Edges};\r
+  enum { SpinBox1,\r
+        SpinBox21, SpinBox22, SpinBox23, SpinBox24, \r
+        SpinBox31, SpinBox32, SpinBox33, SpinBox34,\r
+        SpinBox41, SpinBox42, SpinBox43, SpinBox44  };\r
+  enum { RadioButton21, RadioButton22,\r
+         RadioButton31, RadioButton32,\r
+         RadioButton41, RadioButton42 };\r
+public:\r
+  OperationGUI_ChamferDlg(GeometryGUI* theGeometryGUI, QWidget* parent);\r
+  virtual ~OperationGUI_ChamferDlg();\r
+\r
+protected:\r
+    // redefined from GEOMBase_Helper\r
+    virtual                             GEOM::GEOM_IOperations_ptr createOperation();\r
+    virtual                             bool isValid( QString& msg );\r
+    virtual                             bool execute( ObjectList& objects );    \r
+\r
+private slots:\r
+    void                                ClickOnOk();\r
+    bool                                ClickOnApply();\r
+    void                                ActivateThisDialog();\r
+    void                                LineEditReturnPressed();\r
+    void                                RadioButtonPressed();\r
+    void                                SelectionIntoArgument();\r
+    void                                SetEditCurrentArgument();\r
+    void                                ValueChangedInSpinBox( double newValue );\r
+    void                                ConstructorsClicked( int constructorId );\r
+\r
+private:\r
+    void                                Init();\r
+    void                                enterEvent( QEvent* e );\r
+    void                                reset();\r
+    void                                createSelWg( const QString&, QPixmap&, QWidget*, const int );\r
+    int                                 getConstructorId() const;\r
+    void                                activateSelection();\r
+    void                                enableWidgets();\r
+\r
+private:\r
+    int                                 myConstructorId;\r
+\r
+    GEOM::GEOM_Object_var               myShape; \r
+    QMap< int, int >                    myFace;  // indexes of faces from second tab ( Face1,2 )\r
+    TColStd_IndexedMapOfInteger         myFaces; // indexes of faces from first tab ( Faces )\r
+    TColStd_IndexedMapOfInteger         myEdges; // indexes of edges from fourth tab (Edges)\r
+    \r
+    QFrame*                             myGrp1;\r
+    QFrame*                             myGrp2;\r
+    QFrame*                             myGrp3;\r
+    QFrame*                             myGrp4;\r
+\r
+    QMap< int, QPushButton* >           mySelBtn;\r
+    QMap< int, QLineEdit* >             mySelName;\r
+    QMap< int, DlgRef_SpinBox* >        mySpinBox;\r
+    QMap< int, QRadioButton* >          myRadioButton;\r
+};\r
+\r
+#endif // DIALOGBOX_CHAMFER_H\r
index e4808de4ed76ae23f948d2bed19d8cb997f1f356..76aae8dc0ce0f5fc47e0eb7e6568e5f6b3cef4d9 100644 (file)
@@ -28,7 +28,7 @@
 
 #include "OperationGUI_FilletDlg.h"
 #include "DlgRef_1Sel1Spin.h"
-#include "DlgRef_2Sel1Spin.h"
+#include "DlgRef_2Sel3Spin2Rb.h"
 
 #include "SUIT_Desktop.h"
 #include "SUIT_Session.h"
@@ -79,21 +79,25 @@ OperationGUI_FilletDlg::OperationGUI_FilletDlg(GeometryGUI* theGeometryGUI, QWid
   Group1->PushButton1->setPixmap( iconSelect );
   Group1->LineEdit1->setReadOnly( true );
 
-  Group2 = new DlgRef_2Sel1Spin( this, "Group2" );
+  Group2 = new DlgRef_2Sel3Spin2Rb( this, "Group2" );
   Group2->GroupBox1->setTitle( tr( "GEOM_FILLET_EDGES" ) );
   Group2->TextLabel1->setText( tr( "GEOM_MAIN_OBJECT" ) );
   Group2->TextLabel2->setText( tr( "SELECTED_EDGES" ) );
   Group2->TextLabel3->setText( tr( "GEOM_RADIUS" ) );
+  Group2->TextLabel4->setText( tr( "GEOM_R1" ) );
+  Group2->TextLabel5->setText( tr( "GEOM_R2" ) );
   Group2->PushButton1->setPixmap( iconSelect );
   Group2->PushButton2->setPixmap( iconSelect );
   Group2->LineEdit1->setReadOnly( true );
   Group2->LineEdit2->setReadOnly( true );
 
-  Group3 = new DlgRef_2Sel1Spin( this, "Group3" );
+  Group3 = new DlgRef_2Sel3Spin2Rb( this, "Group3" );
   Group3->GroupBox1->setTitle(tr( "GEOM_FILLET_FACES" ) );
   Group3->TextLabel1->setText(tr( "GEOM_MAIN_OBJECT" ) );
   Group3->TextLabel2->setText(tr( "SELECTED_FACES" ) );
   Group3->TextLabel3->setText(tr( "GEOM_RADIUS" ) );
+  Group3->TextLabel4->setText(tr( "GEOM_R1" ) );
+  Group3->TextLabel5->setText(tr( "GEOM_R2" ) );
   Group3->PushButton1->setPixmap( iconSelect );
   Group3->PushButton2->setPixmap( iconSelect );
   Group3->LineEdit1->setReadOnly( true );
@@ -107,7 +111,11 @@ OperationGUI_FilletDlg::OperationGUI_FilletDlg(GeometryGUI* theGeometryGUI, QWid
   double SpecificStep = 10.0;
   Group1->SpinBox_DX->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
   Group2->SpinBox_DX->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
+  Group2->SpinBox_DY->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
+  Group2->SpinBox_DZ->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
   Group3->SpinBox_DX->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
+  Group3->SpinBox_DY->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
+  Group3->SpinBox_DZ->RangeStepAndValidator(0.001, COORD_MAX, SpecificStep, DBL_DIGITS_DISPLAY);
 
   setHelpFileName("fillet.htm");
 
@@ -158,7 +166,17 @@ void OperationGUI_FilletDlg::Init()
   // spin boxes  
   connect(Group1->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
   connect(Group2->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group2->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group2->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
   connect(Group3->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group3->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+  connect(Group3->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
+
+  //RadioButtons
+  connect( Group2->RadioButton1, SIGNAL( clicked() ), this, SLOT( RadioButton_Clicked() ) );
+  connect( Group2->RadioButton2, SIGNAL( clicked() ), this, SLOT( RadioButton_Clicked() ) );
+  connect( Group3->RadioButton1, SIGNAL( clicked() ), this, SLOT( RadioButton_Clicked() ) );
+  connect( Group3->RadioButton2, SIGNAL( clicked() ), this, SLOT( RadioButton_Clicked() ) );
 
     // selection
   connect(myGeomGUI->getApp()->selectionMgr(), 
@@ -189,10 +207,18 @@ void OperationGUI_FilletDlg::ConstructorsClicked( int constructorId )
     return;
 
   // Get radius from previous widget
-  double R = 5;
+  double R = 5, R1 = 5, R2 = 5;
   if      ( myConstructorId == 0 ) R = Group1->SpinBox_DX->GetValue();
-  else if ( myConstructorId == 1 ) R = Group2->SpinBox_DX->GetValue();
-  else                             R = Group3->SpinBox_DX->GetValue();
+  else if ( myConstructorId == 1 ) {
+    R = Group2->SpinBox_DX->GetValue();
+    R1 = Group2->SpinBox_DY->GetValue();
+    R2 = Group2->SpinBox_DZ->GetValue();
+  }
+  else {
+    R = Group3->SpinBox_DX->GetValue();
+    R1 = Group3->SpinBox_DY->GetValue();
+    R2 = Group3->SpinBox_DZ->GetValue();
+  }
 
   myConstructorId = constructorId;
 
@@ -209,12 +235,16 @@ void OperationGUI_FilletDlg::ConstructorsClicked( int constructorId )
         Group2->show();
         Group3->hide();
         Group2->SpinBox_DX->SetValue( R );
+        Group2->SpinBox_DY->SetValue( R1 );
+        Group2->SpinBox_DZ->SetValue( R2 );
     break;
     case 2:
         Group1->hide();
         Group2->hide();
         Group3->show();
         Group3->SpinBox_DX->SetValue( R );
+        Group3->SpinBox_DY->SetValue( R1 );
+        Group3->SpinBox_DZ->SetValue( R2 );
     break;
     default:
     break;
@@ -444,7 +474,11 @@ void OperationGUI_FilletDlg::reset()
   // Set Initial values of spinboxes
   Group1->SpinBox_DX->SetValue( 5 );
   Group2->SpinBox_DX->SetValue( 5 );
+  Group2->SpinBox_DY->SetValue( 5 );
+  Group2->SpinBox_DZ->SetValue( 5 );
   Group3->SpinBox_DX->SetValue( 5 );
+  Group3->SpinBox_DY->SetValue( 5 );
+  Group3->SpinBox_DZ->SetValue( 5 );
 
   Group1->LineEdit1->setText( "" );
   Group2->LineEdit1->setText( "" );
@@ -572,8 +606,7 @@ bool OperationGUI_FilletDlg::execute( ObjectList& objects )
   int anId = getConstructorId();
   if ( anId == 0 )
     anObj = GEOM::GEOM_ILocalOperations::_narrow(
-      getOperation() )->MakeFilletAll( myShape,
-                                       getRadius() );
+      getOperation() )->MakeFilletAll( myShape, getRadius() );
   else if ( anId == 1 )
   {
     GEOM::ListOfLong_var aList = new GEOM::ListOfLong;
@@ -581,9 +614,14 @@ bool OperationGUI_FilletDlg::execute( ObjectList& objects )
 
     for ( int i = 1, n = myEdges.Extent(); i <= n; i++ )
       aList[ i - 1 ] = myEdges( i );
-
-    anObj = GEOM::GEOM_ILocalOperations::_narrow(
-      getOperation() )->MakeFilletEdges( myShape, getRadius(), aList );
+    if ( Group2->RadioButton1->isChecked() )
+      anObj = GEOM::GEOM_ILocalOperations::_narrow(
+              getOperation() )->MakeFilletEdges( myShape, getRadius(), aList );
+    else
+      anObj = GEOM::GEOM_ILocalOperations::_narrow( getOperation() )->MakeFilletEdgesR1R2( myShape,
+                                                   (Group2->SpinBox_DY->GetValue()),
+                                                   (Group2->SpinBox_DZ->GetValue()),
+                                                   aList );
   }
   else if ( anId == 2 )
   {
@@ -593,9 +631,13 @@ bool OperationGUI_FilletDlg::execute( ObjectList& objects )
 
     for ( int i = 1, n = myFaces.Extent(); i <= n; i++ )
       aList[ i - 1 ] = myFaces( i );
-
-    anObj = GEOM::GEOM_ILocalOperations::_narrow(
-      getOperation() )->MakeFilletFaces( myShape, getRadius(), aList );
+    if ( Group3->RadioButton1->isChecked() )
+       anObj = GEOM::GEOM_ILocalOperations::_narrow(
+               getOperation() )->MakeFilletFaces( myShape, getRadius(), aList );
+    else
+       anObj = GEOM::GEOM_ILocalOperations::_narrow(
+               getOperation() )->MakeFilletFacesR1R2( myShape, (Group3->SpinBox_DY->GetValue()),
+                                                      (Group3->SpinBox_DZ->GetValue()), aList );
   }
 
   if ( !anObj->_is_nil() )
@@ -615,3 +657,26 @@ double OperationGUI_FilletDlg::getRadius() const
   else if ( anId == 1 ) return Group2->SpinBox_DX->GetValue();
   else                  return Group3->SpinBox_DX->GetValue();
 }
+
+//=================================================================================
+// function : RadiobuttonClicked
+// purpose  :
+//=================================================================================
+
+void OperationGUI_FilletDlg::RadioButton_Clicked()
+{
+    bool flag = ( (Group2->RadioButton1->isChecked()) && (Group3->RadioButton1->isChecked()) );
+    flag = !flag;
+
+    Group2->SpinBox_DX->setEnabled(flag);
+    Group2->SpinBox_DY->setEnabled(!flag);
+    Group2->SpinBox_DZ->setEnabled(!flag);
+    Group2->RadioButton1->setChecked(flag);
+    Group2->RadioButton2->setChecked(!flag);
+    Group3->SpinBox_DX->setEnabled(flag);
+    Group3->SpinBox_DY->setEnabled(!flag);
+    Group3->SpinBox_DZ->setEnabled(!flag);
+    Group3->RadioButton1->setChecked(flag);
+    Group3->RadioButton2->setChecked(!flag);
+    displayPreview();  
+}
index ab55f1469c2f9502f9fb0b9d9239ec4dec29808b..c89491bafa6a251f1b1d05b41ca8a7ff0bd36cec 100644 (file)
@@ -33,7 +33,7 @@
 #include <TColStd_IndexedMapOfInteger.hxx>
 
 class DlgRef_1Sel1Spin;
-class DlgRef_2Sel1Spin;
+class DlgRef_2Sel3Spin2Rb;
 
 //=================================================================================
 // class    : OperationGUI_FilletDlg
@@ -62,6 +62,7 @@ private slots:
     void                                SetEditCurrentArgument();
     void                                ValueChangedInSpinBox( double newValue );
     void                                ConstructorsClicked( int constructorId );
+    void                                RadioButton_Clicked();
 
 private:
     void                                Init();
@@ -80,8 +81,8 @@ private:
     TColStd_IndexedMapOfInteger         myFaces;
 
     DlgRef_1Sel1Spin*                   Group1;
-    DlgRef_2Sel1Spin*                   Group2;
-    DlgRef_2Sel1Spin*                   Group3;
+    DlgRef_2Sel3Spin2Rb*                Group2;
+    DlgRef_2Sel3Spin2Rb*                Group3;
 };
 
 #endif // DIALOGBOX_FILLET_H