NPAL 16548, 16820, 16218, 16547

This commit is contained in:
dmv 2007-11-16 10:03:51 +00:00
parent 25d3e88f53
commit 98589fc17c
43 changed files with 1165 additions and 95 deletions

View File

@ -94,6 +94,7 @@ fuse.png \
geometry.png \
line.png \
line2points.png \
line2faces.png \
lineedge.png \
linepointvector.png \
mindist.png \
@ -126,6 +127,7 @@ planeworkingvector.png \
planeworkingorigin.png \
point2.png \
pointonedge.png \
point_line_intersection.png \
polyline.png \
prism.png \
prism2.png \

View File

@ -264,6 +264,13 @@ module GEOM
GEOM_Object MakePointOnCurve (in GEOM_Object theRefCurve,
in double theParameter);
/*!
* Create a point, on two lines intersection.
* \param theRefLine1, theRefLine2 The referenced lines.
* \return New GEOM_Object, containing the created point.
*/
GEOM_Object MakePointOnLinesIntersection (in GEOM_Object theRefLine1,
in GEOM_Object theRefLine2);
/*!
* Create a vector, corresponding to tangent to the given parameter on the given curve.
@ -312,6 +319,14 @@ module GEOM
*/
GEOM_Object MakeLineTwoPnt (in GEOM_Object thePnt1, in GEOM_Object thePnt2);
/*!
* Create a line, given by two faces intersection.
* \param theFace1 First of two faces, defining the line.
* \param theFace2 Second of two faces, defining the line.
* \return New GEOM_Object, containing the created line.
*/
GEOM_Object MakeLineTwoFaces (in GEOM_Object theFace1, in GEOM_Object theFace2);
/*!
* Create a plane, passing through the three given points
* \param thePnt1 First of three points, defining the plane.
@ -806,6 +821,10 @@ module GEOM
GEOM_Object MakePrismVecH (in GEOM_Object theBase,
in GEOM_Object theVec,
in double theH);
/* The Same Prism but in 2 directions (forward&backward) */
GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
in GEOM_Object theVec,
in double theH);
/*!
* Create a shape by extrusion of the base shape along a vector, defined by two points.
@ -817,6 +836,10 @@ module GEOM
GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
in GEOM_Object thePoint1,
in GEOM_Object thePoint2);
/* The same prism but in two directions forward&backward */
GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
in GEOM_Object thePoint1,
in GEOM_Object thePoint2);
/*!
* Create a shape by extrusion of the base shape along
@ -839,6 +862,10 @@ module GEOM
GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
in GEOM_Object theAxis,
in double theAngle);
/* The Same Revolution but in both ways forward&backward */
GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
in GEOM_Object theAxis,
in double theAngle);
/*!
* Create a filling from the given compound of contours.

View File

@ -83,6 +83,8 @@ module GEOM
in GEOM_Object thePnt2) ;
GEOM_Object MakeLineTwoPnt (in GEOM_Object thePnt1,
in GEOM_Object thePnt2) ;
GEOM_Object MakeLineTwoFaces (in GEOM_Object theFace1,
in GEOM_Object theFace2) ;
GEOM_Object MakePlaneThreePnt (in GEOM_Object thePnt1,
in GEOM_Object thePnt2,
in GEOM_Object thePnt3,
@ -154,14 +156,23 @@ module GEOM
GEOM_Object MakePrismVecH (in GEOM_Object theBase,
in GEOM_Object theVec,
in double theH) ;
GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
in GEOM_Object theVec,
in double theH) ;
GEOM_Object MakePrismTwoPnt (in GEOM_Object theBase,
in GEOM_Object thePoint1,
in GEOM_Object thePoint2) ;
GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
in GEOM_Object thePoint1,
in GEOM_Object thePoint2) ;
GEOM_Object MakePipe (in GEOM_Object theBase,
in GEOM_Object thePath) ;
GEOM_Object MakeRevolutionAxisAngle (in GEOM_Object theBase,
in GEOM_Object theAxis,
in double theAngle) ;
GEOM_Object MakeRevolutionAxisAngle2Ways (in GEOM_Object theBase,
in GEOM_Object theAxis,
in double theAngle) ;
GEOM_Object MakeFilling (in GEOM_Object theShape,
in long theMinDeg, in long theMaxDeg,
in double theTol2D, in double theTol3D,

BIN
resources/line2faces.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 572 B

View File

@ -34,6 +34,7 @@
#include "LightApp_SelectionMgr.h"
#include <qlabel.h>
#include <qcheckbox.h>
#include "GEOMImpl_Types.hxx"
@ -93,7 +94,7 @@ BasicGUI_ArcDlg::BasicGUI_ArcDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
Group3Pnts2->PushButton2->setPixmap(image2);
Group3Pnts2->PushButton3->setPixmap(image2);
Group3Pnts2->radioButton4->setText(tr("GEOM_REVERSE"));
Group3Pnts2->CheckButton1->setText(tr("GEOM_REVERSE"));
Layout1->addWidget( Group3Pnts, 2, 0 );
Layout1->addWidget( Group3Pnts2, 2, 0 );
@ -123,7 +124,7 @@ void BasicGUI_ArcDlg::Init()
/* init variables */
myEditCurrentArgument = Group3Pnts->LineEdit1;
myPoint1 = myPoint2 = myPoint3 = GEOM::GEOM_Object::_nil();
Group3Pnts2->radioButton4->setChecked(FALSE);
Group3Pnts2->CheckButton1->setChecked(FALSE);
/* signals and slots connections */
connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
@ -151,7 +152,7 @@ void BasicGUI_ArcDlg::Init()
connect(Group3Pnts2->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(Group3Pnts2->LineEdit3, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(Group3Pnts2->radioButton4, SIGNAL(stateChanged(int)), this, SLOT(ReverseSense(int)));
connect(Group3Pnts2->CheckButton1, SIGNAL(stateChanged(int)), this, SLOT(ReverseSense(int)));
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
@ -427,7 +428,7 @@ bool BasicGUI_ArcDlg::execute( ObjectList& objects )
case 1:
{
bool Sense;
(Group3Pnts2->radioButton4->isChecked()) ? Sense = true : Sense = false;
(Group3Pnts2->CheckButton1->isChecked()) ? Sense = true : Sense = false;
if ( !CORBA::is_nil(myPoint1) && !CORBA::is_nil(myPoint2) &&!CORBA::is_nil(myPoint3) )
{
anObj = GEOM::GEOM_ICurvesOperations::_narrow(getOperation())->

View File

@ -55,26 +55,39 @@ BasicGUI_LineDlg::BasicGUI_LineDlg(GeometryGUI* theGeometryGUI, QWidget* parent,
{
QPixmap image0(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_DLG_LINE_2P")));
QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_SELECT")));
QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM",tr("ICON_DLG_LINE_2F")));
setCaption(tr("GEOM_LINE_TITLE"));
QGroupBox* aFrame = new QGroupBox( 1, Qt::Horizontal, this );
aFrame->setInsideMargin( 0 );
aFrame->setFrameStyle( QFrame::NoFrame );
/***************************************************************/
GroupConstructors->setTitle(tr("GEOM_LINE"));
RadioButton1->setPixmap(image0);
RadioButton2->close(TRUE);
RadioButton2->setPixmap(image2);
RadioButton3->close(TRUE);
GroupPoints = new DlgRef_2Sel_QTD(this, "GroupPoints");
GroupPoints = new DlgRef_2Sel_QTD( aFrame, "GroupPoints");
GroupPoints->GroupBox1->setTitle(tr("GEOM_POINTS"));
GroupPoints->TextLabel1->setText(tr("GEOM_POINT_I").arg("1"));
GroupPoints->TextLabel2->setText(tr("GEOM_POINT_I").arg("2"));
GroupPoints->PushButton1->setPixmap(image1);
GroupPoints->PushButton2->setPixmap(image1);
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints->LineEdit2->setReadOnly( true );
Layout1->addWidget(GroupPoints, 2, 0);
GroupFaces = new DlgRef_2Sel_QTD( aFrame, "GroupFaces");
GroupFaces->GroupBox1->setTitle(tr("GEOM_FACES"));
GroupFaces->TextLabel1->setText(tr("GEOM_FACE_I").arg("1"));
GroupFaces->TextLabel2->setText(tr("GEOM_FACE_I").arg("2"));
GroupFaces->PushButton1->setPixmap(image1);
GroupFaces->PushButton2->setPixmap(image1);
GroupFaces->LineEdit1->setReadOnly( true );
GroupFaces->LineEdit2->setReadOnly( true );
Layout1->addWidget(aFrame, 2, 0);
/***************************************************************/
setHelpFileName("line.htm");
@ -110,19 +123,25 @@ void BasicGUI_LineDlg::Init()
connect(buttonCancel, SIGNAL(clicked()), this, SLOT(ClickOnCancel()));
connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()), this, SLOT(DeactivateActiveDialog()));
connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()), this, SLOT(ClickOnCancel()));
connect(GroupConstructors, SIGNAL(clicked(int)), this, SLOT(ConstructorsClicked(int)));
connect(buttonOk, SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply, SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupFaces->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupFaces->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupFaces->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupFaces->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
ConstructorsClicked (0);
initName( tr("GEOM_LINE") );
}
@ -159,6 +178,44 @@ bool BasicGUI_LineDlg::ClickOnApply()
return true;
}
//=================================================================================
// function : ConstructorsClicked()
// purpose : Radio button management
//=================================================================================
void BasicGUI_LineDlg::ConstructorsClicked(int constructorId)
{
switch ( constructorId )
{
case 0:
{
localSelection( GEOM::GEOM_Object::_nil(), TopAbs_VERTEX );
myEditCurrentArgument = GroupPoints->LineEdit1;
myEditCurrentArgument->setText("");
myPoint1 = GEOM::GEOM_Object::_nil();
myPoint2 = GEOM::GEOM_Object::_nil();
globalSelection( GEOM_POINT );
GroupPoints->show();
GroupFaces->hide();
break;
}
case 1:
{
localSelection( GEOM::GEOM_Object::_nil(), TopAbs_FACE );
myEditCurrentArgument = GroupFaces->LineEdit1;
myEditCurrentArgument->setText("");
myFace1 = GEOM::GEOM_Object::_nil();
myFace2 = GEOM::GEOM_Object::_nil();
globalSelection( GEOM_FACE );
GroupPoints->hide();
GroupFaces->show();
break;
}
}
updateGeometry();
resize( minimumSize() );
SelectionIntoArgument();
}
//=================================================================================
// function : SelectionIntoArgument()
@ -172,6 +229,8 @@ void BasicGUI_LineDlg::SelectionIntoArgument()
{
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) myPoint1 = GEOM::GEOM_Object::_nil();
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = GEOM::GEOM_Object::_nil();
else if ( myEditCurrentArgument == GroupFaces->LineEdit1 ) myFace1 = GEOM::GEOM_Object::_nil();
else if ( myEditCurrentArgument == GroupFaces->LineEdit2 ) myFace2 = GEOM::GEOM_Object::_nil();
return;
}
@ -183,6 +242,8 @@ void BasicGUI_LineDlg::SelectionIntoArgument()
myEditCurrentArgument->setText( GEOMBase::GetName( aSelectedObject ) );
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ) myPoint1 = aSelectedObject;
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) myPoint2 = aSelectedObject;
else if ( myEditCurrentArgument == GroupFaces->LineEdit1 ) myFace1 = aSelectedObject;
else if ( myEditCurrentArgument == GroupFaces->LineEdit2 ) myFace2 = aSelectedObject;
}
displayPreview();
@ -198,6 +259,8 @@ void BasicGUI_LineDlg::SetEditCurrentArgument()
QPushButton* send = (QPushButton*)sender();
if ( send == GroupPoints->PushButton1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
else if ( send == GroupPoints->PushButton2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
else if ( send == GroupFaces->PushButton1 ) myEditCurrentArgument = GroupFaces->LineEdit1;
else if ( send == GroupFaces->PushButton2 ) myEditCurrentArgument = GroupFaces->LineEdit2;
myEditCurrentArgument->setFocus();
SelectionIntoArgument();
}
@ -212,6 +275,8 @@ void BasicGUI_LineDlg::LineEditReturnPressed()
QLineEdit* send = (QLineEdit*)sender();
if ( send == GroupPoints->LineEdit1 ) myEditCurrentArgument = GroupPoints->LineEdit1;
else if ( send == GroupPoints->LineEdit2 ) myEditCurrentArgument = GroupPoints->LineEdit2;
else if ( send == GroupFaces->LineEdit1 ) myEditCurrentArgument = GroupFaces->LineEdit1;
else if ( send == GroupFaces->LineEdit2 ) myEditCurrentArgument = GroupFaces->LineEdit2;
else return;
GEOMBase_Skeleton::LineEditReturnPressed();
}
@ -235,7 +300,9 @@ void BasicGUI_LineDlg::ActivateThisDialog()
GroupPoints->LineEdit1->setText( "" );
GroupPoints->LineEdit2->setText( "" );
myPoint1 = myPoint2 = GEOM::GEOM_Object::_nil();
GroupFaces->LineEdit1->setText( "" );
GroupFaces->LineEdit2->setText( "" );
myPoint1 = myPoint2 = myFace1 = myFace2 = GEOM::GEOM_Object::_nil();
}
//=================================================================================
@ -273,7 +340,12 @@ GEOM::GEOM_IOperations_ptr BasicGUI_LineDlg::createOperation()
//=================================================================================
bool BasicGUI_LineDlg::isValid( QString& msg )
{
return !myPoint1->_is_nil() && !myPoint2->_is_nil();
const int id = getConstructorId();
if ( id == 0 )
return !myPoint1->_is_nil() && !myPoint2->_is_nil();
else if ( id == 1 )
return !myFace1->_is_nil() && !myFace2->_is_nil();
return false;
}
//=================================================================================
@ -282,10 +354,27 @@ bool BasicGUI_LineDlg::isValid( QString& msg )
//=================================================================================
bool BasicGUI_LineDlg::execute( ObjectList& objects )
{
GEOM::GEOM_Object_var anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoPnt( myPoint1, myPoint2 );
bool res = false;
GEOM::GEOM_Object_var anObj;
switch ( getConstructorId() )
{
case 0 :
{
anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoPnt( myPoint1, myPoint2 );
res = true;
break;
}
case 1 :
{
anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->MakeLineTwoFaces( myFace1, myFace2 );
res = true;
break;
}
}
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
return true;
return res;
}
//=================================================================================

View File

@ -64,8 +64,11 @@ private :
GEOM::GEOM_Object_var myPoint1;
GEOM::GEOM_Object_var myPoint2;
GEOM::GEOM_Object_var myFace1;
GEOM::GEOM_Object_var myFace2;
DlgRef_2Sel_QTD* GroupPoints;
DlgRef_2Sel_QTD* GroupFaces;
private slots:
void ClickOnOk();
@ -74,7 +77,7 @@ private slots:
void ActivateThisDialog();
void DeactivateActiveDialog();
void ConstructorsClicked(int constructorId);
void LineEditReturnPressed();
void SelectionIntoArgument();
void SetEditCurrentArgument();

View File

@ -65,6 +65,7 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
QPixmap image1(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_EDGE")));
QPixmap image2(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_SELECT")));
QPixmap image3(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_REF")));
QPixmap image4(SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM",tr("ICON_DLG_POINT_LINES")));
setCaption(tr("GEOM_POINT_TITLE"));
@ -77,6 +78,8 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
RadioButton1->setPixmap(image0);
RadioButton2->setPixmap(image3);
RadioButton3->setPixmap(image1);
RadioButton4->show();
RadioButton4->setPixmap(image4);
GroupXYZ = new DlgRef_3Spin( aFrame, "GroupXYZ" );
GroupXYZ->GroupBox1->setTitle(tr("GEOM_COORDINATES"));
@ -98,6 +101,13 @@ BasicGUI_PointDlg::BasicGUI_PointDlg(GeometryGUI* theGeometryGUI, QWidget* paren
GroupRefPoint->TextLabel3->setText(tr("GEOM_DY"));
GroupRefPoint->TextLabel4->setText(tr("GEOM_DZ"));
GroupLineIntersection = new DlgRef_2Sel_QTD (aFrame, "GroupLineIntersection");
GroupLineIntersection->GroupBox1->setTitle(tr("GEOM_LINE_INTERSECTION"));
GroupLineIntersection->TextLabel1->setText(tr("GEOM_LINE1"));
GroupLineIntersection->PushButton1->setPixmap(image2);
GroupLineIntersection->TextLabel2->setText(tr("GEOM_LINE2"));
GroupLineIntersection->PushButton2->setPixmap(image2);
Layout1->addWidget( aFrame, 2, 0 );
/***************************************************************/
@ -146,6 +156,8 @@ void BasicGUI_PointDlg::Init()
{
GroupOnCurve->LineEdit1->setReadOnly( true );
GroupRefPoint->LineEdit1->setReadOnly( true );
GroupLineIntersection->LineEdit1->setReadOnly( true );
GroupLineIntersection->LineEdit2->setReadOnly( true );
myEdge = GEOM::GEOM_Object::_nil();
myRefPoint = GEOM::GEOM_Object::_nil();
@ -186,6 +198,10 @@ void BasicGUI_PointDlg::Init()
connect(GroupOnCurve->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupOnCurve->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupLineIntersection->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupLineIntersection->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupLineIntersection->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupLineIntersection->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupOnCurve->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect(GroupXYZ->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
@ -226,9 +242,8 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
GroupRefPoint->hide();
GroupOnCurve->hide();
GroupLineIntersection->hide();
GroupXYZ->show();
myCoordGrp->hide();
break;
}
@ -242,9 +257,8 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
GroupXYZ->hide();
GroupOnCurve->hide();
GroupRefPoint->show();
GroupLineIntersection->hide();
myCoordGrp->show();
break;
}
@ -258,12 +272,28 @@ void BasicGUI_PointDlg::ConstructorsClicked(int constructorId)
GroupXYZ->hide();
GroupRefPoint->hide();
GroupOnCurve->show();
GroupLineIntersection->hide();
myCoordGrp->show();
break;
}
case 3:
{
myEditCurrentArgument = GroupLineIntersection->LineEdit1;
GroupLineIntersection->LineEdit1->setText("");
GroupLineIntersection->LineEdit2->setText("");
myLine1 = GEOM::GEOM_Object::_nil();
myLine2 = GEOM::GEOM_Object::_nil();
globalSelection( GEOM_EDGE );
GroupXYZ->hide();
GroupRefPoint->hide();
GroupOnCurve->hide();
GroupLineIntersection->show();
myCoordGrp->hide();
break;
}
}
myX->setText( "" );
@ -382,6 +412,17 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
myEdge = aSelectedObject;
GroupOnCurve->LineEdit1->setText( GEOMBase::GetName( aSelectedObject ) );
}
else if ( id == 3 )
{
if (myEditCurrentArgument == GroupLineIntersection->LineEdit1) {
myLine1 = aSelectedObject;
GroupLineIntersection->LineEdit1->setText( GEOMBase::GetName( aSelectedObject ) );
}
else if (myEditCurrentArgument == GroupLineIntersection->LineEdit2) {
myLine2 = aSelectedObject;
GroupLineIntersection->LineEdit2->setText( GEOMBase::GetName( aSelectedObject ) );
}
}
}
}
@ -396,7 +437,8 @@ void BasicGUI_PointDlg::SelectionIntoArgument()
void BasicGUI_PointDlg::LineEditReturnPressed()
{
QLineEdit* send = (QLineEdit*)sender();
if ( send == GroupRefPoint->LineEdit1 || send == GroupOnCurve->LineEdit1 )
if ( send == GroupRefPoint->LineEdit1 || send == GroupOnCurve->LineEdit1 ||
send == GroupLineIntersection->LineEdit1 || send == GroupLineIntersection->LineEdit2 )
{
myEditCurrentArgument = send;
GEOMBase_Skeleton::LineEditReturnPressed();
@ -424,11 +466,24 @@ void BasicGUI_PointDlg::SetEditCurrentArgument()
GroupOnCurve->LineEdit1->setFocus();
myEditCurrentArgument = GroupOnCurve->LineEdit1;
globalSelection( GEOM_EDGE );
}
else if ( send == GroupLineIntersection->PushButton1 )
{
GroupLineIntersection->LineEdit1->setFocus();
myEditCurrentArgument = GroupLineIntersection->LineEdit1;
globalSelection( GEOM_EDGE );
}
else if ( send == GroupLineIntersection->PushButton2 )
{
GroupLineIntersection->LineEdit2->setFocus();
myEditCurrentArgument = GroupLineIntersection->LineEdit2;
globalSelection( GEOM_EDGE );
}
}
//=================================================================================
// function : enterEvent()
// purpose : to reactivate this dialog box when mouse enter onto the window
@ -519,6 +574,8 @@ bool BasicGUI_PointDlg::isValid( QString& msg )
return !myRefPoint->_is_nil();
else if ( id == 2 )
return !myEdge->_is_nil();
else if ( id == 3)
return ( !myLine1->_is_nil() && !myLine2->_is_nil() );
return false;
}
@ -560,6 +617,11 @@ bool BasicGUI_PointDlg::execute( ObjectList& objects )
MakePointOnCurve( myEdge, getParameter() );
res = true;
break;
case 3 :
anObj = GEOM::GEOM_IBasicOperations::_narrow( getOperation() )->
MakePointOnLinesIntersection( myLine1, myLine2 );
res = true;
break;
}
if ( getConstructorId() == 1 || getConstructorId() == 2 )

View File

@ -31,6 +31,7 @@
#include "GEOMBase_Skeleton.h"
#include "DlgRef_1Sel1Spin.h"
#include "DlgRef_3Spin.h"
#include "DlgRef_2Sel_QTD.h"
#include "DlgRef_1Sel3Spin.h"
class QLineEdit;
@ -73,10 +74,13 @@ private :
GEOM::GEOM_Object_var myEdge;
GEOM::GEOM_Object_var myRefPoint;
GEOM::GEOM_Object_var myLine1;
GEOM::GEOM_Object_var myLine2;
DlgRef_3Spin* GroupXYZ;
DlgRef_1Sel3Spin* GroupRefPoint;
DlgRef_1Sel1Spin* GroupOnCurve;
DlgRef_2Sel_QTD* GroupLineIntersection;
QGroupBox* myCoordGrp;
QLineEdit* myX;

View File

@ -1,7 +1,7 @@
/****************************************************************************
** Form implementation generated from reading ui file 'UIFiles/DlgRef_3Sel1Check_QTD.ui'
** Form implementation generated from reading ui file 'DlgRef_3Sel1Check_QTD.ui'
**
** Created: Wed Feb 21 10:49:18 2007
** Created: Mon Oct 29 18:14:59 2007
** by: The User Interface Compiler ($Id$)
**
** WARNING! All changes made in this file will be lost!
@ -14,7 +14,7 @@
#include <qgroupbox.h>
#include <qlineedit.h>
#include <qlabel.h>
#include <qradiobutton.h>
#include <qcheckbox.h>
#include <qlayout.h>
#include <qtooltip.h>
#include <qwhatsthis.h>
@ -46,7 +46,7 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
LineEdit1 = new QLineEdit( GroupBox1, "LineEdit1" );
GroupBox1Layout->addWidget( LineEdit1, 0, 2 );
GroupBox1Layout->addMultiCellWidget( LineEdit1, 0, 0, 2, 3 );
TextLabel1 = new QLabel( GroupBox1, "TextLabel1" );
TextLabel1->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel1->sizePolicy().hasHeightForWidth() ) );
@ -60,7 +60,7 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
LineEdit2 = new QLineEdit( GroupBox1, "LineEdit2" );
GroupBox1Layout->addWidget( LineEdit2, 1, 2 );
GroupBox1Layout->addMultiCellWidget( LineEdit2, 1, 1, 2, 3 );
TextLabel2 = new QLabel( GroupBox1, "TextLabel2" );
TextLabel2->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel2->sizePolicy().hasHeightForWidth() ) );
@ -74,22 +74,22 @@ DlgRef_3Sel1Check_QTD::DlgRef_3Sel1Check_QTD( QWidget* parent, const char* name,
LineEdit3 = new QLineEdit( GroupBox1, "LineEdit3" );
GroupBox1Layout->addWidget( LineEdit3, 2, 2 );
GroupBox1Layout->addMultiCellWidget( LineEdit3, 2, 2, 2, 3 );
TextLabel3 = new QLabel( GroupBox1, "TextLabel3" );
TextLabel3->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)0, (QSizePolicy::SizeType)0, 0, 0, TextLabel3->sizePolicy().hasHeightForWidth() ) );
GroupBox1Layout->addWidget( TextLabel3, 2, 0 );
radioButton4 = new QRadioButton( GroupBox1, "radioButton4" );
GroupBox1Layout->addMultiCellWidget( radioButton4, 3, 3, 0, 1 );
Spacer3 = new QSpacerItem( 16, 721, QSizePolicy::Minimum, QSizePolicy::Expanding );
GroupBox1Layout->addItem( Spacer3, 4, 2 );
GroupBox1Layout->addItem( Spacer3, 4, 3 );
CheckButton1 = new QCheckBox( GroupBox1, "CheckButton1" );
GroupBox1Layout->addMultiCellWidget( CheckButton1, 3, 3, 0, 2 );
DlgRef_3Sel1Check_QTDLayout->addWidget( GroupBox1, 0, 0 );
languageChange();
resize( QSize(490, 878).expandedTo(minimumSizeHint()) );
resize( QSize(403, 441).expandedTo(minimumSizeHint()) );
clearWState( WState_Polished );
// tab order
@ -122,6 +122,6 @@ void DlgRef_3Sel1Check_QTD::languageChange()
TextLabel2->setText( tr( "TL2" ) );
PushButton3->setText( QString::null );
TextLabel3->setText( tr( "TL3" ) );
radioButton4->setText( tr( "radioButton4" ) );
CheckButton1->setText( tr( "CheckButton1" ) );
}

View File

@ -1,7 +1,7 @@
/****************************************************************************
** Form interface generated from reading ui file 'UIFiles/DlgRef_3Sel1Check_QTD.ui'
** Form interface generated from reading ui file 'DlgRef_3Sel1Check_QTD.ui'
**
** Created: Wed Feb 21 10:48:39 2007
** Created: Mon Oct 29 18:14:59 2007
** by: The User Interface Compiler ($Id$)
**
** WARNING! All changes made in this file will be lost!
@ -21,7 +21,7 @@ class QGroupBox;
class QPushButton;
class QLineEdit;
class QLabel;
class QRadioButton;
class QCheckBox;
class DlgRef_3Sel1Check_QTD : public QWidget
{
@ -41,7 +41,7 @@ public:
QPushButton* PushButton3;
QLineEdit* LineEdit3;
QLabel* TextLabel3;
QRadioButton* radioButton4;
QCheckBox* CheckButton1;
protected:
QGridLayout* DlgRef_3Sel1Check_QTDLayout;

View File

@ -8,8 +8,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>490</width>
<height>878</height>
<width>403</width>
<height>441</height>
</rect>
</property>
<property name="sizePolicy">
@ -74,7 +74,7 @@
<string></string>
</property>
</widget>
<widget class="QLineEdit" row="0" column="2">
<widget class="QLineEdit" row="0" column="2" rowspan="1" colspan="2">
<property name="name">
<cstring>LineEdit1</cstring>
</property>
@ -111,7 +111,7 @@
<string></string>
</property>
</widget>
<widget class="QLineEdit" row="1" column="2">
<widget class="QLineEdit" row="1" column="2" rowspan="1" colspan="2">
<property name="name">
<cstring>LineEdit2</cstring>
</property>
@ -148,7 +148,7 @@
<string></string>
</property>
</widget>
<widget class="QLineEdit" row="2" column="2">
<widget class="QLineEdit" row="2" column="2" rowspan="1" colspan="2">
<property name="name">
<cstring>LineEdit3</cstring>
</property>
@ -169,15 +169,7 @@
<string>TL3</string>
</property>
</widget>
<widget class="QRadioButton" row="3" column="0" rowspan="1" colspan="2">
<property name="name">
<cstring>radioButton4</cstring>
</property>
<property name="text">
<string>radioButton4</string>
</property>
</widget>
<spacer row="4" column="2">
<spacer row="4" column="3">
<property name="name">
<cstring>Spacer3</cstring>
</property>
@ -194,6 +186,14 @@
</size>
</property>
</spacer>
<widget class="QCheckBox" row="3" column="0" rowspan="1" colspan="3">
<property name="name">
<cstring>CheckButton1</cstring>
</property>
<property name="text">
<string>CheckButton1</string>
</property>
</widget>
</grid>
</widget>
</grid>

View File

@ -105,5 +105,8 @@
#uic -o DlgRef_4Sel1Spin2Check_QTD.h DlgRef_4Sel1Spin2Check_QTD.ui
#uic -o DlgRef_4Sel1Spin2Check_QTD.cxx -impl DlgRef_4Sel1Spin2Check_QTD.h DlgRef_4Sel1Spin2Check_QTD.ui
uic -o DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
uic -o DlgRef_2Sel3Spin2Rb_QTD.cxx -impl DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
#uic -o DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
#uic -o DlgRef_2Sel3Spin2Rb_QTD.cxx -impl DlgRef_2Sel3Spin2Rb_QTD.h DlgRef_2Sel3Spin2Rb_QTD.ui
uic -o DlgRef_3Sel1Check_QTD.h DlgRef_3Sel1Check_QTD.ui
uic -o DlgRef_3Sel1Check_QTD.cxx -impl DlgRef_3Sel1Check_QTD.h DlgRef_3Sel1Check_QTD.ui

View File

@ -117,6 +117,10 @@ msgstr "conedxyz.png"
msgid "ICON_DLG_LINE_2P"
msgstr "line2points.png"
#LineDlg
msgid "ICON_DLG_LINE_2F"
msgstr "line2faces.png"
#LineDlg
msgid "ICON_DLG_LINE_EDGE"
msgstr "lineedge.png"
@ -166,6 +170,10 @@ msgstr "point2.png"
msgid "ICON_DLG_POINT_EDGE"
msgstr "pointonedge.png"
#PoinDlg
msgid "ICON_DLG_POINT_LINES"
msgstr "point_line_intersection.png"
#ArcDlg
msgid "ICON_DLG_ARC"
msgstr "arc.png"

View File

@ -310,6 +310,10 @@ msgstr "Points"
msgid "GEOM_POINT_I"
msgstr "Point %1"
#Face i
msgid "GEOM_FACE_I"
msgstr "Face %1"
#Arguments
msgid "GEOM_ARGUMENTS"
msgstr "Arguments"
@ -362,6 +366,10 @@ msgstr "Coord. :"
msgid "GEOM_REVERSE"
msgstr "Reverse"
#Bothway
msgid "GEOM_BOTHWAY"
msgstr "Bothway"
#Reverse U
msgid "GEOM_REVERSE_U"
msgstr "Reverse U"
@ -633,6 +641,14 @@ msgstr "Faces"
msgid "GEOM_LINE"
msgstr "Line"
#Line 1
msgid "GEOM_LINE1"
msgstr "Line 1"
#Line 2
msgid "GEOM_LINE2"
msgstr "Line 2"
#Plane
msgid "GEOM_PLANE"
msgstr "Plane"

View File

@ -121,6 +121,10 @@ msgstr "conedxyz.png"
msgid "ICON_DLG_LINE_2P"
msgstr "line2points.png"
#LineDlg
msgid "ICON_DLG_LINE_2F"
msgstr "line2faces.png"
#LineDlg
msgid "ICON_DLG_LINE_EDGE"
msgstr "lineedge.png"
@ -181,6 +185,10 @@ msgstr "point3.png"
msgid "ICON_DLG_POINT_EDGE"
msgstr "pointonedge.png"
#PoinDlg
msgid "ICON_DLG_POINT_LINES"
msgstr "point_line_intersection.png"
#ArcDlg
msgid "ICON_DLG_ARC"
msgstr "arc.png"

View File

@ -235,7 +235,7 @@ msgstr "Warning"
#: GeometryGUI.cxx:3854
msgid "GEOM_REALLY_DELETE"
msgstr "Do you really want to delete object(s) ?"
msgstr "Do you really want to delete this %1 object(s): %2"
#
#==============================================================================
@ -301,6 +301,10 @@ msgstr "Points"
msgid "GEOM_POINT_I"
msgstr "Point %1"
#Face i
msgid "GEOM_FACE_I"
msgstr "Face %1"
#Arguments
msgid "GEOM_ARGUMENTS"
msgstr "Arguments"
@ -353,6 +357,10 @@ msgstr "Coord. :"
msgid "GEOM_REVERSE"
msgstr "Reverse"
#Bothway
msgid "GEOM_BOTHWAY"
msgstr "Bothway"
#Reverse U
msgid "GEOM_REVERSE_U"
msgstr "Reverse U"
@ -678,6 +686,14 @@ msgstr "Face or LCS"
msgid "GEOM_LINE"
msgstr "Line"
#Line 1
msgid "GEOM_LINE1"
msgstr "Line 1"
#Line 2
msgid "GEOM_LINE2"
msgstr "Line 2"
#Plane
msgid "GEOM_PLANE"
msgstr "Plane"
@ -1348,6 +1364,9 @@ msgstr "Parametric point"
msgid "GEOM_REF_POINT"
msgstr "Point with reference"
msgid "GEOM_LINE_INTERSECTION"
msgstr "Point On Lines Intersection"
#
#==============================================================================
#

View File

@ -692,6 +692,66 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Objec
return aPrism;
}
//=============================================================================
/*!
* MakePrismVecH2Ways
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH2Ways (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) theVec,
double theH)
{
SetErrorCode(KO);
if (theBase.IsNull() || theVec.IsNull()) return NULL;
//Add a new Prism object
Handle(GEOM_Object) aPrism = GetEngine()->AddObject(GetDocID(), GEOM_PRISM);
//Add a new Prism function for creation a Prism relatively to vector
Handle(GEOM_Function) aFunction =
aPrism->AddFunction(GEOMImpl_PrismDriver::GetID(), PRISM_BASE_VEC_H_2WAYS);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_PrismDriver::GetID()) return NULL;
GEOMImpl_IPrism aCI (aFunction);
Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
Handle(GEOM_Function) aRefVec = theVec->GetLastFunction();
if (aRefBase.IsNull() || aRefVec.IsNull()) return NULL;
aCI.SetBase(aRefBase);
aCI.SetVector(aRefVec);
aCI.SetH(theH);
//Compute the Prism value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
//SetErrorCode("Prism driver failed");
SetErrorCode("Extrusion can not be created, check input data");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrismVecH2Ways("
<< theBase << ", " << theVec << ", " << theH << ")";
SetErrorCode(OK);
return aPrism;
}
//=============================================================================
/*!
* MakePrismTwoPnt
@ -753,6 +813,67 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt
return aPrism;
}
//=============================================================================
/*!
* MakePrismTwoPnt2Ways
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt2Ways
(Handle(GEOM_Object) theBase,
Handle(GEOM_Object) thePoint1, Handle(GEOM_Object) thePoint2)
{
SetErrorCode(KO);
if (theBase.IsNull() || thePoint1.IsNull() || thePoint2.IsNull()) return NULL;
//Add a new Prism object
Handle(GEOM_Object) aPrism = GetEngine()->AddObject(GetDocID(), GEOM_PRISM);
//Add a new Prism function for creation a Prism relatively to two points
Handle(GEOM_Function) aFunction =
aPrism->AddFunction(GEOMImpl_PrismDriver::GetID(), PRISM_BASE_TWO_PNT_2WAYS);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_PrismDriver::GetID()) return NULL;
GEOMImpl_IPrism aCI (aFunction);
Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
Handle(GEOM_Function) aRefPnt1 = thePoint1->GetLastFunction();
Handle(GEOM_Function) aRefPnt2 = thePoint2->GetLastFunction();
if (aRefBase.IsNull() || aRefPnt1.IsNull() || aRefPnt2.IsNull()) return NULL;
aCI.SetBase(aRefBase);
aCI.SetFirstPoint(aRefPnt1);
aCI.SetLastPoint(aRefPnt2);
//Compute the Prism value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
//SetErrorCode("Prism driver failed");
SetErrorCode("Extrusion can not be created, check input data");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrism2Ways("
<< theBase << ", " << thePoint1 << ", " << thePoint2 << ")";
SetErrorCode(OK);
return aPrism;
}
//=============================================================================
/*!
@ -871,6 +992,63 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle (Handle(
return aRevolution;
}
//=============================================================================
/*!
* MakeRevolutionAxisAngle2Ways
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle2Ways
(Handle(GEOM_Object) theBase, Handle(GEOM_Object) theAxis, double theAngle)
{
SetErrorCode(KO);
if (theBase.IsNull() || theAxis.IsNull()) return NULL;
//Add a new Revolution object
Handle(GEOM_Object) aRevolution = GetEngine()->AddObject(GetDocID(), GEOM_REVOLUTION);
//Add a new Revolution function for creation a revolution relatively to axis
Handle(GEOM_Function) aFunction =
aRevolution->AddFunction(GEOMImpl_RevolutionDriver::GetID(), REVOLUTION_BASE_AXIS_ANGLE_2WAYS);
if (aFunction.IsNull()) return NULL;
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_RevolutionDriver::GetID()) return NULL;
GEOMImpl_IRevolution aCI (aFunction);
Handle(GEOM_Function) aRefBase = theBase->GetLastFunction();
Handle(GEOM_Function) aRefAxis = theAxis->GetLastFunction();
if (aRefBase.IsNull() || aRefAxis.IsNull()) return NULL;
aCI.SetBase(aRefBase);
aCI.SetAxis(aRefAxis);
aCI.SetAngle(theAngle);
//Compute the Revolution value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Revolution driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aRevolution << " = geompy.MakeRevolution2Ways("
<< theBase << ", " << theAxis << ", " << theAngle * 180.0 / PI << "*math.pi/180.0)";
SetErrorCode(OK);
return aRevolution;
}
//=============================================================================
/*!

View File

@ -59,10 +59,17 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
Standard_EXPORT Handle(GEOM_Object) MakePrismVecH (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) theVec, double theH);
Standard_EXPORT Handle(GEOM_Object) MakePrismVecH2Ways (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) theVec, double theH);
Standard_EXPORT Handle(GEOM_Object) MakePrismTwoPnt (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) thePoint1,
Handle(GEOM_Object) thePoint2);
Standard_EXPORT Handle(GEOM_Object) MakePrismTwoPnt2Ways (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) thePoint1,
Handle(GEOM_Object) thePoint2);
Standard_EXPORT Handle(GEOM_Object) MakePipe (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) thePath);
@ -70,6 +77,10 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
Handle(GEOM_Object) theAxis,
double theAngle);
Standard_EXPORT Handle(GEOM_Object) MakeRevolutionAxisAngle2Ways (Handle(GEOM_Object) theBase,
Handle(GEOM_Object) theAxis,
double theAngle);
Standard_EXPORT Handle(GEOM_Object) MakeSolidShell (Handle(GEOM_Object) theShell);
Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape, int theMinDeg, int theMaxDeg, double theTol2D, double theTol3D, int theNbIter);

View File

@ -231,6 +231,60 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointOnCurve
return aPoint;
}
//=============================================================================
/*!
* MakePointOnLinesIntersection
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakePointOnLinesIntersection
(Handle(GEOM_Object) theLine1, Handle(GEOM_Object) theLine2)
{
SetErrorCode(KO);
if (theLine1.IsNull() || theLine2.IsNull()) return NULL;
//Add a new Point object
Handle(GEOM_Object) aPoint = GetEngine()->AddObject(GetDocID(), GEOM_POINT);
//Add a new Point function for creation a point relativley another point
Handle(GEOM_Function) aFunction = aPoint->AddFunction(GEOMImpl_PointDriver::GetID(), POINT_LINES_INTERSECTION);
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_PointDriver::GetID()) return NULL;
GEOMImpl_IPoint aPI (aFunction);
Handle(GEOM_Function) aRef1 = theLine1->GetLastFunction();
Handle(GEOM_Function) aRef2 = theLine2->GetLastFunction();
if (aRef1.IsNull() || aRef2.IsNull()) return NULL;
aPI.SetLine1(aRef1);
aPI.SetLine2(aRef2);
//Compute the point value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Point driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aPoint << " = geompy.MakeVertexOnLinesIntersection("
<< theLine1 << ", " << theLine2 << ")";
SetErrorCode(OK);
return aPoint;
}
//=============================================================================
/*!
* MakeTangentOnCurve
@ -501,6 +555,60 @@ Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoPnt
return aLine;
}
//=============================================================================
/*!
* MakeLineTwoFaces
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_IBasicOperations::MakeLineTwoFaces
(Handle(GEOM_Object) theFace1, Handle(GEOM_Object) theFace2)
{
SetErrorCode(KO);
if (theFace1.IsNull() || theFace2.IsNull()) return NULL;
//Add a new Line object
Handle(GEOM_Object) aLine = GetEngine()->AddObject(GetDocID(), GEOM_LINE);
//Add a new Line function
Handle(GEOM_Function) aFunction =
aLine->AddFunction(GEOMImpl_LineDriver::GetID(), LINE_TWO_FACES);
//Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_LineDriver::GetID()) return NULL;
GEOMImpl_ILine aPI (aFunction);
Handle(GEOM_Function) aRef1 = theFace1->GetLastFunction();
Handle(GEOM_Function) aRef2 = theFace2->GetLastFunction();
if (aRef1.IsNull() || aRef2.IsNull()) return NULL;
aPI.SetFace1(aRef1);
aPI.SetFace2(aRef2);
//Compute the Line value
try {
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
OCC_CATCH_SIGNALS;
#endif
if (!GetSolver()->ComputeFunction(aFunction)) {
SetErrorCode("Line driver failed");
return NULL;
}
}
catch (Standard_Failure) {
Handle(Standard_Failure) aFail = Standard_Failure::Caught();
SetErrorCode(aFail->GetMessageString());
return NULL;
}
//Make a Python command
GEOM::TPythonDump(aFunction) << aLine << " = geompy.MakeLineTwoFaces("
<< theFace1 << ", " << theFace2 << ")";
SetErrorCode(OK);
return aLine;
}
//=============================================================================
/*!

View File

@ -41,6 +41,9 @@ class GEOMImpl_IBasicOperations : public GEOM_IOperations {
Standard_EXPORT Handle(GEOM_Object) MakePointOnCurve (Handle(GEOM_Object) theCurve,
double theParameter);
Standard_EXPORT Handle(GEOM_Object) MakePointOnLinesIntersection
(Handle(GEOM_Object) theLine1, Handle(GEOM_Object) theLine2);
// Vector
Standard_EXPORT Handle(GEOM_Object) MakeVectorDXDYDZ (double theDX, double theDY, double theDZ);
@ -54,6 +57,9 @@ class GEOMImpl_IBasicOperations : public GEOM_IOperations {
Standard_EXPORT Handle(GEOM_Object) MakeLineTwoPnt (Handle(GEOM_Object) thePnt1,
Handle(GEOM_Object) thePnt2);
Standard_EXPORT Handle(GEOM_Object) MakeLineTwoFaces (Handle(GEOM_Object) theFace1,
Handle(GEOM_Object) theFace2);
Standard_EXPORT Handle(GEOM_Object) MakeLine (Handle(GEOM_Object) thePnt,
Handle(GEOM_Object) theDir);

View File

@ -22,8 +22,10 @@
#include "GEOM_Function.hxx"
#define LINE_ARG_PNT1 1
#define LINE_ARG_PNT2 2
#define LINE_ARG_PNT1 1
#define LINE_ARG_PNT2 2
#define LINE_ARG_FACE1 3
#define LINE_ARG_FACE2 4
class GEOMImpl_ILine
{
@ -33,9 +35,13 @@ class GEOMImpl_ILine
void SetPoint1(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_PNT1, theRef); }
void SetPoint2(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_PNT2, theRef); }
void SetFace1(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_FACE1, theRef); }
void SetFace2(Handle(GEOM_Function) theRef) { _func->SetReference(LINE_ARG_FACE2, theRef); }
Handle(GEOM_Function) GetPoint1() { return _func->GetReference(LINE_ARG_PNT1); }
Handle(GEOM_Function) GetPoint2() { return _func->GetReference(LINE_ARG_PNT2); }
Handle(GEOM_Function) GetFace1() { return _func->GetReference(LINE_ARG_FACE1); }
Handle(GEOM_Function) GetFace2() { return _func->GetReference(LINE_ARG_FACE2); }
private:

View File

@ -30,6 +30,8 @@
#define ARG_PARAM 5
#define ARG_CURVE 6
#define ARG_LINE1 7
#define ARG_LINE2 8
class GEOMImpl_IPoint
{
@ -50,8 +52,12 @@ class GEOMImpl_IPoint
Handle(GEOM_Function) GetRef() { return _func->GetReference(ARG_REF); }
void SetCurve(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_CURVE, theRef); }
void SetLine1(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_LINE1, theRef); }
void SetLine2(Handle(GEOM_Function) theRef) { _func->SetReference(ARG_LINE2, theRef); }
Handle(GEOM_Function) GetCurve() { return _func->GetReference(ARG_CURVE); }
Handle(GEOM_Function) GetLine1() { return _func->GetReference(ARG_LINE1); }
Handle(GEOM_Function) GetLine2() { return _func->GetReference(ARG_LINE2); }
void SetParameter(double theParam) { _func->SetReal(ARG_PARAM, theParam); }

View File

@ -27,13 +27,15 @@
#include <BRep_Tool.hxx>
#include <BRepBuilderAPI_MakeEdge.hxx>
#include <BRepAlgoAPI_Section.hxx>
#include <TopAbs.hxx>
#include <TopExp.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
#include <TopoDS_Shape.hxx>
#include <TopoDS_Vertex.hxx>
#include <TopExp_Explorer.hxx>
#include <TopTools_MapOfShape.hxx>
#include <gp_Pnt.hxx>
#include <Precision.hxx>
@ -92,6 +94,40 @@ Standard_Integer GEOMImpl_LineDriver::Execute(TFunction_Logbook& log) const
}
aShape = BRepBuilderAPI_MakeEdge(P1, P2).Shape();
} else if (aType == LINE_TWO_FACES) {
Handle(GEOM_Function) aRefFace1 = aPI.GetFace1();
Handle(GEOM_Function) aRefFace2 = aPI.GetFace2();
TopoDS_Shape aShape1 = aRefFace1->GetValue();
TopoDS_Shape aShape2 = aRefFace2->GetValue();
if (aShape1.ShapeType() != TopAbs_FACE ||
aShape2.ShapeType() != TopAbs_FACE) {
Standard_ConstructionError::Raise("Wrong arguments: two faces must be given");
}
if (aShape1.IsSame(aShape2)) {
Standard_ConstructionError::Raise("The end faces must be different");
}
BRepAlgoAPI_Section E (aShape1, aShape2, Standard_False);
E.Approximation(Standard_True);
E.Build();
if (!E.IsDone()) {
Standard_ConstructionError::Raise("Line can not be performed on the given faces");
}
else
{
TopExp_Explorer Exp (E, TopAbs_EDGE);
if ( Exp.More() ){
aShape = Exp.Current();
Exp.Next();
}
else
{
Standard_ConstructionError::Raise("Faces not have intersection line");
aShape = E.Shape();
}
if ( Exp.More() )
aShape = E.Shape();
}
} else if (aType == LINE_PNT_DIR) {
Handle(GEOM_Function) aRefPnt = aPI.GetPoint1();
Handle(GEOM_Function) aRefDir = aPI.GetPoint2();

View File

@ -27,7 +27,8 @@
#include <BRep_Tool.hxx>
#include <BRepBuilderAPI_MakeVertex.hxx>
#include <BRepExtrema_DistShapeShape.hxx>
#include <Precision.hxx>
#include <TopAbs.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Edge.hxx>
@ -97,7 +98,34 @@ Standard_Integer GEOMImpl_PointDriver::Execute(TFunction_Logbook& log) const
aP = aFP + (aLP - aFP) * aPI.GetParameter();
aPnt = aCurve->Value(aP);
} else {
} else if (aType == POINT_LINES_INTERSECTION) {
Handle(GEOM_Function) aRef1 = aPI.GetLine1();
Handle(GEOM_Function) aRef2 = aPI.GetLine2();
TopoDS_Shape aRefShape1 = aRef1->GetValue();
TopoDS_Shape aRefShape2 = aRef2->GetValue();
if (aRefShape1.ShapeType() != TopAbs_EDGE || aRefShape2.ShapeType() != TopAbs_EDGE ) {
Standard_TypeMismatch::Raise
("Creation Point On Lines Intersection Aborted : Line shape is not an edge");
}
//Calculate Lines Intersection Point
BRepExtrema_DistShapeShape dst (aRefShape1, aRefShape2);
if (dst.IsDone())
{
gp_Pnt P1, P2;
for (int i = 1; i <= dst.NbSolution(); i++) {
P1 = dst.PointOnShape1(i);
P2 = dst.PointOnShape2(i);
Standard_Real Dist = P1.Distance(P2);
if ( Dist <= Precision::Confusion() )
aPnt = P1;
else
Standard_TypeMismatch::Raise ("Lines not have an Intersection Point");
}
}
}
else {
return 0;
}

View File

@ -28,6 +28,7 @@
#include <GEOM_Function.hxx>
#include <BRepPrimAPI_MakePrism.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRep_Tool.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
@ -38,6 +39,8 @@
#include <Precision.hxx>
#include <gp_Pnt.hxx>
#include <gp_Trsf.hxx>
#include <gp_Vec.hxx>
#include <Standard_ConstructionError.hxx>
//=======================================================================
@ -93,7 +96,35 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
}
}
}
} else if (aType == PRISM_BASE_TWO_PNT) {
} else if (aType == PRISM_BASE_VEC_H_2WAYS) {
Handle(GEOM_Function) aRefBase = aCI.GetBase();
Handle(GEOM_Function) aRefVector = aCI.GetVector();
TopoDS_Shape aShapeBase = aRefBase->GetValue();
TopoDS_Shape aShapeVec = aRefVector->GetValue();
if (aShapeVec.ShapeType() == TopAbs_EDGE) {
TopoDS_Edge anE = TopoDS::Edge(aShapeVec);
TopoDS_Vertex V1, V2;
gp_Trsf aTrsf;
gp_Pnt aP1, aP2;
TopExp::Vertices(anE, V1, V2, Standard_True);
if (!V1.IsNull() && !V2.IsNull()) {
gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
if (Abs(aCI.GetH()) < Precision::Confusion()) {
Standard_ConstructionError::Raise("Absolute value of prism height is too small");
}
if (aV.Magnitude() > Precision::Confusion()) {
gp_Vec aVec;
aV.Normalize();
aVec.Normalize();
aVec = aV * (-aCI.GetH());
aTrsf.SetTranslation(aVec);
BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
aShapeBase = aTransformation.Shape();
aShape = BRepPrimAPI_MakePrism(aShapeBase, (aV * aCI.GetH() * 2), Standard_False).Shape();
}
}
}
} else if (aType == PRISM_BASE_TWO_PNT || aType == PRISM_BASE_TWO_PNT_2WAYS) {
Handle(GEOM_Function) aRefBase = aCI.GetBase();
Handle(GEOM_Function) aRefPnt1 = aCI.GetFirstPoint();
Handle(GEOM_Function) aRefPnt2 = aCI.GetLastPoint();
@ -107,6 +138,14 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
if (!V1.IsNull() && !V2.IsNull()) {
gp_Vec aV (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
if (aV.Magnitude() > gp::Resolution()) {
if (aType == PRISM_BASE_TWO_PNT_2WAYS)
{
gp_Trsf aTrsf;
aTrsf.SetTranslation(-aV);
BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
aShapeBase = aTransformation.Shape();
aV = aV * 2;
}
aShape = BRepPrimAPI_MakePrism(aShapeBase, aV, Standard_False).Shape();
}
}

View File

@ -28,6 +28,7 @@
#include <GEOM_Function.hxx>
#include <BRepPrimAPI_MakeRevol.hxx>
#include <BRepBuilderAPI_Transform.hxx>
#include <BRep_Tool.hxx>
#include <TopoDS.hxx>
#include <TopoDS_Shape.hxx>
@ -35,7 +36,7 @@
#include <TopoDS_Vertex.hxx>
#include <TopAbs.hxx>
#include <TopExp.hxx>
#include <gp_Trsf.hxx>
#include <gp_Pnt.hxx>
#include <gp_Lin.hxx>
#include <gp_Dir.hxx>
@ -77,7 +78,7 @@ Standard_Integer GEOMImpl_RevolutionDriver::Execute(TFunction_Logbook& log) cons
TopoDS_Shape aShape;
if (aType == REVOLUTION_BASE_AXIS_ANGLE) {
if (aType == REVOLUTION_BASE_AXIS_ANGLE || aType == REVOLUTION_BASE_AXIS_ANGLE_2WAYS) {
Handle(GEOM_Function) aRefBase = aCI.GetBase();
Handle(GEOM_Function) aRefAxis = aCI.GetAxis();
TopoDS_Shape aShapeBase = aRefBase->GetValue();
@ -106,9 +107,17 @@ Standard_Integer GEOMImpl_RevolutionDriver::Execute(TFunction_Logbook& log) cons
Standard_ConstructionError::Raise("Vertex to be rotated is too close to Revolution Axis");
}
}
double anAngle = aCI.GetAngle();
gp_Ax1 anAxis (BRep_Tool::Pnt(V1), aV);
BRepPrimAPI_MakeRevol MR (aShapeBase, anAxis, aCI.GetAngle(), Standard_False);
if (aType == REVOLUTION_BASE_AXIS_ANGLE_2WAYS)
{
gp_Trsf aTrsf;
aTrsf.SetRotation(anAxis, ( -anAngle ));
BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
aShapeBase = aTransformation.Shape();
anAngle = anAngle * 2;
}
BRepPrimAPI_MakeRevol MR (aShapeBase, anAxis, anAngle, Standard_False);
if (!MR.IsDone()) MR.Build();
if (!MR.IsDone()) StdFail_NotDone::Raise("Revolution algorithm has failed");
aShape = MR.Shape();

View File

@ -89,10 +89,11 @@
#define EXPORT_SHAPE 1
#define IMPORT_SHAPE 1
#define POINT_XYZ 1
#define POINT_XYZ_REF 2
#define POINT_CURVE_PAR 3
//#define POINT_FACE_PAR 4
#define POINT_XYZ 1
#define POINT_XYZ_REF 2
#define POINT_CURVE_PAR 3
#define POINT_LINES_INTERSECTION 4
//#define POINT_FACE_PAR 5
#define VECTOR_TWO_PNT 1
#define VECTOR_DX_DY_DZ 2
@ -104,8 +105,9 @@
#define PLANE_THREE_PNT 3
#define PLANE_TANGENT_FACE 4
#define LINE_TWO_PNT 1
#define LINE_PNT_DIR 2
#define LINE_TWO_PNT 1
#define LINE_PNT_DIR 2
#define LINE_TWO_FACES 3
#define TRANSLATE_TWO_POINTS 1
#define TRANSLATE_VECTOR 2
@ -156,10 +158,13 @@
#define SPHERE_R 1
#define SPHERE_PNT_R 2
#define PRISM_BASE_VEC_H 1
#define PRISM_BASE_TWO_PNT 2
#define PRISM_BASE_VEC_H 1
#define PRISM_BASE_TWO_PNT 2
#define PRISM_BASE_VEC_H_2WAYS 3
#define PRISM_BASE_TWO_PNT_2WAYS 4
#define REVOLUTION_BASE_AXIS_ANGLE 1
#define REVOLUTION_BASE_AXIS_ANGLE 1
#define REVOLUTION_BASE_AXIS_ANGLE_2WAYS 2
#define PIPE_BASE_PATH 1
#define PIPE_DIFFERENT_SECTIONS 2

View File

@ -31,6 +31,7 @@
#include "GeometryGUI.h"
#include "GEOM_Actor.h"
#include "GEOMBase.h"
#include "GEOM_Operation.h"
#include "GEOM_Displayer.h"
@ -313,10 +314,18 @@ void GEOMToolsGUI::OnEditDelete()
return;
}
// VSR 17/11/04: check if all objects selected belong to GEOM component <-- finish
QString aNameList;
int nbSel = selected.Extent();
for ( SALOME_ListIteratorOfListIO It( selected ); It.More(); It.Next() )
{
Handle(SALOME_InteractiveObject) io = It.Value();
aNameList.append("\n - ");
aNameList.append(io->getName());
}
if ( SUIT_MessageBox::warn2( app->desktop(),
QObject::tr( "GEOM_WRN_WARNING" ),
QObject::tr( "GEOM_REALLY_DELETE" ),
QObject::tr( "GEOM_REALLY_DELETE" ).arg( nbSel ).arg( aNameList ),
QObject::tr( "GEOM_BUT_YES" ),
QObject::tr( "GEOM_BUT_NO" ), 1, 0, 0 ) != 1 )
return;

View File

@ -349,6 +349,39 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePrismVecH2Ways
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
(GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
if (theBase == NULL || theVec == NULL) return aGEOMObject._retn();
//Get the reference objects
Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
(theBase->GetStudyID(), theBase->GetEntry());
Handle(GEOM_Object) aVec = GetOperations()->GetEngine()->GetObject
(theVec->GetStudyID(), theVec->GetEntry());
if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
//Create the Prism
Handle(GEOM_Object) anObject =
GetOperations()->MakePrismVecH2Ways(aBase, aVec, theH);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePrismTwoPnt
@ -387,6 +420,44 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePrismTwoPnt2Ways
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
(GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
if (theBase == NULL || thePoint1 == NULL || thePoint2 == NULL)
return aGEOMObject._retn();
//Get the reference objects
Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
(theBase->GetStudyID(), theBase->GetEntry());
Handle(GEOM_Object) aPoint1 = GetOperations()->GetEngine()->GetObject
(thePoint1->GetStudyID(), thePoint1->GetEntry());
Handle(GEOM_Object) aPoint2 = GetOperations()->GetEngine()->GetObject
(thePoint2->GetStudyID(), thePoint2->GetEntry());
if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
return aGEOMObject._retn();
//Create the Prism
Handle(GEOM_Object) anObject =
GetOperations()->MakePrismTwoPnt2Ways(aBase, aPoint1, aPoint2);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePipe
@ -452,6 +523,39 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle
return GetObject(anObject);
}
//=============================================================================
/*!
* MakeRevolutionAxisAngle2Ways
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
(GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
if (theBase == NULL || theAxis == NULL) return aGEOMObject._retn();
//Get the reference objects
Handle(GEOM_Object) aBase = GetOperations()->GetEngine()->GetObject
(theBase->GetStudyID(), theBase->GetEntry());
Handle(GEOM_Object) anAxis = GetOperations()->GetEngine()->GetObject
(theAxis->GetStudyID(), theAxis->GetEntry());
if (aBase.IsNull() || anAxis.IsNull()) return aGEOMObject._retn();
//Create the Revolution
Handle(GEOM_Object) anObject =
GetOperations()->MakeRevolutionAxisAngle2Ways(aBase, anAxis, theAngle);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MakeFilling

View File

@ -81,10 +81,18 @@ class GEOM_I3DPrimOperations_i :
GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH);
GEOM::GEOM_Object_ptr MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH);
GEOM::GEOM_Object_ptr MakePrismTwoPnt (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePath);
@ -92,6 +100,10 @@ class GEOM_I3DPrimOperations_i :
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MakeFilling(GEOM::GEOM_Object_ptr theShape, CORBA::Long theMinDeg, CORBA::Long theMaxDeg, CORBA::Double theTol2D, CORBA::Double theTol3D, CORBA::Long theNbIter);
GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections,

View File

@ -105,6 +105,39 @@ GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePointWithReference
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePointOnLinesIntersection
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakePointOnLinesIntersection
(GEOM::GEOM_Object_ptr theLine1, GEOM::GEOM_Object_ptr theLine2)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
if (theLine1 == NULL || theLine2 == NULL) return aGEOMObject._retn();
//Get the reference Lines
Handle(GEOM_Object) aRef1 = GetOperations()->GetEngine()->GetObject
(theLine1->GetStudyID(), theLine1->GetEntry());
Handle(GEOM_Object) aRef2 = GetOperations()->GetEngine()->GetObject
(theLine2->GetStudyID(), theLine2->GetEntry());
if (aRef1.IsNull() || aRef2.IsNull()) return aGEOMObject._retn();
//Create the point
Handle(GEOM_Object) anObject =
GetOperations()->MakePointOnLinesIntersection(aRef1, aRef2);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!
* MakePointOnCurve
@ -290,6 +323,38 @@ GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakeLineTwoPnt
return GetObject(anObject);
}
//=============================================================================
/*!
* MakeLineTwoFaces
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IBasicOperations_i::MakeLineTwoFaces
(GEOM::GEOM_Object_ptr theFace1, GEOM::GEOM_Object_ptr theFace2)
{
GEOM::GEOM_Object_var aGEOMObject;
//Set a not done flag
GetOperations()->SetNotDone();
if (theFace1 == NULL || theFace2 == NULL) return aGEOMObject._retn();
//Get the reference points
Handle(GEOM_Object) aRef1 = GetOperations()->GetEngine()->GetObject
(theFace1->GetStudyID(), theFace1->GetEntry());
Handle(GEOM_Object) aRef2 = GetOperations()->GetEngine()->GetObject
(theFace2->GetStudyID(), theFace2->GetEntry());
if (aRef1.IsNull() || aRef2.IsNull()) return aGEOMObject._retn();
//Create the Line
Handle(GEOM_Object) anObject =
GetOperations()->MakeLineTwoFaces(aRef1, aRef2);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
return GetObject(anObject);
}
//=============================================================================
/*!

View File

@ -52,6 +52,9 @@ class GEOM_IBasicOperations_i :
GEOM::GEOM_Object_ptr MakePointOnCurve (GEOM::GEOM_Object_ptr theCurve,
CORBA::Double theParameter);
GEOM::GEOM_Object_ptr MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theLine1,
GEOM::GEOM_Object_ptr theLine2);
GEOM::GEOM_Object_ptr MakeTangentOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
CORBA::Double theParameter);
@ -68,6 +71,9 @@ class GEOM_IBasicOperations_i :
GEOM::GEOM_Object_ptr MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2);
GEOM::GEOM_Object_ptr MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
GEOM::GEOM_Object_ptr theFace2);
GEOM::GEOM_Object_ptr MakePlaneThreePnt (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2,
GEOM::GEOM_Object_ptr thePnt3,

View File

@ -545,6 +545,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointOnCurve (GEOM::GEOM_Object_ptr the
return anObj;
}
//=============================================================================
// MakePointOnLinesIntersection:
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theRefLine1,
GEOM::GEOM_Object_ptr theRefLine2)
{
beginService( " GEOM_Superv_i::MakePointOnLinesIntersection" );
MESSAGE("GEOM_Superv_i::MakePointOnLinesIntersection");
getBasicOp();
GEOM::GEOM_Object_ptr anObj = myBasicOp->MakePointOnLinesIntersection(theRefLine1, theRefLine2);
endService( " GEOM_Superv_i::MakePointOnLinesIntersection" );
return anObj;
}
//=============================================================================
// MakeTangentOnCurve:
//=============================================================================
@ -602,6 +616,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePn
return anObj;
}
//=============================================================================
// MakeLineTwoFaces:
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
GEOM::GEOM_Object_ptr theFace2)
{
beginService( " GEOM_Superv_i::MakeLineTwoFaces");
MESSAGE("GEOM_Superv_i::MakeLineTwoFaces");
getBasicOp();
GEOM::GEOM_Object_ptr anObj = myBasicOp->MakeLineTwoFaces(theFace1, theFace2);
endService( " GEOM_Superv_i::MakeLineTwoFaces");
return anObj;
}
//=============================================================================
// MakePlaneThreePnt:
//=============================================================================
@ -880,6 +908,20 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismVecH (GEOM::GEOM_Object_ptr theBas
return anObj;
}
//=============================================================================
// MakePrismVecH2Ways:
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH)
{
beginService( " GEOM_Superv_i::MakePrismVecH2Ways" );
MESSAGE("GEOM_Superv_i::MakePrismVecH2Ways");
get3DPrimOp();
GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismVecH2Ways(theBase, theVec, theH);
endService( " GEOM_Superv_i::MakePrismVecH2Ways" );
return anObj;
}
//=============================================================================
// MakePrismTwoPnt:
@ -896,6 +938,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt (GEOM::GEOM_Object_ptr theB
return anObj;
}
//=============================================================================
// MakePrismTwoPnt2Ways:
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2)
{
beginService( " GEOM_Superv_i::MakePrismTwoPnt2Ways" );
MESSAGE("GEOM_Superv_i::MakePrismTwoPnt2Ways");
get3DPrimOp();
GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakePrismTwoPnt2Ways(theBase, thePoint1, thePoint2);
endService( " GEOM_Superv_i::MakePrismTwoPnt2Ways" );
return anObj;
}
//=============================================================================
// MakePipe:
//=============================================================================
@ -925,6 +982,21 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeRevolutionAxisAngle (GEOM::GEOM_Object_
return anObj;
}
//=============================================================================
// MakeRevolutionAxisAngle:
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle)
{
beginService( " GEOM_Superv_i::MakeRevolutionAxisAngle2Ways" );
MESSAGE("GEOM_Superv_i::MakeRevolutionAxisAngle2Ways");
get3DPrimOp();
GEOM::GEOM_Object_ptr anObj = my3DPrimOp->MakeRevolutionAxisAngle2Ways(theBase, theAxis, theAngle);
endService( " GEOM_Superv_i::MakeRevolutionAxisAngle2Ways" );
return anObj;
}
//=============================================================================
// MakeFilling:
//=============================================================================

View File

@ -142,6 +142,8 @@ public:
CORBA::Double theZ);
GEOM::GEOM_Object_ptr MakePointOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
CORBA::Double theParameter);
GEOM::GEOM_Object_ptr MakePointOnLinesIntersection (GEOM::GEOM_Object_ptr theRefLine1,
GEOM::GEOM_Object_ptr theRefLine2);
GEOM::GEOM_Object_ptr MakeTangentOnCurve (GEOM::GEOM_Object_ptr theRefCurve,
CORBA::Double theParameter);
GEOM::GEOM_Object_ptr MakeVectorDXDYDZ (CORBA::Double theDX,
@ -151,6 +153,8 @@ public:
GEOM::GEOM_Object_ptr thePnt2);
GEOM::GEOM_Object_ptr MakeLineTwoPnt (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2);
GEOM::GEOM_Object_ptr MakeLineTwoFaces (GEOM::GEOM_Object_ptr theFace1,
GEOM::GEOM_Object_ptr theFace2);
GEOM::GEOM_Object_ptr MakePlaneThreePnt (GEOM::GEOM_Object_ptr thePnt1,
GEOM::GEOM_Object_ptr thePnt2,
GEOM::GEOM_Object_ptr thePnt3,
@ -213,14 +217,23 @@ public:
GEOM::GEOM_Object_ptr MakePrismVecH (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH);
GEOM::GEOM_Object_ptr MakePrismVecH2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theVec,
CORBA::Double theH);
GEOM::GEOM_Object_ptr MakePrismTwoPnt (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr MakePrismTwoPnt2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePoint1,
GEOM::GEOM_Object_ptr thePoint2);
GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr thePath);
GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MakeRevolutionAxisAngle2Ways (GEOM::GEOM_Object_ptr theBase,
GEOM::GEOM_Object_ptr theAxis,
CORBA::Double theAngle);
GEOM::GEOM_Object_ptr MakeFilling (GEOM::GEOM_Object_ptr theShape,
CORBA::Long theMinDeg, CORBA::Long theMaxDeg,
CORBA::Double theTol2D, CORBA::Double theTol3D,

View File

@ -394,12 +394,24 @@ def MakePrism(baseShape,point1,point2):
print "MakePrismTwoPnt : ", PrimOp.GetErrorCode()
return anObj
def MakePrism2Ways(baseShape,point1,point2):
anObj = PrimOp.MakePrismTwoPnt2Ways(baseShape,point1,point2)
if PrimOp.IsDone() == 0:
print "MakePrismTwoPnt2Ways : ", PrimOp.GetErrorCode()
return anObj
def MakePrismVecH(baseShape,vector,height):
anObj = PrimOp.MakePrismVecH(baseShape,vector,height)
if PrimOp.IsDone() == 0:
print "MakePrismVecH : ", PrimOp.GetErrorCode()
return anObj
def MakePrismVecH2Ways(baseShape,vector,height):
anObj = PrimOp.MakePrismVecH2Ways(baseShape,vector,height)
if PrimOp.IsDone() == 0:
print "MakePrismVecH2Ways : ", PrimOp.GetErrorCode()
return anObj
def MakePipe(baseShape,pathShape):
anObj = PrimOp.MakePipe(baseShape,pathShape)
if PrimOp.IsDone() == 0:
@ -412,6 +424,12 @@ def MakeRevolution(aShape,axis,angle):
print "MakeRevolutionAxisAngle : ", PrimOp.GetErrorCode()
return anObj
def MakeRevolution2Ways(aShape,axis,angle):
anObj = PrimOp.MakeRevolutionAxisAngle2Ways(aShape,axis,angle)
if PrimOp.IsDone() == 0:
print "MakeRevolutionAxisAngle2Ways : ", PrimOp.GetErrorCode()
return anObj
# -----------------------------------------------------------------------------
# Create base shapes
# -----------------------------------------------------------------------------

View File

@ -667,6 +667,11 @@ def MakePrism(theBase, thePoint1, thePoint2):
anObj = PrimOp.MakePrismTwoPnt(theBase, thePoint1, thePoint2)
RaiseIfFailed("MakePrismTwoPnt", PrimOp)
return anObj
## The same prism but in two directions forward&backward.
def MakePrism2Ways(theBase, thePoint1, thePoint2):
anObj = PrimOp.MakePrismTwoPnt2Ways(theBase, thePoint1, thePoint2)
RaiseIfFailed("MakePrismTwoPnt2Ways", PrimOp)
return anObj
## Create a shape by extrusion of the base shape along the vector,
# i.e. all the space, transfixed by the base shape during its translation
@ -682,6 +687,20 @@ def MakePrismVecH(theBase, theVec, theH):
RaiseIfFailed("MakePrismVecH", PrimOp)
return anObj
## Create a shape by extrusion of the base shape along the vector,
# i.e. all the space, transfixed by the base shape during its translation
# along the vector on the given distance in 2 Ways (forward/backward) .
# @param theBase Base shape to be extruded.
# @param theVec Direction of extrusion.
# @param theH Prism dimension along theVec in forward direction.
# @return New GEOM_Object, containing the created prism.
#
# Example: see GEOM_TestAll.py
def MakePrismVecH2Ways(theBase, theVec, theH):
anObj = PrimOp.MakePrismVecH2Ways(theBase, theVec, theH)
RaiseIfFailed("MakePrismVecH2Ways", PrimOp)
return anObj
## Create a shape by extrusion of the base shape along
# the path shape. The path shape can be a wire or an edge.
# @param theBase Base shape to be extruded.
@ -707,6 +726,11 @@ def MakeRevolution(theBase, theAxis, theAngle):
anObj = PrimOp.MakeRevolutionAxisAngle(theBase, theAxis, theAngle)
RaiseIfFailed("MakeRevolutionAxisAngle", PrimOp)
return anObj
## The Same Revolution but in both ways forward&backward.
def MakeRevolution2Ways(theBase, theAxis, theAngle):
anObj = PrimOp.MakeRevolutionAxisAngle2Ways(theBase, theAxis, theAngle)
RaiseIfFailed("MakeRevolutionAxisAngle2Ways", PrimOp)
return anObj
## Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
# @param theSeqSections - set of specified sections.

View File

@ -66,9 +66,9 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
RadioButton3->close(TRUE);
RadioButton1->setChecked(true);
myBothway = myBothway2 = false;
GroupPoints = new DlgRef_2Sel1Spin2Check(this, "GroupPoints");
GroupPoints->CheckButton1->hide();
GroupPoints->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV"));
GroupPoints->TextLabel1->setText(tr("GEOM_BASE"));
GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR"));
@ -77,9 +77,11 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
GroupPoints->PushButton2->setPixmap(image1);
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints->LineEdit2->setReadOnly( true );
GroupPoints->CheckButton1->setText(tr("GEOM_BOTHWAY"));
GroupPoints->CheckButton1->setChecked(myBothway);
GroupPoints->CheckButton2->setText(tr("GEOM_REVERSE"));
GroupPoints2 = new DlgRef_3Sel_QTD(this, "GroupPoints2");
GroupPoints2 = new DlgRef_3Sel1Check_QTD(this, "GroupPoints2");
GroupPoints2->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV_2P"));
GroupPoints2->TextLabel1->setText(tr("GEOM_BASE"));
GroupPoints2->TextLabel2->setText(tr("GEOM_POINT_I").arg("1"));
@ -87,6 +89,8 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg(GeometryGUI* theGeometryGUI, QWid
GroupPoints2->PushButton1->setPixmap(image1);
GroupPoints2->PushButton2->setPixmap(image1);
GroupPoints2->PushButton3->setPixmap(image1);
GroupPoints2->CheckButton1->setText(tr("GEOM_BOTHWAY"));
GroupPoints2->CheckButton1->setChecked(myBothway2);
Layout1->addWidget(GroupPoints, 2, 0);
Layout1->addWidget(GroupPoints2, 2, 0);
@ -150,12 +154,13 @@ void GenerationGUI_PrismDlg::Init()
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)),
GroupPoints->SpinBox_DX, SLOT(SetStep(double)));
connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(onReverse()));
connect(GroupPoints2->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints2->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints2->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(GroupPoints2->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway2()));
connect(GroupPoints2->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupPoints2->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
@ -432,7 +437,7 @@ void GenerationGUI_PrismDlg::ValueChangedInSpinBox()
//=================================================================================
double GenerationGUI_PrismDlg::getHeight() const
{
return GroupPoints->SpinBox_DX->GetValue();
return GroupPoints->SpinBox_DX->GetValue();
}
//=================================================================================
@ -451,11 +456,9 @@ GEOM::GEOM_IOperations_ptr GenerationGUI_PrismDlg::createOperation()
bool GenerationGUI_PrismDlg::isValid( QString& )
{
if (getConstructorId() == 0)
// by vector and height
return (myOkBase && myOkVec);
// by two points
return (myOkBase && myOkPnt1 && myOkPnt2);
return (myOkBase && myOkVec); // by vector and height
else
return (myOkBase && myOkPnt1 && myOkPnt2); // by two points
}
//=================================================================================
@ -470,14 +473,22 @@ bool GenerationGUI_PrismDlg::execute( ObjectList& objects )
{
case 0:
{
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
MakePrismVecH(myBase, myVec, getHeight());
if (!myBothway)
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
MakePrismVecH(myBase, myVec, getHeight());
else
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
MakePrismVecH2Ways(myBase, myVec, ( fabs(getHeight()) ) );
break;
}
case 1:
{
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
if (!myBothway2)
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
MakePrismTwoPnt(myBase, myPoint1, myPoint2);
else
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(getOperation())->
MakePrismTwoPnt2Ways(myBase, myPoint1, myPoint2);
break;
}
}
@ -497,3 +508,22 @@ void GenerationGUI_PrismDlg::onReverse()
double anOldValue = GroupPoints->SpinBox_DX->GetValue();
GroupPoints->SpinBox_DX->SetValue( -anOldValue );
}
//=================================================================================
// function : onBothway()
// purpose :
//=================================================================================
void GenerationGUI_PrismDlg::onBothway()
{
bool anOldValue = myBothway;
myBothway = !anOldValue;
GroupPoints->CheckButton2->setEnabled(!myBothway);
displayPreview();
}
void GenerationGUI_PrismDlg::onBothway2()
{
bool anOldValue = myBothway2;
myBothway2 = !anOldValue;
displayPreview();
}

View File

@ -30,7 +30,7 @@
#include "GEOMBase_Skeleton.h"
#include "DlgRef_2Sel1Spin2Check.h"
#include "DlgRef_3Sel_QTD.h"
#include "DlgRef_3Sel1Check_QTD.h"
//=================================================================================
// class : GenerationGUI_PrismDlg
@ -64,9 +64,11 @@ private:
bool myOkVec;
bool myOkPnt1;
bool myOkPnt2;
bool myBothway;
bool myBothway2;
DlgRef_2Sel1Spin2Check* GroupPoints;
DlgRef_3Sel_QTD* GroupPoints2; // for second layout for extrusion using 2 points
DlgRef_3Sel1Check_QTD* GroupPoints2; // for second layout for extrusion using 2 points
private slots:
void ClickOnOk();
@ -79,6 +81,8 @@ private slots:
void SetEditCurrentArgument();
void ValueChangedInSpinBox();
void onReverse();
void onBothway();
void onBothway2();
};
#endif // DIALOGBOX_PRISM_H

View File

@ -66,9 +66,9 @@ GenerationGUI_RevolDlg::GenerationGUI_RevolDlg(GeometryGUI* theGeometryGUI, QWid
RadioButton1->setPixmap(image0);
RadioButton2->close(TRUE);
RadioButton3->close(TRUE);
myBothway = false;
GroupPoints = new DlgRef_2Sel1Spin2Check(this, "GroupPoints");
GroupPoints->CheckButton1->hide();
GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
GroupPoints->TextLabel1->setText(tr("GEOM_OBJECT"));
GroupPoints->TextLabel2->setText(tr("GEOM_AXIS"));
@ -77,6 +77,7 @@ GenerationGUI_RevolDlg::GenerationGUI_RevolDlg(GeometryGUI* theGeometryGUI, QWid
GroupPoints->PushButton2->setPixmap(image1);
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints->LineEdit2->setReadOnly( true );
GroupPoints->CheckButton1->setText(tr("GEOM_BOTHWAY"));
GroupPoints->CheckButton2->setText(tr("GEOM_REVERSE"));
Layout1->addWidget(GroupPoints, 2, 0);
@ -128,6 +129,7 @@ void GenerationGUI_RevolDlg::Init()
connect(GroupPoints->LineEdit2, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(onReverse()));
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), GroupPoints->SpinBox_DX, SLOT(SetStep(double)));
@ -345,8 +347,12 @@ bool GenerationGUI_RevolDlg::execute( ObjectList& objects )
{
GEOM::GEOM_Object_var anObj;
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
getOperation() )->MakeRevolutionAxisAngle( myBase, myAxis, getAngle() * PI180 );
if (!myBothway)
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
getOperation() )->MakeRevolutionAxisAngle( myBase, myAxis, getAngle() * PI180 );
else
anObj = GEOM::GEOM_I3DPrimOperations::_narrow(
getOperation() )->MakeRevolutionAxisAngle2Ways( myBase, myAxis, getAngle() * PI180 );
if ( !anObj->_is_nil() )
objects.push_back( anObj._retn() );
@ -364,3 +370,15 @@ void GenerationGUI_RevolDlg::onReverse()
double anOldValue = GroupPoints->SpinBox_DX->GetValue();
GroupPoints->SpinBox_DX->SetValue( -anOldValue );
}
//=================================================================================
// function : onBothway()
// purpose :
//=================================================================================
void GenerationGUI_RevolDlg::onBothway()
{
bool anOldValue = myBothway;
myBothway = !anOldValue;
GroupPoints->CheckButton2->setEnabled(!myBothway);
displayPreview();
}

View File

@ -61,6 +61,7 @@ private :
GEOM::GEOM_Object_var myAxis; /* Axis of the revolution */
bool myOkBase;
bool myOkAxis;
bool myBothway;
DlgRef_2Sel1Spin2Check* GroupPoints;
@ -73,6 +74,7 @@ private slots:
void SetEditCurrentArgument();
void ValueChangedInSpinBox();
void onReverse();
void onBothway();
};
#endif // DIALOGBOX_REVOLUTION_H

View File

@ -181,6 +181,12 @@ void GroupGUI_GroupDlg::Init()
connect( myIdList, SIGNAL( selectionChanged() ), this, SLOT( selectionChanged() ) );
activateSelection();
// activate subshapes selection if Main Shape is Selected
if ( !CORBA::is_nil( myMainObj ) ) {
myEditCurrentArgument = 0;
activateSelection();
updateState();
}
}
//=================================================================================
@ -296,7 +302,10 @@ void GroupGUI_GroupDlg::SelectionIntoArgument()
if ( aResult && !anObj->_is_nil() && GEOMBase::IsShape( anObj ) ) {
myMainObj = anObj;
myEditCurrentArgument->setText( GEOMBase::GetName( anObj ) );
updateState();
// activate subshapes selection by default
myEditCurrentArgument = 0;
activateSelection();
updateState();
return;
}
}
@ -654,7 +663,6 @@ void GroupGUI_GroupDlg::updateState()
break;
}
}
if ( !isAdd ) {
aMapIndex.Clear();
break;