From a0e96fa432c10a8856c2c5d79bad2db629c18d4a Mon Sep 17 00:00:00 2001 From: jfa Date: Wed, 13 Aug 2008 13:20:56 +0000 Subject: [PATCH] IMP 0016656: EDF531: Default constructor in creation dialog of geometric objects. --- doc/salome/gui/GEOM/images/circle1.png | Bin 20450 -> 24155 bytes doc/salome/gui/GEOM/images/ellipse.png | Bin 22761 -> 25344 bytes doc/salome/gui/GEOM/input/creating_circle.doc | 4 + .../gui/GEOM/input/creating_ellipse.doc | 6 +- src/BasicGUI/BasicGUI_CircleDlg.cxx | 19 ++- src/BasicGUI/BasicGUI_EllipseDlg.cxx | 18 ++- src/BasicGUI/BasicGUI_VectorDlg.cxx | 35 ++--- src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx | 60 +++++---- src/GEOMImpl/GEOMImpl_CircleDriver.cxx | 126 ++++++++++-------- src/GEOMImpl/GEOMImpl_EllipseDriver.cxx | 42 ++++-- src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx | 38 ++++-- src/GEOM_I/GEOM_ICurvesOperations_i.cc | 48 ++++--- src/GEOM_SWIG/geompyDC.py | 25 +++- src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx | 3 +- src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx | 3 +- src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx | 4 +- src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx | 3 +- src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx | 3 +- 18 files changed, 280 insertions(+), 157 deletions(-) diff --git a/doc/salome/gui/GEOM/images/circle1.png b/doc/salome/gui/GEOM/images/circle1.png index 8eae9abbe29d345d4141677df09c23dd02ebb695..c9708f1d7aca590d52ee8131bb7e23eade3a4d07 100755 GIT binary patch literal 24155 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 E0L^iWApigX literal 20450 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�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 literal 22761 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

O$rf+`SAY29S8+}fF)q|zIyks`}UD!8aF2$|s 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 \n Arguments: Name + 1 vertex (for the center) + 1 edge (for the direction) + Radius. +\note Passing None as Center Point means Origin of global +coordinate system, passing None as \b Vector means OZ axis of global +coordinate system. + \image html circle1.png \n Secondly, you can define a \b Circle by three \b Points that lie on it. diff --git a/doc/salome/gui/GEOM/input/creating_ellipse.doc b/doc/salome/gui/GEOM/input/creating_ellipse.doc index 78972181b..8d9fdc6f2 100644 --- a/doc/salome/gui/GEOM/input/creating_ellipse.doc +++ b/doc/salome/gui/GEOM/input/creating_ellipse.doc @@ -12,6 +12,10 @@ Vector giving its normal, and its Major & Minor Radiuses. \n Arguments: Name + 1 vertex (for the center) + 1 edge (for the direction) + 1 X Radius + 1 Y Radius. +\note Passing None as Center Point means Origin of global +coordinate system, passing None as \b Vector means OZ axis of global +coordinate system. + \image html ellipse.png Example: @@ -21,4 +25,4 @@ the direction) + 1 X Radius + 1 Y Radius. Our TUI Scripts provide you with useful examples of creation of \ref tui_creation_ellipse "Basic Geometric Objects". -*/ \ No newline at end of file +*/ diff --git a/src/BasicGUI/BasicGUI_CircleDlg.cxx b/src/BasicGUI/BasicGUI_CircleDlg.cxx index 1a067c6fa..23fc15a4d 100644 --- a/src/BasicGUI/BasicGUI_CircleDlg.cxx +++ b/src/BasicGUI/BasicGUI_CircleDlg.cxx @@ -69,8 +69,8 @@ BasicGUI_CircleDlg::BasicGUI_CircleDlg( GeometryGUI* theGeometryGUI, QWidget* pa GroupPntVecR = new DlgRef_2Sel1Spin( centralWidget() ); GroupPntVecR->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) ); - GroupPntVecR->TextLabel1->setText( tr( "GEOM_CENTER_POINT" ) ); - GroupPntVecR->TextLabel2->setText( tr( "GEOM_VECTOR" ) ); + GroupPntVecR->TextLabel1->setText( tr( "GEOM_CENTER_POINT" ) + " (Origin by default)" ); + GroupPntVecR->TextLabel2->setText( tr( "GEOM_VECTOR" ) + " (Z axis by default)" ); GroupPntVecR->TextLabel3->setText( tr( "GEOM_RADIUS" ) ); GroupPntVecR->PushButton1->setIcon( image1 ); GroupPntVecR->PushButton2->setIcon( image1 ); @@ -248,6 +248,8 @@ void BasicGUI_CircleDlg::ConstructorsClicked( int constructorId ) connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); + + displayPreview(); } //================================================================================= @@ -494,12 +496,15 @@ bool BasicGUI_CircleDlg::isValid( QString& msg ) { const int id = getConstructorId(); if ( id == 0 ) - return !myPoint->_is_nil() && !myDir->_is_nil() && getRadius() > 0; + //return !myPoint->_is_nil() && !myDir->_is_nil() && getRadius() > 0; + //nil point means origin of global CS + //nil vector means Z axis + return getRadius() > 0; 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() && + return !myPoint4->_is_nil() && !myPoint5->_is_nil() && !myPoint6->_is_nil() && !isEqual( myPoint4, myPoint5 ) && !isEqual( myPoint5, myPoint6 ) && !isEqual( myPoint4, myPoint6 ); return false; } @@ -548,8 +553,10 @@ void BasicGUI_CircleDlg::addSubshapesToStudy() switch ( getConstructorId() ) { case 0: - objMap[GroupPntVecR->LineEdit1->text()] = myPoint; - objMap[GroupPntVecR->LineEdit2->text()] = myDir; + if (!CORBA::is_nil(myPoint)) + objMap[GroupPntVecR->LineEdit1->text()] = myPoint; + if (!CORBA::is_nil(myDir)) + objMap[GroupPntVecR->LineEdit2->text()] = myDir; break; case 1: objMap[Group3Pnts->LineEdit1->text()] = myPoint1; diff --git a/src/BasicGUI/BasicGUI_EllipseDlg.cxx b/src/BasicGUI/BasicGUI_EllipseDlg.cxx index b0b451569..519e088a3 100644 --- a/src/BasicGUI/BasicGUI_EllipseDlg.cxx +++ b/src/BasicGUI/BasicGUI_EllipseDlg.cxx @@ -69,8 +69,8 @@ BasicGUI_EllipseDlg::BasicGUI_EllipseDlg( GeometryGUI* theGeometryGUI, QWidget* GroupPoints = new DlgRef_2Sel2Spin( centralWidget() ); GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) ); - GroupPoints->TextLabel1->setText( tr( "GEOM_CENTER" ) ); - GroupPoints->TextLabel2->setText( tr( "GEOM_VECTOR" ) ); + 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->PushButton1->setIcon( image1 ); @@ -146,6 +146,8 @@ void BasicGUI_EllipseDlg::Init() SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_ELLIPSE" ) ); + + displayPreview(); } //================================================================================= @@ -189,6 +191,7 @@ bool BasicGUI_EllipseDlg::ClickOnApply() //globalSelection(GEOM_POINT); globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); + displayPreview(); return true; } @@ -368,7 +371,10 @@ bool BasicGUI_EllipseDlg::isValid( QString& msg ) msg = tr( "GEOM_ELLIPSE_ERROR_1" ); return false; } - return !myPoint->_is_nil() && !myDir->_is_nil(); + //return !myPoint->_is_nil() && !myDir->_is_nil(); + //nil point means origin of global CS + //nil vector means Z axis + return true; } //================================================================================= @@ -395,8 +401,10 @@ void BasicGUI_EllipseDlg::addSubshapesToStudy() { QMap objMap; - objMap[GroupPoints->LineEdit1->text()] = myPoint; - objMap[GroupPoints->LineEdit2->text()] = myDir; + if (!CORBA::is_nil(myPoint)) + objMap[GroupPoints->LineEdit1->text()] = myPoint; + if (!CORBA::is_nil(myDir)) + objMap[GroupPoints->LineEdit2->text()] = myDir; addSubshapesToFather( objMap ); } diff --git a/src/BasicGUI/BasicGUI_VectorDlg.cxx b/src/BasicGUI/BasicGUI_VectorDlg.cxx index dd6102815..9408a0a39 100644 --- a/src/BasicGUI/BasicGUI_VectorDlg.cxx +++ b/src/BasicGUI/BasicGUI_VectorDlg.cxx @@ -44,7 +44,7 @@ //================================================================================= // class : BasicGUI_VectorDlg() -// purpose : Constructs a BasicGUI_VectorDlg which is a child of 'parent', with the +// purpose : Constructs a BasicGUI_VectorDlg which is a child of 'parent', with the // name 'name' and widget flags set to 'f'. // The dialog will by default be modeless, unless you set 'modal' to // TRUE to construct a modal dialog. @@ -91,7 +91,7 @@ BasicGUI_VectorDlg::BasicGUI_VectorDlg( GeometryGUI* theGeometryGUI, QWidget* pa /***************************************************************/ setHelpFileName( "create_vector_page.html" ); - + /* Initialisations */ Init(); } @@ -102,7 +102,7 @@ BasicGUI_VectorDlg::BasicGUI_VectorDlg( GeometryGUI* theGeometryGUI, QWidget* pa // purpose : Destroys the object and frees any allocated resources //================================================================================= BasicGUI_VectorDlg::~BasicGUI_VectorDlg() -{ +{ } @@ -121,7 +121,7 @@ void BasicGUI_VectorDlg::Init() /* Get setting of step value from file configuration */ SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr(); double step = resMgr->doubleValue( "Geometry", "SettingsGeomStep", 100 ); - + /* min, max, step and decimals for spin boxes */ initSpinBox( GroupDimensions->SpinBox_DX, COORD_MIN, COORD_MAX, step, 3 ); // VSR:TODO : DBL_DIGITS_DISPLAY initSpinBox( GroupDimensions->SpinBox_DY, COORD_MIN, COORD_MAX, step, 3 ); // VSR:TODO : DBL_DIGITS_DISPLAY @@ -137,7 +137,7 @@ void BasicGUI_VectorDlg::Init() /* signals and slots connections */ connect( myGeomGUI, SIGNAL( SignalDeactivateActiveDialog() ), this, SLOT( DeactivateActiveDialog() ) ); connect( myGeomGUI, SIGNAL( SignalCloseAllDialogs() ), this, SLOT( ClickOnCancel() ) ); - + connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); @@ -157,12 +157,13 @@ void BasicGUI_VectorDlg::Init() connect( GroupDimensions->CheckButton1, SIGNAL( stateChanged( int ) ), this, SLOT( ReverseVector( int ) ) ); - connect( myGeomGUI->getApp()->selectionMgr(), + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr("GEOM_VECTOR") ); - ConstructorsClicked( 0 ); + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } //================================================================================= @@ -192,14 +193,14 @@ void BasicGUI_VectorDlg::ConstructorsClicked( int constructorId ) { GroupDimensions->hide(); GroupPoints->show(); - + myEditCurrentArgument = GroupPoints->LineEdit1; GroupPoints->LineEdit1->setText( "" ); GroupPoints->LineEdit2->setText( "" ); - + globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); - connect( myGeomGUI->getApp()->selectionMgr(), + connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); break; } @@ -208,12 +209,12 @@ void BasicGUI_VectorDlg::ConstructorsClicked( int constructorId ) GroupPoints->hide(); GroupDimensions->show(); globalSelection(); // close local contexts, if any - - double dx( 0. ), dy( 0. ), dz( 0. ); + + double dx( 0. ), dy( 0. ), dz( 0. ); GroupDimensions->SpinBox_DX->setValue( dx ); GroupDimensions->SpinBox_DY->setValue( dy ); GroupDimensions->SpinBox_DZ->setValue( dz ); - + GroupDimensions->CheckButton1->setChecked( false ); break; } @@ -271,7 +272,7 @@ void BasicGUI_VectorDlg::SelectionIntoArgument() return; } - // nbSel == 1 + // nbSel == 1 Standard_Boolean aRes = Standard_False; GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( firstIObject(), aRes ); if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { @@ -334,7 +335,7 @@ void BasicGUI_VectorDlg::SetEditCurrentArgument() // purpose : //================================================================================= void BasicGUI_VectorDlg::LineEditReturnPressed() -{ +{ QLineEdit* send = (QLineEdit*)sender(); if ( send == GroupPoints->LineEdit1 ) myEditCurrentArgument = GroupPoints->LineEdit1; else if ( send == GroupPoints->LineEdit2 ) myEditCurrentArgument = GroupPoints->LineEdit2; @@ -397,7 +398,7 @@ void BasicGUI_VectorDlg::ReverseVector( int state ) GroupDimensions->SpinBox_DX->setValue( dx ); GroupDimensions->SpinBox_DY->setValue( dy ); GroupDimensions->SpinBox_DZ->setValue( dz ); - + displayPreview(); } @@ -426,7 +427,7 @@ bool BasicGUI_VectorDlg::isValid( QString& msg ) bool BasicGUI_VectorDlg::execute( ObjectList& objects ) { bool res = false; - + GEOM::GEOM_Object_var anObj; switch ( getConstructorId() ) { diff --git a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx index f5a646c87..55bba2858 100644 --- a/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx +++ b/src/BasicGUI/BasicGUI_WorkingPlaneDlg.cxx @@ -102,20 +102,20 @@ BasicGUI_WorkingPlaneDlg::BasicGUI_WorkingPlaneDlg( GeometryGUI* theGeometryGUI, /***************************************************************/ QGroupBox* aReverseGroupBox = new QGroupBox( centralWidget() ); QHBoxLayout* aReverseGroupBoxLayout = new QHBoxLayout( aReverseGroupBox ); - aReverseGroupBoxLayout->setMargin( 9 ); + aReverseGroupBoxLayout->setMargin( 9 ); aReverseGroupBoxLayout->setSpacing( 6 ); - + myReverseCB = new QCheckBox( aReverseGroupBox ); myReverseCB->setText( tr( "GEOM_REVERSE_PLANE" ) ); aReverseGroupBoxLayout->addWidget( myReverseCB ); - + QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); layout->addWidget( Group1 ); layout->addWidget( Group2 ); layout->addWidget( Group3 ); layout->addWidget( aReverseGroupBox ); - + setHelpFileName( "create_wplane_page.html" ); Init(); @@ -175,7 +175,8 @@ void BasicGUI_WorkingPlaneDlg::Init() initName( tr( "GEOM_WPLANE" ) ); - ConstructorsClicked( 0 ); + setConstructorId( 2 ); // simplest constructor + ConstructorsClicked( 2 ); } //================================================================================= @@ -196,15 +197,15 @@ void BasicGUI_WorkingPlaneDlg::ConstructorsClicked( int constructorId ) aMap.Add( GEOM_PLANE ); aMap.Add( GEOM_MARKER ); globalSelection( aMap ); - + Group2->hide(); Group3->hide(); Group1->show(); - + myEditCurrentArgument = Group1->LineEdit1; Group1->LineEdit1->setText( "" ); myFace = GEOM::GEOM_Object::_nil(); - + connect( aSelMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); break; } @@ -213,17 +214,17 @@ void BasicGUI_WorkingPlaneDlg::ConstructorsClicked( int constructorId ) //globalSelection( GEOM_LINE ); GEOM::GEOM_Object_var anObj; localSelection( anObj, TopAbs_EDGE ); - + Group1->hide(); Group3->hide(); Group2->show(); - + myEditCurrentArgument = Group2->LineEdit1; Group2->LineEdit1->setText( "" ); Group2->LineEdit2->setText( "" ); myVectX = GEOM::GEOM_Object::_nil(); myVectZ = GEOM::GEOM_Object::_nil(); - + connect( aSelMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); break; } @@ -232,13 +233,13 @@ void BasicGUI_WorkingPlaneDlg::ConstructorsClicked( int constructorId ) Group1->hide(); Group2->hide(); Group3->show(); - + Group3->RadioButton1->setChecked( true ); aOriginType = 1; break; } } - + qApp->processEvents(); updateGeometry(); resize( minimumSize() ); @@ -274,12 +275,12 @@ bool BasicGUI_WorkingPlaneDlg::ClickOnApply() { buttonApply()->setFocus(); myGeomGUI->application()->putInfo( "" ); - + if ( updateWPlane( false ) ) { myGeomGUI->SetWorkingPlane( myWPlane ); myGeomGUI->ActiveWorkingPlane(); } - + return true; } @@ -316,7 +317,7 @@ void BasicGUI_WorkingPlaneDlg::SelectionIntoArgument() if ( myEditCurrentArgument == Group1->LineEdit1 ) myFace = aSelectedObject; - else if ( myEditCurrentArgument == Group2->LineEdit1 || + else if ( myEditCurrentArgument == Group2->LineEdit1 || myEditCurrentArgument == Group2->LineEdit2 ) { if ( aRes && !aSelectedObject->_is_nil() ) { TopoDS_Shape aShape; @@ -347,7 +348,7 @@ void BasicGUI_WorkingPlaneDlg::SelectionIntoArgument() } myEditCurrentArgument->setText( aName ); - + updateWPlane(); } @@ -445,7 +446,7 @@ void BasicGUI_WorkingPlaneDlg::enterEvent( QEvent* ) bool BasicGUI_WorkingPlaneDlg::updateWPlane( const bool showPreview ) { erasePreview(); - + const int id = getConstructorId(); if ( id == 0 ) { // by planar face selection @@ -470,20 +471,20 @@ bool BasicGUI_WorkingPlaneDlg::updateWPlane( const bool showPreview ) gp_Dir aDirN ( Zx, Zy, Zz ); gp_Dir aDirX ( Xx, Xy, Xz ); myWPlane = gp_Ax3( aPnt, aDirN, aDirX ); - } + } else { if ( !showPreview ) showError( "Wrong shape selected (has to be a planar face)" ); return false; } - } + } else if ( id == 1 ) { // by two vectors (Ox & Oz) if ( CORBA::is_nil( myVectX ) || CORBA::is_nil( myVectZ ) ) { if ( !showPreview ) showError( "Two vectors have to be selected" ); return false; } - + TopoDS_Edge aVectX, aVectZ; TopoDS_Vertex VX1, VX2, VZ1, VZ2; gp_Vec aVX, aVZ; @@ -534,7 +535,7 @@ bool BasicGUI_WorkingPlaneDlg::updateWPlane( const bool showPreview ) myWPlane = gp_Ax3( BRep_Tool::Pnt( VX1 ), aDirZ, aDirX ); - } + } else if ( id == 2 ) { // by selection from standard (OXY or OYZ, or OZX) gp_Ax2 anAx2; @@ -544,23 +545,24 @@ bool BasicGUI_WorkingPlaneDlg::updateWPlane( const bool showPreview ) myWPlane = gp_Ax3( anAx2 ); - } + } else { return false; } - + if ( myReverseCB->isChecked() ) { myWPlane.YReverse(); myWPlane.ZReverse(); } - + if ( showPreview ) { GEOM::GEOM_IBasicOperations_var aBasicOp = getGeomEngine()->GetIBasicOperations( getStudyId() ); - GEOM::GEOM_Object_var anObj = aBasicOp->MakeMarker( myWPlane.Location().X(), myWPlane.Location().Y(), myWPlane.Location().Z(), - myWPlane.XDirection().X(), myWPlane.XDirection().Y(), myWPlane.XDirection().Z(), - myWPlane.YDirection().X(), myWPlane.YDirection().Y(), myWPlane.YDirection().Z() ); + GEOM::GEOM_Object_var anObj = aBasicOp->MakeMarker + ( myWPlane.Location().X(), myWPlane.Location().Y(), myWPlane.Location().Z(), + myWPlane.XDirection().X(), myWPlane.XDirection().Y(), myWPlane.XDirection().Z(), + myWPlane.YDirection().X(), myWPlane.YDirection().Y(), myWPlane.YDirection().Z() ); displayPreview( anObj ); } - + return true; } diff --git a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx index 79184422b..3d32b36e9 100644 --- a/src/GEOMImpl/GEOMImpl_CircleDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_CircleDriver.cxx @@ -77,65 +77,87 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShape; if (aType == CIRCLE_PNT_VEC_R) { - Handle(GEOM_Function) aRefPoint = aCI.GetCenter(); + // Center + gp_Pnt aP = gp::Origin(); + Handle(GEOM_Function) aRefPoint = aCI.GetCenter(); + if (!aRefPoint.IsNull()) { + TopoDS_Shape aShapePnt = aRefPoint->GetValue(); + if (aShapePnt.ShapeType() != TopAbs_VERTEX) { + Standard_ConstructionError::Raise + ("Circle creation aborted: invalid center argument, must be a point"); + } + aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); + } + // Normal + gp_Vec aV = gp::DZ(); Handle(GEOM_Function) aRefVector = aCI.GetVector(); - TopoDS_Shape aShapePnt = aRefPoint->GetValue(); - TopoDS_Shape aShapeVec = aRefVector->GetValue(); - if (aShapePnt.ShapeType() == TopAbs_VERTEX && - aShapeVec.ShapeType() == TopAbs_EDGE) { - gp_Pnt aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); + if (!aRefVector.IsNull()) { + 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"); + } TopoDS_Edge anE = TopoDS::Edge(aShapeVec); TopoDS_Vertex V1, V2; TopExp::Vertices(anE, V1, V2, Standard_True); if (!V1.IsNull() && !V2.IsNull()) { - gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); - gp_Ax2 anAxes (aP, aV); - gp_Circ aCirc (anAxes, aCI.GetRadius()); - aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); + 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"); + } } } + // Axes + gp_Ax2 anAxes (aP, aV); + // Circle + gp_Circ aCirc (anAxes, aCI.GetRadius()); + aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); } - 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_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(); @@ -160,7 +182,7 @@ Standard_Integer GEOMImpl_CircleDriver::Execute(TFunction_Logbook& log) const aShape = BRepBuilderAPI_MakeEdge(aCirc).Edge(); } } - else { + else { } if (aShape.IsNull()) return 0; diff --git a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx index 03685a46b..a36e92c3a 100644 --- a/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_EllipseDriver.cxx @@ -71,24 +71,44 @@ Standard_Integer GEOMImpl_EllipseDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aShape; if (aType == ELLIPSE_PNT_VEC_RR) { - Handle(GEOM_Function) aRefPoint = aCI.GetCenter(); + // Center + gp_Pnt aP = gp::Origin(); + Handle(GEOM_Function) aRefPoint = aCI.GetCenter(); + if (!aRefPoint.IsNull()) { + TopoDS_Shape aShapePnt = aRefPoint->GetValue(); + if (aShapePnt.ShapeType() != TopAbs_VERTEX) { + Standard_ConstructionError::Raise + ("Circle creation aborted: invalid center argument, must be a point"); + } + aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); + } + // Normal + gp_Vec aV = gp::DZ(); Handle(GEOM_Function) aRefVector = aCI.GetVector(); - TopoDS_Shape aShapePnt = aRefPoint->GetValue(); - TopoDS_Shape aShapeVec = aRefVector->GetValue(); - if (aShapePnt.ShapeType() == TopAbs_VERTEX && - aShapeVec.ShapeType() == TopAbs_EDGE) { - gp_Pnt aP = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt)); + if (!aRefVector.IsNull()) { + 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"); + } TopoDS_Edge anE = TopoDS::Edge(aShapeVec); TopoDS_Vertex V1, V2; TopExp::Vertices(anE, V1, V2, Standard_True); if (!V1.IsNull() && !V2.IsNull()) { - gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2)); - gp_Ax2 anAxes (aP, aV); - gp_Elips anEll (anAxes, aCI.GetRMajor(), aCI.GetRMinor()); - aShape = BRepBuilderAPI_MakeEdge(anEll).Edge(); + 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"); + } } } - } else { + // Axes + gp_Ax2 anAxes (aP, aV); + // Ellipse + gp_Elips anEll (anAxes, aCI.GetRMajor(), aCI.GetRMinor()); + aShape = BRepBuilderAPI_MakeEdge(anEll).Edge(); + } + else { } if (aShape.IsNull()) return 0; diff --git a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx index d6628ca43..9a497b2e9 100644 --- a/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_ICurvesOperations.cxx @@ -266,7 +266,9 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCirclePntVecR { SetErrorCode(KO); - if (thePnt.IsNull() || theVec.IsNull()) return NULL; + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt.IsNull() || theVec.IsNull()) return NULL; //Add a new Circle object Handle(GEOM_Object) aCircle = GetEngine()->AddObject(GetDocID(), GEOM_CIRCLE); @@ -281,13 +283,18 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeCirclePntVecR GEOMImpl_ICircle aCI (aFunction); - Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); - Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + if (!thePnt.IsNull()) { + Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); + if (aRefPnt.IsNull()) return NULL; + aCI.SetCenter(aRefPnt); + } - if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL; + if (!theVec.IsNull()) { + Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + if (aRefVec.IsNull()) return NULL; + aCI.SetVector(aRefVec); + } - aCI.SetCenter(aRefPnt); - aCI.SetVector(aRefVec); aCI.SetRadius(theR); //Compute the Circle value @@ -325,7 +332,9 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse { SetErrorCode(KO); - if (thePnt.IsNull() || theVec.IsNull()) return NULL; + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt.IsNull() || theVec.IsNull()) return NULL; //Add a new Ellipse object Handle(GEOM_Object) anEll = GetEngine()->AddObject(GetDocID(), GEOM_ELLIPSE); @@ -340,13 +349,18 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeEllipse GEOMImpl_IEllipse aCI (aFunction); - Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); - Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + if (!thePnt.IsNull()) { + Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction(); + if (aRefPnt.IsNull()) return NULL; + aCI.SetCenter(aRefPnt); + } - if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL; + if (!theVec.IsNull()) { + Handle(GEOM_Function) aRefVec = theVec->GetLastFunction(); + if (aRefVec.IsNull()) return NULL; + aCI.SetVector(aRefVec); + } - aCI.SetCenter(aRefPnt); - aCI.SetVector(aRefVec); aCI.SetRMajor(theRMajor); aCI.SetRMinor(theRMinor); diff --git a/src/GEOM_I/GEOM_ICurvesOperations_i.cc b/src/GEOM_I/GEOM_ICurvesOperations_i.cc index 3a15afb1b..3bda04930 100644 --- a/src/GEOM_I/GEOM_ICurvesOperations_i.cc +++ b/src/GEOM_I/GEOM_ICurvesOperations_i.cc @@ -65,15 +65,22 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeCirclePntVecR //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); - - //Get the reference points - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePnt->GetStudyID(), thePnt->GetEntry()); - Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject - (theVec->GetStudyID(), theVec->GetEntry()); - - if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); + + //Get the arguments + Handle(GEOM_Object) aPnt, aVec; + 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 Circle Handle(GEOM_Object) anObject = @@ -167,15 +174,22 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeEllipse //Set a not done flag GetOperations()->SetNotDone(); - if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); + // Not set thePnt means origin of global CS, + // Not set theVec means Z axis of global CS + //if (thePnt == NULL || theVec == NULL) return aGEOMObject._retn(); - //Get the reference points - Handle(GEOM_Object) aPnt = GetOperations()->GetEngine()->GetObject - (thePnt->GetStudyID(), thePnt->GetEntry()); - Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject - (theVec->GetStudyID(), theVec->GetEntry()); - - if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn(); + //Get the arguments + Handle(GEOM_Object) aPnt, aVec; + 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 = diff --git a/src/GEOM_SWIG/geompyDC.py b/src/GEOM_SWIG/geompyDC.py index d4f38a78b..2b2f27dc3 100644 --- a/src/GEOM_SWIG/geompyDC.py +++ b/src/GEOM_SWIG/geompyDC.py @@ -500,12 +500,22 @@ class geompyDC(GEOM._objref_GEOM_Gen): # @return New GEOM_Object, containing the created circle. # # @ref tui_creation_circle "Example" - def MakeCircle(self,thePnt, theVec, theR): + def MakeCircle(self, thePnt, theVec, theR): # Example: see GEOM_TestAll.py anObj = self.CurvesOp.MakeCirclePntVecR(thePnt, theVec, theR) RaiseIfFailed("MakeCirclePntVecR", self.CurvesOp) return anObj + ## Create a circle with given radius. + # Center of the circle will be in the origin of global + # coordinate system and normal vector will be codirected with Z axis + # @param theR Circle radius. + # @return New GEOM_Object, containing the created circle. + def MakeCircleR(self, theR): + anObj = self.CurvesOp.MakeCirclePntVecR(None, None, theR) + RaiseIfFailed("MakeCirclePntVecR", self.CurvesOp) + return anObj + ## Create a circle, passing through three given points # @param thePnt1,thePnt2,thePnt3 Points, defining the circle. # @return New GEOM_Object, containing the created circle. @@ -538,12 +548,23 @@ class geompyDC(GEOM._objref_GEOM_Gen): # @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): # Example: see GEOM_TestAll.py anObj = self.CurvesOp.MakeEllipse(thePnt, theVec, theRMajor, theRMinor) RaiseIfFailed("MakeEllipse", self.CurvesOp) return anObj + ## Create an ellipse with given radiuses. + # Center of the ellipse will be in the origin of global + # coordinate system and normal vector will be codirected with Z axis + # @param theRMajor Major ellipse radius. + # @param theRMinor Minor ellipse radius. + # @return New GEOM_Object, containing the created ellipse. + def MakeEllipseRR(self, theRMajor, theRMinor): + anObj = self.CurvesOp.MakeEllipse(None, None, theRMajor, theRMinor) + RaiseIfFailed("MakeEllipse", self.CurvesOp) + return anObj + ## Create a polyline on the set of points. # @param thePoints Sequence of points for the polyline. # @return New GEOM_Object, containing the created polyline. diff --git a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx index 2dcecd1bd..b6a8dc33f 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_BoxDlg.cxx @@ -152,7 +152,8 @@ void PrimitiveGUI_BoxDlg::Init() initName( tr( "GEOM_BOX" ) ); - ConstructorsClicked( 0 ); + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } //================================================================================= diff --git a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx index bdf686812..07bf6b3ee 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_ConeDlg.cxx @@ -164,7 +164,8 @@ void PrimitiveGUI_ConeDlg::Init() initName( tr( "GEOM_CONE" ) ); - ConstructorsClicked( 0 ); + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } diff --git a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx index 24b8387fa..871596615 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_CylinderDlg.cxx @@ -159,7 +159,9 @@ void PrimitiveGUI_CylinderDlg::Init() SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) ); initName( tr( "GEOM_CYLINDER" ) ); - ConstructorsClicked( 0 ); + + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } diff --git a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx index bc7854fb3..13bd12071 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_SphereDlg.cxx @@ -139,7 +139,8 @@ void PrimitiveGUI_SphereDlg::Init() initName( tr( "GEOM_SPHERE" ) ); - ConstructorsClicked( 0 ); + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } //================================================================================= diff --git a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx index 099cf7972..f4dc772a9 100644 --- a/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx +++ b/src/PrimitiveGUI/PrimitiveGUI_TorusDlg.cxx @@ -156,7 +156,8 @@ void PrimitiveGUI_TorusDlg::Init() initName( tr( "GEOM_TORUS" ) ); - ConstructorsClicked( 0 ); + setConstructorId( 1 ); // simplest constructor + ConstructorsClicked( 1 ); } //================================================================================= -- 2.39.2