From 7968bd362a5f26a26d79fa275750b68171cc4f6c Mon Sep 17 00:00:00 2001 From: dmv Date: Thu, 11 Feb 2010 10:29:04 +0000 Subject: [PATCH] 0020669: EDF 1198 GEOM: creation of vertices at intersection of 1D elements --- doc/salome/gui/GEOM/images/point4.png | Bin 17493 -> 19243 bytes doc/salome/gui/GEOM/input/creating_point.doc | 9 +- src/BasicGUI/BasicGUI_PointDlg.cxx | 146 +++++++++++-------- src/BasicGUI/BasicGUI_PointDlg.h | 11 ++ src/GEOMGUI/GEOM_Displayer.cxx | 6 +- src/GEOMImpl/GEOMImpl_PointDriver.cxx | 50 ++++--- 6 files changed, 139 insertions(+), 83 deletions(-) diff --git a/doc/salome/gui/GEOM/images/point4.png b/doc/salome/gui/GEOM/images/point4.png index 08739979aba52897a6ab63debced0705aec8a288..dc3e08641294a28f28cc5761d7cae25718d471f4 100755 GIT binary patch literal 19243 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�kTiHWGTACfSI%dbMvD}^l7Z<;v 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 diff --git a/doc/salome/gui/GEOM/input/creating_point.doc b/doc/salome/gui/GEOM/input/creating_point.doc index fadededd8..baff5d1e3 100644 --- a/doc/salome/gui/GEOM/input/creating_point.doc +++ b/doc/salome/gui/GEOM/input/creating_point.doc @@ -40,9 +40,12 @@ projected on the given edge to produce the resulting point. projected point. \image html point3_2.png -\n Fourthly, we can define a point by intersection of two \b Lines. -\n TUI Command: geompy.MakePointOnLinesIntersection(myLine1,myLine2). -\n Arguments: Name + 2 lines +\n Fourthly, we can define a point(s) by intersection of two \b Lines or \b Wires (or a Wire and a Line). +If they intersect only once, a point will be created. If there are several intersections, a compound of +points will be created. The type of the selected object (Line or Wire) can be changed in the popup menu, +after clicking the corresponding selection button. (see the picture below) +\n TUI Command: geompy.MakePointOnLinesIntersection(myLine1,myWire1). +\n Arguments: Name + 2 1D objects \image html point4.png diff --git a/src/BasicGUI/BasicGUI_PointDlg.cxx b/src/BasicGUI/BasicGUI_PointDlg.cxx index 650d00a53..6d69b559a 100644 --- a/src/BasicGUI/BasicGUI_PointDlg.cxx +++ b/src/BasicGUI/BasicGUI_PointDlg.cxx @@ -42,6 +42,7 @@ #include #include #include +#include #include #include @@ -61,6 +62,8 @@ #define GEOM_POINT_INTINT 3 #define GEOM_POINT_SURF 4 +#define SPACING 6 +#define MARGIN 9 //================================================================================= // class : BasicGUI_PointDlg() @@ -79,6 +82,8 @@ BasicGUI_PointDlg::BasicGUI_PointDlg( GeometryGUI* theGeometryGUI, QWidget* pare QPixmap image3( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_POINT_REF" ) ) ); QPixmap image4( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_POINT_LINES") ) ); QPixmap image5( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_POINT_FACE" ) ) ); + QPixmap image6( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICO_LINE" ) ) ); + QPixmap image7( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICO_WIRE" ) ) ); setWindowTitle( tr( "GEOM_POINT_TITLE" ) ); @@ -92,14 +97,14 @@ BasicGUI_PointDlg::BasicGUI_PointDlg( GeometryGUI* theGeometryGUI, QWidget* pare mainFrame()->RadioButton5->show(); mainFrame()->RadioButton5->setIcon( image5 ); - QGroupBox* paramGrp = new QGroupBox( centralWidget() ); - myParamCoord = new QButtonGroup( paramGrp ); - QHBoxLayout* boxLayout = new QHBoxLayout( paramGrp ); - boxLayout->setMargin( 0 ); boxLayout->setSpacing( 6 ); - QRadioButton* btn = new QRadioButton( tr( "GEOM_PARAM_VALUE" ), paramGrp ); + myParamGroup = new QGroupBox( centralWidget() ); + myParamCoord = new QButtonGroup( myParamGroup ); + QHBoxLayout* boxLayout = new QHBoxLayout( myParamGroup ); + boxLayout->setMargin( MARGIN ); boxLayout->setSpacing( SPACING ); + QRadioButton* btn = new QRadioButton( tr( "GEOM_PARAM_VALUE" ), myParamGroup ); myParamCoord->addButton( btn, PARAM_VALUE ); boxLayout->addWidget( btn ); - btn = new QRadioButton( tr( "GEOM_COORD_VALUE" ), paramGrp ); + btn = new QRadioButton( tr( "GEOM_COORD_VALUE" ), myParamGroup ); myParamCoord->addButton( btn, COORD_VALUE ); boxLayout->addWidget( btn ); myParamCoord->setExclusive( true ); @@ -132,12 +137,21 @@ BasicGUI_PointDlg::BasicGUI_PointDlg( GeometryGUI* theGeometryGUI, QWidget* pare GroupRefPoint->TextLabel3->setText( tr( "GEOM_DY" ) ); GroupRefPoint->TextLabel4->setText( tr( "GEOM_DZ" ) ); + /* popup menu for line intersect buttons */ + myBtnPopup = new QMenu(this); + QIcon ico_line = QIcon( image6 ); + QIcon ico_wire = QIcon( image7 ); + myActions[myBtnPopup->addAction( ico_line, tr( "GEOM_EDGE" ) )] = 0; + myActions[myBtnPopup->addAction( ico_wire, tr( "GEOM_WIRE" ) )] = 1; + GroupLineIntersection = new DlgRef_2Sel( centralWidget() ); GroupLineIntersection->GroupBox1->setTitle( tr( "GEOM_LINE_INTERSECTION" ) ); GroupLineIntersection->TextLabel1->setText( tr( "GEOM_LINE1" ) ); GroupLineIntersection->TextLabel2->setText( tr( "GEOM_LINE2" ) ); GroupLineIntersection->PushButton1->setIcon( image2 ); + GroupLineIntersection->PushButton1->setMenu( myBtnPopup ); GroupLineIntersection->PushButton2->setIcon( image2 ); + GroupLineIntersection->PushButton2->setMenu( myBtnPopup ); GroupLineIntersection->LineEdit2->setEnabled(false); myCoordGrp = new QGroupBox( tr( "GEOM_COORDINATES_RES" ), centralWidget() ); @@ -154,7 +168,7 @@ BasicGUI_PointDlg::BasicGUI_PointDlg( GeometryGUI* theGeometryGUI, QWidget* pare QVBoxLayout* layout = new QVBoxLayout( centralWidget() ); layout->setMargin( 0 ); layout->setSpacing( 6 ); - layout->addWidget( paramGrp ); + layout->addWidget( myParamGroup ); layout->addWidget( GroupXYZ ); layout->addWidget( GroupOnCurve ); layout->addWidget( GroupOnSurface ); @@ -207,6 +221,7 @@ void BasicGUI_PointDlg::Init() myEdge = GEOM::GEOM_Object::_nil(); myRefPoint = GEOM::GEOM_Object::_nil(); + myNeedType = TopAbs_VERTEX; myEditCurrentArgument = 0; @@ -256,8 +271,9 @@ void BasicGUI_PointDlg::Init() connect( GroupOnSurface->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupOnSurface->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); - connect( GroupLineIntersection->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); - connect( GroupLineIntersection->PushButton2, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( myBtnPopup, SIGNAL( triggered( QAction* ) ), SLOT( onBtnPopup( QAction* ) ) ); + connect( GroupLineIntersection->PushButton1, SIGNAL( pressed() ), this, SLOT( SetEditCurrentArgument() ) ); + connect( GroupLineIntersection->PushButton2, SIGNAL( pressed() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupLineIntersection->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); connect( GroupLineIntersection->LineEdit2, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); @@ -305,67 +321,63 @@ void BasicGUI_PointDlg::SetDoubleSpinBoxStep( double step ) //================================================================================= void BasicGUI_PointDlg::ConstructorsClicked(int constructorId) { - globalSelection(); // close local contexts, if any - switch ( constructorId ) { case GEOM_POINT_XYZ: { + globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); GroupRefPoint->hide(); GroupOnCurve->hide(); GroupLineIntersection->hide(); GroupOnSurface->hide(); - myCoordGrp->hide(); - - myParamCoord->button( PARAM_VALUE )->hide(); - myParamCoord->button( COORD_VALUE )->hide(); + myParamGroup->hide(); GroupXYZ->show(); break; } case GEOM_POINT_REF: { + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); + myEditCurrentArgument = GroupRefPoint->LineEdit1; myEditCurrentArgument->setText( "" ); myRefPoint = GEOM::GEOM_Object::_nil(); GroupRefPoint->PushButton1->setDown(true); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); - - myParamCoord->button( PARAM_VALUE )->hide(); - myParamCoord->button( COORD_VALUE )->hide(); + myParamGroup->hide(); GroupXYZ->hide(); GroupOnCurve->hide(); GroupLineIntersection->hide(); GroupOnSurface->hide(); - GroupRefPoint->show(); - myCoordGrp->show(); break; } case GEOM_POINT_EDGE: { + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); + myEditCurrentArgument = GroupOnCurve->LineEdit1; myEditCurrentArgument->setText( "" ); myEdge = GEOM::GEOM_Object::_nil(); GroupOnCurve->PushButton1->setDown(true); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); - GroupRefPoint->hide(); GroupLineIntersection->hide(); GroupOnSurface->hide(); - - myParamCoord->button( PARAM_VALUE )->show(); - myParamCoord->button( COORD_VALUE )->show(); + myParamGroup->show(); GroupOnCurve->show(); myCoordGrp->show(); - updateParamCoord( false ); break; } case GEOM_POINT_INTINT: { + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); + myNeedType = TopAbs_EDGE; + myEditCurrentArgument = GroupLineIntersection->LineEdit1; GroupLineIntersection->LineEdit1->setText( "" ); GroupLineIntersection->LineEdit2->setText( "" ); @@ -375,38 +387,30 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId) myLine2 = GEOM::GEOM_Object::_nil(); GroupLineIntersection->PushButton1->setDown(true); GroupLineIntersection->PushButton2->setDown(false); - - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); - - myParamCoord->button( PARAM_VALUE )->hide(); - myParamCoord->button( COORD_VALUE )->hide(); + myParamGroup->hide(); GroupXYZ->hide(); GroupRefPoint->hide(); GroupOnCurve->hide(); GroupOnSurface->hide(); - myCoordGrp->hide(); - GroupLineIntersection->show(); break; } case GEOM_POINT_SURF: { + globalSelection(); // close local contexts, if any + localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE ); + myEditCurrentArgument = GroupOnSurface->LineEdit1; myEditCurrentArgument->setText( "" ); myFace = GEOM::GEOM_Object::_nil(); GroupOnSurface->PushButton1->setDown(true); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE ); - GroupRefPoint->hide(); GroupOnCurve->hide(); GroupLineIntersection->hide(); - - myParamCoord->button( PARAM_VALUE )->show(); - myParamCoord->button( COORD_VALUE )->show(); + myParamGroup->show(); GroupOnSurface->show(); myCoordGrp->show(); - updateParamCoord( false ); break; } @@ -477,21 +481,26 @@ void BasicGUI_PointDlg::SelectionIntoArgument() GEOM::GEOM_Object_var aSelectedObject = GEOMBase::ConvertIOinGEOMObject( anIO, aRes ); if ( !CORBA::is_nil( aSelectedObject ) && aRes ) { QString aName = GEOMBase::GetName(aSelectedObject); - TopAbs_ShapeEnum aNeedType = TopAbs_VERTEX; TopoDS_Shape aShape; if ( GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ) && !aShape.IsNull() ) { - if ( id == GEOM_POINT_EDGE || id == GEOM_POINT_INTINT ) - aNeedType = TopAbs_EDGE; + if ( id == GEOM_POINT_XYZ || id == GEOM_POINT_REF) + myNeedType = TopAbs_VERTEX; + else if ( id == GEOM_POINT_EDGE ) + myNeedType = TopAbs_EDGE; else if ( id == GEOM_POINT_SURF ) - aNeedType = TopAbs_FACE; + myNeedType = TopAbs_FACE; TColStd_IndexedMapOfInteger aMap; aSelMgr->GetIndexes(anIO, aMap); if ( aMap.Extent() == 1 ) { // Local Selection int anIndex = aMap( 1 ); - if ( aNeedType == TopAbs_EDGE ) + if ( myNeedType == TopAbs_FACE ) + aName += QString( ":face_%1" ).arg( anIndex ); + else if ( myNeedType == TopAbs_WIRE ) + aName += QString( ":wire_%1" ).arg( anIndex ); + else if ( myNeedType == TopAbs_EDGE ) aName += QString( ":edge_%1" ).arg( anIndex ); - else + else if ( myNeedType == TopAbs_VERTEX ) aName += QString( ":vertex_%1" ).arg( anIndex ); //Find SubShape Object in Father @@ -508,7 +517,7 @@ void BasicGUI_PointDlg::SelectionIntoArgument() GEOMBase::GetShape( aSelectedObject, aShape, TopAbs_SHAPE ); } else { // Global Selection - if ( aShape.ShapeType() != aNeedType ) { + if ( aShape.ShapeType() != myNeedType ) { aSelectedObject = GEOM::GEOM_Object::_nil(); aName = ""; if ( id == GEOM_POINT_XYZ ) return; @@ -516,7 +525,7 @@ void BasicGUI_PointDlg::SelectionIntoArgument() } } - if ( aShape.IsNull() || aShape.ShapeType() != aNeedType) + if ( aShape.IsNull() || aShape.ShapeType() != myNeedType) return; if ( id == GEOM_POINT_XYZ ) { @@ -535,17 +544,23 @@ void BasicGUI_PointDlg::SelectionIntoArgument() } else if ( id == GEOM_POINT_INTINT ) { myEditCurrentArgument->setText( aName ); - globalSelection(); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); if ( myEditCurrentArgument == GroupLineIntersection->LineEdit1 ) { myLine1 = aSelectedObject; - if ( !myLine1->_is_nil() && myLine2->_is_nil() ) + if ( !myLine1->_is_nil() && myLine2->_is_nil() ) { + GroupLineIntersection->PushButton2->setMenu( 0 ); GroupLineIntersection->PushButton2->click(); + GroupLineIntersection->PushButton2->setDown(true); + GroupLineIntersection->PushButton2->setMenu( myBtnPopup ); + } } else if ( myEditCurrentArgument == GroupLineIntersection->LineEdit2 ) { myLine2 = aSelectedObject; - if ( !myLine2->_is_nil() && myLine1->_is_nil() ) + if ( !myLine2->_is_nil() && myLine1->_is_nil() ) { + GroupLineIntersection->PushButton1->setMenu( 0 ); GroupLineIntersection->PushButton1->click(); + GroupLineIntersection->PushButton1->setDown(true); + GroupLineIntersection->PushButton1->setMenu( myBtnPopup ); + } } } else if ( id == GEOM_POINT_SURF ) @@ -583,27 +598,25 @@ void BasicGUI_PointDlg::LineEditReturnPressed() //================================================================================= void BasicGUI_PointDlg::SetEditCurrentArgument() { - globalSelection(); // close local contexts, if any - QPushButton* send = (QPushButton*)sender(); if ( send == GroupRefPoint->PushButton1 ) { GroupRefPoint->LineEdit1->setFocus(); myEditCurrentArgument = GroupRefPoint->LineEdit1; - + globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX ); } else if ( send == GroupOnCurve->PushButton1 ) { GroupOnCurve->LineEdit1->setFocus(); myEditCurrentArgument = GroupOnCurve->LineEdit1; - + globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else if ( send == GroupOnSurface->PushButton1 ) { GroupOnSurface->LineEdit1->setFocus(); myEditCurrentArgument = GroupOnSurface->LineEdit1; - + globalSelection(); // close local contexts, if any localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE ); } else if ( send == GroupLineIntersection->PushButton1 ) { @@ -612,7 +625,6 @@ void BasicGUI_PointDlg::SetEditCurrentArgument() GroupLineIntersection->PushButton2->setDown( false ); GroupLineIntersection->LineEdit1->setEnabled(true); GroupLineIntersection->LineEdit2->setEnabled(false); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } else if ( send == GroupLineIntersection->PushButton2 ) { GroupLineIntersection->LineEdit2->setFocus(); @@ -620,7 +632,6 @@ void BasicGUI_PointDlg::SetEditCurrentArgument() GroupLineIntersection->PushButton1->setDown( false ); GroupLineIntersection->LineEdit1->setEnabled(false); GroupLineIntersection->LineEdit2->setEnabled(true); - localSelection( GEOM::GEOM_Object::_nil(), TopAbs_EDGE ); } send->setDown(true); } @@ -959,3 +970,20 @@ void BasicGUI_PointDlg::updateParamCoord(bool theIsUpdate) resize( minimumSizeHint() ); } } + +//================================================================================= +// function : onBtnPopup() +// purpose : +//================================================================================= +void BasicGUI_PointDlg::onBtnPopup( QAction* a ) +{ + int index = myActions[a]; + globalSelection(); // close local contexts, if any + QString type; + if ( index == 0 ) + myNeedType = TopAbs_EDGE; + else + myNeedType = TopAbs_WIRE; + + localSelection( GEOM::GEOM_Object::_nil(), myNeedType ); +} diff --git a/src/BasicGUI/BasicGUI_PointDlg.h b/src/BasicGUI/BasicGUI_PointDlg.h index c3f95979e..f12f74bf1 100644 --- a/src/BasicGUI/BasicGUI_PointDlg.h +++ b/src/BasicGUI/BasicGUI_PointDlg.h @@ -27,6 +27,7 @@ #define BASICGUI_POINTDLG_H #include +#include class DlgRef_1Sel1Spin; class DlgRef_3Spin; @@ -37,6 +38,8 @@ class DlgRef_1Sel2Spin; class QLineEdit; class QGroupBox; class QButtonGroup; +class QMenu; +class QAction; class gp_Pnt; @@ -88,7 +91,14 @@ private: QLineEdit* myX; QLineEdit* myY; QLineEdit* myZ; + + QGroupBox* myParamGroup; QButtonGroup* myParamCoord; + + QMenu* myBtnPopup; + QMap myActions; + + TopAbs_ShapeEnum myNeedType; private slots: void ClickOnOk(); @@ -102,6 +112,7 @@ private slots: void ValueChangedInSpinBox( double ); void SetDoubleSpinBoxStep( double ); void ClickParamCoord(); + void onBtnPopup( QAction* ); }; #endif // BASICGUI_POINTDLG_H diff --git a/src/GEOMGUI/GEOM_Displayer.cxx b/src/GEOMGUI/GEOM_Displayer.cxx index dae3ea1d9..ab52189af 100644 --- a/src/GEOMGUI/GEOM_Displayer.cxx +++ b/src/GEOMGUI/GEOM_Displayer.cxx @@ -577,14 +577,14 @@ void GEOM_Displayer::Update( SALOME_OCCPrs* prs ) if ( HasColor() ) { AISShape->SetColor( (Quantity_NameOfColor)GetColor() ); + Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect(); + anAspect->SetColor( (Quantity_NameOfColor)GetColor() ); if ( myShape.ShapeType() == TopAbs_VERTEX ) { - Handle(Prs3d_PointAspect) anAspect = AISShape->Attributes()->PointAspect(); - anAspect->SetColor( (Quantity_NameOfColor)GetColor() ); anAspect->SetScale( myScaleOfMarker ); anAspect->SetTypeOfMarker( myTypeOfMarker ); - AISShape->Attributes()->SetPointAspect( anAspect ); } + AISShape->Attributes()->SetPointAspect( anAspect ); } else { diff --git a/src/GEOMImpl/GEOMImpl_PointDriver.cxx b/src/GEOMImpl/GEOMImpl_PointDriver.cxx index bf8adfc02..e8f31b493 100644 --- a/src/GEOMImpl/GEOMImpl_PointDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_PointDriver.cxx @@ -29,12 +29,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include @@ -105,6 +107,8 @@ Standard_Integer GEOMImpl_PointDriver::Execute(TFunction_Logbook& log) const Standard_Integer aType = aFunction->GetType(); gp_Pnt aPnt; + TopoDS_Compound aCompound; + bool retCompound = false; if (aType == POINT_XYZ) { aPnt = gp_Pnt(aPI.GetX(), aPI.GetY(), aPI.GetZ()); @@ -120,7 +124,6 @@ Standard_Integer GEOMImpl_PointDriver::Execute(TFunction_Logbook& log) const } gp_Pnt P = BRep_Tool::Pnt(TopoDS::Vertex(aRefShape)); aPnt = gp_Pnt(P.X() + aPI.GetX(), P.Y() + aPI.GetY(), P.Z() + aPI.GetZ()); - } else if (aType == POINT_CURVE_PAR) { Handle(GEOM_Function) aRefCurve = aPI.GetCurve(); @@ -181,32 +184,45 @@ Standard_Integer GEOMImpl_PointDriver::Execute(TFunction_Logbook& log) const TopoDS_Shape aRefShape1 = aRef1->GetValue(); TopoDS_Shape aRefShape2 = aRef2->GetValue(); - if (aRefShape1.ShapeType() != TopAbs_EDGE || aRefShape2.ShapeType() != TopAbs_EDGE ) { + if ( (aRefShape1.ShapeType() != TopAbs_EDGE && aRefShape1.ShapeType() != TopAbs_WIRE) + || (aRefShape2.ShapeType() != TopAbs_EDGE && aRefShape2.ShapeType() != TopAbs_WIRE) ) { Standard_TypeMismatch::Raise - ("Creation Point On Lines Intersection Aborted : Line shape is not an edge"); + ("Creation Point On Lines Intersection Aborted : Line shape is not an edge or wire"); } //Calculate Lines Intersection Point BRepExtrema_DistShapeShape dst (aRefShape1, aRefShape2); - if (dst.IsDone()) - { - gp_Pnt P1, P2; - for (int i = 1; i <= dst.NbSolution(); i++) { - P1 = dst.PointOnShape1(i); - P2 = dst.PointOnShape2(i); - Standard_Real Dist = P1.Distance(P2); - if ( Dist <= Precision::Confusion() ) - aPnt = P1; - else - Standard_TypeMismatch::Raise ("Lines not have an Intersection Point"); + if (dst.IsDone()) { + gp_Pnt P1, P2; + BRep_Builder B; + B.MakeCompound( aCompound ); + for (int i = 1; i <= dst.NbSolution(); i++) { + P1 = dst.PointOnShape1(i); + P2 = dst.PointOnShape2(i); + Standard_Real Dist = P1.Distance(P2); + if ( Dist <= Precision::Confusion() && dst.NbSolution() > 1) { + BRepBuilderAPI_MakeVertex mkVertex (P1); + B.Add(aCompound, mkVertex.Shape()); + retCompound = true; + } else if ( Dist <= Precision::Confusion() ) { + aPnt = P1; + } else { + Standard_TypeMismatch::Raise ("Shapes has not an Intersection Points"); } } + } } else { return 0; } - BRepBuilderAPI_MakeVertex mkVertex (aPnt); - TopoDS_Shape aShape = mkVertex.Shape(); + TopoDS_Shape aShape; + if ( retCompound ) { + aShape = aCompound; + } else { + BRepBuilderAPI_MakeVertex mkVertex (aPnt); + aShape = mkVertex.Shape(); + } + aShape.Infinite(Standard_True); aFunction->SetValue(aShape); @@ -258,5 +274,3 @@ const Handle(GEOMImpl_PointDriver) Handle(GEOMImpl_PointDriver)::DownCast(const return _anOtherObject ; } - - -- 2.39.2