mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-27 15:40:32 +05:00
EDF 2281 : Second constructor and final documentation for the divided disk
This commit is contained in:
parent
91343094ce
commit
449a8ffa1a
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 16 KiB |
BIN
doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png
Normal file
BIN
doc/salome/gui/GEOM/images/divided_disk_PntVecR_dlg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 23 KiB |
BIN
doc/salome/gui/GEOM/images/divided_disk_dlg.png
Normal file
BIN
doc/salome/gui/GEOM/images/divided_disk_dlg.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
@ -2,29 +2,46 @@
|
|||||||
|
|
||||||
\page create_divideddisk_page DividedDisk
|
\page create_divideddisk_page DividedDisk
|
||||||
|
|
||||||
The <b>Divided disk</b> object is a disk divided into \b blocks. It means that it's a shape ready to be meshed with ruled hexaedra.
|
The <b>Divided disk</b> object is a disk divided into \b blocks. It means that it's a shape <b>prepared for hexaedral meshing</b>.
|
||||||
Moreover this shape can be used as a basis in an \ref create_extrusion_alongpath_page "Extrusion along a path operation" in order to obtain any tube shape prepared for hexaedral mesh
|
|
||||||
|
\n Moreover this shape can be used as a basis in an \ref create_extrusion_alongpath_page "Extrusion along a path" operation in order to obtain any <b>tube shape</b> prepared for hexaedral meshing
|
||||||
(see example below).
|
(see example below).
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
|
|
||||||
\image html divided_disk.png
|
\image html divided_disk.png
|
||||||
|
|
||||||
To create a \b DividedDisk in the <b>Main Menu</b> select <b>New Entity - >
|
To create a <b> Divided Disk </b> in the <b>Main Menu</b> select <b>New Entity - >
|
||||||
Advanced - > DividedDisk </b>
|
Advanced - > DividedDisk </b>
|
||||||
|
|
||||||
|
\n Then there are 2 ways to create a <b> Divided Disk</b> in 3D space.
|
||||||
|
\n For both operations :
|
||||||
Specify the parameters of the DividedDisk object creation in the opened dialog
|
Specify the parameters of the DividedDisk object creation in the opened dialog
|
||||||
box and press "Apply" or "Apply & Close" button.
|
box and press "Apply" or "Apply & Close" button.
|
||||||
Result of each operation will be a GEOM_Object.
|
Result of each operation will be a GEOM_Object.
|
||||||
|
|
||||||
<b>TUI Command:</b> <em>geompy.MakeDividedDisk(R, Orientation)</em>
|
\n First way : by radius and orientation (plane "OXY", "OYZ" or "OZX"). The resulting disk is located at the origin of coordinates
|
||||||
|
|
||||||
|
<b>TUI Command:</b> <em>geompy.MakeDividedDisk(Radius, Orientation)</em>
|
||||||
|
|
||||||
<b>Arguments:</b>
|
<b>Arguments:</b>
|
||||||
- \b R - Radius of the disk
|
- \b Radius - Radius of the disk
|
||||||
- \b Orientation - Plane on wich the disk will be built
|
- \b Orientation - Plane on wich the disk will be built
|
||||||
|
|
||||||
\image html divided_disk_dlg.png
|
\image html divided_disk_dlg.png
|
||||||
|
|
||||||
|
\n Second way : by giving its center, normal and radius.
|
||||||
|
|
||||||
|
<b>TUI Command:</b> <em>geompy.MakeDividedDiskPntVecR(Center, Vector,
|
||||||
|
Radius)</em>
|
||||||
|
|
||||||
|
<b>Arguments:</b>
|
||||||
|
- \b Center - Center of the disk
|
||||||
|
- \b Vector - Normal to the plane of the disk
|
||||||
|
- \b Radius - Radius of the disk
|
||||||
|
|
||||||
|
\image html divided_disk_PntVecR_dlg.png
|
||||||
|
|
||||||
Our <b>TUI Scripts</b> provide you with useful examples of creation of
|
Our <b>TUI Scripts</b> provide you with useful examples of creation of
|
||||||
\ref tui_creation_divideddisk "Advanced objects".
|
\ref tui_creation_divideddisk "Advanced objects".
|
||||||
|
|
||||||
|
@ -3763,10 +3763,24 @@ module GEOM
|
|||||||
* can be use to create divided pipes for later meshing in hexaedra.
|
* can be use to create divided pipes for later meshing in hexaedra.
|
||||||
* \param theR Radius of the disk
|
* \param theR Radius of the disk
|
||||||
* \param theRatio Relative size of the central square diagonal against the disk diameter
|
* \param theRatio Relative size of the central square diagonal against the disk diameter
|
||||||
|
* \param theOrientation Plane on which the disk will be built
|
||||||
* \return New GEOM_Object, containing the created shape.
|
* \return New GEOM_Object, containing the created shape.
|
||||||
*/
|
*/
|
||||||
GEOM_Object MakeDividedDisk (in double theR, in double theRatio, in short theOrientation);
|
GEOM_Object MakeDividedDisk (in double theR, in double theRatio, in short theOrientation);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Create a Disk prepared for hexa meshing with given center, normal vector and radius.
|
||||||
|
* \param thePnt disk center.
|
||||||
|
* \param theVec Vector, normal to the plane of the disk.
|
||||||
|
* \param theR Disk radius.
|
||||||
|
* \param theRatio Relative size of the central square diagonal against the disk diameter
|
||||||
|
* \return New GEOM_Object, containing the created disk.
|
||||||
|
*/
|
||||||
|
GEOM_Object MakeDividedDiskPntVecR ( in GEOM_Object thePnt,
|
||||||
|
in GEOM_Object theVec,
|
||||||
|
in double theR,
|
||||||
|
in double theRatio);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Builds a cylinder prepared for hexa meshes
|
* Builds a cylinder prepared for hexa meshes
|
||||||
* \param theR Radius of the cylinder
|
* \param theR Radius of the cylinder
|
||||||
|
@ -45,16 +45,19 @@
|
|||||||
AdvancedGUI_DividedDiskDlg::AdvancedGUI_DividedDiskDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
|
AdvancedGUI_DividedDiskDlg::AdvancedGUI_DividedDiskDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
|
||||||
: GEOMBase_Skeleton(theGeometryGUI, parent, false)
|
: GEOMBase_Skeleton(theGeometryGUI, parent, false)
|
||||||
{
|
{
|
||||||
QPixmap imageOp (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_DIVIDEDDISK_R_RATIO")));
|
// QPixmap imageOp (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_DIVIDEDDISK_R_RATIO")));
|
||||||
|
QPixmap imageOp1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_DISK_R")));
|
||||||
|
QPixmap imageOp2 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_DISK_PNT_VEC_R")));
|
||||||
QPixmap imageSel (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
|
QPixmap imageSel (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
|
||||||
|
|
||||||
setWindowTitle(tr("GEOM_DIVIDEDDISK_TITLE"));
|
setWindowTitle(tr("GEOM_DIVIDEDDISK_TITLE"));
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
mainFrame()->GroupConstructors->setTitle(tr("GEOM_DIVIDEDDISK"));
|
mainFrame()->GroupConstructors->setTitle(tr("GEOM_DIVIDEDDISK"));
|
||||||
mainFrame()->RadioButton1->setIcon(imageOp);
|
mainFrame()->RadioButton1->setIcon(imageOp1);
|
||||||
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
mainFrame()->RadioButton2->setIcon(imageOp2);
|
||||||
mainFrame()->RadioButton2->close();
|
// mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
|
// mainFrame()->RadioButton2->close();
|
||||||
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
||||||
mainFrame()->RadioButton3->close();
|
mainFrame()->RadioButton3->close();
|
||||||
|
|
||||||
@ -67,12 +70,23 @@ AdvancedGUI_DividedDiskDlg::AdvancedGUI_DividedDiskDlg (GeometryGUI* theGeometry
|
|||||||
GroupOrientation->RadioButton1->setText(tr("GEOM_WPLANE_OXY"));
|
GroupOrientation->RadioButton1->setText(tr("GEOM_WPLANE_OXY"));
|
||||||
GroupOrientation->RadioButton2->setText(tr("GEOM_WPLANE_OYZ"));
|
GroupOrientation->RadioButton2->setText(tr("GEOM_WPLANE_OYZ"));
|
||||||
GroupOrientation->RadioButton3->setText(tr("GEOM_WPLANE_OZX"));
|
GroupOrientation->RadioButton3->setText(tr("GEOM_WPLANE_OZX"));
|
||||||
|
|
||||||
|
GroupPntVecR = new DlgRef_2Sel1Spin(centralWidget());
|
||||||
|
GroupPntVecR->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
|
||||||
|
GroupPntVecR->TextLabel1->setText(tr("GEOM_CENTER_POINT"));
|
||||||
|
GroupPntVecR->TextLabel2->setText(tr("GEOM_VECTOR"));
|
||||||
|
GroupPntVecR->TextLabel3->setText(tr("GEOM_RADIUS"));
|
||||||
|
GroupPntVecR->PushButton1->setIcon(imageSel);
|
||||||
|
GroupPntVecR->PushButton2->setIcon(imageSel);
|
||||||
|
GroupPntVecR->LineEdit1->setReadOnly(true);
|
||||||
|
GroupPntVecR->LineEdit2->setReadOnly(true);
|
||||||
//@@ setup dialog box layout here @@//
|
//@@ setup dialog box layout here @@//
|
||||||
|
|
||||||
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
|
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
|
||||||
layout->setMargin(0); layout->setSpacing(6);
|
layout->setMargin(0); layout->setSpacing(6);
|
||||||
layout->addWidget(GroupParams);
|
layout->addWidget(GroupParams);
|
||||||
layout->addWidget(GroupOrientation);
|
layout->addWidget(GroupOrientation);
|
||||||
|
layout->addWidget(GroupPntVecR);
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
setHelpFileName("create_divideddisk_page.html");
|
setHelpFileName("create_divideddisk_page.html");
|
||||||
@ -100,7 +114,8 @@ void AdvancedGUI_DividedDiskDlg::Init()
|
|||||||
|
|
||||||
// min, max, step and decimals for spin boxes & initial values
|
// min, max, step and decimals for spin boxes & initial values
|
||||||
initSpinBox(GroupParams->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" );
|
initSpinBox(GroupParams->SpinBox_DX, 0.00001, COORD_MAX, step, "length_precision" );
|
||||||
GroupParams->SpinBox_DX->setValue(100);
|
GroupParams ->SpinBox_DX->setValue(100);
|
||||||
|
GroupPntVecR->SpinBox_DX->setValue(100);
|
||||||
|
|
||||||
GroupOrientation->RadioButton1->setChecked(true);
|
GroupOrientation->RadioButton1->setChecked(true);
|
||||||
myOrientation = 1;
|
myOrientation = 1;
|
||||||
@ -110,17 +125,22 @@ void AdvancedGUI_DividedDiskDlg::Init()
|
|||||||
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||||
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)),
|
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)),
|
||||||
this, SLOT(SetDoubleSpinBoxStep(double)));
|
this, SLOT(SetDoubleSpinBoxStep(double)));
|
||||||
|
|
||||||
connect(GroupParams->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
|
||||||
|
|
||||||
connect(GroupOrientation->RadioButton1, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
|
||||||
connect(GroupOrientation->RadioButton2, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
|
||||||
connect(GroupOrientation->RadioButton3, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
connect(GroupPntVecR->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||||
|
connect(GroupPntVecR->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||||
|
|
||||||
|
connect(GroupParams->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||||
|
connect(GroupPntVecR->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||||
|
|
||||||
|
connect(GroupOrientation->RadioButton1, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
||||||
|
connect(GroupOrientation->RadioButton2, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
||||||
|
connect(GroupOrientation->RadioButton3, SIGNAL(clicked()), this, SLOT(RadioButtonClicked()));
|
||||||
|
|
||||||
initName(tr("GEOM_DIVIDEDDISK"));
|
initName(tr("GEOM_DIVIDEDDISK"));
|
||||||
|
|
||||||
resize(minimumSizeHint());
|
ConstructorsClicked(0);
|
||||||
displayPreview(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -132,6 +152,60 @@ void AdvancedGUI_DividedDiskDlg::SetDoubleSpinBoxStep (double step)
|
|||||||
//@@ set double spin box step for all spin boxes here @@//
|
//@@ set double spin box step for all spin boxes here @@//
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ConstructorsClicked()
|
||||||
|
// purpose : Radio button management
|
||||||
|
//=================================================================================
|
||||||
|
void AdvancedGUI_DividedDiskDlg::ConstructorsClicked (int constructorId)
|
||||||
|
{
|
||||||
|
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||||
|
|
||||||
|
switch (constructorId) {
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
GroupPntVecR->hide();
|
||||||
|
GroupParams->show();
|
||||||
|
GroupOrientation->show();
|
||||||
|
|
||||||
|
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||||
|
globalSelection(); // close local contexts, if any
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 1:
|
||||||
|
{
|
||||||
|
GroupParams->hide();
|
||||||
|
GroupOrientation->hide();
|
||||||
|
GroupPntVecR->show();
|
||||||
|
|
||||||
|
GroupPntVecR->PushButton1->click();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
qApp->processEvents();
|
||||||
|
updateGeometry();
|
||||||
|
resize(minimumSizeHint());
|
||||||
|
SelectionIntoArgument();
|
||||||
|
|
||||||
|
displayPreview(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : RadioButtonClicked()
|
||||||
|
// purpose : Radio button management
|
||||||
|
//=================================================================================
|
||||||
|
void AdvancedGUI_DividedDiskDlg::RadioButtonClicked()
|
||||||
|
{
|
||||||
|
if (GroupOrientation->RadioButton1->isChecked())
|
||||||
|
myOrientation = 1;
|
||||||
|
else if (GroupOrientation->RadioButton2->isChecked())
|
||||||
|
myOrientation = 2;
|
||||||
|
else if (GroupOrientation->RadioButton3->isChecked())
|
||||||
|
myOrientation = 3;
|
||||||
|
|
||||||
|
displayPreview(true);
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : ClickOnOk()
|
// function : ClickOnOk()
|
||||||
// purpose :
|
// purpose :
|
||||||
@ -156,6 +230,99 @@ bool AdvancedGUI_DividedDiskDlg::ClickOnApply()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SelectionIntoArgument()
|
||||||
|
// purpose : Called when selection is changed or on dialog initialization or activation
|
||||||
|
//=================================================================================
|
||||||
|
void AdvancedGUI_DividedDiskDlg::SelectionIntoArgument()
|
||||||
|
{
|
||||||
|
if (getConstructorId() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
erasePreview();
|
||||||
|
myEditCurrentArgument->setText("");
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
|
||||||
|
SALOME_ListIO aSelList;
|
||||||
|
aSelMgr->selectedObjects(aSelList);
|
||||||
|
|
||||||
|
if (aSelList.Extent() != 1) {
|
||||||
|
if (myEditCurrentArgument == GroupPntVecR->LineEdit1) myPoint.nullify();
|
||||||
|
else if (myEditCurrentArgument == GroupPntVecR->LineEdit2) myDir.nullify();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
TopAbs_ShapeEnum aNeedType = myEditCurrentArgument == GroupPntVecR->LineEdit2 ? TopAbs_EDGE : TopAbs_VERTEX;
|
||||||
|
GEOM::GeomObjPtr aSelectedObject = getSelected( aNeedType );
|
||||||
|
TopoDS_Shape aShape;
|
||||||
|
if ( aSelectedObject && GEOMBase::GetShape( aSelectedObject.get(), aShape ) && !aShape.IsNull() ){
|
||||||
|
QString aName = GEOMBase::GetName( aSelectedObject.get() );
|
||||||
|
|
||||||
|
myEditCurrentArgument->setText(aName);
|
||||||
|
|
||||||
|
// clear selection
|
||||||
|
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||||
|
myGeomGUI->getApp()->selectionMgr()->clearSelected();
|
||||||
|
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||||
|
this, SLOT(SelectionIntoArgument()));
|
||||||
|
|
||||||
|
if (myEditCurrentArgument == GroupPntVecR->LineEdit1) {
|
||||||
|
myPoint = aSelectedObject;
|
||||||
|
if (myPoint && !myDir)
|
||||||
|
GroupPntVecR->PushButton2->click();
|
||||||
|
}
|
||||||
|
else if (myEditCurrentArgument == GroupPntVecR->LineEdit2) {
|
||||||
|
myDir = aSelectedObject;
|
||||||
|
if (myDir && !myPoint)
|
||||||
|
GroupPntVecR->PushButton1->click();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayPreview(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetEditCurrentArgument()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void AdvancedGUI_DividedDiskDlg::SetEditCurrentArgument()
|
||||||
|
{
|
||||||
|
QPushButton* send = (QPushButton*)sender();
|
||||||
|
|
||||||
|
if (send == GroupPntVecR->PushButton1) {
|
||||||
|
myEditCurrentArgument = GroupPntVecR->LineEdit1;
|
||||||
|
|
||||||
|
GroupPntVecR->PushButton2->setDown(false);
|
||||||
|
GroupPntVecR->LineEdit2->setEnabled(false);
|
||||||
|
}
|
||||||
|
else if (send == GroupPntVecR->PushButton2) {
|
||||||
|
myEditCurrentArgument = GroupPntVecR->LineEdit2;
|
||||||
|
|
||||||
|
GroupPntVecR->PushButton1->setDown(false);
|
||||||
|
GroupPntVecR->LineEdit1->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||||
|
if (myEditCurrentArgument == GroupPntVecR->LineEdit2) {
|
||||||
|
globalSelection(); // close local contexts, if any
|
||||||
|
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
globalSelection(); // close local contexts, if any
|
||||||
|
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX);
|
||||||
|
}
|
||||||
|
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||||
|
this, SLOT(SelectionIntoArgument()));
|
||||||
|
|
||||||
|
// enable line edit
|
||||||
|
myEditCurrentArgument->setEnabled(true);
|
||||||
|
myEditCurrentArgument->setFocus();
|
||||||
|
// after setFocus(), because it will be setDown(false) when loses focus
|
||||||
|
send->setDown(true);
|
||||||
|
|
||||||
|
// seems we need it only to avoid preview disappearing, caused by selection mode change
|
||||||
|
displayPreview(true);
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : ActivateThisDialog()
|
// function : ActivateThisDialog()
|
||||||
// purpose :
|
// purpose :
|
||||||
@ -163,7 +330,10 @@ bool AdvancedGUI_DividedDiskDlg::ClickOnApply()
|
|||||||
void AdvancedGUI_DividedDiskDlg::ActivateThisDialog()
|
void AdvancedGUI_DividedDiskDlg::ActivateThisDialog()
|
||||||
{
|
{
|
||||||
GEOMBase_Skeleton::ActivateThisDialog();
|
GEOMBase_Skeleton::ActivateThisDialog();
|
||||||
displayPreview(true);
|
connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
|
||||||
|
this, SLOT( SelectionIntoArgument() ) );
|
||||||
|
|
||||||
|
ConstructorsClicked( getConstructorId() );
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -176,41 +346,12 @@ void AdvancedGUI_DividedDiskDlg::enterEvent (QEvent*)
|
|||||||
ActivateThisDialog();
|
ActivateThisDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
|
||||||
// function : RadioBittonClicked()
|
|
||||||
// purpose : Radio button management
|
|
||||||
//=================================================================================
|
|
||||||
void AdvancedGUI_DividedDiskDlg::RadioButtonClicked()
|
|
||||||
{
|
|
||||||
if (GroupOrientation->RadioButton1->isChecked())
|
|
||||||
myOrientation = 1;
|
|
||||||
else if (GroupOrientation->RadioButton2->isChecked())
|
|
||||||
myOrientation = 2;
|
|
||||||
else if (GroupOrientation->RadioButton3->isChecked())
|
|
||||||
myOrientation = 3;
|
|
||||||
|
|
||||||
// gp_Pnt theOrigin = gp::Origin();
|
|
||||||
// gp_Dir DirZ = gp::DZ();
|
|
||||||
// gp_Dir DirX = gp::DX();
|
|
||||||
// gp_Dir DirY = gp::DY();
|
|
||||||
//
|
|
||||||
// if (GroupOrientation->RadioButton1->isChecked())
|
|
||||||
// myWPlane = gp_Ax3(theOrigin, DirZ, DirX);
|
|
||||||
// else if (GroupOrientation->RadioButton2->isChecked())
|
|
||||||
// myWPlane = gp_Ax3(theOrigin, DirX, DirY);
|
|
||||||
// else if (GroupOrientation->RadioButton3->isChecked())
|
|
||||||
// myWPlane = gp_Ax3(theOrigin, DirY, DirZ);
|
|
||||||
|
|
||||||
displayPreview(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : ValueChangedInSpinBox()
|
// function : ValueChangedInSpinBox()
|
||||||
// purpose :
|
// purpose :
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
void AdvancedGUI_DividedDiskDlg::ValueChangedInSpinBox()
|
void AdvancedGUI_DividedDiskDlg::ValueChangedInSpinBox()
|
||||||
{
|
{
|
||||||
//@@ connect custom spin boxes or other widget to this slot in the Init() method for automatic preview update @@//
|
|
||||||
displayPreview(true);
|
displayPreview(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -247,20 +388,38 @@ bool AdvancedGUI_DividedDiskDlg::execute (ObjectList& objects)
|
|||||||
GEOM::GEOM_Object_var anObj;
|
GEOM::GEOM_Object_var anObj;
|
||||||
|
|
||||||
GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation());
|
GEOM::GEOM_IAdvancedOperations_var anOper = GEOM::GEOM_IAdvancedOperations::_narrow(getOperation());
|
||||||
|
CORBA::Double theRatio = 50;
|
||||||
|
CORBA::Double theR = 0;
|
||||||
|
|
||||||
|
switch (getConstructorId()) {
|
||||||
|
case 0:
|
||||||
|
theR = GroupParams->SpinBox_DX->value(); // init parameter value from dialog box ;
|
||||||
|
|
||||||
//@@ retrieve input values from the widgets here @@//
|
// call engine function
|
||||||
CORBA::Double theR = GroupParams->SpinBox_DX->value(); //@@ init parameter value from dialog box @@;
|
anObj = anOper->MakeDividedDisk(theR, theRatio, myOrientation);
|
||||||
CORBA::Double theRatio = 50; //@@ init parameter value from dialog box @@;
|
res = !anObj->_is_nil();
|
||||||
|
if (res && !IsPreview())
|
||||||
// call engine function
|
{
|
||||||
anObj = anOper->MakeDividedDisk(theR, theRatio, myOrientation);
|
QStringList aParameters;
|
||||||
res = !anObj->_is_nil();
|
aParameters << GroupParams->SpinBox_DX->text();
|
||||||
if (res && !IsPreview())
|
if ( aParameters.count() > 0 ) anObj->SetParameters(aParameters.join(":").toLatin1().constData());
|
||||||
{
|
}
|
||||||
QStringList aParameters;
|
break;
|
||||||
aParameters << GroupParams->SpinBox_DX->text();
|
case 1:
|
||||||
if ( aParameters.count() > 0 ) anObj->SetParameters(aParameters.join(":").toLatin1().constData());
|
theR = GroupPntVecR->SpinBox_DX->value();
|
||||||
|
|
||||||
|
// call engine function
|
||||||
|
anObj = anOper->MakeDividedDiskPntVecR(myPoint.get(), myDir.get(), theR, theRatio);
|
||||||
|
res = !anObj->_is_nil();
|
||||||
|
if (res && !IsPreview())
|
||||||
|
{
|
||||||
|
QStringList aParameters;
|
||||||
|
aParameters << GroupPntVecR->SpinBox_DX->text();
|
||||||
|
if ( aParameters.count() > 0 ) anObj->SetParameters(aParameters.join(":").toLatin1().constData());
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
objects.push_back(anObj._retn());
|
objects.push_back(anObj._retn());
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
|
|
||||||
class DlgRef_1Spin;
|
class DlgRef_1Spin;
|
||||||
class DlgRef_3Radio;
|
class DlgRef_3Radio;
|
||||||
|
class DlgRef_2Sel1Spin;
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// class : AdvancedGUI_DividedDiskDlg
|
// class : AdvancedGUI_DividedDiskDlg
|
||||||
@ -50,13 +51,18 @@ private:
|
|||||||
void enterEvent( QEvent* );
|
void enterEvent( QEvent* );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
GEOM::GeomObjPtr myPoint, myDir;
|
||||||
DlgRef_1Spin* GroupParams;
|
DlgRef_1Spin* GroupParams;
|
||||||
DlgRef_3Radio* GroupOrientation;
|
DlgRef_3Radio* GroupOrientation;
|
||||||
|
DlgRef_2Sel1Spin* GroupPntVecR;
|
||||||
int myOrientation;
|
int myOrientation;
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
void ConstructorsClicked ( int );
|
||||||
void ClickOnOk();
|
void ClickOnOk();
|
||||||
bool ClickOnApply();
|
bool ClickOnApply();
|
||||||
|
void SetEditCurrentArgument();
|
||||||
|
void SelectionIntoArgument();
|
||||||
void ActivateThisDialog();
|
void ActivateThisDialog();
|
||||||
void ValueChangedInSpinBox();
|
void ValueChangedInSpinBox();
|
||||||
void RadioButtonClicked();
|
void RadioButtonClicked();
|
||||||
|
@ -50,8 +50,9 @@
|
|||||||
#include <TFunction_Logbook.hxx>
|
#include <TFunction_Logbook.hxx>
|
||||||
#include <StdFail_NotDone.hxx>
|
#include <StdFail_NotDone.hxx>
|
||||||
|
|
||||||
#include <utilities.h>
|
#include <TopExp.hxx>
|
||||||
|
|
||||||
|
#include <utilities.h>
|
||||||
//@@ include required header files here @@//
|
//@@ include required header files here @@//
|
||||||
|
|
||||||
//=======================================================================
|
//=======================================================================
|
||||||
@ -91,17 +92,34 @@ Standard_Integer GEOMImpl_DividedDiskDriver::Execute(TFunction_Logbook& log) con
|
|||||||
double Ratio = aData.GetRatio();
|
double Ratio = aData.GetRatio();
|
||||||
|
|
||||||
// Build reference disk (in the global coordinate system)
|
// Build reference disk (in the global coordinate system)
|
||||||
TopoDS_Shell S = MakeDisk( R, Ratio );
|
TopoDS_Shell aDisk = MakeDisk( R, Ratio );
|
||||||
|
|
||||||
if (aType == DIVIDEDDISK_R_RATIO) {
|
if (aType == DIVIDEDDISK_R_RATIO)
|
||||||
|
{
|
||||||
int theOrientation = aData.GetOrientation();
|
int theOrientation = aData.GetOrientation();
|
||||||
aShape = TransformShape(S, theOrientation);
|
aShape = TransformShape(aDisk, theOrientation);
|
||||||
}
|
}
|
||||||
else if (aType == DIVIDEDDISK_R_VECTOR_PNT){
|
else if (aType == DIVIDEDDISK_R_VECTOR_PNT)
|
||||||
// other construction modes here
|
{
|
||||||
gp_Pnt P = gp::Origin();
|
Handle(GEOM_Function) aRefPoint = aData.GetCenter();
|
||||||
gp_Dir V = gp::DZ();
|
Handle(GEOM_Function) aRefVector = aData.GetVector();
|
||||||
aShape = TransformShape(S, P, V);
|
TopoDS_Shape aShapePnt = aRefPoint->GetValue();
|
||||||
|
TopoDS_Shape aShapeVec = aRefVector->GetValue();
|
||||||
|
|
||||||
|
if (aShapePnt.ShapeType() == TopAbs_VERTEX &&
|
||||||
|
aShapeVec.ShapeType() == TopAbs_EDGE)
|
||||||
|
{
|
||||||
|
gp_Pnt aPnt = BRep_Tool::Pnt(TopoDS::Vertex(aShapePnt));
|
||||||
|
TopoDS_Edge anE = TopoDS::Edge(aShapeVec);
|
||||||
|
TopoDS_Vertex V1, V2;
|
||||||
|
TopExp::Vertices(anE, V1, V2, Standard_True);
|
||||||
|
if (!V1.IsNull() && !V2.IsNull())
|
||||||
|
{
|
||||||
|
gp_Vec aVec (BRep_Tool::Pnt(V1), BRep_Tool::Pnt(V2));
|
||||||
|
gp_Dir aDir(aVec);
|
||||||
|
aShape = TransformShape(aDisk, aPnt, aDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aShape.IsNull()) return 0;
|
if (aShape.IsNull()) return 0;
|
||||||
|
@ -2290,6 +2290,69 @@ Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDisk (double theR,
|
|||||||
return aShape;
|
return aShape;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* This function allows to create a disk already divided into blocks. It can be
|
||||||
|
* used to create divided pipes for later meshing in hexaedra.
|
||||||
|
* \param theR Radius of the disk
|
||||||
|
* \param theRatio Relative size of the central square diagonal against the disk diameter
|
||||||
|
* \return New GEOM_Object, containing the created shape.
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
Handle(GEOM_Object) GEOMImpl_IAdvancedOperations::MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt,
|
||||||
|
Handle(GEOM_Object) theVec,
|
||||||
|
double theR,
|
||||||
|
double theRatio)
|
||||||
|
{
|
||||||
|
SetErrorCode(KO);
|
||||||
|
|
||||||
|
//Add a new object
|
||||||
|
Handle(GEOM_Object) aShape = GetEngine()->AddObject(GetDocID(), GEOM_DIVIDEDDISK);
|
||||||
|
|
||||||
|
//Add a new shape function with parameters
|
||||||
|
Handle(GEOM_Function) aFunction = aShape->AddFunction(GEOMImpl_DividedDiskDriver::GetID(), DIVIDEDDISK_R_VECTOR_PNT);
|
||||||
|
if (aFunction.IsNull()) return NULL;
|
||||||
|
|
||||||
|
//Check if the function is set correctly
|
||||||
|
if (aFunction->GetDriverGUID() != GEOMImpl_DividedDiskDriver::GetID()) return NULL;
|
||||||
|
|
||||||
|
GEOMImpl_IDividedDisk aData (aFunction);
|
||||||
|
|
||||||
|
Handle(GEOM_Function) aRefPnt = thePnt->GetLastFunction();
|
||||||
|
Handle(GEOM_Function) aRefVec = theVec->GetLastFunction();
|
||||||
|
|
||||||
|
if (aRefPnt.IsNull() || aRefVec.IsNull()) return NULL;
|
||||||
|
|
||||||
|
aData.SetCenter(aRefPnt);
|
||||||
|
aData.SetVector(aRefVec);
|
||||||
|
|
||||||
|
aData.SetR(theR);
|
||||||
|
aData.SetRatio(theRatio);
|
||||||
|
|
||||||
|
//Compute the resulting value
|
||||||
|
try {
|
||||||
|
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||||
|
OCC_CATCH_SIGNALS;
|
||||||
|
#endif
|
||||||
|
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||||
|
SetErrorCode("DividedDisk 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) << aShape << " = geompy.MakeDividedDiskPntVecR(" << thePnt << ", " << theVec << ", " << theR << ")";
|
||||||
|
|
||||||
|
SetErrorCode(OK);
|
||||||
|
|
||||||
|
return aShape;
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* Builds a cylinder prepared for hexa meshes
|
* Builds a cylinder prepared for hexa meshes
|
||||||
|
@ -109,7 +109,13 @@ public:
|
|||||||
Handle(GEOM_Object) P1 = 0,
|
Handle(GEOM_Object) P1 = 0,
|
||||||
Handle(GEOM_Object) P2 = 0,
|
Handle(GEOM_Object) P2 = 0,
|
||||||
Handle(GEOM_Object) P3 = 0);
|
Handle(GEOM_Object) P3 = 0);
|
||||||
|
|
||||||
Standard_EXPORT Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio, int theOrientation);
|
Standard_EXPORT Handle(GEOM_Object) MakeDividedDisk (double theR, double theRatio, int theOrientation);
|
||||||
|
Standard_EXPORT Handle(GEOM_Object) MakeDividedDiskPntVecR (Handle(GEOM_Object) thePnt,
|
||||||
|
Handle(GEOM_Object) theVec,
|
||||||
|
double theR,
|
||||||
|
double theRatio);
|
||||||
|
|
||||||
Standard_EXPORT Handle(GEOM_Object) MakeDividedCylinder (double theR, double theH);
|
Standard_EXPORT Handle(GEOM_Object) MakeDividedCylinder (double theR, double theH);
|
||||||
/*@@ insert new functions before this line @@ do not remove this line @@*/
|
/*@@ insert new functions before this line @@ do not remove this line @@*/
|
||||||
};
|
};
|
||||||
|
@ -28,6 +28,9 @@
|
|||||||
#define DIVIDEDDISK_ARG_RATIO 2
|
#define DIVIDEDDISK_ARG_RATIO 2
|
||||||
#define DIVIDEDDISK_ARG_ORIENT 3
|
#define DIVIDEDDISK_ARG_ORIENT 3
|
||||||
|
|
||||||
|
#define DIVIDEDDISK_ARG_CENTER 4
|
||||||
|
#define DIVIDEDDISK_ARG_VECTOR 5
|
||||||
|
|
||||||
class GEOMImpl_IDividedDisk
|
class GEOMImpl_IDividedDisk
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -41,6 +44,12 @@ public:
|
|||||||
|
|
||||||
void SetOrientation(int theOrientation) { _func->SetInteger(DIVIDEDDISK_ARG_ORIENT, theOrientation); }
|
void SetOrientation(int theOrientation) { _func->SetInteger(DIVIDEDDISK_ARG_ORIENT, theOrientation); }
|
||||||
double GetOrientation() { return _func->GetInteger(DIVIDEDDISK_ARG_ORIENT); }
|
double GetOrientation() { return _func->GetInteger(DIVIDEDDISK_ARG_ORIENT); }
|
||||||
|
|
||||||
|
void SetCenter(Handle(GEOM_Function) theP) { _func->SetReference(DIVIDEDDISK_ARG_CENTER, theP); }
|
||||||
|
void SetVector(Handle(GEOM_Function) theV) { _func->SetReference(DIVIDEDDISK_ARG_VECTOR, theV); }
|
||||||
|
|
||||||
|
Handle(GEOM_Function) GetCenter() { return _func->GetReference(DIVIDEDDISK_ARG_CENTER); }
|
||||||
|
Handle(GEOM_Function) GetVector() { return _func->GetReference(DIVIDEDDISK_ARG_VECTOR); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Handle(GEOM_Function) _func;
|
Handle(GEOM_Function) _func;
|
||||||
|
@ -345,6 +345,36 @@ GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDisk (CORBA::Double
|
|||||||
return GetObject(anObject);
|
return GetObject(anObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=============================================================================
|
||||||
|
/*!
|
||||||
|
* MakeDividedDiskPntVecR
|
||||||
|
*/
|
||||||
|
//=============================================================================
|
||||||
|
GEOM::GEOM_Object_ptr GEOM_IAdvancedOperations_i::MakeDividedDiskPntVecR (GEOM::GEOM_Object_ptr thePnt,
|
||||||
|
GEOM::GEOM_Object_ptr theVec,
|
||||||
|
CORBA::Double theR,
|
||||||
|
CORBA::Double theRatio)
|
||||||
|
{
|
||||||
|
GEOM::GEOM_Object_var aGEOMObject;
|
||||||
|
|
||||||
|
//Set a not done flag
|
||||||
|
GetOperations()->SetNotDone();
|
||||||
|
|
||||||
|
//Get the reference points
|
||||||
|
Handle(GEOM_Object) aPnt = GetObjectImpl(thePnt);
|
||||||
|
Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
|
||||||
|
|
||||||
|
if (aPnt.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
|
||||||
|
|
||||||
|
// Make DividedDisk
|
||||||
|
Handle(GEOM_Object) anObject =
|
||||||
|
GetOperations()->MakeDividedDiskPntVecR(aPnt, aVec, theR, theRatio);
|
||||||
|
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||||
|
return aGEOMObject._retn();
|
||||||
|
|
||||||
|
return GetObject(anObject);
|
||||||
|
}
|
||||||
|
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
/*!
|
/*!
|
||||||
* Builds a cylinder prepared for hexa meshes
|
* Builds a cylinder prepared for hexa meshes
|
||||||
|
@ -63,7 +63,16 @@ class GEOM_I_EXPORT GEOM_IAdvancedOperations_i :
|
|||||||
CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
|
CORBA::Double theR2, CORBA::Double theW2, CORBA::Double theL2,
|
||||||
CORBA::Double theRF, CORBA::Boolean theHexMesh,
|
CORBA::Double theRF, CORBA::Boolean theHexMesh,
|
||||||
GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
|
GEOM::GEOM_Object_ptr theP1, GEOM::GEOM_Object_ptr theP2, GEOM::GEOM_Object_ptr theP3);
|
||||||
GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR, CORBA::Double theRatio, CORBA::Short theOrientation);
|
|
||||||
|
GEOM::GEOM_Object_ptr MakeDividedDisk (CORBA::Double theR,
|
||||||
|
CORBA::Double theRatio,
|
||||||
|
CORBA::Short theOrientation);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_ptr MakeDividedDiskPntVecR (GEOM::GEOM_Object_ptr theCenter,
|
||||||
|
GEOM::GEOM_Object_ptr theVector,
|
||||||
|
CORBA::Double theR,
|
||||||
|
CORBA::Double theRatio);
|
||||||
|
|
||||||
GEOM::GEOM_Object_ptr MakeDividedCylinder (CORBA::Double theR, CORBA::Double theH);
|
GEOM::GEOM_Object_ptr MakeDividedCylinder (CORBA::Double theR, CORBA::Double theH);
|
||||||
/*@@ insert new functions before this line @@ do not remove this line @@*/
|
/*@@ insert new functions before this line @@ do not remove this line @@*/
|
||||||
|
|
||||||
|
@ -8562,6 +8562,21 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
|||||||
RaiseIfFailed("MakeDividedDisk", self.AdvOp)
|
RaiseIfFailed("MakeDividedDisk", self.AdvOp)
|
||||||
if Parameters: anObj.SetParameters(Parameters)
|
if Parameters: anObj.SetParameters(Parameters)
|
||||||
return anObj
|
return anObj
|
||||||
|
|
||||||
|
## This function allows creating a disk already divided into blocks. It
|
||||||
|
# can be used to create divided pipes for later meshing in hexaedra.
|
||||||
|
# @param theCenter Center of the disk
|
||||||
|
# @param theVector Normal vector to the plane of the created disk
|
||||||
|
# @param theRadius Radius of the disk
|
||||||
|
# @return New GEOM_Object, containing the created shape.
|
||||||
|
#
|
||||||
|
# @ref tui_creation_divideddisk "Example"
|
||||||
|
def MakeDividedDiskPntVecR(self, theCenter, theVector, theRadius):
|
||||||
|
theRadius, Parameters = ParseParameters(theRadius)
|
||||||
|
anObj = self.AdvOp.MakeDividedDiskPntVecR(theCenter, theVector, theRadius, 50.0)
|
||||||
|
RaiseIfFailed("MakeDividedDiskPntVecR", self.AdvOp)
|
||||||
|
if Parameters: anObj.SetParameters(Parameters)
|
||||||
|
return anObj
|
||||||
|
|
||||||
## Builds a cylinder prepared for hexa meshes
|
## Builds a cylinder prepared for hexa meshes
|
||||||
# @param theR Radius of the cylinder
|
# @param theR Radius of the cylinder
|
||||||
|
Loading…
Reference in New Issue
Block a user