From 46fd079b60d3e5c54bd6a4a77bfd99f75806eead Mon Sep 17 00:00:00 2001 From: vsr Date: Wed, 25 Feb 2009 13:31:16 +0000 Subject: [PATCH] Issue 0020154 : improve ellipse creeation function --- doc/salome/gui/GEOM/images/ellipse.png | Bin 21752 -> 18782 bytes .../gui/GEOM/input/creating_ellipse.doc | 25 ++- .../gui/GEOM/input/tui_basic_geom_objs.doc | 29 ++- idl/GEOM_Gen.idl | 15 ++ idl/GEOM_Superv.idl | 5 + src/BasicGUI/BasicGUI_EllipseDlg.cxx | 57 +++-- src/BasicGUI/BasicGUI_EllipseDlg.h | 6 +- src/DlgRef/DlgRef.cxx | 16 +- src/DlgRef/DlgRef.h | 16 ++ src/DlgRef/DlgRef_3Sel2Spin_QTD.ui | 199 ++++++++++++++++++ src/DlgRef/Makefile.am | 1 + src/GEOMGUI/GEOM_msg_en.ts | 19 ++ src/GEOMImpl/GEOMImpl_EllipseDriver.cxx | 33 ++- src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 21 +- src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx | 3 +- src/GEOMImpl/GEOMImpl_IEllipse.hxx | 13 +- src/GEOM_I/GEOM_ICurvesOperations_i.cc | 51 ++++- src/GEOM_I/GEOM_ICurvesOperations_i.hh | 5 + src/GEOM_I_Superv/GEOM_Superv_i.cc | 17 ++ src/GEOM_I_Superv/GEOM_Superv_i.hh | 4 + src/GEOM_SWIG/geompyDC.py | 9 +- 21 files changed, 497 insertions(+), 47 deletions(-) create mode 100644 src/DlgRef/DlgRef_3Sel2Spin_QTD.ui diff --git a/doc/salome/gui/GEOM/images/ellipse.png b/doc/salome/gui/GEOM/images/ellipse.png index 8eea6cae629ab918cdd81998187a6b73c742c769..9b31501158cb4357ec703dfcbcb9853df4170d74 100755 GIT binary patch literal 18782 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

B|D literal 21752 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 Menu select New Entity - > Basic - > Ellipse -\n You can define an \b Ellipse by its Center Point, a \b -Vector giving its normal, and its Major & Minor Radiuses. +\n You can define an \b Ellipse by its Center point, a \b +Vector giving its normal, another vector specifying the direction of +ellipse's Major Axis and its Major & Minor Radiuses. \n The \b Result of the operation will be a GEOM_Object (edge). -\n TUI Command: geompy.MakeEllipse(Point, Vector, RadiusMajor, RadiusMinor) +\note The parameters Center, Vector and Major Axis +are optional. By default it is presumed that the Center point +is located at the origin of the global coordinate system, the \b Vector +corresponds to the OZ axis of the global coordinate system and Major Axis +corresponds to the OX axis of the global coordinate system. + + +\note Actual direction of the major axis vector is defined as + Vmaj' = (Vn * Vmaj) * Vn where \em Vn is a normal vector and +\em Vmaj is an original vector of the major axis. + +\n TUI Command (no major axis): geompy.MakeEllipse(Point, Vector, RadiusMajor, RadiusMinor) \n Arguments: Name + 1 vertex (for the center) + 1 edge (for the direction) + 1 X Radius + 1 Y Radius. -\note By default it is presumed that the Center Point is located at the Origin of the global -coordinate system, and the \b Vector corresponds to OZ axis of the global -coordinate system. +\n TUI Command (use major axis):geompy.MakeEllipseVec(Point, Vector, RadiusMajor, RadiusMinor, VectorMajor) +\n Arguments: Name + 1 vertex (for the center) + 1 edge (for +the normal direction) + 1 X Radius + 1 Y Radius + 1 edge (for the +major axis direction) \image html ellipse.png diff --git a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc index 89baf140d..51da40037 100644 --- a/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc +++ b/doc/salome/gui/GEOM/input/tui_basic_geom_objs.doc @@ -116,21 +116,32 @@ gg = salome.ImportComponentGUI("GEOM") # create vertices p0 = geompy.MakeVertex(0., 0., 0.) -p50 = geompy.MakeVertex(50., 50., 50.) +p1 = geompy.MakeVertex(50., 50., 50.) +p2 = geompy.MakeVertex(0., 50., 0.) -# create a vector from two points -vector = geompy.MakeVector(p0, p50) +# create a normal vector from two points +normal = geompy.MakeVector(p0, p1) + +# create a major axis vector from two points +major = geompy.MakeVector(p0, p2) # create an ellipse from a point, a vector and radiuses -ellipse = geompy.MakeEllipse(p50, vector, 50, 25) +ellipse1 = geompy.MakeEllipse(p1, normal, 50, 25) + +# create an ellipse from a point, a normal vector, radiuses and a major axis vector +ellipse2 = geompy.MakeEllipse(p1, normal, 50, 25, major) # add objects in the study -id_vector = geompy.addToStudy(vector, "Vector") -id_ellipse = geompy.addToStudy(ellipse,"Ellipse") +id_normal = geompy.addToStudy(normal, "Normal") +id_major = geompy.addToStudy(major, "Major Axis") +id_ellipse1 = geompy.addToStudy(ellipse1, "Ellipse 1") +id_ellipse2 = geompy.addToStudy(ellipse2, "Ellipse 2") # display the ellipse and its normal vector -gg.createAndDisplayGO(id_vector) -gg.createAndDisplayGO(id_ellipse) +gg.createAndDisplayGO(id_normal) +gg.createAndDisplayGO(id_major) +gg.createAndDisplayGO(id_ellipse1) +gg.createAndDisplayGO(id_ellipse2) \endcode \anchor tui_creation_arc @@ -302,4 +313,4 @@ gg.setDisplayMode(id_plane3,1) gg.setTransparency(id_plane3,0.5) \endcode -*/ \ No newline at end of file +*/ diff --git a/idl/GEOM_Gen.idl b/idl/GEOM_Gen.idl index 7a64111e2..2be25f963 100644 --- a/idl/GEOM_Gen.idl +++ b/idl/GEOM_Gen.idl @@ -2102,6 +2102,21 @@ module GEOM in double theRMajor, in double theRMinor); + /*! + * Create an ellipse with given center, normal vector, main axis vector and radiuses. + * \param thePnt Ellipse center. + * \param theVec Vector, normal to the plane of the ellipse. + * \param theRMajor Major ellipse radius. + * \param theRMinor Minor ellipse radius. + * \param theVecMaj Vector, direction of the ellipse's main axis. + * \return New GEOM_Object, containing the created ellipse. + */ + GEOM_Object MakeEllipseVec (in GEOM_Object thePnt, + in GEOM_Object theVec, + in double theRMajor, + in double theRMinor, + in GEOM_Object theVecMaj); + /*! * Create an arc of circle, passing through three given points. * \param thePnt1 Start point of the arc. diff --git a/idl/GEOM_Superv.idl b/idl/GEOM_Superv.idl index 4690e7e7e..1ee41d642 100644 --- a/idl/GEOM_Superv.idl +++ b/idl/GEOM_Superv.idl @@ -478,6 +478,11 @@ module GEOM in GEOM_Object theVec, in double theRMajor, in double theRMinor) ; + GEOM_Object MakeEllipseVec (in GEOM_Object thePnt, + in GEOM_Object theVec, + in double theRMajor, + in double theRMinor, + in GEOM_Object theVecMaj) ; GEOM_Object MakeArc (in GEOM_Object thePnt1, in GEOM_Object thePnt2, in GEOM_Object thePnt3) ; diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.cxx b/src/BasicGUI/BasicGUI_EllipseDlg.cxx index 9b9eb6c07..dee60ede9 100644 --- a/src/BasicGUI/BasicGUI_EllipseDlg.cxx +++ b/src/BasicGUI/BasicGUI_EllipseDlg.cxx @@ -68,19 +68,23 @@ BasicGUI_EllipseDlg::BasicGUI_EllipseDlg( GeometryGUI* theGeometryGUI, QWidget* mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose ); mainFrame()->RadioButton3->close(); - GroupPoints = new DlgRef_2Sel2Spin( centralWidget() ); + GroupPoints = new DlgRef_3Sel2Spin( centralWidget() ); GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) ); - GroupPoints->TextLabel1->setText( tr( "GEOM_CENTER" ) + " (Origin by default)" ); - GroupPoints->TextLabel2->setText( tr( "GEOM_VECTOR" ) + " (Z axis by default)" ); - GroupPoints->TextLabel3->setText( tr( "GEOM_RADIUS_MAJOR" ) ); - GroupPoints->TextLabel4->setText( tr( "GEOM_RADIUS_MINOR" ) ); + GroupPoints->TextLabel1->setText( tr( "%1 (%2)" ).arg( tr( "GEOM_CENTER" ), tr( "ORIGIN_DEFAULT" ) ) ); + GroupPoints->TextLabel2->setText( tr( "%1 (%2)" ).arg( tr( "GEOM_VECTOR" ), tr( "Z_AXIS_DEFAULT" ) ) ); + GroupPoints->TextLabel3->setText( tr( "%1 (%2)" ).arg( tr( "GEOM_VECTOR_MAJOR" ), tr( "X_AXIS_DEFAULT" ) ) ); + GroupPoints->TextLabel4->setText( tr( "GEOM_RADIUS_MAJOR" ) ); + GroupPoints->TextLabel5->setText( tr( "GEOM_RADIUS_MINOR" ) ); GroupPoints->PushButton1->setIcon( image1 ); GroupPoints->PushButton2->setIcon( image1 ); + GroupPoints->PushButton3->setIcon( image1 ); GroupPoints->LineEdit1->setReadOnly( true ); GroupPoints->LineEdit2->setReadOnly( true ); + GroupPoints->LineEdit3->setReadOnly( true ); GroupPoints->LineEdit1->setEnabled( true ); GroupPoints->LineEdit2->setEnabled( false ); + GroupPoints->LineEdit3->setEnabled( false ); QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); @@ -114,7 +118,7 @@ void BasicGUI_EllipseDlg::Init() localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); GroupPoints->PushButton1->setDown(true); - myPoint = myDir = GEOM::GEOM_Object::_nil(); + myPoint = myDir = myMajor = GEOM::GEOM_Object::_nil(); /* Get setting of step value from file configuration */ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); @@ -137,9 +141,11 @@ void BasicGUI_EllipseDlg::Init() connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupPoints->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( GroupPoints->PushButton3, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); connect( GroupPoints->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); + connect( GroupPoints->LineEdit3, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); connect( GroupPoints->SpinBox_DX, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); connect( GroupPoints->SpinBox_DY, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); @@ -188,13 +194,16 @@ bool BasicGUI_EllipseDlg::ClickOnApply() initName(); // reset - myPoint = myDir = GEOM::GEOM_Object::_nil(); + myPoint = myDir = myMajor = GEOM::GEOM_Object::_nil(); GroupPoints->LineEdit1->setText( "" ); GroupPoints->LineEdit2->setText( "" ); + GroupPoints->LineEdit3->setText( "" ); GroupPoints->PushButton1->setDown(true); GroupPoints->PushButton2->setDown(false); + GroupPoints->PushButton3->setDown(false); GroupPoints->LineEdit1->setEnabled( true ); GroupPoints->LineEdit2->setEnabled( false ); + GroupPoints->LineEdit3->setEnabled( false ); myEditCurrentArgument = GroupPoints->LineEdit1; globalSelection(); // close local contexts, if any @@ -219,6 +228,7 @@ void BasicGUI_EllipseDlg::SelectionIntoArgument() if (aSelList.Extent() != 1) { if (myEditCurrentArgument == GroupPoints->LineEdit1) myPoint = GEOM::GEOM_Object::_nil(); else if (myEditCurrentArgument == GroupPoints->LineEdit2) myDir = GEOM::GEOM_Object::_nil(); + else if (myEditCurrentArgument == GroupPoints->LineEdit3) myMajor = GEOM::GEOM_Object::_nil(); return; } @@ -232,7 +242,7 @@ void BasicGUI_EllipseDlg::SelectionIntoArgument() TopoDS_Shape aShape; TopAbs_ShapeEnum aNeedType = TopAbs_VERTEX; - if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) + if ( myEditCurrentArgument == GroupPoints->LineEdit2 || myEditCurrentArgument == GroupPoints->LineEdit3 ) aNeedType = TopAbs_EDGE; if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() ) { @@ -278,7 +288,12 @@ void BasicGUI_EllipseDlg::SelectionIntoArgument() } else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) { myDir = aSelectedObject; - if ( !myDir->_is_nil() && myPoint->_is_nil() ) + if ( !myDir->_is_nil() && myMajor->_is_nil() ) + GroupPoints->PushButton3->click(); + } + else if ( myEditCurrentArgument == GroupPoints->LineEdit3 ) { + myMajor = aSelectedObject; + if ( !myMajor->_is_nil() && myPoint->_is_nil() ) GroupPoints->PushButton1->click(); } } @@ -298,19 +313,31 @@ void BasicGUI_EllipseDlg::SetEditCurrentArgument() if ( send == GroupPoints->PushButton1 ) { myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->PushButton2->setDown(false); + GroupPoints->PushButton3->setDown(false); GroupPoints->LineEdit1->setEnabled( true ); GroupPoints->LineEdit2->setEnabled( false ); + GroupPoints->LineEdit3->setEnabled( false ); } else if ( send == GroupPoints->PushButton2 ) { myEditCurrentArgument = GroupPoints->LineEdit2; GroupPoints->PushButton1->setDown(false); + GroupPoints->PushButton3->setDown(false); GroupPoints->LineEdit1->setEnabled( false ); GroupPoints->LineEdit2->setEnabled( true ); + GroupPoints->LineEdit3->setEnabled( false ); + } + else if ( send == GroupPoints->PushButton3 ) { + myEditCurrentArgument = GroupPoints->LineEdit3; + GroupPoints->PushButton1->setDown(false); + GroupPoints->PushButton2->setDown(false); + GroupPoints->LineEdit1->setEnabled( false ); + GroupPoints->LineEdit2->setEnabled( false ); + GroupPoints->LineEdit3->setEnabled( true ); } globalSelection(); // close local contexts, if any TopAbs_ShapeEnum aNeedType = TopAbs_VERTEX; - if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) + if ( myEditCurrentArgument == GroupPoints->LineEdit2 || myEditCurrentArgument == GroupPoints->LineEdit3 ) aNeedType = TopAbs_EDGE; localSelection( GEOM::GEOM_Object::_nil(), aNeedType ); @@ -328,7 +355,8 @@ void BasicGUI_EllipseDlg::LineEditReturnPressed() { QLineEdit* send = (QLineEdit*)sender(); if ( send == GroupPoints->LineEdit1 || - send == GroupPoints->LineEdit2 ) { + send == GroupPoints->LineEdit2 || + send == GroupPoints->LineEdit3 ) { myEditCurrentArgument = send; GEOMBase_Skeleton::LineEditReturnPressed(); } @@ -350,6 +378,7 @@ void BasicGUI_EllipseDlg::ActivateThisDialog() GroupPoints->LineEdit1->setText( "" ); GroupPoints->LineEdit2->setText( "" ); + GroupPoints->LineEdit3->setText( "" ); myPoint = myDir = GEOM::GEOM_Object::_nil(); //globalSelection( GEOM_POINT ); @@ -429,7 +458,9 @@ bool BasicGUI_EllipseDlg::execute( ObjectList& objects ) aParameters<SpinBox_DX->text(); aParameters<SpinBox_DY->text(); - GEOM::GEOM_Object_var anObj = GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeEllipse( myPoint, myDir, aMajorR, aMinorR ); + GEOM::GEOM_Object_var anObj = myMajor->_is_nil() ? + GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeEllipse ( myPoint, myDir, aMajorR, aMinorR ) : + GEOM::GEOM_ICurvesOperations::_narrow( getOperation() )->MakeEllipseVec( myPoint, myDir, aMajorR, aMinorR, myMajor ); if ( !anObj->_is_nil() ) { if ( !IsPreview() ) anObj->SetParameters(GeometryGUI::JoinObjectParameters(aParameters)); @@ -450,6 +481,8 @@ void BasicGUI_EllipseDlg::addSubshapesToStudy() objMap[GroupPoints->LineEdit1->text()] = myPoint; if (!CORBA::is_nil(myDir)) objMap[GroupPoints->LineEdit2->text()] = myDir; + if (!CORBA::is_nil(myMajor)) + objMap[GroupPoints->LineEdit3->text()] = myMajor; addSubshapesToFather( objMap ); } diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.h b/src/BasicGUI/BasicGUI_EllipseDlg.h index ab6ef7cb4..c80bce197 100644 --- a/src/BasicGUI/BasicGUI_EllipseDlg.h +++ b/src/BasicGUI/BasicGUI_EllipseDlg.h @@ -28,7 +28,7 @@ #include -class DlgRef_2Sel2Spin; +class DlgRef_3Sel2Spin; //================================================================================= // class : BasicGUI_EllipseDlg @@ -54,9 +54,9 @@ private: void enterEvent( QEvent* ); private: - GEOM::GEOM_Object_var myPoint, myDir; + GEOM::GEOM_Object_var myPoint, myDir, myMajor; - DlgRef_2Sel2Spin* GroupPoints; + DlgRef_3Sel2Spin* GroupPoints; private slots: void ClickOnOk(); diff --git a/src/DlgRef/DlgRef.cxx b/src/DlgRef/DlgRef.cxx index 0b0f48585..2d876aed2 100644 --- a/src/DlgRef/DlgRef.cxx +++ b/src/DlgRef/DlgRef.cxx @@ -542,6 +542,20 @@ DlgRef_3Sel1Spin::~DlgRef_3Sel1Spin() { } +////////////////////////////////////////// +// DlgRef_3Sel2Spin +////////////////////////////////////////// + +DlgRef_3Sel2Spin::DlgRef_3Sel2Spin( QWidget* parent, Qt::WindowFlags f ) +: QWidget( parent, f ) +{ + setupUi( this ); +} + +DlgRef_3Sel2Spin::~DlgRef_3Sel2Spin() +{ +} + ////////////////////////////////////////// // DlgRef_3Sel3Spin1Check ////////////////////////////////////////// @@ -766,7 +780,7 @@ QString DlgRef::PrintDoubleValue( double theValue, int thePrecision ) { const double prec = 1e-12; - if ( abs(theValue) < thePrecision) + if ( qAbs(theValue) < prec ) return "0"; QString aRes; diff --git a/src/DlgRef/DlgRef.h b/src/DlgRef/DlgRef.h index 69b58ca64..3ef90cceb 100644 --- a/src/DlgRef/DlgRef.h +++ b/src/DlgRef/DlgRef.h @@ -629,6 +629,22 @@ public: ~DlgRef_3Sel1Spin(); }; +////////////////////////////////////////// +// DlgRef_3Sel2Spin +////////////////////////////////////////// + +#include "ui_DlgRef_3Sel2Spin_QTD.h" + +class DLGREF_EXPORT DlgRef_3Sel2Spin : public QWidget, + public Ui::DlgRef_3Sel2Spin_QTD +{ + Q_OBJECT + +public: + DlgRef_3Sel2Spin( QWidget* = 0, Qt::WindowFlags = 0 ); + ~DlgRef_3Sel2Spin(); +}; + ////////////////////////////////////////// // DlgRef_3Sel3Spin1Check ////////////////////////////////////////// diff --git a/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui b/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui new file mode 100644 index 000000000..509282969 --- /dev/null +++ b/src/DlgRef/DlgRef_3Sel2Spin_QTD.ui @@ -0,0 +1,199 @@ + + DlgRef_3Sel2Spin_QTD + + + + 0 + 0 + 120 + 177 + + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + + + + + + + 0 + 0 + + + + TL1 + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + TL2 + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + TL3 + + + false + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + 0 + 0 + + + + TL4 + + + false + + + + + + + + + + + 0 + 0 + + + + TL5 + + + false + + + + + + + + + + + + + qPixmapFromMimeSource + + + SalomeApp_DoubleSpinBox + QDoubleSpinBox +

SalomeApp_DoubleSpinBox.h
+ + + + PushButton1 + LineEdit1 + PushButton2 + LineEdit2 + PushButton3 + LineEdit3 + SpinBox_DX + + + + diff --git a/src/DlgRef/Makefile.am b/src/DlgRef/Makefile.am index cbd156bb1..54cb1abe7 100644 --- a/src/DlgRef/Makefile.am +++ b/src/DlgRef/Makefile.am @@ -75,6 +75,7 @@ UIC_FILES = \ ui_DlgRef_3Radio1Sel1Spin_QTD.h \ ui_DlgRef_3Sel1Check_QTD.h \ ui_DlgRef_3Sel1Spin_QTD.h \ + ui_DlgRef_3Sel2Spin_QTD.h \ ui_DlgRef_3Sel3Spin1Check_QTD.h \ ui_DlgRef_3Sel3Spin2Check_QTD.h \ ui_DlgRef_3Sel4Spin2Check_QTD.h \ diff --git a/src/GEOMGUI/GEOM_msg_en.ts b/src/GEOMGUI/GEOM_msg_en.ts index 15ac7e838..13210b537 100644 --- a/src/GEOMGUI/GEOM_msg_en.ts +++ b/src/GEOMGUI/GEOM_msg_en.ts @@ -3760,6 +3760,25 @@ Please, select face, shell or solid and try again Import operation has finished with errors: + + BasicGUI_EllipseDlg + + GEOM_VECTOR_MAJOR + Major Axis + + + ORIGIN_DEFAULT + Origin by default + + + X_AXIS_DEFAULT + X axis by default + + + Z_AXIS_DEFAULT + Z axis by default + + BasicGUI_MarkerDlg diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx index 24ac23eb6..176ba05df 100644 --- a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx @@ -79,7 +79,7 @@ Standard_Integer GEOMImpl_EllipseDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShapePnt = aRefPoint->GetValue(); if (aShapePnt.ShapeType() != TopAbs_VERTEX) { Standard_ConstructionError::Raise - ("Circle creation aborted: invalid center argument, must be a point"); + ("Ellipse creation aborted: invalid center argument, must be a point"); } aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); } @@ -90,7 +90,7 @@ Standard_Integer GEOMImpl_EllipseDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShapeVec = aRefVector->GetValue(); if (aShapeVec.ShapeType() != TopAbs_EDGE) { Standard_ConstructionError::Raise - ("Circle creation aborted: invalid vector argument, must be a vector or an edge"); + ("Ellipse creation aborted: invalid normal vector argument, must be a vector or an edge"); } TopoDS_Edge anE = TopoDS::Edge(aShapeVec); TopoDS_Vertex V1, V2; @@ -99,12 +99,37 @@ Standard_Integer GEOMImpl_EllipseDriver::Execute(TFunction_Logbook& log) const aV = gp_Vec(BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); if (aV.Magnitude() < gp::Resolution()) { Standard_ConstructionError::Raise - ("Circle creation aborted: vector of zero length is given"); + ("Ellipse creation aborted: normal vector of zero length is given"); } } } + // Main Axis vector + gp_Vec aVM = gp::DX(); + Handle(GEOM_Function) aRefVectorMaj = aCI.GetVectorMajor(); + if (!aRefVectorMaj.IsNull()) { + TopoDS_Shape aShapeVec = aRefVectorMaj->GetValue(); + if (aShapeVec.ShapeType() != TopAbs_EDGE) { + Standard_ConstructionError::Raise + ("Ellipse creation aborted: invalid major axis vector argument, must be a vector or an edge"); + } + TopoDS_Edge anE = TopoDS::Edge(aShapeVec); + TopoDS_Vertex V1, V2; + TopExp::Vertices(anE, V1, V2, Standard_True); + if (!V1.IsNull() && !V2.IsNull()) { + aVM = gp_Vec(BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); + if (aVM.Magnitude() < gp::Resolution()) { + Standard_ConstructionError::Raise + ("Ellipse creation aborted: major axis vector of zero length is given"); + } + if (aV.IsParallel(aVM, Precision::Angular())) { + Standard_ConstructionError::Raise + ("Ellipse creation aborted: normal and major axis vectors are parallel"); + } + } + } + // Axes - gp_Ax2 anAxes (aP, aV); + gp_Ax2 anAxes (aP, aV, aVM); // Ellipse gp_Elips anEll (anAxes, aCI.GetRMajor(), aCI.GetRMinor()); aShape = BRepBuilderAPI_MakeEdge(anEll).Edge(); diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx index 6a6b8f9ef..72fb49c63 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx @@ -334,12 +334,14 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCirclePntVecR //============================================================================= Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theRMajor, double theRMinor) + double theRMajor, double theRMinor, + Handle(GEOM_Object) theVecMaj) { SetErrorCode(KO); // Not set thePnt means origin of global CS, // Not set theVec means Z axis of global CS + // Not set theVecMaj means X axis of global CS //if (thePnt.IsNull() || theVec.IsNull()) return NULL; //Add a new Ellipse object @@ -370,6 +372,12 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse aCI.SetRMajor(theRMajor); aCI.SetRMinor(theRMinor); + if (!theVecMaj.IsNull()) { + Handle(GEOM_Function) aRefVecMaj = theVecMaj->GetLastFunction(); + if (aRefVecMaj.IsNull()) return NULL; + aCI.SetVectorMajor(aRefVecMaj); + } + //Compute the Ellipse value try { #if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 @@ -387,8 +395,15 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse } //Make a Python command - GEOM::TPythonDump(aFunction) << anEll << " = geompy.MakeEllipse(" - << thePnt << ", " << theVec << ", " << theRMajor << ", " << theRMinor << ")"; + if (!theVecMaj.IsNull()) { + GEOM::TPythonDump(aFunction) << anEll << " = geompy.MakeEllipse(" + << thePnt << ", " << theVec << ", " << theRMajor << ", " << theRMinor + << ", " << theVecMaj << ")"; + } + else { + GEOM::TPythonDump(aFunction) << anEll << " = geompy.MakeEllipse(" + << thePnt << ", " << theVec << ", " << theRMajor << ", " << theRMinor << ")"; + } SetErrorCode(OK); return anEll; diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx index 7380a0977..dbf5ecee0 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.hxx @@ -51,7 +51,8 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations { Standard_EXPORT Handle(GEOM_Object) MakeEllipse (Handle(GEOM_Object) thePnt, Handle(GEOM_Object) theVec, - double theRMajor, double theRMinor); + double theRMajor, double theRMinor, + Handle(GEOM_Object) theVecMaj); Standard_EXPORT Handle(GEOM_Object) MakeArc (Handle(GEOM_Object) thePnt1, Handle(GEOM_Object) thePnt2, diff --git a/src/GEOMImpl/GEOMImpl_IEllipse.hxx b/src/GEOMImpl/GEOMImpl_IEllipse.hxx index 8a199e760..8fe39a5f3 100644 --- a/src/GEOMImpl/GEOMImpl_IEllipse.hxx +++ b/src/GEOMImpl/GEOMImpl_IEllipse.hxx @@ -23,10 +23,11 @@ // #include "GEOM_Function.hxx" -#define ELLIPS_ARG_CC 1 -#define ELLIPS_ARG_VV 2 -#define ELLIPS_ARG_RMAJ 3 -#define ELLIPS_ARG_RMIN 4 +#define ELLIPS_ARG_CC 1 +#define ELLIPS_ARG_VV 2 +#define ELLIPS_ARG_RMAJ 3 +#define ELLIPS_ARG_RMIN 4 +#define ELLIPS_ARG_VVMAJ 5 class GEOMImpl_IEllipse { @@ -40,12 +41,16 @@ class GEOMImpl_IEllipse void SetRMajor(double theR) { _func->SetReal(ELLIPS_ARG_RMAJ, theR); } void SetRMinor(double theR) { _func->SetReal(ELLIPS_ARG_RMIN, theR); } + void SetVectorMajor(Handle(GEOM_Function) theV) { _func->SetReference(ELLIPS_ARG_VVMAJ, theV); } + Handle(GEOM_Function) GetCenter() { return _func->GetReference(ELLIPS_ARG_CC); } Handle(GEOM_Function) GetVector() { return _func->GetReference(ELLIPS_ARG_VV); } double GetRMajor() { return _func->GetReal(ELLIPS_ARG_RMAJ); } double GetRMinor() { return _func->GetReal(ELLIPS_ARG_RMIN); } + Handle(GEOM_Function) GetVectorMajor() { return _func->GetReference(ELLIPS_ARG_VVMAJ); } + private: Handle(GEOM_Function) _func; diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc index 2b15af49f..572a2918b 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.cc +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.cc @@ -181,7 +181,49 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipse //if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); //Get the arguments - Handle(GEOM_Object) aPnt, aVec; + Handle(GEOM_Object) aPnt, aVec, aVecMaj; + if (!CORBA::is_nil(thePnt)) { + aPnt = GetOperations()->GetEngine()->GetObject + (thePnt->GetStudyID(), thePnt->GetEntry()); + if (aPnt.IsNull()) return aGEOMObject._retn(); + } + if (!CORBA::is_nil(theVec)) { + aVec = GetOperations()->GetEngine()->GetObject + (theVec->GetStudyID(), theVec->GetEntry()); + if (aVec.IsNull()) return aGEOMObject._retn(); + } + + // Make Ellipse + Handle(GEOM_Object) anObject = + GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor, aVecMaj); + if (!GetOperations()->IsDone() || anObject.IsNull()) + return aGEOMObject._retn(); + + return GetObject(anObject); +} + +//============================================================================= +/*! + * MakeEllipseVec + */ +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipseVec + (GEOM::GEOM_Object_ptr thePnt, GEOM::GEOM_Object_ptr theVec, + CORBA::Double theRMajor, double theRMinor, + GEOM::GEOM_Object_ptr theVecMaj) +{ + GEOM::GEOM_Object_var aGEOMObject; + + //Set a not done flag + GetOperations()->SetNotDone(); + + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + // Not set theVecMaj means X axis of global CS + //if (thePnt == NULL || theVec == NULL || theVecMaj == NULL) return aGEOMObject._retn(); + + //Get the arguments + Handle(GEOM_Object) aPnt, aVec, aVecMaj; if (!CORBA::is_nil(thePnt)) { aPnt = GetOperations()->GetEngine()->GetObject (thePnt->GetStudyID(), thePnt->GetEntry()); @@ -192,10 +234,15 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipse (theVec->GetStudyID(), theVec->GetEntry()); if (aVec.IsNull()) return aGEOMObject._retn(); } + if (!CORBA::is_nil(theVecMaj)) { + aVecMaj = GetOperations()->GetEngine()->GetObject + (theVecMaj->GetStudyID(), theVecMaj->GetEntry()); + if (aVecMaj.IsNull()) return aGEOMObject._retn(); + } // Make Ellipse Handle(GEOM_Object) anObject = - GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor); + GetOperations()->MakeEllipse(aPnt, aVec, theRMajor, theRMinor, aVecMaj); if (!GetOperations()->IsDone() || anObject.IsNull()) return aGEOMObject._retn(); diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.hh b/src/GEOM_I/GEOM_ICurvesOperations_i.hh index 24179fc1f..728f567e0 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.hh +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.hh @@ -57,6 +57,11 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i : GEOM::GEOM_Object_ptr theVector, double theRMajor, double theRMinor); + GEOM::GEOM_Object_ptr MakeEllipseVec (GEOM::GEOM_Object_ptr theCenter, + GEOM::GEOM_Object_ptr theVector, + double theRMajor, double theRMinor, + GEOM::GEOM_Object_ptr theVectorMajor); + GEOM::GEOM_Object_ptr MakeArc (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2, GEOM::GEOM_Object_ptr thePnt3); diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.cc b/src/GEOM_I_Superv/GEOM_Superv_i.cc index 159bb6f49..094b6e99f 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.cc +++ b/src/GEOM_I_Superv/GEOM_Superv_i.cc @@ -2532,6 +2532,23 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEllipse (GEOM::GEOM_Object_ptr theCente return anObj; } +//============================================================================= +// MakeEllipseVec: +//============================================================================= +GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeEllipseVec (GEOM::GEOM_Object_ptr theCenter, + GEOM::GEOM_Object_ptr theVector, + CORBA::Double theRMajor, + CORBA::Double theRMinor, + GEOM::GEOM_Object_ptr theVectorMajor) +{ + beginService( " GEOM_Superv_i::MakeEllipseVec" ); + MESSAGE("GEOM_Superv_i::MakeEllipseVec"); + getCurvesOp(); + GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeEllipseVec(theCenter, theVector, theRMajor, theRMinor, theVectorMajor); + endService( " GEOM_Superv_i::MakeEllipseVec" ); + return anObj; +} + //============================================================================= // MakeArc: //============================================================================= diff --git a/src/GEOM_I_Superv/GEOM_Superv_i.hh b/src/GEOM_I_Superv/GEOM_Superv_i.hh index b34c13214..e9e2dd242 100644 --- a/src/GEOM_I_Superv/GEOM_Superv_i.hh +++ b/src/GEOM_I_Superv/GEOM_Superv_i.hh @@ -557,6 +557,10 @@ public: GEOM::GEOM_Object_ptr MakeEllipse (GEOM::GEOM_Object_ptr theCenter, GEOM::GEOM_Object_ptr theVector, CORBA::Double theRMajor, CORBA::Double theRMinor); + GEOM::GEOM_Object_ptr MakeEllipseVec (GEOM::GEOM_Object_ptr theCenter, + GEOM::GEOM_Object_ptr theVector, + CORBA::Double theRMajor, CORBA::Double theRMinor, + GEOM::GEOM_Object_ptr theVectorMajor); GEOM::GEOM_Object_ptr MakeArc (GEOM::GEOM_Object_ptr thePnt1, GEOM::GEOM_Object_ptr thePnt2, GEOM::GEOM_Object_ptr thePnt3); diff --git a/src/GEOM_SWIG/geompyDC.py b/src/GEOM_SWIG/geompyDC.py index 56e0ba3fb..61f6380c3 100644 --- a/src/GEOM_SWIG/geompyDC.py +++ b/src/GEOM_SWIG/geompyDC.py @@ -652,13 +652,18 @@ class geompyDC(GEOM._objref_GEOM_Gen): # @param theVec Vector, normal to the plane of the ellipse. # @param theRMajor Major ellipse radius. # @param theRMinor Minor ellipse radius. + # @param theVecMaj Vector, direction by the main exis. # @return New GEOM_Object, containing the created ellipse. # # @ref tui_creation_ellipse "Example" - def MakeEllipse(self, thePnt, theVec, theRMajor, theRMinor): + def MakeEllipse(self, thePnt, theVec, theRMajor, theRMinor, theVecMaj=None): # Example: see GEOM_TestAll.py theRMajor, theRMinor, Parameters = ParseParameters(theRMajor, theRMinor) - anObj = self.CurvesOp.MakeEllipse(thePnt, theVec, theRMajor, theRMinor) + if theVecMaj is not None: + anObj = self.CurvesOp.MakeEllipseVec(thePnt, theVec, theRMajor, theRMinor, theVecMaj) + else: + anObj = self.CurvesOp.MakeEllipse(thePnt, theVec, theRMajor, theRMinor) + pass RaiseIfFailed("MakeEllipse", self.CurvesOp) anObj.SetParameters(Parameters) return anObj -- 2.39.2