IMPs 21044, 21057, 21067
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 16 KiB |
BIN
doc/salome/gui/GEOM/images/curve1.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
doc/salome/gui/GEOM/images/curve2.png
Normal file
After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 26 KiB |
@ -1196,6 +1196,11 @@ module GEOM
|
||||
GEOM_Object MakePrismVecH2Ways (in GEOM_Object theBase,
|
||||
in GEOM_Object theVec,
|
||||
in double theH);
|
||||
/* The Same as MakePrismVecH but with scaling */
|
||||
GEOM_Object MakePrismVecHWithScaling (in GEOM_Object theBase,
|
||||
in GEOM_Object theVec,
|
||||
in double theH,
|
||||
in double theScaleFactor);
|
||||
|
||||
/*!
|
||||
* Create a shape by extrusion of the base shape along a vector, defined by two points.
|
||||
@ -1211,6 +1216,11 @@ module GEOM
|
||||
GEOM_Object MakePrismTwoPnt2Ways (in GEOM_Object theBase,
|
||||
in GEOM_Object thePoint1,
|
||||
in GEOM_Object thePoint2);
|
||||
/* The Same as MakePrismTwoPnt but with scaling */
|
||||
GEOM_Object MakePrismTwoPntWithScaling (in GEOM_Object theBase,
|
||||
in GEOM_Object thePoint1,
|
||||
in GEOM_Object thePoint2,
|
||||
in double theScaleFactor);
|
||||
|
||||
/*!
|
||||
* Create a shape by extrusion of the base shape along a vector, defined by DX DY DZ.
|
||||
@ -1223,6 +1233,10 @@ module GEOM
|
||||
/* The same prism but in two directions forward&backward */
|
||||
GEOM_Object MakePrismDXDYDZ2Ways (in GEOM_Object theBase,
|
||||
in double theDX, in double theDY, in double theDZ);
|
||||
/* The Same as MakePrismDXDYDZ but with scaling */
|
||||
GEOM_Object MakePrismDXDYDZWithScaling (in GEOM_Object theBase,
|
||||
in double theDX, in double theDY, in double theDZ,
|
||||
in double theScaleFactor);
|
||||
|
||||
/*!
|
||||
* Create a shape by extrusion of the base shape along
|
||||
@ -2484,25 +2498,32 @@ module GEOM
|
||||
/*!
|
||||
* Create a polyline on the set of points.
|
||||
* \param thePoints Sequence of points for the polyline.
|
||||
* \param theIsClosed If TRUE, build a closed wire.
|
||||
* \return New GEOM_Object, containing the created polyline.
|
||||
*/
|
||||
GEOM_Object MakePolyline (in ListOfGO thePoints);
|
||||
GEOM_Object MakePolyline (in ListOfGO thePoints,
|
||||
in boolean theIsClosed);
|
||||
|
||||
/*!
|
||||
* Create bezier curve on the set of points.
|
||||
* \param thePoints Sequence of points for the bezier curve.
|
||||
* \param theIsClosed If TRUE, build a closed curve.
|
||||
* \return New GEOM_Object, containing the created bezier curve.
|
||||
*/
|
||||
GEOM_Object MakeSplineBezier (in ListOfGO thePoints);
|
||||
GEOM_Object MakeSplineBezier (in ListOfGO thePoints,
|
||||
in boolean theIsClosed);
|
||||
|
||||
/*!
|
||||
* Create B-Spline curve on the set of points.
|
||||
* \param thePoints Sequence of points for the B-Spline curve.
|
||||
* \param theIsClosed If TRUE, build a closed curve.
|
||||
* \param theDoReordering If TRUE, the algo does not follow the order of
|
||||
* \a thePoints but searches for the closest vertex.
|
||||
* \return New GEOM_Object, containing the created B-Spline curve.
|
||||
*/
|
||||
GEOM_Object MakeSplineInterpolation (in ListOfGO thePoints,
|
||||
in boolean theIsClosed);
|
||||
in boolean theIsClosed,
|
||||
in boolean theDoReordering);
|
||||
|
||||
/*!
|
||||
* Create a sketcher (wire or face), following the textual description,
|
||||
|
@ -508,10 +508,13 @@ module GEOM
|
||||
GEOM_Object MakeArcOfEllipse (in GEOM_Object theCenter,
|
||||
in GEOM_Object thePnt1,
|
||||
in GEOM_Object thePnt2) ;
|
||||
GEOM_Object MakePolyline (in GEOM_List thePoints) ;
|
||||
GEOM_Object MakeSplineBezier (in GEOM_List thePoints) ;
|
||||
GEOM_Object MakeSplineInterpolation (in GEOM_List thePoints,
|
||||
GEOM_Object MakePolyline (in GEOM_List thePoints,
|
||||
in boolean theIsClosed) ;
|
||||
GEOM_Object MakeSplineBezier (in GEOM_List thePoints,
|
||||
in boolean theIsClosed) ;
|
||||
GEOM_Object MakeSplineInterpolation (in GEOM_List thePoints,
|
||||
in boolean theIsClosed,
|
||||
in boolean theDoReordering) ;
|
||||
GEOM_Object MakeSketcher (in string theCommand,
|
||||
in GEOM_List theWorkingPlane) ;
|
||||
|
||||
|
@ -18,12 +18,11 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// GEOM GEOMGUI : GUI for Geometry component
|
||||
// File : BasicGUI_CurveDlg.cxx
|
||||
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
|
||||
//
|
||||
|
||||
#include "BasicGUI_CurveDlg.h"
|
||||
|
||||
#include <DlgRef.h>
|
||||
@ -70,7 +69,7 @@ BasicGUI_CurveDlg::BasicGUI_CurveDlg( GeometryGUI* theGeometryGUI, QWidget* pare
|
||||
mainFrame()->RadioButton2->setIcon( image3 );
|
||||
mainFrame()->RadioButton3->setIcon( image2 );
|
||||
|
||||
GroupPoints = new DlgRef_1Sel1Check( centralWidget() );
|
||||
GroupPoints = new DlgRef_1Sel3Check( centralWidget() );
|
||||
|
||||
GroupPoints->GroupBox1->setTitle( tr( "GEOM_NODES" ) );
|
||||
GroupPoints->TextLabel1->setText( tr( "GEOM_POINTS" ) );
|
||||
@ -81,7 +80,13 @@ BasicGUI_CurveDlg::BasicGUI_CurveDlg( GeometryGUI* theGeometryGUI, QWidget* pare
|
||||
|
||||
GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
|
||||
GroupPoints->CheckButton1->setChecked(false);
|
||||
GroupPoints->CheckButton1->hide();
|
||||
//GroupPoints->CheckButton1->hide();
|
||||
|
||||
GroupPoints->CheckButton2->setText( tr( "GEOM_IS_REORDER" ) );
|
||||
GroupPoints->CheckButton2->setChecked(false);
|
||||
GroupPoints->CheckButton2->hide();
|
||||
|
||||
GroupPoints->CheckButton3->hide();
|
||||
|
||||
QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
|
||||
layout->setMargin( 0 ); layout->setSpacing( 6 );
|
||||
@ -129,6 +134,7 @@ void BasicGUI_CurveDlg::Init()
|
||||
connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
|
||||
|
||||
connect( GroupPoints->CheckButton1, SIGNAL( toggled(bool) ), this, SLOT( CheckButtonToggled() ) );
|
||||
connect( GroupPoints->CheckButton2, SIGNAL( toggled(bool) ), this, SLOT( CheckButtonToggled() ) );
|
||||
|
||||
connect( myGeomGUI->getApp()->selectionMgr(),
|
||||
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
|
||||
@ -147,10 +153,21 @@ void BasicGUI_CurveDlg::ConstructorsClicked( int id )
|
||||
QString aTitle = tr( id == 0 ? "GEOM_POLYLINE" : id == 1 ? "GEOM_BEZIER" : "GEOM_INTERPOL" );
|
||||
mainFrame()->GroupConstructors->setTitle( aTitle );
|
||||
|
||||
if (id == 2) // b-spline
|
||||
GroupPoints->CheckButton1->show();
|
||||
else
|
||||
GroupPoints->CheckButton1->hide();
|
||||
if (id == 0) { // polyline (wire)
|
||||
//GroupPoints->CheckButton1->hide();
|
||||
GroupPoints->CheckButton1->setText( tr( "GEOM_BUILD_CLOSED_WIRE" ) );
|
||||
GroupPoints->CheckButton2->hide();
|
||||
}
|
||||
else if (id == 1) { // bezier
|
||||
//GroupPoints->CheckButton1->hide();
|
||||
GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
|
||||
GroupPoints->CheckButton2->hide();
|
||||
}
|
||||
else { // b-spline
|
||||
//GroupPoints->CheckButton1->show();
|
||||
GroupPoints->CheckButton1->setText( tr( "GEOM_IS_CLOSED" ) );
|
||||
GroupPoints->CheckButton2->show();
|
||||
}
|
||||
|
||||
myPoints.clear();
|
||||
|
||||
@ -323,15 +340,16 @@ bool BasicGUI_CurveDlg::execute( ObjectList& objects )
|
||||
|
||||
switch ( getConstructorId() ) {
|
||||
case 0 :
|
||||
anObj = anOper->MakePolyline( points.in() );
|
||||
anObj = anOper->MakePolyline( points.in(), GroupPoints->CheckButton1->isChecked() );
|
||||
res = true;
|
||||
break;
|
||||
case 1 :
|
||||
anObj = anOper->MakeSplineBezier( points.in() );
|
||||
anObj = anOper->MakeSplineBezier( points.in(), GroupPoints->CheckButton1->isChecked() );
|
||||
res = true;
|
||||
break;
|
||||
case 2 :
|
||||
anObj = anOper->MakeSplineInterpolation( points.in(), GroupPoints->CheckButton1->isChecked() );
|
||||
anObj = anOper->MakeSplineInterpolation( points.in(), GroupPoints->CheckButton1->isChecked(),
|
||||
GroupPoints->CheckButton2->isChecked() );
|
||||
res = true;
|
||||
break;
|
||||
}
|
||||
|
@ -18,12 +18,11 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// GEOM GEOMGUI : GUI for Geometry component
|
||||
// File : BasicGUI_CurveDlg.h
|
||||
// Author : Alexander SLADKOV, Open CASCADE S.A.S. (alexander.sladkov@opencascade.com)
|
||||
//
|
||||
|
||||
#ifndef BASICGUI_CURVEDLG_H
|
||||
#define BASICGUI_CURVEDLG_H
|
||||
|
||||
@ -32,7 +31,7 @@
|
||||
|
||||
#include <list>
|
||||
|
||||
class DlgRef_1Sel1Check;
|
||||
class DlgRef_1Sel3Check;
|
||||
|
||||
//=================================================================================
|
||||
// class : BasicGUI_CurveDlg
|
||||
@ -58,7 +57,7 @@ private:
|
||||
void enterEvent( QEvent* );
|
||||
|
||||
private:
|
||||
DlgRef_1Sel1Check* GroupPoints;
|
||||
DlgRef_1Sel3Check* GroupPoints;
|
||||
QList<GEOM::GeomObjPtr> myPoints;
|
||||
|
||||
private slots:
|
||||
|
@ -15,11 +15,10 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// File : DlgRef.cxx
|
||||
// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
|
||||
//
|
||||
|
||||
#include "DlgRef.h"
|
||||
|
||||
//////////////////////////////////////////
|
||||
@ -190,6 +189,20 @@ DlgRef_1Sel3Spin1Check::~DlgRef_1Sel3Spin1Check()
|
||||
{
|
||||
}
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_1Sel4Spin2Check
|
||||
//////////////////////////////////////////
|
||||
|
||||
DlgRef_1Sel4Spin2Check::DlgRef_1Sel4Spin2Check( QWidget* parent, Qt::WindowFlags f )
|
||||
: QWidget( parent, f )
|
||||
{
|
||||
setupUi( this );
|
||||
}
|
||||
|
||||
DlgRef_1Sel4Spin2Check::~DlgRef_1Sel4Spin2Check()
|
||||
{
|
||||
}
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_1Sel4Spin
|
||||
//////////////////////////////////////////
|
||||
@ -386,6 +399,20 @@ DlgRef_2Sel2Spin1Check::~DlgRef_2Sel2Spin1Check()
|
||||
{
|
||||
}
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_2Sel2Spin3Check
|
||||
//////////////////////////////////////////
|
||||
|
||||
DlgRef_2Sel2Spin3Check::DlgRef_2Sel2Spin3Check( QWidget* parent, Qt::WindowFlags f )
|
||||
: QWidget( parent, f )
|
||||
{
|
||||
setupUi( this );
|
||||
}
|
||||
|
||||
DlgRef_2Sel2Spin3Check::~DlgRef_2Sel2Spin3Check()
|
||||
{
|
||||
}
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_2Sel2Spin
|
||||
//////////////////////////////////////////
|
||||
|
@ -15,11 +15,10 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// File : DlgRef.h
|
||||
// Author : Vadim SANDLER, Open CASCADE S.A.S. (vadim.sandler@opencascade.com)
|
||||
//
|
||||
|
||||
#ifndef GEOM_DLGREF_H
|
||||
#define GEOM_DLGREF_H
|
||||
|
||||
@ -227,6 +226,22 @@ public:
|
||||
~DlgRef_1Sel3Spin1Check();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_1Sel4Spin2Check
|
||||
//////////////////////////////////////////
|
||||
|
||||
#include "ui_DlgRef_1Sel4Spin2Check_QTD.h"
|
||||
|
||||
class DLGREF_EXPORT DlgRef_1Sel4Spin2Check : public QWidget,
|
||||
public Ui::DlgRef_1Sel4Spin2Check_QTD
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DlgRef_1Sel4Spin2Check( QWidget* = 0, Qt::WindowFlags = 0 );
|
||||
~DlgRef_1Sel4Spin2Check();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_1Sel4Spin
|
||||
//////////////////////////////////////////
|
||||
@ -451,6 +466,22 @@ public:
|
||||
~DlgRef_2Sel2Spin1Check();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_2Sel2Spin3Check
|
||||
//////////////////////////////////////////
|
||||
|
||||
#include "ui_DlgRef_2Sel2Spin3Check_QTD.h"
|
||||
|
||||
class DLGREF_EXPORT DlgRef_2Sel2Spin3Check : public QWidget,
|
||||
public Ui::DlgRef_2Sel2Spin3Check_QTD
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
DlgRef_2Sel2Spin3Check( QWidget* = 0, Qt::WindowFlags = 0 );
|
||||
~DlgRef_2Sel2Spin3Check();
|
||||
};
|
||||
|
||||
//////////////////////////////////////////
|
||||
// DlgRef_2Sel2Spin
|
||||
//////////////////////////////////////////
|
||||
|
@ -15,7 +15,6 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
#
|
||||
|
||||
TEMPLATE = lib
|
||||
TARGET = DlgRef
|
||||
@ -63,8 +62,10 @@ HEADERS += DlgRef_2Sel2Spin_QTD.h
|
||||
HEADERS += DlgRef_2Sel3Spin_QTD.h
|
||||
HEADERS += DlgRef_1Sel1Spin1Check_QTD.h
|
||||
HEADERS += DlgRef_1Sel3Spin1Check_QTD.h
|
||||
HEADERS += DlgRef_1Sel4Spin2Check_QTD.h
|
||||
HEADERS += DlgRef_2Sel1Spin2Check_QTD.h
|
||||
HEADERS += DlgRef_2Sel2Spin1Check_QTD.h
|
||||
HEADERS += DlgRef_2Sel2Spin3Check_QTD.h
|
||||
HEADERS += DlgRef_2Sel4Spin1Check_QTD.h
|
||||
HEADERS += DlgRef_3Sel4Spin2Check_QTD.h
|
||||
HEADERS += DlgRef_4Sel1List_QTD.h
|
||||
@ -89,8 +90,10 @@ HEADERS += DlgRef_2Sel2Spin.h
|
||||
HEADERS += DlgRef_2Sel3Spin.h
|
||||
HEADERS += DlgRef_1Sel1Spin1Check.h
|
||||
HEADERS += DlgRef_1Sel3Spin1Check.h
|
||||
HEADERS += DlgRef_1Sel4Spin2Check.h
|
||||
HEADERS += DlgRef_2Sel1Spin2Check.h
|
||||
HEADERS += DlgRef_2Sel2Spin1Check.h
|
||||
HEADERS += DlgRef_2Sel2Spin3Check.h
|
||||
HEADERS += DlgRef_2Sel4Spin1Check.h
|
||||
HEADERS += DlgRef_3Sel4Spin2Check.h
|
||||
HEADERS += DlgRef_3Sel3Spin1Check.h
|
||||
@ -117,8 +120,10 @@ SOURCES += DlgRef_2Sel2Spin.cxx
|
||||
SOURCES += DlgRef_2Sel3Spin.cxx
|
||||
SOURCES += DlgRef_1Sel1Spin1Check.cxx
|
||||
SOURCES += DlgRef_1Sel3Spin1Check.cxx
|
||||
SOURCES += DlgRef_1Sel4Spin2Check.cxx
|
||||
SOURCES += DlgRef_2Sel1Spin2Check.cxx
|
||||
SOURCES += DlgRef_2Sel2Spin1Check.cxx
|
||||
SOURCES += DlgRef_2Sel2Spin3Check.cxx
|
||||
SOURCES += DlgRef_2Sel4Spin1Check.cxx
|
||||
SOURCES += DlgRef_3Sel4Spin2Check.cxx
|
||||
SOURCES += DlgRef_3Sel3Spin1Check.cxx
|
||||
|
211
src/DlgRef/DlgRef_1Sel4Spin2Check_QTD.ui
Normal file
@ -0,0 +1,211 @@
|
||||
<ui version="4.0" >
|
||||
<class>DlgRef_1Sel4Spin2Check_QTD</class>
|
||||
<widget class="QWidget" name="DlgRef_1Sel4Spin2Check_QTD" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>156</width>
|
||||
<height>120</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<property name="leftMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0" >
|
||||
<widget class="QGroupBox" name="GroupBox1" >
|
||||
<property name="title" >
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<property name="leftMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0" >
|
||||
<widget class="QLabel" name="TextLabel1" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL1</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" >
|
||||
<widget class="QPushButton" name="PushButton1" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" >
|
||||
<widget class="QLineEdit" name="LineEdit1" />
|
||||
</item>
|
||||
|
||||
<item row="1" column="0" >
|
||||
<widget class="QLabel" name="TextLabel2" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL2</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
|
||||
</item>
|
||||
|
||||
<item row="2" column="0" >
|
||||
<widget class="QLabel" name="TextLabel3" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL3</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DY" />
|
||||
</item>
|
||||
|
||||
<item row="3" column="0" >
|
||||
<widget class="QLabel" name="TextLabel4" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL4</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DZ" />
|
||||
</item>
|
||||
|
||||
<item row="4" column="0" >
|
||||
<widget class="QLabel" name="TextLabel5" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL5</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_SC" />
|
||||
</item>
|
||||
|
||||
<item row="5" column="0" colspan="3" >
|
||||
<widget class="QCheckBox" name="CheckBox1" >
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="3" >
|
||||
<widget class="QCheckBox" name="CheckBox2" >
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11" />
|
||||
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>SalomeApp_DoubleSpinBox</class>
|
||||
<extends>QDoubleSpinBox</extends>
|
||||
<header location="global" >SalomeApp_DoubleSpinBox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>PushButton1</tabstop>
|
||||
<tabstop>LineEdit1</tabstop>
|
||||
<tabstop>SpinBox_DX</tabstop>
|
||||
<tabstop>SpinBox_DY</tabstop>
|
||||
<tabstop>SpinBox_DZ</tabstop>
|
||||
<tabstop>SpinBox_SC</tabstop>
|
||||
<tabstop>CheckBox1</tabstop>
|
||||
<tabstop>CheckBox2</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
208
src/DlgRef/DlgRef_2Sel2Spin3Check_QTD.ui
Normal file
@ -0,0 +1,208 @@
|
||||
<ui version="4.0" >
|
||||
<class>DlgRef_2Sel2Spin3Check_QTD</class>
|
||||
<widget class="QWidget" name="DlgRef_2Sel2Spin3Check_QTD" >
|
||||
<property name="geometry" >
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>156</width>
|
||||
<height>197</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle" >
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<property name="leftMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0" >
|
||||
<widget class="QGroupBox" name="GroupBox1" >
|
||||
<property name="title" >
|
||||
<string/>
|
||||
</property>
|
||||
<layout class="QGridLayout" >
|
||||
<property name="leftMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="topMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="rightMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="bottomMargin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="horizontalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="verticalSpacing" >
|
||||
<number>6</number>
|
||||
</property>
|
||||
<item row="0" column="0" >
|
||||
<widget class="QLabel" name="TextLabel1" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL1</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" >
|
||||
<widget class="QPushButton" name="PushButton1" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" >
|
||||
<widget class="QLineEdit" name="LineEdit1" />
|
||||
</item>
|
||||
<item row="1" column="0" >
|
||||
<widget class="QLabel" name="TextLabel2" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL2</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" >
|
||||
<widget class="QPushButton" name="PushButton2" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2" >
|
||||
<widget class="QLineEdit" name="LineEdit2" />
|
||||
</item>
|
||||
<item row="2" column="0" >
|
||||
<widget class="QLabel" name="TextLabel3" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL3</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DX" />
|
||||
</item>
|
||||
<item row="3" column="0" >
|
||||
<widget class="QLabel" name="TextLabel4" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text" >
|
||||
<string>TL4</string>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1" colspan="2" >
|
||||
<widget class="SalomeApp_DoubleSpinBox" name="SpinBox_DY" />
|
||||
</item>
|
||||
<item row="4" column="0" colspan="3" >
|
||||
<widget class="QCheckBox" name="CheckBox1" >
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="3" >
|
||||
<widget class="QCheckBox" name="CheckBox2" >
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="3" >
|
||||
<widget class="QCheckBox" name="CheckBox3" >
|
||||
<property name="text" >
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layoutdefault spacing="6" margin="11" />
|
||||
<pixmapfunction>qPixmapFromMimeSource</pixmapfunction>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>SalomeApp_DoubleSpinBox</class>
|
||||
<extends>QDoubleSpinBox</extends>
|
||||
<header location="global" >SalomeApp_DoubleSpinBox.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>PushButton1</tabstop>
|
||||
<tabstop>LineEdit1</tabstop>
|
||||
<tabstop>PushButton2</tabstop>
|
||||
<tabstop>LineEdit2</tabstop>
|
||||
<tabstop>SpinBox_DX</tabstop>
|
||||
<tabstop>SpinBox_DY</tabstop>
|
||||
<tabstop>CheckBox1</tabstop>
|
||||
<tabstop>CheckBox2</tabstop>
|
||||
<tabstop>CheckBox3</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
@ -15,13 +15,12 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
#
|
||||
|
||||
# GEOM DLGREF :
|
||||
# File : Makefile.am
|
||||
# Author : Alexander BORODIN, Open CASCADE S.A.S. (alexander.borodin@opencascade.com)
|
||||
# Package : DlgRef
|
||||
#
|
||||
|
||||
include $(top_srcdir)/adm_local/unix/make_common_starter.am
|
||||
|
||||
# Libraries targets
|
||||
@ -48,6 +47,7 @@ UIC_FILES = \
|
||||
ui_DlgRef_1Sel3Check_QTD.h \
|
||||
ui_DlgRef_1Sel3Spin_QTD.h \
|
||||
ui_DlgRef_1Sel3Spin1Check_QTD.h \
|
||||
ui_DlgRef_1Sel4Spin2Check_QTD.h \
|
||||
ui_DlgRef_1Sel4Spin_QTD.h \
|
||||
ui_DlgRef_1Sel5Spin1Check_QTD.h \
|
||||
ui_DlgRef_1Sel5Spin_QTD.h \
|
||||
@ -62,6 +62,7 @@ UIC_FILES = \
|
||||
ui_DlgRef_2Sel1SpinInt_QTD.h \
|
||||
ui_DlgRef_2Sel2List_QTD.h \
|
||||
ui_DlgRef_2Sel2Spin1Check_QTD.h \
|
||||
ui_DlgRef_2Sel2Spin3Check_QTD.h \
|
||||
ui_DlgRef_2Sel2Spin_QTD.h \
|
||||
ui_DlgRef_2Sel3Spin2Rb_QTD.h \
|
||||
ui_DlgRef_2Sel3Spin_QTD.h \
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include "GEOM_PythonDump.hxx"
|
||||
|
||||
@ -52,6 +51,15 @@ namespace GEOM
|
||||
}
|
||||
}
|
||||
|
||||
TPythonDump& TPythonDump::operator<< (bool theArg)
|
||||
{
|
||||
if (theArg)
|
||||
myStream << "True";
|
||||
else
|
||||
myStream << "False";
|
||||
return *this;
|
||||
}
|
||||
|
||||
TPythonDump& TPythonDump::operator<< (long int theArg)
|
||||
{
|
||||
myStream<<theArg;
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef _GEOM_PYTHONDUMP_HXX_
|
||||
#define _GEOM_PYTHONDUMP_HXX_
|
||||
@ -46,6 +45,7 @@ namespace GEOM
|
||||
|
||||
//operator TCollection_AsciiString () const;
|
||||
|
||||
Standard_EXPORT TPythonDump& operator<< (bool theArg);
|
||||
Standard_EXPORT TPythonDump& operator<< (long int theArg);
|
||||
Standard_EXPORT TPythonDump& operator<< (int theArg);
|
||||
Standard_EXPORT TPythonDump& operator<< (double theArg);
|
||||
|
@ -573,6 +573,10 @@ Please, select face, shell or solid and try again</translation>
|
||||
<source>GEOM_EXTRUSION_TITLE</source>
|
||||
<translation>Construction by Extrusion</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_SCALE_PRISM</source>
|
||||
<translation>Scale the face opposite to the base</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_FACE</source>
|
||||
<translation>Face</translation>
|
||||
@ -4218,6 +4222,14 @@ Otherwise the dimensions will be kept without modifications.</translation>
|
||||
<source>GEOM_IS_CLOSED</source>
|
||||
<translation>Build a closed edge</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_BUILD_CLOSED_WIRE</source>
|
||||
<translation>Build a closed wire</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>GEOM_IS_REORDER</source>
|
||||
<translation>Reorder vertices taking into account distances</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>BasicGUI_EllipseDlg</name>
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -68,6 +67,8 @@
|
||||
#include <GEOMImpl_IPipeShellSect.hxx>
|
||||
#include <GEOMImpl_IPipeBiNormal.hxx>
|
||||
|
||||
#include <Precision.hxx>
|
||||
|
||||
#include <Standard_Failure.hxx>
|
||||
#include <Standard_ErrorHandler.hxx> // CAREFUL ! position of this file is critic : see Lucien PIGNOLONI / OCC
|
||||
|
||||
@ -921,7 +922,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeTorusPntVecRR
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Object) theBase,
|
||||
Handle(GEOM_Object) theVec,
|
||||
double theH)
|
||||
double theH, double theScaleFactor)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
@ -948,6 +949,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Objec
|
||||
aCI.SetBase(aRefBase);
|
||||
aCI.SetVector(aRefVec);
|
||||
aCI.SetH(theH);
|
||||
aCI.SetScale(theScaleFactor);
|
||||
|
||||
//Compute the Prism value
|
||||
try {
|
||||
@ -967,8 +969,12 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH (Handle(GEOM_Objec
|
||||
}
|
||||
|
||||
//Make a Python command
|
||||
GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrismVecH("
|
||||
<< theBase << ", " << theVec << ", " << theH << ")";
|
||||
GEOM::TPythonDump pd (aFunction);
|
||||
pd << aPrism << " = geompy.MakePrismVecH(" << theBase << ", " << theVec << ", " << theH;
|
||||
if (theScaleFactor > Precision::Confusion())
|
||||
pd << ", " << theScaleFactor << ")";
|
||||
else
|
||||
pd << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aPrism;
|
||||
@ -1041,7 +1047,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismVecH2Ways (Handle(GEOM_
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt
|
||||
(Handle(GEOM_Object) theBase,
|
||||
Handle(GEOM_Object) thePoint1, Handle(GEOM_Object) thePoint2)
|
||||
Handle(GEOM_Object) thePoint1, Handle(GEOM_Object) thePoint2,
|
||||
double theScaleFactor)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
@ -1069,6 +1076,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt
|
||||
aCI.SetBase(aRefBase);
|
||||
aCI.SetFirstPoint(aRefPnt1);
|
||||
aCI.SetLastPoint(aRefPnt2);
|
||||
aCI.SetScale(theScaleFactor);
|
||||
|
||||
//Compute the Prism value
|
||||
try {
|
||||
@ -1088,8 +1096,12 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt
|
||||
}
|
||||
|
||||
//Make a Python command
|
||||
GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrism("
|
||||
<< theBase << ", " << thePoint1 << ", " << thePoint2 << ")";
|
||||
GEOM::TPythonDump pd (aFunction);
|
||||
pd << aPrism << " = geompy.MakePrism(" << theBase << ", " << thePoint1 << ", " << thePoint2;
|
||||
if (theScaleFactor > Precision::Confusion())
|
||||
pd << ", " << theScaleFactor << ")";
|
||||
else
|
||||
pd << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aPrism;
|
||||
@ -1162,7 +1174,8 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismTwoPnt2Ways
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismDXDYDZ
|
||||
(Handle(GEOM_Object) theBase, double theDX, double theDY, double theDZ)
|
||||
(Handle(GEOM_Object) theBase, double theDX, double theDY, double theDZ,
|
||||
double theScaleFactor)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
@ -1189,6 +1202,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismDXDYDZ
|
||||
aCI.SetDX(theDX);
|
||||
aCI.SetDY(theDY);
|
||||
aCI.SetDZ(theDZ);
|
||||
aCI.SetScale(theScaleFactor);
|
||||
|
||||
//Compute the Prism value
|
||||
try {
|
||||
@ -1207,8 +1221,13 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePrismDXDYDZ
|
||||
}
|
||||
|
||||
//Make a Python command
|
||||
GEOM::TPythonDump(aFunction) << aPrism << " = geompy.MakePrismDXDYDZ("
|
||||
<< theBase << ", " << theDX << ", " << theDY << ", " << theDZ << ")";
|
||||
GEOM::TPythonDump pd (aFunction);
|
||||
pd << aPrism << " = geompy.MakePrismDXDYDZ("
|
||||
<< theBase << ", " << theDX << ", " << theDY << ", " << theDZ;
|
||||
if (theScaleFactor > Precision::Confusion())
|
||||
pd << ", " << theScaleFactor << ")";
|
||||
else
|
||||
pd << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aPrism;
|
||||
@ -1620,8 +1639,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeThruSections(
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aThruSect;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1740,7 +1757,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections(
|
||||
if(i < nbBases)
|
||||
pyDump<<", ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pyDump<< "], [";
|
||||
@ -1763,8 +1779,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithDifferentSections(
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aPipeDS;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1902,7 +1916,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections(
|
||||
if(i < nbBases)
|
||||
pyDump<<", ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pyDump<< "], [";
|
||||
@ -1919,7 +1932,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeWithShellSections(
|
||||
if(i < nbBases)
|
||||
pyDump<<", ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pyDump<< "], [";
|
||||
@ -2051,7 +2063,6 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeShellsWithoutPath(
|
||||
if(i < nbBases)
|
||||
pyDump<<", ";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
pyDump<< "], [";
|
||||
@ -2137,4 +2148,3 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakePipeBiNormalAlongVector (Han
|
||||
SetErrorCode(OK);
|
||||
return aPipe;
|
||||
}
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef _GEOMImpl_I3DPrimOperations_HXX_
|
||||
#define _GEOMImpl_I3DPrimOperations_HXX_
|
||||
@ -68,21 +67,24 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
|
||||
double theRMajor, double theRMinor);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePrismVecH (Handle(GEOM_Object) theBase,
|
||||
Handle(GEOM_Object) theVec, double theH);
|
||||
Handle(GEOM_Object) theVec,
|
||||
double theH, double theScaleFactor = -1.0);
|
||||
|
||||
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);
|
||||
Handle(GEOM_Object) thePoint2,
|
||||
double theScaleFactor = -1.0);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePrismTwoPnt2Ways (Handle(GEOM_Object) theBase,
|
||||
Handle(GEOM_Object) thePoint1,
|
||||
Handle(GEOM_Object) thePoint2);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePrismDXDYDZ (Handle(GEOM_Object) theBase,
|
||||
double theDX, double theDY, double theDZ);
|
||||
double theDX, double theDY, double theDZ,
|
||||
double theScaleFactor = -1.0);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePrismDXDYDZ2Ways (Handle(GEOM_Object) theBase,
|
||||
double theDX, double theDY, double theDZ);
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -76,73 +75,6 @@ GEOMImpl_ICurvesOperations::~GEOMImpl_ICurvesOperations()
|
||||
}
|
||||
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePolyline
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline (std::list<Handle(GEOM_Object)> thePoints)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
//Add a new Polyline object
|
||||
Handle(GEOM_Object) aPolyline = GetEngine()->AddObject(GetDocID(), GEOM_POLYLINE);
|
||||
|
||||
//Add a new Polyline function for creation a polyline relatively to points set
|
||||
Handle(GEOM_Function) aFunction =
|
||||
aPolyline->AddFunction(GEOMImpl_PolylineDriver::GetID(), POLYLINE_POINTS);
|
||||
if (aFunction.IsNull()) return NULL;
|
||||
|
||||
//Check if the function is set correctly
|
||||
if (aFunction->GetDriverGUID() != GEOMImpl_PolylineDriver::GetID()) return NULL;
|
||||
|
||||
GEOMImpl_IPolyline aCI (aFunction);
|
||||
|
||||
int aLen = thePoints.size();
|
||||
aCI.SetLength(aLen);
|
||||
|
||||
int ind = 1;
|
||||
std::list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
|
||||
for (; it != thePoints.end(); it++, ind++) {
|
||||
Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
|
||||
if (aRefPnt.IsNull()) {
|
||||
SetErrorCode("NULL point for Polyline");
|
||||
return NULL;
|
||||
}
|
||||
aCI.SetPoint(ind, aRefPnt);
|
||||
}
|
||||
|
||||
//Compute the Polyline value
|
||||
try {
|
||||
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||
OCC_CATCH_SIGNALS;
|
||||
#endif
|
||||
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||
SetErrorCode("Polyline 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 pd (aFunction);
|
||||
pd << aPolyline << " = geompy.MakePolyline([";
|
||||
|
||||
it = thePoints.begin();
|
||||
pd << (*it++);
|
||||
while (it != thePoints.end()) {
|
||||
pd << ", " << (*it++);
|
||||
}
|
||||
pd << "])";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aPolyline;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeCircleThreePnt
|
||||
@ -594,26 +526,26 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeArcOfEllipse (Handle(GEOM_Ob
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineBezier
|
||||
* MakePolyline
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier
|
||||
(std::list<Handle(GEOM_Object)> thePoints)
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakePolyline (std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
//Add a new Spline object
|
||||
Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE);
|
||||
//Add a new Polyline object
|
||||
Handle(GEOM_Object) aPolyline = GetEngine()->AddObject(GetDocID(), GEOM_POLYLINE);
|
||||
|
||||
//Add a new Spline function for creation a bezier curve relatively to points set
|
||||
//Add a new Polyline function for creation a polyline relatively to points set
|
||||
Handle(GEOM_Function) aFunction =
|
||||
aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_BEZIER);
|
||||
aPolyline->AddFunction(GEOMImpl_PolylineDriver::GetID(), POLYLINE_POINTS);
|
||||
if (aFunction.IsNull()) return NULL;
|
||||
|
||||
//Check if the function is set correctly
|
||||
if (aFunction->GetDriverGUID() != GEOMImpl_SplineDriver::GetID()) return NULL;
|
||||
if (aFunction->GetDriverGUID() != GEOMImpl_PolylineDriver::GetID()) return NULL;
|
||||
|
||||
GEOMImpl_ISpline aCI (aFunction);
|
||||
GEOMImpl_IPolyline aCI (aFunction);
|
||||
|
||||
int aLen = thePoints.size();
|
||||
aCI.SetLength(aLen);
|
||||
@ -622,19 +554,22 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier
|
||||
std::list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
|
||||
for (; it != thePoints.end(); it++, ind++) {
|
||||
Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
|
||||
|
||||
if (aRefPnt.IsNull()) return NULL;
|
||||
|
||||
if (aRefPnt.IsNull()) {
|
||||
SetErrorCode("NULL point for Polyline");
|
||||
return NULL;
|
||||
}
|
||||
aCI.SetPoint(ind, aRefPnt);
|
||||
}
|
||||
|
||||
//Compute the Spline value
|
||||
aCI.SetIsClosed(theIsClosed);
|
||||
|
||||
//Compute the Polyline value
|
||||
try {
|
||||
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||
OCC_CATCH_SIGNALS;
|
||||
#endif
|
||||
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||
SetErrorCode("Spline driver failed");
|
||||
SetErrorCode("Polyline driver failed");
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
@ -646,25 +581,25 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier
|
||||
|
||||
//Make a Python command
|
||||
GEOM::TPythonDump pd (aFunction);
|
||||
pd << aSpline << " = geompy.MakeBezier([";
|
||||
pd << aPolyline << " = geompy.MakePolyline([";
|
||||
|
||||
it = thePoints.begin();
|
||||
pd << (*it++);
|
||||
while (it != thePoints.end()) {
|
||||
pd << ", " << (*it++);
|
||||
}
|
||||
pd << "])";
|
||||
pd << "], " << theIsClosed << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aSpline;
|
||||
return aPolyline;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineInterpolation
|
||||
* MakeSplineBezier
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineBezier
|
||||
(std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed)
|
||||
{
|
||||
@ -675,7 +610,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
|
||||
|
||||
//Add a new Spline function for creation a bezier curve relatively to points set
|
||||
Handle(GEOM_Function) aFunction =
|
||||
aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_INTERPOLATION);
|
||||
aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_BEZIER);
|
||||
if (aFunction.IsNull()) return NULL;
|
||||
|
||||
//Check if the function is set correctly
|
||||
@ -714,6 +649,78 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//Make a Python command
|
||||
GEOM::TPythonDump pd (aFunction);
|
||||
pd << aSpline << " = geompy.MakeBezier([";
|
||||
|
||||
it = thePoints.begin();
|
||||
pd << (*it++);
|
||||
while (it != thePoints.end()) {
|
||||
pd << ", " << (*it++);
|
||||
}
|
||||
pd << "], " << theIsClosed << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aSpline;
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineInterpolation
|
||||
*/
|
||||
//=============================================================================
|
||||
Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
|
||||
(std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed,
|
||||
bool theDoReordering)
|
||||
{
|
||||
SetErrorCode(KO);
|
||||
|
||||
//Add a new Spline object
|
||||
Handle(GEOM_Object) aSpline = GetEngine()->AddObject(GetDocID(), GEOM_SPLINE);
|
||||
|
||||
//Add a new Spline function for creation a bezier curve relatively to points set
|
||||
Handle(GEOM_Function) aFunction =
|
||||
aSpline->AddFunction(GEOMImpl_SplineDriver::GetID(), SPLINE_INTERPOLATION);
|
||||
if (aFunction.IsNull()) return NULL;
|
||||
|
||||
//Check if the function is set correctly
|
||||
if (aFunction->GetDriverGUID() != GEOMImpl_SplineDriver::GetID()) return NULL;
|
||||
|
||||
GEOMImpl_ISpline aCI (aFunction);
|
||||
|
||||
int aLen = thePoints.size();
|
||||
aCI.SetLength(aLen);
|
||||
|
||||
int ind = 1;
|
||||
std::list<Handle(GEOM_Object)>::iterator it = thePoints.begin();
|
||||
for (; it != thePoints.end(); it++, ind++) {
|
||||
Handle(GEOM_Function) aRefPnt = (*it)->GetLastFunction();
|
||||
|
||||
if (aRefPnt.IsNull()) return NULL;
|
||||
|
||||
aCI.SetPoint(ind, aRefPnt);
|
||||
}
|
||||
|
||||
aCI.SetIsClosed(theIsClosed);
|
||||
aCI.SetDoReordering(theDoReordering);
|
||||
|
||||
//Compute the Spline value
|
||||
try {
|
||||
#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100
|
||||
OCC_CATCH_SIGNALS;
|
||||
#endif
|
||||
if (!GetSolver()->ComputeFunction(aFunction)) {
|
||||
SetErrorCode("Spline 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 pd (aFunction);
|
||||
pd << aSpline << " = geompy.MakeInterpol([";
|
||||
@ -723,9 +730,7 @@ Handle(GEOM_Object) GEOMImpl_ICurvesOperations::MakeSplineInterpolation
|
||||
while (it != thePoints.end()) {
|
||||
pd << ", " << (*it++);
|
||||
}
|
||||
pd << "]";
|
||||
if ( theIsClosed ) pd << ", True";
|
||||
pd << ")";
|
||||
pd << "], " << theIsClosed << ", " << theDoReordering << ")";
|
||||
|
||||
SetErrorCode(OK);
|
||||
return aSpline;
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef _GEOMImpl_ICurvesOperations_HXX_
|
||||
#define _GEOMImpl_ICurvesOperations_HXX_
|
||||
@ -37,8 +36,6 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations {
|
||||
Standard_EXPORT GEOMImpl_ICurvesOperations(GEOM_Engine* theEngine, int theDocID);
|
||||
Standard_EXPORT ~GEOMImpl_ICurvesOperations();
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePolyline (std::list<Handle(GEOM_Object)> thePoints);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeCircleThreePnt (Handle(GEOM_Object) thePnt1,
|
||||
Handle(GEOM_Object) thePnt2,
|
||||
Handle(GEOM_Object) thePnt3);
|
||||
@ -66,10 +63,16 @@ class GEOMImpl_ICurvesOperations : public GEOM_IOperations {
|
||||
Handle(GEOM_Object) thePnt2,
|
||||
Handle(GEOM_Object) thePnt3);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeSplineBezier (std::list<Handle(GEOM_Object)> thePoints);
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeSplineInterpolation (std::list<Handle(GEOM_Object)> thePoints,
|
||||
Standard_EXPORT Handle(GEOM_Object) MakePolyline (std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed = false);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeSplineBezier (std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed = false);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeSplineInterpolation (std::list<Handle(GEOM_Object)> thePoints,
|
||||
bool theIsClosed = false,
|
||||
bool theDoReordering = false);
|
||||
|
||||
Standard_EXPORT Handle(GEOM_Object) MakeSketcher (const char* theCommand,
|
||||
std::list<double> theWorkingPlane);
|
||||
Standard_EXPORT Handle(GEOM_Object) Make3DSketcher (std::list<double> theCoordinates);
|
||||
|
@ -18,14 +18,14 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
//NOTE: This is an intreface to a function for the Polyline creation.
|
||||
//
|
||||
//NOTE: This is an interface to a function for the Polyline creation.
|
||||
|
||||
#include "GEOM_Function.hxx"
|
||||
|
||||
#define POLY_ARG_LENG 1
|
||||
#define POLY_ARG_LAST 1
|
||||
#define POLY_ARG_CLOS 2
|
||||
|
||||
class GEOMImpl_IPolyline
|
||||
{
|
||||
@ -37,10 +37,14 @@ class GEOMImpl_IPolyline
|
||||
|
||||
void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(POLY_ARG_LAST + theId, theP); }
|
||||
|
||||
void SetIsClosed(bool theIsClosed) { _func->SetInteger(POLY_ARG_CLOS, (int)theIsClosed); }
|
||||
|
||||
int GetLength() { return _func->GetInteger(POLY_ARG_LENG); }
|
||||
|
||||
Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(POLY_ARG_LAST + theId); }
|
||||
|
||||
bool GetIsClosed() { return (bool)_func->GetInteger(POLY_ARG_CLOS); }
|
||||
|
||||
private:
|
||||
|
||||
Handle(GEOM_Function) _func;
|
||||
|
@ -18,10 +18,9 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
//NOTE: This is an intreface to a function for the Prism creation.
|
||||
//
|
||||
|
||||
#include "GEOM_Function.hxx"
|
||||
|
||||
#define PRISM_ARG_H 1
|
||||
@ -32,6 +31,7 @@
|
||||
#define PRISM_ARG_DX 6
|
||||
#define PRISM_ARG_DY 7
|
||||
#define PRISM_ARG_DZ 8
|
||||
#define PRISM_ARG_SCALE 9
|
||||
|
||||
class GEOMImpl_IPrism
|
||||
{
|
||||
@ -44,6 +44,11 @@ class GEOMImpl_IPrism
|
||||
void SetFirstPoint(Handle(GEOM_Function) thePoint) { _func->SetReference(PRISM_ARG_PNT_F, thePoint); }
|
||||
void SetLastPoint (Handle(GEOM_Function) thePoint) { _func->SetReference(PRISM_ARG_PNT_L, thePoint); }
|
||||
|
||||
Handle(GEOM_Function) GetBase () { return _func->GetReference(PRISM_ARG_BASE); }
|
||||
Handle(GEOM_Function) GetVector() { return _func->GetReference(PRISM_ARG_VEC ); }
|
||||
Handle(GEOM_Function) GetFirstPoint() { return _func->GetReference(PRISM_ARG_PNT_F ); }
|
||||
Handle(GEOM_Function) GetLastPoint () { return _func->GetReference(PRISM_ARG_PNT_L ); }
|
||||
|
||||
void SetDX(double theDX) { _func->SetReal(PRISM_ARG_DX, theDX); }
|
||||
void SetDY(double theDY) { _func->SetReal(PRISM_ARG_DY, theDY); }
|
||||
void SetDZ(double theDZ) { _func->SetReal(PRISM_ARG_DZ, theDZ); }
|
||||
@ -52,15 +57,14 @@ class GEOMImpl_IPrism
|
||||
double GetDY() { return _func->GetReal(PRISM_ARG_DY); }
|
||||
double GetDZ() { return _func->GetReal(PRISM_ARG_DZ); }
|
||||
|
||||
Handle(GEOM_Function) GetBase () { return _func->GetReference(PRISM_ARG_BASE); }
|
||||
Handle(GEOM_Function) GetVector() { return _func->GetReference(PRISM_ARG_VEC ); }
|
||||
Handle(GEOM_Function) GetFirstPoint() { return _func->GetReference(PRISM_ARG_PNT_F ); }
|
||||
Handle(GEOM_Function) GetLastPoint () { return _func->GetReference(PRISM_ARG_PNT_L ); }
|
||||
|
||||
void SetH(double theH) { _func->SetReal(PRISM_ARG_H, theH); }
|
||||
|
||||
double GetH() { return _func->GetReal(PRISM_ARG_H); }
|
||||
|
||||
void SetScale(double theH) { _func->SetReal(PRISM_ARG_SCALE, theH); }
|
||||
|
||||
double GetScale() { return _func->GetReal(PRISM_ARG_SCALE); }
|
||||
|
||||
private:
|
||||
|
||||
Handle(GEOM_Function) _func;
|
||||
|
@ -18,14 +18,14 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// NOTE: This is an interface to a function for the Spline creation.
|
||||
//
|
||||
|
||||
#include "GEOM_Function.hxx"
|
||||
|
||||
#define SPL_ARG_LENG 1
|
||||
#define SPL_ARG_CLOS 2
|
||||
#define SPL_ARG_REOR 3
|
||||
#define SPL_ARG_LAST 2
|
||||
|
||||
class GEOMImpl_ISpline
|
||||
@ -38,12 +38,16 @@ class GEOMImpl_ISpline
|
||||
|
||||
void SetIsClosed(bool theIsClosed) { _func->SetInteger(SPL_ARG_CLOS, (int)theIsClosed); }
|
||||
|
||||
void SetDoReordering(bool theDoReordering) { _func->SetInteger(SPL_ARG_REOR, (int)theDoReordering); }
|
||||
|
||||
void SetPoint(int theId, Handle(GEOM_Function) theP) { _func->SetReference(SPL_ARG_LAST + theId, theP); }
|
||||
|
||||
int GetLength() { return _func->GetInteger(SPL_ARG_LENG); }
|
||||
|
||||
bool GetIsClosed() { return (bool)_func->GetInteger(SPL_ARG_CLOS); }
|
||||
|
||||
bool GetDoReordering() { return (bool)_func->GetInteger(SPL_ARG_REOR); }
|
||||
|
||||
Handle(GEOM_Function) GetPoint(int theId) { return _func->GetReference(SPL_ARG_LAST + theId); }
|
||||
|
||||
private:
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -33,8 +32,6 @@
|
||||
#include <GEOMImpl_Types.hxx>
|
||||
#include <GEOM_Function.hxx>
|
||||
|
||||
//#include <GEOMAlgo_GlueAnalyser.hxx>
|
||||
|
||||
#include <ShapeAnalysis_FreeBounds.hxx>
|
||||
#include <ShapeAnalysis_Edge.hxx>
|
||||
#include <ShapeFix_Face.hxx>
|
||||
@ -66,6 +63,7 @@
|
||||
#include <TopoDS_Face.hxx>
|
||||
#include <TopoDS_Compound.hxx>
|
||||
#include <TopTools_SequenceOfShape.hxx>
|
||||
#include <TopTools_HSequenceOfShape.hxx>
|
||||
#include <TopTools_IndexedDataMapOfShapeShape.hxx>
|
||||
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
|
||||
#include <TopTools_ListIteratorOfListOfShape.hxx>
|
||||
@ -614,6 +612,367 @@ static void FindFirstPairFaces(const TopoDS_Shape& S1, const TopoDS_Shape& S2,
|
||||
FS2 = Fs(numface);
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : CreatePipeWithDifferentSections
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TopoDS_Shape GEOMImpl_PipeDriver::CreatePipeWithDifferentSections
|
||||
(const TopoDS_Wire& theWirePath,
|
||||
const Handle(TopTools_HSequenceOfShape) theHSeqBases,
|
||||
const Handle(TopTools_HSequenceOfShape) theHSeqLocs,
|
||||
const Standard_Boolean theWithContact,
|
||||
const Standard_Boolean theWithCorrect)
|
||||
{
|
||||
TopoDS_Shape aShape;
|
||||
|
||||
TopoDS_Wire aWirePath = theWirePath;
|
||||
|
||||
Standard_Integer nbBases = theHSeqBases->Length();
|
||||
Standard_Integer nbLocs = (theHSeqLocs.IsNull() ? 0 : theHSeqLocs->Length());
|
||||
|
||||
if (nbLocs && nbLocs != nbBases) {
|
||||
Standard_ConstructionError::Raise("Number of sections is not equal to number of locations ");
|
||||
}
|
||||
|
||||
TopTools_SequenceOfShape aSeqBases;
|
||||
TopTools_SequenceOfShape aSeqLocs;
|
||||
TopTools_SequenceOfShape aSeqFaces;
|
||||
|
||||
Standard_Integer i = 1;
|
||||
for (i = 1; i <= nbBases; i++) {
|
||||
if (theHSeqBases->Value(i).IsNull())
|
||||
continue;
|
||||
|
||||
// Make copy to prevent modifying of base object 0020766 : EDF 1320
|
||||
TopoDS_Shape aShapeBase;
|
||||
BRepBuilderAPI_Copy Copy (theHSeqBases->Value(i));
|
||||
if (Copy.IsDone())
|
||||
aShapeBase = Copy.Shape();
|
||||
|
||||
TopAbs_ShapeEnum aTypeBase = aShapeBase.ShapeType();
|
||||
|
||||
//if for section was specified face with a few wires then a few
|
||||
// pipes were build and make solid
|
||||
Standard_Boolean NeedCreateSolid = Standard_False;
|
||||
if (aTypeBase == TopAbs_SHELL) {
|
||||
// create wire as boundary contour if shell is no closed
|
||||
// get free boundary shapes
|
||||
ShapeAnalysis_FreeBounds anAnalizer(aShapeBase);
|
||||
TopoDS_Compound aClosed = anAnalizer.GetClosedWires();
|
||||
TopExp_Explorer anExp;
|
||||
TopoDS_Shape aWire;
|
||||
Standard_Integer NbWires = 0;
|
||||
for (anExp.Init(aClosed, TopAbs_WIRE); anExp.More(); anExp.Next()) {
|
||||
NbWires++;
|
||||
aWire = anExp.Current();
|
||||
}
|
||||
if (NbWires != 1) {
|
||||
// bad case
|
||||
Standard_ConstructionError::Raise("Bad shell is used as section ");
|
||||
}
|
||||
NeedCreateSolid = Standard_True;
|
||||
aSeqFaces.Append(aShapeBase);
|
||||
aSeqBases.Append(aWire);
|
||||
}
|
||||
else if (aTypeBase == TopAbs_FACE) {
|
||||
NeedCreateSolid = Standard_True;
|
||||
//for case one path should be used other type function
|
||||
aSeqFaces.Append(aShapeBase);
|
||||
TopExp_Explorer aExpW(aShapeBase,TopAbs_WIRE);
|
||||
for (; aExpW.More(); aExpW.Next()) {
|
||||
TopoDS_Shape aWireProf = aExpW.Current();
|
||||
aSeqBases.Append(aWireProf);
|
||||
}
|
||||
}
|
||||
else if (aTypeBase == TopAbs_WIRE || aTypeBase == TopAbs_VERTEX) {
|
||||
aSeqBases.Append(aShapeBase);
|
||||
}
|
||||
else if (aTypeBase == TopAbs_EDGE) {
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aShapeBase);
|
||||
TopoDS_Shape aWireProf = BRepBuilderAPI_MakeWire(anEdge);
|
||||
aSeqBases.Append(aWireProf);
|
||||
}
|
||||
if (nbLocs) {
|
||||
TopoDS_Shape aShapeLoc = theHSeqLocs->Value(i);
|
||||
if (aShapeLoc.IsNull() || aShapeLoc.ShapeType() != TopAbs_VERTEX)
|
||||
continue;
|
||||
aSeqLocs.Append(aShapeLoc);
|
||||
}
|
||||
}
|
||||
|
||||
nbLocs = aSeqLocs.Length();
|
||||
|
||||
// skl 02.05.2007
|
||||
TopTools_SequenceOfShape Edges;
|
||||
if (nbLocs > 0) {
|
||||
// we have to check that each location shape is a vertex from
|
||||
// path and update aSeqLocs if it is needed (and possible)
|
||||
TColgp_SequenceOfPnt PLocs;
|
||||
for (i=1; i<=nbLocs; i++) {
|
||||
TopoDS_Vertex V = TopoDS::Vertex(aSeqLocs.Value(i));
|
||||
PLocs.Append(BRep_Tool::Pnt(V));
|
||||
}
|
||||
//TopTools_SequenceOfShape Edges;
|
||||
TopExp_Explorer anExp;
|
||||
for (anExp.Init(aWirePath, TopAbs_EDGE); anExp.More(); anExp.Next()) {
|
||||
Edges.Append(anExp.Current());
|
||||
}
|
||||
int nbEdges = Edges.Length();
|
||||
ShapeAnalysis_Edge sae;
|
||||
TopoDS_Edge edge = TopoDS::Edge(Edges.First());
|
||||
double tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex VF = sae.FirstVertex(edge);
|
||||
gp_Pnt PF = BRep_Tool::Pnt(VF);
|
||||
//cout<<"PF("<<PF.X()<<","<<PF.Y()<<","<<PF.Z()<<")"<<endl;
|
||||
if (PF.Distance(PLocs.First()) > tol) {
|
||||
Standard_ConstructionError::Raise
|
||||
("First location shapes is not coincided with first vertex of aWirePath");
|
||||
}
|
||||
aSeqLocs.ChangeValue(1) = VF;
|
||||
edge = TopoDS::Edge(Edges.Last());
|
||||
tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex VL = sae.LastVertex(edge);
|
||||
gp_Pnt PL = BRep_Tool::Pnt(VL);
|
||||
if (PL.Distance(PLocs.Last()) > tol) {
|
||||
Standard_ConstructionError::Raise
|
||||
("Last location shapes is not coincided with last vertex of aWirePath");
|
||||
}
|
||||
aSeqLocs.ChangeValue(nbLocs) = VL;
|
||||
int jcurr = 2;
|
||||
for (i=1; i<=Edges.Length() && jcurr<nbLocs; i++) {
|
||||
TopoDS_Edge E = TopoDS::Edge(Edges.Value(i));
|
||||
tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex V1 = sae.FirstVertex(E);
|
||||
TopoDS_Vertex V2 = sae.LastVertex(E);
|
||||
gp_Pnt P1 = BRep_Tool::Pnt(V1);
|
||||
gp_Pnt P2 = BRep_Tool::Pnt(V2);
|
||||
if (P2.Distance(PLocs.Value(jcurr)) < tol) {
|
||||
aSeqLocs.ChangeValue(jcurr) = V2;
|
||||
jcurr++;
|
||||
}
|
||||
else {
|
||||
// find distance between E and aLocs(jcurr)
|
||||
double fp,lp;
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(E,fp,lp);
|
||||
GeomAPI_ProjectPointOnCurve PPCurve (PLocs.Value(jcurr),C);
|
||||
if (PPCurve.NbPoints()>0 &&
|
||||
PLocs.Value(jcurr).Distance(PPCurve.Point(1)) < tol) {
|
||||
double param = PPCurve.Parameter(1);
|
||||
gp_Pnt PC1;
|
||||
C->D0(param,PC1);
|
||||
// split current edge
|
||||
Handle(Geom_TrimmedCurve) tc1 = new Geom_TrimmedCurve(C,fp,param);
|
||||
Handle(Geom_TrimmedCurve) tc2 = new Geom_TrimmedCurve(C,param,lp);
|
||||
TopoDS_Edge E1,E2;
|
||||
BRep_Builder B;
|
||||
gp_Pnt Pfp;
|
||||
C->D0(fp,Pfp);
|
||||
if (Pfp.Distance(P1)<tol) {
|
||||
B.MakeEdge(E1,tc1,tol);
|
||||
B.Add(E1,V1);
|
||||
TopoDS_Shape tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_REVERSED);
|
||||
B.Add(E1,TopoDS::Vertex(tmpV));
|
||||
B.MakeEdge(E2,tc2,tol);
|
||||
tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_FORWARD);
|
||||
B.Add(E2,TopoDS::Vertex(tmpV));
|
||||
B.Add(E2,V2);
|
||||
}
|
||||
else {
|
||||
B.MakeEdge(E1,tc2,tol);
|
||||
TopoDS_Shape tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_FORWARD);
|
||||
B.Add(E1,TopoDS::Vertex(tmpV));
|
||||
B.Add(E1,V1);
|
||||
E1.Reverse();
|
||||
B.MakeEdge(E2,tc1,tol);
|
||||
B.Add(E2,V2);
|
||||
tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_REVERSED);
|
||||
B.Add(E2,TopoDS::Vertex(tmpV));
|
||||
E2.Reverse();
|
||||
}
|
||||
jcurr++;
|
||||
Edges.Remove(i);
|
||||
Edges.InsertAfter(i-1,E1);
|
||||
Edges.InsertAfter(i,E2);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nbEdges<Edges.Length()) {
|
||||
// one of edges was splitted => we have to update WirePath
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire W;
|
||||
B.MakeWire(W);
|
||||
for (i=1; i<=Edges.Length(); i++) {
|
||||
B.Add(W,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
aWirePath = W;
|
||||
}
|
||||
}
|
||||
|
||||
// check curvature of wire for condition that
|
||||
// max summary angle between directions along
|
||||
// wire path must be < 4*PI. If not - split wire
|
||||
// and seguences of shapes, perform pipe for each
|
||||
// and make sewing after that
|
||||
double fp,lp;
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(TopoDS::Edge(Edges.Value(1)),fp,lp);
|
||||
gp_Pnt P1,P2;
|
||||
gp_Vec Vec1,Vec2;
|
||||
C->D1(fp,P1,Vec1);
|
||||
C->D1(lp,P2,Vec2);
|
||||
double SumAng = fabs(Vec1.Angle(Vec2));
|
||||
Vec1 = Vec2;
|
||||
P1 = P2;
|
||||
TColStd_SequenceOfInteger SplitEdgeNums,SplitLocNums;
|
||||
int LastLoc = 1;
|
||||
//cout<<"Edges.Length()="<<Edges.Length()<<endl;
|
||||
for (i=2; i<=Edges.Length(); i++) {
|
||||
TopoDS_Edge edge = TopoDS::Edge(Edges.Value(i));
|
||||
double tol = BRep_Tool::Tolerance(edge);
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(edge,fp,lp);
|
||||
C->D1(lp,P2,Vec2);
|
||||
double ang = fabs(Vec1.Angle(Vec2));
|
||||
SumAng += ang;
|
||||
if (SumAng>4*PI) {
|
||||
SumAng = ang;
|
||||
SplitEdgeNums.Append(i-1);
|
||||
int j;
|
||||
for (j=LastLoc+1; j<=aSeqLocs.Length(); j++) {
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aSeqLocs.Value(j));
|
||||
gp_Pnt P = BRep_Tool::Pnt(aVert);
|
||||
if (P1.Distance(P) < tol) {
|
||||
SplitLocNums.Append(j);
|
||||
LastLoc = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Vec1 = Vec2;
|
||||
P1 = P2;
|
||||
}
|
||||
|
||||
if (SplitLocNums.Length()==SplitEdgeNums.Length() && SplitEdgeNums.Length()>0) {
|
||||
TopTools_SequenceOfShape aSeqRes;
|
||||
int nn, num1 = 1, num2 = 1;
|
||||
for (nn=1; nn<=SplitEdgeNums.Length(); nn++) {
|
||||
// create wirepath and sequences of shapes
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire tmpW;
|
||||
B.MakeWire(tmpW);
|
||||
for (i=num1; i<=SplitEdgeNums.Value(nn); i++) {
|
||||
B.Add(tmpW,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
num1 = SplitEdgeNums.Value(nn) + 1;
|
||||
TopTools_SequenceOfShape aTmpSeqBases;
|
||||
TopTools_SequenceOfShape aTmpSeqLocs;
|
||||
for (i=num2; i<=SplitLocNums.Value(nn); i++) {
|
||||
aTmpSeqBases.Append(aSeqBases.Value(i));
|
||||
aTmpSeqLocs.Append(aSeqLocs.Value(i));
|
||||
}
|
||||
num2 = SplitLocNums.Value(nn);
|
||||
// make pipe
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(tmpW);
|
||||
Standard_Integer nbShapes = aTmpSeqBases.Length();
|
||||
for (i=1; i<=nbShapes; i++) {
|
||||
TopoDS_Shape aShapeLoc = aTmpSeqLocs.Value(i);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aTmpSeqBases.Value(i), aVert, theWithContact, theWithCorrect);
|
||||
}
|
||||
if (!aBuilder.IsReady()) {
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
TopoDS_Shape resShape = aBuilder.Shape();
|
||||
aSeqRes.Append(resShape);
|
||||
}
|
||||
// create wirepath and sequences of shapes for last part
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire tmpW;
|
||||
B.MakeWire(tmpW);
|
||||
for (i=num1; i<=Edges.Length(); i++) {
|
||||
B.Add(tmpW,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
TopTools_SequenceOfShape aTmpSeqBases;
|
||||
TopTools_SequenceOfShape aTmpSeqLocs;
|
||||
for (i=num2; i<=aSeqLocs.Length(); i++) {
|
||||
aTmpSeqBases.Append(aSeqBases.Value(i));
|
||||
aTmpSeqLocs.Append(aSeqLocs.Value(i));
|
||||
}
|
||||
// make pipe for last part
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(tmpW);
|
||||
Standard_Integer nbShapes = aTmpSeqBases.Length();
|
||||
for (i=1; i<=nbShapes; i++) {
|
||||
TopoDS_Shape aShapeLoc = aTmpSeqLocs.Value(i);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aTmpSeqBases.Value(i), aVert, theWithContact, theWithCorrect);
|
||||
}
|
||||
if (!aBuilder.IsReady()) {
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
TopoDS_Shape resShape = aBuilder.Shape();
|
||||
aSeqRes.Append(resShape);
|
||||
// make sewing for result
|
||||
Handle(BRepBuilderAPI_Sewing) aSewing = new BRepBuilderAPI_Sewing;
|
||||
aSewing->SetTolerance(Precision::Confusion());
|
||||
aSewing->SetFaceMode(Standard_True);
|
||||
aSewing->SetFloatingEdgesMode(Standard_False);
|
||||
aSewing->SetNonManifoldMode(Standard_False);
|
||||
for (i=1; i<=aSeqRes.Length(); i++) {
|
||||
aSewing->Add(aSeqRes.Value(i));
|
||||
}
|
||||
aSewing->Perform();
|
||||
aShape = aSewing->SewedShape();
|
||||
}
|
||||
else {
|
||||
// old implementation without splitting
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(aWirePath);
|
||||
|
||||
Standard_Integer nbShapes = aSeqBases.Length();
|
||||
Standard_Integer step = nbShapes/nbBases;
|
||||
|
||||
if (nbShapes < nbBases || fmod((double)nbShapes, (double)nbBases)) {
|
||||
Standard_ConstructionError::Raise("Invalid sections were specified for building pipe");
|
||||
}
|
||||
Standard_Integer ind =0;
|
||||
for (i = 1; i <= nbShapes && ind < nbShapes; i++) { //i+nbBases <= nbShapes
|
||||
TopTools_SequenceOfShape usedBases;
|
||||
Standard_Integer j = 1;
|
||||
for (; j <= nbBases; j++) {
|
||||
ind = i + (j-1)*step;
|
||||
TopoDS_Shape aWireProf = aSeqBases.Value(ind);
|
||||
usedBases.Append(aWireProf);
|
||||
if (nbLocs) {
|
||||
TopoDS_Shape aShapeLoc = aSeqLocs.Value(j);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aWireProf, aVert, theWithContact, theWithCorrect);
|
||||
}
|
||||
else
|
||||
aBuilder.Add(aWireProf, theWithContact, theWithCorrect);
|
||||
}
|
||||
if (!aBuilder.IsReady()) {
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
aShape = aBuilder.Shape();
|
||||
aSeqFaces.Append(aShape);
|
||||
for (j = 1; j <=usedBases.Length(); j++)
|
||||
aBuilder.Delete(usedBases.Value(j));
|
||||
}
|
||||
|
||||
//for case if section is face
|
||||
if (aSeqFaces.Length() >1) {
|
||||
BRep_Builder aB;
|
||||
TopoDS_Compound aComp;
|
||||
aB.MakeCompound(aComp);
|
||||
for (i = 1; i <= aSeqFaces.Length(); i++)
|
||||
aB.Add(aComp,aSeqFaces.Value(i));
|
||||
aShape = aComp;
|
||||
}
|
||||
}
|
||||
|
||||
return aShape;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : CreatePipeForShellSections
|
||||
//purpose : auxilary for Execute()
|
||||
@ -1979,8 +2338,7 @@ Standard_Integer GEOMImpl_PipeDriver::Execute(TFunction_Logbook& log) const
|
||||
|
||||
TopoDS_Shape aShape;
|
||||
|
||||
if (aType == PIPE_BASE_PATH)
|
||||
{
|
||||
if (aType == PIPE_BASE_PATH) {
|
||||
Handle(GEOM_Function) aRefBase = aCI->GetBase();
|
||||
TopoDS_Shape aShapeBase;
|
||||
|
||||
@ -2001,86 +2359,35 @@ Standard_Integer GEOMImpl_PipeDriver::Execute(TFunction_Logbook& log) const
|
||||
//building pipe with different sections
|
||||
else if (aType == PIPE_DIFFERENT_SECTIONS) {
|
||||
GEOMImpl_IPipeDiffSect* aCIDS = (GEOMImpl_IPipeDiffSect*)aCI;
|
||||
//GEOMImpl_IPipeDiffSect* aCIDS = static_cast<GEOMImpl_IPipeDiffSect*>(aCI);
|
||||
//BRepOffsetAPI_MakePipeShell aBuilder(aWirePath);
|
||||
Handle(TColStd_HSequenceOfTransient) aBasesObjs = aCIDS->GetBases ();
|
||||
Handle(TColStd_HSequenceOfTransient) aLocObjs = aCIDS->GetLocations ();
|
||||
Standard_Boolean aWithContact = (aCIDS->GetWithContactMode());
|
||||
Standard_Boolean aWithCorrect = (aCIDS->GetWithCorrectionMode());
|
||||
|
||||
Standard_Integer i =1, nbBases = aBasesObjs->Length(),
|
||||
nbLocs = (aLocObjs.IsNull() ? 0 :aLocObjs->Length());
|
||||
|
||||
if(nbLocs && nbLocs != nbBases) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Number of sections is not equal to number of locations ");
|
||||
if (aCI) {
|
||||
delete aCI;
|
||||
aCI = 0;
|
||||
}
|
||||
TopTools_SequenceOfShape aSeqBases;
|
||||
TopTools_SequenceOfShape aSeqLocs;
|
||||
TopTools_SequenceOfShape aSeqFaces;
|
||||
for (; i <= nbBases; i++) {
|
||||
|
||||
Standard_Integer nbBases = aBasesObjs->Length();
|
||||
Standard_Integer nbLocs = (aLocObjs.IsNull() ? 0 : aLocObjs->Length());
|
||||
|
||||
Handle(TopTools_HSequenceOfShape) aHSeqBases = new TopTools_HSequenceOfShape;
|
||||
Handle(TopTools_HSequenceOfShape) aHSeqLocs = new TopTools_HSequenceOfShape;
|
||||
Standard_Integer i;
|
||||
|
||||
for (i = 1; i <= nbBases; i++) {
|
||||
Handle(Standard_Transient) anItem = aBasesObjs->Value(i);
|
||||
if (anItem.IsNull())
|
||||
continue;
|
||||
Handle(GEOM_Function) aRefBase = Handle(GEOM_Function)::DownCast(anItem);
|
||||
if (aRefBase.IsNull())
|
||||
continue;
|
||||
|
||||
if (aRefBase->GetValue().IsNull())
|
||||
continue;
|
||||
|
||||
// Make copy to prevent modifying of base object 0020766 : EDF 1320
|
||||
TopoDS_Shape aShapeBase;
|
||||
BRepBuilderAPI_Copy Copy(aRefBase->GetValue());
|
||||
if( Copy.IsDone() )
|
||||
aShapeBase = Copy.Shape();
|
||||
|
||||
TopAbs_ShapeEnum aTypeBase = aShapeBase.ShapeType();
|
||||
|
||||
//if for section was specified face with a few wires then a few
|
||||
// pipes were build and make solid
|
||||
Standard_Boolean NeedCreateSolid = Standard_False;
|
||||
if(aTypeBase == TopAbs_SHELL) {
|
||||
// create wire as boundary contour if shell is no closed
|
||||
// get free boundary shapes
|
||||
ShapeAnalysis_FreeBounds anAnalizer( aShapeBase );
|
||||
TopoDS_Compound aClosed = anAnalizer.GetClosedWires();
|
||||
TopExp_Explorer anExp;
|
||||
TopoDS_Shape aWire;
|
||||
Standard_Integer NbWires = 0;
|
||||
for ( anExp.Init( aClosed, TopAbs_WIRE ); anExp.More(); anExp.Next() ) {
|
||||
NbWires++;
|
||||
aWire = anExp.Current();
|
||||
aHSeqBases->Append(aRefBase->GetValue());
|
||||
}
|
||||
if(NbWires!=1) {
|
||||
// bad case
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Bad shell is used as section ");
|
||||
}
|
||||
NeedCreateSolid = Standard_True;
|
||||
aSeqFaces.Append(aShapeBase);
|
||||
aSeqBases.Append(aWire);
|
||||
}
|
||||
else if(aTypeBase == TopAbs_FACE) {
|
||||
NeedCreateSolid = Standard_True;
|
||||
//for case one path should be used other type function
|
||||
aSeqFaces.Append(aShapeBase);
|
||||
TopExp_Explorer aExpW(aShapeBase,TopAbs_WIRE);
|
||||
for (; aExpW.More(); aExpW.Next())
|
||||
{
|
||||
TopoDS_Shape aWireProf = aExpW.Current();
|
||||
aSeqBases.Append(aWireProf);
|
||||
}
|
||||
}
|
||||
else if(aTypeBase == TopAbs_WIRE || aTypeBase == TopAbs_VERTEX) {
|
||||
aSeqBases.Append(aShapeBase);
|
||||
}
|
||||
else if(aTypeBase == TopAbs_EDGE) {
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aShapeBase);
|
||||
TopoDS_Shape aWireProf = BRepBuilderAPI_MakeWire(anEdge);
|
||||
aSeqBases.Append(aWireProf);
|
||||
}
|
||||
if(nbLocs) {
|
||||
for (i = 1; i <= nbLocs; i++) {
|
||||
Handle(Standard_Transient) anItemLoc = aLocObjs->Value(i);
|
||||
if (anItemLoc.IsNull())
|
||||
continue;
|
||||
@ -2088,287 +2395,11 @@ Standard_Integer GEOMImpl_PipeDriver::Execute(TFunction_Logbook& log) const
|
||||
TopoDS_Shape aShapeLoc = aRefLoc->GetValue();
|
||||
if (aShapeLoc.IsNull() || aShapeLoc.ShapeType() != TopAbs_VERTEX)
|
||||
continue;
|
||||
aSeqLocs.Append(aShapeLoc);
|
||||
}
|
||||
|
||||
aHSeqLocs->Append(aShapeLoc);
|
||||
}
|
||||
|
||||
nbLocs = aSeqLocs.Length();
|
||||
|
||||
// skl 02.05.2007
|
||||
TopTools_SequenceOfShape Edges;
|
||||
if(nbLocs>0) {
|
||||
// we have to check that each location shape is a vertex from
|
||||
// path and update aSeqLocs if it is needed (and possible)
|
||||
TColgp_SequenceOfPnt PLocs;
|
||||
for(i=1; i<=nbLocs; i++) {
|
||||
TopoDS_Vertex V = TopoDS::Vertex(aSeqLocs.Value(i));
|
||||
PLocs.Append(BRep_Tool::Pnt(V));
|
||||
}
|
||||
//TopTools_SequenceOfShape Edges;
|
||||
TopExp_Explorer anExp;
|
||||
for ( anExp.Init( aWirePath, TopAbs_EDGE ); anExp.More(); anExp.Next() ) {
|
||||
Edges.Append(anExp.Current());
|
||||
}
|
||||
int nbEdges = Edges.Length();
|
||||
ShapeAnalysis_Edge sae;
|
||||
TopoDS_Edge edge = TopoDS::Edge(Edges.First());
|
||||
double tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex VF = sae.FirstVertex(edge);
|
||||
gp_Pnt PF = BRep_Tool::Pnt(VF);
|
||||
//cout<<"PF("<<PF.X()<<","<<PF.Y()<<","<<PF.Z()<<")"<<endl;
|
||||
if( PF.Distance(PLocs.First()) > tol ) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise
|
||||
("First location shapes is not coincided with first vertex of aWirePath");
|
||||
}
|
||||
aSeqLocs.ChangeValue(1) = VF;
|
||||
edge = TopoDS::Edge(Edges.Last());
|
||||
tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex VL = sae.LastVertex(edge);
|
||||
gp_Pnt PL = BRep_Tool::Pnt(VL);
|
||||
if( PL.Distance(PLocs.Last()) > tol ) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise
|
||||
("Last location shapes is not coincided with last vertex of aWirePath");
|
||||
}
|
||||
aSeqLocs.ChangeValue(nbLocs) = VL;
|
||||
int jcurr = 2;
|
||||
for(i=1; i<=Edges.Length() && jcurr<nbLocs; i++) {
|
||||
TopoDS_Edge E = TopoDS::Edge(Edges.Value(i));
|
||||
tol = BRep_Tool::Tolerance(edge);
|
||||
TopoDS_Vertex V1 = sae.FirstVertex(E);
|
||||
TopoDS_Vertex V2 = sae.LastVertex(E);
|
||||
gp_Pnt P1 = BRep_Tool::Pnt(V1);
|
||||
gp_Pnt P2 = BRep_Tool::Pnt(V2);
|
||||
if( P2.Distance(PLocs.Value(jcurr)) < tol ) {
|
||||
aSeqLocs.ChangeValue(jcurr) = V2;
|
||||
jcurr++;
|
||||
}
|
||||
else {
|
||||
// find distance between E and aLocs(jcurr)
|
||||
double fp,lp;
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(E,fp,lp);
|
||||
GeomAPI_ProjectPointOnCurve PPCurve (PLocs.Value(jcurr),C);
|
||||
if( PPCurve.NbPoints()>0 &&
|
||||
PLocs.Value(jcurr).Distance(PPCurve.Point(1)) < tol ) {
|
||||
double param = PPCurve.Parameter(1);
|
||||
gp_Pnt PC1;
|
||||
C->D0(param,PC1);
|
||||
// split current edge
|
||||
Handle(Geom_TrimmedCurve) tc1 = new Geom_TrimmedCurve(C,fp,param);
|
||||
Handle(Geom_TrimmedCurve) tc2 = new Geom_TrimmedCurve(C,param,lp);
|
||||
TopoDS_Edge E1,E2;
|
||||
BRep_Builder B;
|
||||
gp_Pnt Pfp;
|
||||
C->D0(fp,Pfp);
|
||||
if(Pfp.Distance(P1)<tol) {
|
||||
B.MakeEdge(E1,tc1,tol);
|
||||
B.Add(E1,V1);
|
||||
TopoDS_Shape tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_REVERSED);
|
||||
B.Add(E1,TopoDS::Vertex(tmpV));
|
||||
B.MakeEdge(E2,tc2,tol);
|
||||
tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_FORWARD);
|
||||
B.Add(E2,TopoDS::Vertex(tmpV));
|
||||
B.Add(E2,V2);
|
||||
}
|
||||
else {
|
||||
B.MakeEdge(E1,tc2,tol);
|
||||
TopoDS_Shape tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_FORWARD);
|
||||
B.Add(E1,TopoDS::Vertex(tmpV));
|
||||
B.Add(E1,V1);
|
||||
E1.Reverse();
|
||||
B.MakeEdge(E2,tc1,tol);
|
||||
B.Add(E2,V2);
|
||||
tmpV = aSeqLocs.Value(jcurr).Oriented(TopAbs_REVERSED);
|
||||
B.Add(E2,TopoDS::Vertex(tmpV));
|
||||
E2.Reverse();
|
||||
}
|
||||
jcurr++;
|
||||
Edges.Remove(i);
|
||||
Edges.InsertAfter(i-1,E1);
|
||||
Edges.InsertAfter(i,E2);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(nbEdges<Edges.Length()) {
|
||||
// one of edges was splitted => we have to update WirePath
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire W;
|
||||
B.MakeWire(W);
|
||||
for(i=1; i<=Edges.Length(); i++) {
|
||||
B.Add(W,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
aWirePath = W;
|
||||
}
|
||||
}
|
||||
|
||||
// check curvature of wire for condition that
|
||||
// max summary angle between directions along
|
||||
// wire path must be < 4*PI. If not - split wire
|
||||
// and seguences of shapes, perform pipe for each
|
||||
// and make sewing after that
|
||||
double fp,lp;
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(TopoDS::Edge(Edges.Value(1)),fp,lp);
|
||||
gp_Pnt P1,P2;
|
||||
gp_Vec Vec1,Vec2;
|
||||
C->D1(fp,P1,Vec1);
|
||||
C->D1(lp,P2,Vec2);
|
||||
double SumAng = fabs(Vec1.Angle(Vec2));
|
||||
Vec1 = Vec2;
|
||||
P1 = P2;
|
||||
TColStd_SequenceOfInteger SplitEdgeNums,SplitLocNums;
|
||||
int LastLoc = 1;
|
||||
//cout<<"Edges.Length()="<<Edges.Length()<<endl;
|
||||
for(i=2; i<=Edges.Length(); i++) {
|
||||
TopoDS_Edge edge = TopoDS::Edge(Edges.Value(i));
|
||||
double tol = BRep_Tool::Tolerance(edge);
|
||||
Handle(Geom_Curve) C = BRep_Tool::Curve(edge,fp,lp);
|
||||
C->D1(lp,P2,Vec2);
|
||||
double ang = fabs(Vec1.Angle(Vec2));
|
||||
SumAng += ang;
|
||||
if(SumAng>4*PI) {
|
||||
SumAng = ang;
|
||||
SplitEdgeNums.Append(i-1);
|
||||
int j;
|
||||
for(j=LastLoc+1; j<=aSeqLocs.Length(); j++) {
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aSeqLocs.Value(j));
|
||||
gp_Pnt P = BRep_Tool::Pnt(aVert);
|
||||
if( P1.Distance(P) < tol ) {
|
||||
SplitLocNums.Append(j);
|
||||
LastLoc = j;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Vec1 = Vec2;
|
||||
P1 = P2;
|
||||
}
|
||||
|
||||
//cout<<"SplitEdgeNums.Length()="<<SplitEdgeNums.Length()<<endl;
|
||||
//cout<<"SplitLocNums.Length()="<<SplitLocNums.Length()<<endl;
|
||||
if( SplitLocNums.Length()==SplitEdgeNums.Length() && SplitEdgeNums.Length()>0 ) {
|
||||
TopTools_SequenceOfShape aSeqRes;
|
||||
int nn, num1 = 1, num2 = 1;
|
||||
for(nn=1; nn<=SplitEdgeNums.Length(); nn++) {
|
||||
// create wirepath and sequences of shapes
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire tmpW;
|
||||
B.MakeWire(tmpW);
|
||||
for(i=num1; i<=SplitEdgeNums.Value(nn); i++) {
|
||||
B.Add(tmpW,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
num1 = SplitEdgeNums.Value(nn) + 1;
|
||||
TopTools_SequenceOfShape aTmpSeqBases;
|
||||
TopTools_SequenceOfShape aTmpSeqLocs;
|
||||
for(i=num2; i<=SplitLocNums.Value(nn); i++) {
|
||||
aTmpSeqBases.Append(aSeqBases.Value(i));
|
||||
aTmpSeqLocs.Append(aSeqLocs.Value(i));
|
||||
}
|
||||
num2 = SplitLocNums.Value(nn);
|
||||
// make pipe
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(tmpW);
|
||||
Standard_Integer nbShapes = aTmpSeqBases.Length();
|
||||
for(i=1; i<=nbShapes; i++) {
|
||||
TopoDS_Shape aShapeLoc = aTmpSeqLocs.Value(i);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aTmpSeqBases.Value(i), aVert, aWithContact, aWithCorrect);
|
||||
}
|
||||
if(!aBuilder.IsReady()) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
TopoDS_Shape resShape = aBuilder.Shape();
|
||||
aSeqRes.Append(resShape);
|
||||
}
|
||||
// create wirepath and sequences of shapes for last part
|
||||
BRep_Builder B;
|
||||
TopoDS_Wire tmpW;
|
||||
B.MakeWire(tmpW);
|
||||
for(i=num1; i<=Edges.Length(); i++) {
|
||||
B.Add(tmpW,TopoDS::Edge(Edges.Value(i)));
|
||||
}
|
||||
TopTools_SequenceOfShape aTmpSeqBases;
|
||||
TopTools_SequenceOfShape aTmpSeqLocs;
|
||||
for(i=num2; i<=aSeqLocs.Length(); i++) {
|
||||
aTmpSeqBases.Append(aSeqBases.Value(i));
|
||||
aTmpSeqLocs.Append(aSeqLocs.Value(i));
|
||||
}
|
||||
// make pipe for last part
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(tmpW);
|
||||
Standard_Integer nbShapes = aTmpSeqBases.Length();
|
||||
for(i=1; i<=nbShapes; i++) {
|
||||
TopoDS_Shape aShapeLoc = aTmpSeqLocs.Value(i);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aTmpSeqBases.Value(i), aVert, aWithContact, aWithCorrect);
|
||||
}
|
||||
if(!aBuilder.IsReady()) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
TopoDS_Shape resShape = aBuilder.Shape();
|
||||
aSeqRes.Append(resShape);
|
||||
// make sewing for result
|
||||
Handle(BRepBuilderAPI_Sewing) aSewing = new BRepBuilderAPI_Sewing;
|
||||
aSewing->SetTolerance(Precision::Confusion());
|
||||
aSewing->SetFaceMode(Standard_True);
|
||||
aSewing->SetFloatingEdgesMode(Standard_False);
|
||||
aSewing->SetNonManifoldMode(Standard_False);
|
||||
for(i=1; i<=aSeqRes.Length(); i++) {
|
||||
aSewing->Add(aSeqRes.Value(i));
|
||||
}
|
||||
aSewing->Perform();
|
||||
aShape = aSewing->SewedShape();
|
||||
}
|
||||
else {
|
||||
// old implementation without splitting
|
||||
BRepOffsetAPI_MakePipeShell aBuilder(aWirePath);
|
||||
|
||||
Standard_Integer nbShapes = aSeqBases.Length();
|
||||
Standard_Integer step = nbShapes/nbBases;
|
||||
|
||||
if (nbShapes < nbBases || fmod((double)nbShapes, (double)nbBases)) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Invalid sections were specified for building pipe");
|
||||
}
|
||||
Standard_Integer ind =0;
|
||||
for (i = 1; i <= nbShapes && ind < nbShapes; i++) { //i+nbBases <= nbShapes
|
||||
TopTools_SequenceOfShape usedBases;
|
||||
Standard_Integer j = 1;
|
||||
for (; j <= nbBases; j++) {
|
||||
ind = i + (j-1)*step;
|
||||
TopoDS_Shape aWireProf = aSeqBases.Value(ind);
|
||||
usedBases.Append(aWireProf);
|
||||
if(nbLocs) {
|
||||
TopoDS_Shape aShapeLoc = aSeqLocs.Value(j);
|
||||
TopoDS_Vertex aVert = TopoDS::Vertex(aShapeLoc);
|
||||
aBuilder.Add(aWireProf,aVert,aWithContact,aWithCorrect);
|
||||
}
|
||||
else
|
||||
aBuilder.Add(aWireProf,aWithContact,aWithCorrect);
|
||||
}
|
||||
if(!aBuilder.IsReady()) {
|
||||
if(aCI) delete aCI;
|
||||
Standard_ConstructionError::Raise("Invalid input data for building PIPE: bases are invalid");
|
||||
}
|
||||
aBuilder.Build();
|
||||
aShape = aBuilder.Shape();
|
||||
aSeqFaces.Append(aShape);
|
||||
for( j = 1; j <=usedBases.Length(); j++)
|
||||
aBuilder.Delete(usedBases.Value(j));
|
||||
}
|
||||
|
||||
//for case if section is face
|
||||
if(aSeqFaces.Length() >1) {
|
||||
BRep_Builder aB;
|
||||
TopoDS_Compound aComp;
|
||||
aB.MakeCompound(aComp);
|
||||
for( i = 1; i <= aSeqFaces.Length(); i++)
|
||||
aB.Add(aComp,aSeqFaces.Value(i));
|
||||
aShape = aComp;
|
||||
}
|
||||
}
|
||||
aShape = CreatePipeWithDifferentSections(aWirePath, aHSeqBases, aHSeqLocs, aWithContact, aWithCorrect);
|
||||
}
|
||||
|
||||
//building pipe with shell sections
|
||||
|
@ -18,11 +18,10 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// File : GEOMImpl_PipeDriver.ixx
|
||||
// Module : GEOMImpl
|
||||
//
|
||||
|
||||
#ifndef _GEOMImpl_PipeDriver_HeaderFile
|
||||
#define _GEOMImpl_PipeDriver_HeaderFile
|
||||
|
||||
@ -120,6 +119,10 @@ class Handle(GEOMImpl_PipeDriver) : public Handle(TFunction_Driver) {
|
||||
#include <Standard_CString.hxx>
|
||||
#endif
|
||||
|
||||
#include <TopoDS_Wire.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopTools_HSequenceOfShape.hxx>
|
||||
|
||||
class TColStd_SequenceOfExtendedString;
|
||||
|
||||
|
||||
@ -150,6 +153,13 @@ public:
|
||||
Standard_EXPORT static const Standard_GUID& GetID();
|
||||
Standard_EXPORT ~GEOMImpl_PipeDriver() {};
|
||||
|
||||
Standard_EXPORT static TopoDS_Shape CreatePipeWithDifferentSections
|
||||
(const TopoDS_Wire& theWirePath,
|
||||
const Handle(TopTools_HSequenceOfShape) theBases,
|
||||
const Handle(TopTools_HSequenceOfShape) theLocs,
|
||||
const Standard_Boolean theWithContact,
|
||||
const Standard_Boolean theWithCorrect);
|
||||
|
||||
|
||||
// Type management
|
||||
//
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -100,7 +99,8 @@ Standard_Integer GEOMImpl_PolylineDriver::Execute(TFunction_Logbook& log) const
|
||||
TopoDS_Shape aLastPnt = aLPoint->GetValue();
|
||||
TopoDS_Vertex aV2 = TopoDS::Vertex(aLastPnt);
|
||||
|
||||
if ( !aV1.IsNull() && !aV2.IsNull() && aV1.IsSame(aV2) )
|
||||
if ( (!aV1.IsNull() && !aV2.IsNull() && aV1.IsSame(aV2)) ||
|
||||
aCI.GetIsClosed())
|
||||
aMakePoly.Close();
|
||||
}
|
||||
|
||||
|
@ -18,31 +18,40 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
#include <GEOMImpl_PrismDriver.hxx>
|
||||
|
||||
#include <GEOMImpl_IShapesOperations.hxx>
|
||||
#include <GEOMImpl_IPrism.hxx>
|
||||
#include <GEOMImpl_IShapesOperations.hxx>
|
||||
#include <GEOMImpl_IMeasureOperations.hxx>
|
||||
#include <GEOMImpl_PipeDriver.hxx>
|
||||
#include <GEOMImpl_Types.hxx>
|
||||
#include <GEOM_Function.hxx>
|
||||
|
||||
#include <BRepPrimAPI_MakePrism.hxx>
|
||||
#include <BRepBuilderAPI_MakeEdge.hxx>
|
||||
#include <BRepBuilderAPI_MakeWire.hxx>
|
||||
#include <BRepBuilderAPI_MakeVertex.hxx>
|
||||
#include <BRepBuilderAPI_Transform.hxx>
|
||||
#include <BRep_Tool.hxx>
|
||||
|
||||
#include <TopAbs.hxx>
|
||||
#include <TopExp.hxx>
|
||||
#include <TopoDS.hxx>
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <TopoDS_Edge.hxx>
|
||||
#include <TopoDS_Vertex.hxx>
|
||||
#include <TopAbs.hxx>
|
||||
#include <TopExp.hxx>
|
||||
#include <TopTools_HSequenceOfShape.hxx>
|
||||
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
|
||||
|
||||
#include <Precision.hxx>
|
||||
#include <gp_Ax3.hxx>
|
||||
#include <gp_Pnt.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
#include <gp_Vec.hxx>
|
||||
#include <gp_Trsf.hxx>
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
#include <Standard_ConstructionError.hxx>
|
||||
|
||||
//=======================================================================
|
||||
@ -94,6 +103,10 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
|
||||
}
|
||||
if (aV.Magnitude() > Precision::Confusion()) {
|
||||
aV.Normalize();
|
||||
if (aType != PRISM_BASE_DXDYDZ_2WAYS && aCI.GetScale() > Precision::Confusion()) {
|
||||
aShape = MakeScaledPrism(aShapeBase, aV * aCI.GetH(), aCI.GetScale());
|
||||
}
|
||||
else {
|
||||
if (aType == PRISM_BASE_VEC_H_2WAYS) {
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetTranslation((-aV) * aCI.GetH());
|
||||
@ -105,6 +118,7 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} 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();
|
||||
@ -119,8 +133,11 @@ 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)
|
||||
{
|
||||
if (aType != PRISM_BASE_DXDYDZ_2WAYS && aCI.GetScale() > Precision::Confusion()) {
|
||||
aShape = MakeScaledPrism(aShapeBase, aV, aCI.GetScale());
|
||||
}
|
||||
else {
|
||||
if (aType == PRISM_BASE_TWO_PNT_2WAYS) {
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetTranslation(-aV);
|
||||
BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
|
||||
@ -131,13 +148,17 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (aType == PRISM_BASE_DXDYDZ || aType == PRISM_BASE_DXDYDZ_2WAYS) {
|
||||
Handle(GEOM_Function) aRefBase = aCI.GetBase();
|
||||
TopoDS_Shape aShapeBase = aRefBase->GetValue();
|
||||
gp_Vec aV (aCI.GetDX(), aCI.GetDY(), aCI.GetDZ());
|
||||
if (aV.Magnitude() > gp::Resolution()) {
|
||||
if (aType == PRISM_BASE_DXDYDZ_2WAYS)
|
||||
{
|
||||
if (aType != PRISM_BASE_DXDYDZ_2WAYS && aCI.GetScale() > Precision::Confusion()) {
|
||||
aShape = MakeScaledPrism(aShapeBase, aV, aCI.GetScale());
|
||||
}
|
||||
else {
|
||||
if (aType == PRISM_BASE_DXDYDZ_2WAYS) {
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetTranslation(-aV);
|
||||
BRepBuilderAPI_Transform aTransformation(aShapeBase, aTrsf, Standard_False);
|
||||
@ -147,6 +168,7 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
|
||||
aShape = BRepPrimAPI_MakePrism(aShapeBase, aV, Standard_False).Shape();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (aShape.IsNull()) return 0;
|
||||
|
||||
@ -158,6 +180,72 @@ Standard_Integer GEOMImpl_PrismDriver::Execute(TFunction_Logbook& log) const
|
||||
return 1;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : MakeScaledPrism
|
||||
//purpose :
|
||||
//=======================================================================
|
||||
TopoDS_Shape GEOMImpl_PrismDriver::MakeScaledPrism (const TopoDS_Shape& theShapeBase,
|
||||
const gp_Vec& theVector,
|
||||
const Standard_Real theScaleFactor)
|
||||
{
|
||||
TopoDS_Shape aShape;
|
||||
|
||||
// 1. aCDG = geompy.MakeCDG(theBase)
|
||||
gp_Ax3 aPos = GEOMImpl_IMeasureOperations::GetPosition(theShapeBase);
|
||||
gp_Pnt aCDG = aPos.Location();
|
||||
TopoDS_Shape aShapeCDG_1 = BRepBuilderAPI_MakeVertex(aCDG).Shape();
|
||||
|
||||
// 2. Scale = geompy.MakeScaleTransform(theBase, aCDG, theScaleFactor)
|
||||
|
||||
// Bug 6839: Check for standalone (not included in faces) degenerated edges
|
||||
TopTools_IndexedDataMapOfShapeListOfShape aEFMap;
|
||||
TopExp::MapShapesAndAncestors(theShapeBase, TopAbs_EDGE, TopAbs_FACE, aEFMap);
|
||||
Standard_Integer i, nbE = aEFMap.Extent();
|
||||
for (i = 1; i <= nbE; i++) {
|
||||
TopoDS_Shape anEdgeSh = aEFMap.FindKey(i);
|
||||
if (BRep_Tool::Degenerated(TopoDS::Edge(anEdgeSh))) {
|
||||
const TopTools_ListOfShape& aFaces = aEFMap.FindFromIndex(i);
|
||||
if (aFaces.IsEmpty())
|
||||
Standard_ConstructionError::Raise
|
||||
("Scaling aborted : cannot scale standalone degenerated edge");
|
||||
}
|
||||
}
|
||||
|
||||
// Perform Scaling
|
||||
gp_Trsf aTrsf;
|
||||
aTrsf.SetScale(aCDG, theScaleFactor);
|
||||
BRepBuilderAPI_Transform aBRepTrsf (theShapeBase, aTrsf, Standard_False);
|
||||
TopoDS_Shape aScale = aBRepTrsf.Shape();
|
||||
|
||||
// 3. aBase2 = geompy.MakeTranslationVectorDistance(Scale, theVec, theH)
|
||||
gp_Trsf aTrsf3;
|
||||
aTrsf3.SetTranslation(theVector);
|
||||
TopLoc_Location aLocOrig = aScale.Location();
|
||||
gp_Trsf aTrsfOrig = aLocOrig.Transformation();
|
||||
TopLoc_Location aLocRes (aTrsf3 * aTrsfOrig);
|
||||
TopoDS_Shape aBase2 = aScale.Located(aLocRes);
|
||||
|
||||
// 4. aCDG_2 = geompy.MakeTranslationVectorDistance(aCDG, theVec, theH)
|
||||
gp_Pnt aCDG_2 = aCDG.Translated(theVector);
|
||||
TopoDS_Shape aShapeCDG_2 = BRepBuilderAPI_MakeVertex(aCDG_2).Shape();
|
||||
|
||||
// 5. Vector = geompy.MakeVector(aCDG, aCDG_2)
|
||||
TopoDS_Shape aShapeVec = BRepBuilderAPI_MakeEdge(aCDG, aCDG_2).Shape();
|
||||
TopoDS_Edge anEdge = TopoDS::Edge(aShapeVec);
|
||||
TopoDS_Wire aWirePath = BRepBuilderAPI_MakeWire(anEdge);
|
||||
|
||||
// 6. aPrism = geompy.MakePipeWithDifferentSections([theBase, aBase2], [aCDG, aCDG_2], Vector, False, False)
|
||||
Handle(TopTools_HSequenceOfShape) aBases = new TopTools_HSequenceOfShape;
|
||||
aBases->Append(theShapeBase);
|
||||
aBases->Append(aBase2);
|
||||
|
||||
Handle(TopTools_HSequenceOfShape) aLocs = new TopTools_HSequenceOfShape;
|
||||
aLocs->Append(aShapeCDG_1);
|
||||
aLocs->Append(aShapeCDG_2);
|
||||
|
||||
aShape = GEOMImpl_PipeDriver::CreatePipeWithDifferentSections(aWirePath, aBases, aLocs, false, false);
|
||||
return aShape;
|
||||
}
|
||||
|
||||
//=======================================================================
|
||||
//function : GEOMImpl_PrismDriver_Type_
|
||||
@ -173,7 +261,6 @@ Standard_EXPORT Handle_Standard_Type& GEOMImpl_PrismDriver_Type_()
|
||||
static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient);
|
||||
if (aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient);
|
||||
|
||||
|
||||
static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL};
|
||||
static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_PrismDriver",
|
||||
sizeof(GEOMImpl_PrismDriver),
|
||||
|
@ -18,11 +18,10 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// File : GEOMImpl_PrismDriver.ixx
|
||||
// Module : GEOMImpl
|
||||
//
|
||||
|
||||
#ifndef _GEOMImpl_PrismDriver_HeaderFile
|
||||
#define _GEOMImpl_PrismDriver_HeaderFile
|
||||
|
||||
@ -119,6 +118,10 @@ class Handle(GEOMImpl_PrismDriver) : public Handle(TFunction_Driver) {
|
||||
#include <Standard_CString.hxx>
|
||||
#endif
|
||||
|
||||
#include <TopoDS_Shape.hxx>
|
||||
#include <gp_Vec.hxx>
|
||||
#include <Standard_Real.hxx>
|
||||
|
||||
class TColStd_SequenceOfExtendedString;
|
||||
|
||||
|
||||
@ -140,22 +143,26 @@ public:
|
||||
}
|
||||
|
||||
// Methods PUBLIC
|
||||
//
|
||||
|
||||
Standard_EXPORT GEOMImpl_PrismDriver();
|
||||
Standard_EXPORT ~GEOMImpl_PrismDriver() {};
|
||||
|
||||
Standard_EXPORT virtual Standard_Integer Execute (TFunction_Logbook& log) const;
|
||||
Standard_EXPORT virtual void Validate (TFunction_Logbook&) const {}
|
||||
Standard_EXPORT Standard_Boolean MustExecute (const TFunction_Logbook&) const { return Standard_True; }
|
||||
Standard_EXPORT static const Standard_GUID& GetID();
|
||||
Standard_EXPORT ~GEOMImpl_PrismDriver() {};
|
||||
|
||||
Standard_EXPORT static TopoDS_Shape MakeScaledPrism (const TopoDS_Shape& theShapeBase,
|
||||
const gp_Vec& theVector,
|
||||
const Standard_Real theScaleFactor);
|
||||
|
||||
|
||||
// Type management
|
||||
//
|
||||
|
||||
Standard_EXPORT friend Handle_Standard_Type& GEOMImpl_PrismDriver_Type_();
|
||||
Standard_EXPORT const Handle(Standard_Type)& DynamicType() const { return STANDARD_TYPE(GEOMImpl_PrismDriver) ; }
|
||||
Standard_EXPORT Standard_Boolean IsKind(const Handle(Standard_Type)& AType) const { return (STANDARD_TYPE(GEOMImpl_PrismDriver) == AType || TFunction_Driver::IsKind(AType)); }
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -86,7 +85,21 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const
|
||||
if (aLen < 2) return 0;
|
||||
Standard_Boolean isSeveral = Standard_False;
|
||||
gp_Pnt aPrevP;
|
||||
TColgp_Array1OfPnt CurvePoints (1, aLen);
|
||||
int aRealLen = aLen;
|
||||
if (aType == SPLINE_BEZIER && aCI.GetIsClosed()) {
|
||||
Handle(GEOM_Function) aFPoint = aCI.GetPoint(1);
|
||||
TopoDS_Shape aFirstPnt = aFPoint->GetValue();
|
||||
TopoDS_Vertex aV1 = TopoDS::Vertex(aFirstPnt);
|
||||
|
||||
Handle(GEOM_Function) aLPoint = aCI.GetPoint(aLen);
|
||||
TopoDS_Shape aLastPnt = aLPoint->GetValue();
|
||||
TopoDS_Vertex aV2 = TopoDS::Vertex(aLastPnt);
|
||||
|
||||
if (!aV1.IsNull() && !aV2.IsNull() && !aV1.IsSame(aV2)) {
|
||||
aRealLen++;
|
||||
}
|
||||
}
|
||||
TColgp_Array1OfPnt CurvePoints (1, aRealLen);
|
||||
for (ind = 1; ind <= aLen; ind++) {
|
||||
Handle(GEOM_Function) aRefPoint = aCI.GetPoint(ind);
|
||||
TopoDS_Shape aShapePnt = aRefPoint->GetValue();
|
||||
@ -105,16 +118,27 @@ Standard_Integer GEOMImpl_SplineDriver::Execute(TFunction_Logbook& log) const
|
||||
if (!isSeveral) {
|
||||
Standard_ConstructionError::Raise("Points for Bezier Curve are too close");
|
||||
}
|
||||
if (aRealLen > aLen) { // set last point equal to first for the closed curve
|
||||
CurvePoints.SetValue(aRealLen, CurvePoints.Value(1));
|
||||
}
|
||||
Handle(Geom_BezierCurve) GBC = new Geom_BezierCurve(CurvePoints);
|
||||
aShape = BRepBuilderAPI_MakeEdge(GBC).Edge();
|
||||
} else {
|
||||
//GeomAPI_PointsToBSpline GBC (CurvePoints);
|
||||
//aShape = BRepBuilderAPI_MakeEdge(GBC).Edge();
|
||||
Handle(TColgp_HArray1OfPnt) aHCurvePoints = new TColgp_HArray1OfPnt(1, aLen);
|
||||
if (aCI.GetDoReordering()) {
|
||||
// TODO
|
||||
for (ind = 1; ind <= aLen; ind++) {
|
||||
aHCurvePoints->SetValue(ind, CurvePoints.Value(ind));
|
||||
}
|
||||
int isClosed = aCI.GetIsClosed();
|
||||
}
|
||||
else {
|
||||
for (ind = 1; ind <= aLen; ind++) {
|
||||
aHCurvePoints->SetValue(ind, CurvePoints.Value(ind));
|
||||
}
|
||||
}
|
||||
bool isClosed = aCI.GetIsClosed();
|
||||
GeomAPI_Interpolate GBC (aHCurvePoints, isClosed, gp::Resolution());
|
||||
GBC.Perform();
|
||||
if (GBC.IsDone())
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -494,6 +493,35 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecH2Ways
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePrismVecH
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismVecHWithScaling
|
||||
(GEOM::GEOM_Object_ptr theBase, GEOM::GEOM_Object_ptr theVec,
|
||||
CORBA::Double theH, CORBA::Double theScaleFactor)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference objects
|
||||
Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
|
||||
Handle(GEOM_Object) aVec = GetObjectImpl(theVec);
|
||||
|
||||
if (aBase.IsNull() || aVec.IsNull()) return aGEOMObject._retn();
|
||||
|
||||
//Create the Prism
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakePrismVecH(aBase, aVec, theH, theScaleFactor);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePrismTwoPnt
|
||||
@ -558,6 +586,39 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPnt2Ways
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePrismTwoPnt
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismTwoPntWithScaling
|
||||
(GEOM::GEOM_Object_ptr theBase,
|
||||
GEOM::GEOM_Object_ptr thePoint1,
|
||||
GEOM::GEOM_Object_ptr thePoint2,
|
||||
CORBA::Double theScaleFactor)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference objects
|
||||
Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
|
||||
Handle(GEOM_Object) aPoint1 = GetObjectImpl(thePoint1);
|
||||
Handle(GEOM_Object) aPoint2 = GetObjectImpl(thePoint2);
|
||||
|
||||
if (aBase.IsNull() || aPoint1.IsNull() || aPoint2.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
//Create the Prism
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakePrismTwoPnt(aBase, aPoint1, aPoint2, theScaleFactor);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePrismDXDYDZ
|
||||
@ -614,6 +675,35 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZ2Ways
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePrismDXDYDZ
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakePrismDXDYDZWithScaling
|
||||
(GEOM::GEOM_Object_ptr theBase, CORBA::Double theDX,
|
||||
CORBA::Double theDY, CORBA::Double theDZ,
|
||||
CORBA::Double theScaleFactor)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference objects
|
||||
Handle(GEOM_Object) aBase = GetObjectImpl(theBase);
|
||||
|
||||
if (aBase.IsNull()) return aGEOMObject._retn();
|
||||
|
||||
//Create the Prism
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakePrismDXDYDZ(aBase, theDX, theDY, theDZ, theScaleFactor);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakePipe
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef _GEOM_I3DPrimOperations_i_HeaderFile
|
||||
#define _GEOM_I3DPrimOperations_i_HeaderFile
|
||||
@ -107,6 +106,11 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
|
||||
GEOM::GEOM_Object_ptr theVec,
|
||||
CORBA::Double theH);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePrismVecHWithScaling (GEOM::GEOM_Object_ptr theBase,
|
||||
GEOM::GEOM_Object_ptr theVec,
|
||||
CORBA::Double theH,
|
||||
CORBA::Double theScaleFactor);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePrismTwoPnt (GEOM::GEOM_Object_ptr theBase,
|
||||
GEOM::GEOM_Object_ptr thePoint1,
|
||||
GEOM::GEOM_Object_ptr thePoint2);
|
||||
@ -115,6 +119,11 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
|
||||
GEOM::GEOM_Object_ptr thePoint1,
|
||||
GEOM::GEOM_Object_ptr thePoint2);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePrismTwoPntWithScaling (GEOM::GEOM_Object_ptr theBase,
|
||||
GEOM::GEOM_Object_ptr thePoint1,
|
||||
GEOM::GEOM_Object_ptr thePoint2,
|
||||
CORBA::Double theScaleFactor);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePrismDXDYDZ (GEOM::GEOM_Object_ptr theBase,
|
||||
CORBA::Double theDX,
|
||||
CORBA::Double theDY,
|
||||
@ -123,6 +132,11 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
|
||||
CORBA::Double theDX,
|
||||
CORBA::Double theDY,
|
||||
CORBA::Double theDZ);
|
||||
GEOM::GEOM_Object_ptr MakePrismDXDYDZWithScaling (GEOM::GEOM_Object_ptr theBase,
|
||||
CORBA::Double theDX,
|
||||
CORBA::Double theDY,
|
||||
CORBA::Double theDZ,
|
||||
CORBA::Double theScaleFactor);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePipe (GEOM::GEOM_Object_ptr theBase,
|
||||
GEOM::GEOM_Object_ptr thePath);
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#include <Standard_Stream.hxx>
|
||||
|
||||
@ -334,70 +333,6 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeArcOfEllipse
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakePolyline
|
||||
(const GEOM::ListOfGO& thePoints)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference point
|
||||
int ind = 0;
|
||||
int aLen = thePoints.length();
|
||||
std::list<Handle(GEOM_Object)> aPoints;
|
||||
for (; ind < aLen; ind++) {
|
||||
Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
|
||||
if (aPnt.IsNull()) return aGEOMObject._retn();
|
||||
aPoints.push_back(aPnt);
|
||||
}
|
||||
|
||||
// Make Polyline
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakePolyline(aPoints);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineBezier
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineBezier
|
||||
(const GEOM::ListOfGO& thePoints)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference point
|
||||
int ind = 0;
|
||||
int aLen = thePoints.length();
|
||||
std::list<Handle(GEOM_Object)> aPoints;
|
||||
for (; ind < aLen; ind++) {
|
||||
Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
|
||||
if (aPnt.IsNull()) return aGEOMObject._retn();
|
||||
aPoints.push_back(aPnt);
|
||||
}
|
||||
|
||||
// Make Bezier curve
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakeSplineBezier(aPoints);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineInterpolation
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation
|
||||
(const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed)
|
||||
{
|
||||
@ -418,7 +353,74 @@ GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation
|
||||
|
||||
// Make Polyline
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakeSplineInterpolation(aPoints, theIsClosed);
|
||||
GetOperations()->MakePolyline(aPoints, theIsClosed);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineBezier
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineBezier
|
||||
(const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference point
|
||||
int ind = 0;
|
||||
int aLen = thePoints.length();
|
||||
std::list<Handle(GEOM_Object)> aPoints;
|
||||
for (; ind < aLen; ind++) {
|
||||
Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
|
||||
if (aPnt.IsNull()) return aGEOMObject._retn();
|
||||
aPoints.push_back(aPnt);
|
||||
}
|
||||
|
||||
// Make Bezier curve
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakeSplineBezier(aPoints, theIsClosed);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
return GetObject(anObject);
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
/*!
|
||||
* MakeSplineInterpolation
|
||||
*/
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_ICurvesOperations_i::MakeSplineInterpolation
|
||||
(const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed,
|
||||
CORBA::Boolean theDoReordering)
|
||||
{
|
||||
GEOM::GEOM_Object_var aGEOMObject;
|
||||
|
||||
//Set a not done flag
|
||||
GetOperations()->SetNotDone();
|
||||
|
||||
//Get the reference point
|
||||
int ind = 0;
|
||||
int aLen = thePoints.length();
|
||||
std::list<Handle(GEOM_Object)> aPoints;
|
||||
for (; ind < aLen; ind++) {
|
||||
Handle(GEOM_Object) aPnt = GetObjectImpl(thePoints[ind]);
|
||||
if (aPnt.IsNull()) return aGEOMObject._retn();
|
||||
aPoints.push_back(aPnt);
|
||||
}
|
||||
|
||||
// Make Polyline
|
||||
Handle(GEOM_Object) anObject =
|
||||
GetOperations()->MakeSplineInterpolation(aPoints, theIsClosed, theDoReordering);
|
||||
if (!GetOperations()->IsDone() || anObject.IsNull())
|
||||
return aGEOMObject._retn();
|
||||
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef _GEOM_ICurvesOperations_i_HeaderFile
|
||||
#define _GEOM_ICurvesOperations_i_HeaderFile
|
||||
@ -76,12 +75,15 @@ class GEOM_I_EXPORT GEOM_ICurvesOperations_i :
|
||||
GEOM::GEOM_Object_ptr thePnt2,
|
||||
GEOM::GEOM_Object_ptr thePnt3);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakePolyline (const GEOM::ListOfGO& thePoints);
|
||||
GEOM::GEOM_Object_ptr MakePolyline (const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakeSplineBezier (const GEOM::ListOfGO& thePoints);
|
||||
GEOM::GEOM_Object_ptr MakeSplineBezier (const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakeSplineInterpolation (const GEOM::ListOfGO& thePoints,
|
||||
CORBA::Boolean theIsClosed);
|
||||
CORBA::Boolean theIsClosed,
|
||||
CORBA::Boolean theDoReordering);
|
||||
|
||||
GEOM::GEOM_Object_ptr MakeSketcher (const char* theCommand, const GEOM::ListOfDouble& theWorkingPlane);
|
||||
|
||||
|
@ -2756,14 +2756,15 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeArcOfEllipse (GEOM::GEOM_Object_ptr the
|
||||
//=============================================================================
|
||||
// MakePolyline:
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePolyline (GEOM::GEOM_List_ptr thePoints)
|
||||
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePolyline (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed)
|
||||
{
|
||||
beginService( " GEOM_Superv_i::MakePolyline" );
|
||||
MESSAGE("GEOM_Superv_i::MakePolyline");
|
||||
if (GEOM_List_i<GEOM::ListOfGO>* aListImplP =
|
||||
dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
|
||||
getCurvesOp();
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakePolyline(aListImplP->GetList());
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakePolyline(aListImplP->GetList(), theIsClosed);
|
||||
endService( " GEOM_Superv_i::MakePolyline" );
|
||||
return anObj;
|
||||
}
|
||||
@ -2774,14 +2775,15 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakePolyline (GEOM::GEOM_List_ptr thePoints
|
||||
//=============================================================================
|
||||
// MakeSplineBezier:
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineBezier (GEOM::GEOM_List_ptr thePoints)
|
||||
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineBezier (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed)
|
||||
{
|
||||
beginService( " GEOM_Superv_i::MakeSplineBezier" );
|
||||
MESSAGE("GEOM_Superv_i::MakeSplineBezier");
|
||||
if (GEOM_List_i<GEOM::ListOfGO>* aListImplP =
|
||||
dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
|
||||
getCurvesOp();
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineBezier(aListImplP->GetList());
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineBezier(aListImplP->GetList(), theIsClosed);
|
||||
endService( " GEOM_Superv_i::MakeSplineBezier" );
|
||||
return anObj;
|
||||
}
|
||||
@ -2793,14 +2795,15 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineBezier (GEOM::GEOM_List_ptr thePo
|
||||
// MakeSplineInterpolation:
|
||||
//=============================================================================
|
||||
GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeSplineInterpolation (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed)
|
||||
CORBA::Boolean theIsClosed,
|
||||
CORBA::Boolean theDoReordering)
|
||||
{
|
||||
beginService( " GEOM_Superv_i::MakeSplineInterpolation" );
|
||||
MESSAGE("GEOM_Superv_i::MakeSplineInterpolation");
|
||||
if (GEOM_List_i<GEOM::ListOfGO>* aListImplP =
|
||||
dynamic_cast<GEOM_List_i<GEOM::ListOfGO>*>(GetServant(thePoints, myPOA).in())) {
|
||||
getCurvesOp();
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineInterpolation(aListImplP->GetList(), theIsClosed);
|
||||
GEOM::GEOM_Object_ptr anObj = myCurvesOp->MakeSplineInterpolation(aListImplP->GetList(), theIsClosed, theDoReordering);
|
||||
endService( " GEOM_Superv_i::MakeSplineInterpolation" );
|
||||
return anObj;
|
||||
}
|
||||
|
@ -18,7 +18,6 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
#ifndef __GEOM_SUPERV_I_H__
|
||||
#define __GEOM_SUPERV_I_H__
|
||||
@ -606,10 +605,13 @@ public:
|
||||
GEOM::GEOM_Object_ptr MakeArcOfEllipse (GEOM::GEOM_Object_ptr thePnt1,
|
||||
GEOM::GEOM_Object_ptr thePnt2,
|
||||
GEOM::GEOM_Object_ptr thePnt3);
|
||||
GEOM::GEOM_Object_ptr MakePolyline (GEOM::GEOM_List_ptr thePoints);
|
||||
GEOM::GEOM_Object_ptr MakeSplineBezier (GEOM::GEOM_List_ptr thePoints);
|
||||
GEOM::GEOM_Object_ptr MakeSplineInterpolation (GEOM::GEOM_List_ptr thePoints,
|
||||
GEOM::GEOM_Object_ptr MakePolyline (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed);
|
||||
GEOM::GEOM_Object_ptr MakeSplineBezier (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed);
|
||||
GEOM::GEOM_Object_ptr MakeSplineInterpolation (GEOM::GEOM_List_ptr thePoints,
|
||||
CORBA::Boolean theIsClosed,
|
||||
CORBA::Boolean theDoReordering);
|
||||
GEOM::GEOM_Object_ptr MakeSketcher (const char* theCommand,
|
||||
GEOM::GEOM_List_ptr theWorkingPlane);
|
||||
GEOM::GEOM_Object_ptr Make3DSketcher (GEOM::GEOM_List_ptr theCoordinates);
|
||||
|
@ -901,35 +901,39 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
||||
|
||||
## Create a polyline on the set of points.
|
||||
# @param thePoints Sequence of points for the polyline.
|
||||
# @param theIsClosed If True, build a closed wire.
|
||||
# @return New GEOM_Object, containing the created polyline.
|
||||
#
|
||||
# @ref tui_creation_curve "Example"
|
||||
def MakePolyline(self,thePoints):
|
||||
def MakePolyline(self, thePoints, theIsClosed=False):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = self.CurvesOp.MakePolyline(thePoints)
|
||||
anObj = self.CurvesOp.MakePolyline(thePoints, theIsClosed)
|
||||
RaiseIfFailed("MakePolyline", self.CurvesOp)
|
||||
return anObj
|
||||
|
||||
## Create bezier curve on the set of points.
|
||||
# @param thePoints Sequence of points for the bezier curve.
|
||||
# @param theIsClosed If True, build a closed curve.
|
||||
# @return New GEOM_Object, containing the created bezier curve.
|
||||
#
|
||||
# @ref tui_creation_curve "Example"
|
||||
def MakeBezier(self,thePoints):
|
||||
def MakeBezier(self, thePoints, theIsClosed=False):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = self.CurvesOp.MakeSplineBezier(thePoints)
|
||||
anObj = self.CurvesOp.MakeSplineBezier(thePoints, theIsClosed)
|
||||
RaiseIfFailed("MakeSplineBezier", self.CurvesOp)
|
||||
return anObj
|
||||
|
||||
## Create B-Spline curve on the set of points.
|
||||
# @param thePoints Sequence of points for the B-Spline curve.
|
||||
# @param theIsClosed If True, build a closed curve.
|
||||
# @param theDoReordering If TRUE, the algo does not follow the order of
|
||||
# \a thePoints but searches for the closest vertex.
|
||||
# @return New GEOM_Object, containing the created B-Spline curve.
|
||||
#
|
||||
# @ref tui_creation_curve "Example"
|
||||
def MakeInterpol(self, thePoints, theIsClosed=False):
|
||||
def MakeInterpol(self, thePoints, theIsClosed=False, theDoReordering=False):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = self.CurvesOp.MakeSplineInterpolation(thePoints, theIsClosed)
|
||||
anObj = self.CurvesOp.MakeSplineInterpolation(thePoints, theIsClosed, theDoReordering)
|
||||
RaiseIfFailed("MakeSplineInterpolation", self.CurvesOp)
|
||||
return anObj
|
||||
|
||||
@ -1294,13 +1298,22 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
||||
# @param theBase Base shape to be extruded.
|
||||
# @param thePoint1 First end of extrusion vector.
|
||||
# @param thePoint2 Second end of extrusion vector.
|
||||
# @param theScaleFactor Use it to make prism with scaled second base.
|
||||
# Nagative value means not scaled second base.
|
||||
# @return New GEOM_Object, containing the created prism.
|
||||
#
|
||||
# @ref tui_creation_prism "Example"
|
||||
def MakePrism(self, theBase, thePoint1, thePoint2):
|
||||
def MakePrism(self, theBase, thePoint1, thePoint2, theScaleFactor = -1.0):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = None
|
||||
Parameters = ""
|
||||
if theScaleFactor > 0:
|
||||
theScaleFactor,Parameters = ParseParameters(theScaleFactor)
|
||||
anObj = self.PrimOp.MakePrismTwoPntWithScaling(theBase, thePoint1, thePoint2, theScaleFactor)
|
||||
else:
|
||||
anObj = self.PrimOp.MakePrismTwoPnt(theBase, thePoint1, thePoint2)
|
||||
RaiseIfFailed("MakePrismTwoPnt", self.PrimOp)
|
||||
anObj.SetParameters(Parameters)
|
||||
return anObj
|
||||
|
||||
## Create a shape by extrusion of the base shape along a
|
||||
@ -1323,11 +1336,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
||||
# @param theBase Base shape to be extruded.
|
||||
# @param theVec Direction of extrusion.
|
||||
# @param theH Prism dimension along theVec.
|
||||
# @param theScaleFactor Use it to make prism with scaled second base.
|
||||
# Nagative value means not scaled second base.
|
||||
# @return New GEOM_Object, containing the created prism.
|
||||
#
|
||||
# @ref tui_creation_prism "Example"
|
||||
def MakePrismVecH(self, theBase, theVec, theH):
|
||||
def MakePrismVecH(self, theBase, theVec, theH, theScaleFactor = -1.0):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = None
|
||||
Parameters = ""
|
||||
if theScaleFactor > 0:
|
||||
theH,theScaleFactor,Parameters = ParseParameters(theH,theScaleFactor)
|
||||
anObj = self.PrimOp.MakePrismVecHWithScaling(theBase, theVec, theH, theScaleFactor)
|
||||
else:
|
||||
theH,Parameters = ParseParameters(theH)
|
||||
anObj = self.PrimOp.MakePrismVecH(theBase, theVec, theH)
|
||||
RaiseIfFailed("MakePrismVecH", self.PrimOp)
|
||||
@ -1354,11 +1375,19 @@ class geompyDC(GEOM._objref_GEOM_Gen):
|
||||
## Create a shape by extrusion of the base shape along the dx, dy, dz direction
|
||||
# @param theBase Base shape to be extruded.
|
||||
# @param theDX, theDY, theDZ Directions of extrusion.
|
||||
# @param theScaleFactor Use it to make prism with scaled second base.
|
||||
# Nagative value means not scaled second base.
|
||||
# @return New GEOM_Object, containing the created prism.
|
||||
#
|
||||
# @ref tui_creation_prism "Example"
|
||||
def MakePrismDXDYDZ(self, theBase, theDX, theDY, theDZ):
|
||||
def MakePrismDXDYDZ(self, theBase, theDX, theDY, theDZ, theScaleFactor = -1.0):
|
||||
# Example: see GEOM_TestAll.py
|
||||
anObj = None
|
||||
Parameters = ""
|
||||
if theScaleFactor > 0:
|
||||
theDX,theDY,theDZ,theScaleFactor,Parameters = ParseParameters(theDX, theDY, theDZ, theScaleFactor)
|
||||
anObj = self.PrimOp.MakePrismDXDYDZWithScaling(theBase, theDX, theDY, theDZ, theScaleFactor)
|
||||
else:
|
||||
theDX,theDY,theDZ,Parameters = ParseParameters(theDX, theDY, theDZ)
|
||||
anObj = self.PrimOp.MakePrismDXDYDZ(theBase, theDX, theDY, theDZ)
|
||||
RaiseIfFailed("MakePrismDXDYDZ", self.PrimOp)
|
||||
|
@ -18,12 +18,11 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// GEOM GEOMGUI : GUI for Geometry component
|
||||
// File : GenerationGUI_PrismDlg.cxx
|
||||
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
|
||||
//
|
||||
|
||||
#include "GenerationGUI_PrismDlg.h"
|
||||
|
||||
#include <DlgRef.h>
|
||||
@ -72,42 +71,48 @@ GenerationGUI_PrismDlg::GenerationGUI_PrismDlg (GeometryGUI* theGeometryGUI, QWi
|
||||
|
||||
mainFrame()->RadioButton1->setChecked(true);
|
||||
|
||||
GroupPoints = new DlgRef_2Sel1Spin2Check(centralWidget());
|
||||
GroupPoints->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV"));
|
||||
GroupPoints->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
GroupPoints->TextLabel2->setText(tr("GEOM_VECTOR"));
|
||||
GroupPoints->TextLabel3->setText(tr("GEOM_HEIGHT"));
|
||||
GroupPoints->PushButton1->setIcon(image1);
|
||||
GroupPoints->PushButton2->setIcon(image1);
|
||||
GroupPoints->LineEdit1->setReadOnly(true);
|
||||
GroupPoints->LineEdit2->setReadOnly(true);
|
||||
GroupPoints->CheckButton1->setText(tr("GEOM_BOTHWAY"));
|
||||
GroupPoints->CheckButton2->setText(tr("GEOM_REVERSE"));
|
||||
GroupVecH = new DlgRef_2Sel2Spin3Check(centralWidget());
|
||||
GroupVecH->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV"));
|
||||
GroupVecH->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
GroupVecH->TextLabel2->setText(tr("GEOM_VECTOR"));
|
||||
GroupVecH->TextLabel3->setText(tr("GEOM_HEIGHT"));
|
||||
GroupVecH->TextLabel4->setText(tr("GEOM_SCALE_FACTOR"));
|
||||
GroupVecH->PushButton1->setIcon(image1);
|
||||
GroupVecH->PushButton2->setIcon(image1);
|
||||
GroupVecH->LineEdit1->setReadOnly(true);
|
||||
GroupVecH->LineEdit2->setReadOnly(true);
|
||||
GroupVecH->CheckBox1->setText(tr("GEOM_BOTHWAY"));
|
||||
GroupVecH->CheckBox2->setText(tr("GEOM_REVERSE"));
|
||||
GroupVecH->CheckBox3->setText(tr("GEOM_SCALE_PRISM"));
|
||||
|
||||
GroupPoints2 = new DlgRef_3Sel1Check(centralWidget());
|
||||
GroupPoints2->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV_2P"));
|
||||
GroupPoints2->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
GroupPoints2->TextLabel2->setText(tr("GEOM_POINT_I").arg(1));
|
||||
GroupPoints2->TextLabel3->setText(tr("GEOM_POINT_I").arg(2));
|
||||
GroupPoints2->PushButton1->setIcon(image1);
|
||||
GroupPoints2->PushButton2->setIcon(image1);
|
||||
GroupPoints2->PushButton3->setIcon(image1);
|
||||
GroupPoints2->CheckButton1->setText(tr("GEOM_BOTHWAY"));
|
||||
Group2Points = new DlgRef_3Sel3Spin2Check(centralWidget());
|
||||
Group2Points->GroupBox1->setTitle(tr("GEOM_EXTRUSION_BSV_2P"));
|
||||
Group2Points->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
Group2Points->TextLabel2->setText(tr("GEOM_POINT_I").arg(1));
|
||||
Group2Points->TextLabel3->setText(tr("GEOM_POINT_I").arg(2));
|
||||
Group2Points->TextLabel4->setText(tr("GEOM_SCALE_FACTOR"));
|
||||
Group2Points->PushButton1->setIcon(image1);
|
||||
Group2Points->PushButton2->setIcon(image1);
|
||||
Group2Points->PushButton3->setIcon(image1);
|
||||
Group2Points->CheckBox1->setText(tr("GEOM_BOTHWAY"));
|
||||
Group2Points->CheckBox2->setText(tr("GEOM_SCALE_PRISM"));
|
||||
|
||||
GroupPoints3 = new DlgRef_1Sel3Spin1Check(centralWidget());
|
||||
GroupPoints3->GroupBox1->setTitle(tr("GEOM_EXTRUSION_DXDYDZ"));
|
||||
GroupPoints3->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
GroupPoints3->PushButton1->setIcon(image1);
|
||||
GroupPoints3->TextLabel2->setText(tr("GEOM_DX"));
|
||||
GroupPoints3->TextLabel3->setText(tr("GEOM_DY"));
|
||||
GroupPoints3->TextLabel4->setText(tr("GEOM_DZ"));
|
||||
GroupPoints3->CheckButton1->setText(tr("GEOM_BOTHWAY"));
|
||||
GroupDXDYDZ = new DlgRef_1Sel4Spin2Check(centralWidget());
|
||||
GroupDXDYDZ->GroupBox1->setTitle(tr("GEOM_EXTRUSION_DXDYDZ"));
|
||||
GroupDXDYDZ->TextLabel1->setText(tr("GEOM_BASE"));
|
||||
GroupDXDYDZ->PushButton1->setIcon(image1);
|
||||
GroupDXDYDZ->TextLabel2->setText(tr("GEOM_DX"));
|
||||
GroupDXDYDZ->TextLabel3->setText(tr("GEOM_DY"));
|
||||
GroupDXDYDZ->TextLabel4->setText(tr("GEOM_DZ"));
|
||||
GroupDXDYDZ->TextLabel5->setText(tr("GEOM_SCALE_FACTOR"));
|
||||
GroupDXDYDZ->CheckBox1->setText(tr("GEOM_BOTHWAY"));
|
||||
GroupDXDYDZ->CheckBox2->setText(tr("GEOM_SCALE_PRISM"));
|
||||
|
||||
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
|
||||
layout->setMargin(0); layout->setSpacing(6);
|
||||
layout->addWidget(GroupPoints);
|
||||
layout->addWidget(GroupPoints2);
|
||||
layout->addWidget(GroupPoints3);
|
||||
layout->addWidget(GroupVecH);
|
||||
layout->addWidget(Group2Points);
|
||||
layout->addWidget(GroupDXDYDZ);
|
||||
/***************************************************************/
|
||||
|
||||
setHelpFileName("create_extrusion_page.html");
|
||||
@ -135,35 +140,53 @@ void GenerationGUI_PrismDlg::Init()
|
||||
double step = resMgr->doubleValue("Geometry", "SettingsGeomStep", 100);
|
||||
|
||||
// min, max, step and decimals for spin boxes & initial values
|
||||
initSpinBox(GroupPoints3->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
initSpinBox(GroupPoints3->SpinBox_DY, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
initSpinBox(GroupPoints3->SpinBox_DZ, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
GroupPoints3->SpinBox_DX->setValue(0.0);
|
||||
GroupPoints3->SpinBox_DY->setValue(0.0);
|
||||
GroupPoints3->SpinBox_DZ->setValue(0.0);
|
||||
double aScaleFactor = 2.0;
|
||||
double aScaleStep = 0.5;
|
||||
|
||||
initSpinBox(GroupPoints->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
GroupPoints->SpinBox_DX->setValue(100.0);
|
||||
initSpinBox(GroupVecH->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
GroupVecH->SpinBox_DX->setValue(100.0);
|
||||
|
||||
initSpinBox(GroupDXDYDZ->SpinBox_DX, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
initSpinBox(GroupDXDYDZ->SpinBox_DY, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
initSpinBox(GroupDXDYDZ->SpinBox_DZ, COORD_MIN, COORD_MAX, step, "length_precision" );
|
||||
GroupDXDYDZ->SpinBox_DX->setValue(0.0);
|
||||
GroupDXDYDZ->SpinBox_DY->setValue(0.0);
|
||||
GroupDXDYDZ->SpinBox_DZ->setValue(0.0);
|
||||
|
||||
initSpinBox(GroupVecH->SpinBox_DY, 0.0, COORD_MAX, aScaleStep, "parametric_precision" );
|
||||
initSpinBox(Group2Points->SpinBox1, 0.0, COORD_MAX, aScaleStep, "parametric_precision" );
|
||||
initSpinBox(GroupDXDYDZ->SpinBox_SC, 0.0, COORD_MAX, aScaleStep, "parametric_precision" );
|
||||
|
||||
GroupVecH->SpinBox_DY->setValue(aScaleFactor);
|
||||
Group2Points->SpinBox1->setValue(aScaleFactor);
|
||||
GroupDXDYDZ->SpinBox_SC->setValue(aScaleFactor);
|
||||
|
||||
// hide not used controls
|
||||
Group2Points->TextLabel5->hide();
|
||||
Group2Points->TextLabel6->hide();
|
||||
|
||||
Group2Points->SpinBox2->hide();
|
||||
Group2Points->SpinBox3->hide();
|
||||
|
||||
// init variables
|
||||
myEditCurrentArgument = GroupPoints->LineEdit1;
|
||||
GroupPoints->LineEdit1->setReadOnly(true);
|
||||
GroupPoints->LineEdit2->setReadOnly(true);
|
||||
myEditCurrentArgument = GroupVecH->LineEdit1;
|
||||
GroupVecH->LineEdit1->setReadOnly(true);
|
||||
GroupVecH->LineEdit2->setReadOnly(true);
|
||||
|
||||
GroupPoints2->LineEdit1->setReadOnly(true);
|
||||
GroupPoints2->LineEdit2->setReadOnly(true);
|
||||
GroupPoints2->LineEdit3->setReadOnly(true);
|
||||
Group2Points->LineEdit1->setReadOnly(true);
|
||||
Group2Points->LineEdit2->setReadOnly(true);
|
||||
Group2Points->LineEdit3->setReadOnly(true);
|
||||
|
||||
GroupPoints3->LineEdit1->setReadOnly(true);
|
||||
GroupDXDYDZ->LineEdit1->setReadOnly(true);
|
||||
|
||||
GroupPoints->LineEdit1->setText("");
|
||||
GroupPoints->LineEdit2->setText("");
|
||||
GroupVecH->LineEdit1->setText("");
|
||||
GroupVecH->LineEdit2->setText("");
|
||||
|
||||
GroupPoints2->LineEdit1->setText("");
|
||||
GroupPoints2->LineEdit2->setText("");
|
||||
GroupPoints2->LineEdit3->setText("");
|
||||
Group2Points->LineEdit1->setText("");
|
||||
Group2Points->LineEdit2->setText("");
|
||||
Group2Points->LineEdit3->setText("");
|
||||
|
||||
GroupPoints3->LineEdit1->setText("");
|
||||
GroupDXDYDZ->LineEdit1->setText("");
|
||||
|
||||
myBaseObjects.clear();
|
||||
myPoint1.nullify();
|
||||
@ -176,29 +199,36 @@ void GenerationGUI_PrismDlg::Init()
|
||||
|
||||
connect(this, SIGNAL(constructorsClicked(int)), this, SLOT(ConstructorsClicked(int)));
|
||||
|
||||
connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(GroupPoints->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(GroupVecH->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(GroupVecH->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
|
||||
connect(GroupPoints->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupVecH->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(myGeomGUI, SIGNAL(SignalDefaultStepValueChanged(double)), this, SLOT(SetDoubleSpinBoxStep(double)));
|
||||
|
||||
connect(GroupPoints->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
|
||||
connect(GroupPoints->CheckButton2, SIGNAL(toggled(bool)), this, SLOT(onReverse()));
|
||||
connect(GroupVecH->CheckBox1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
|
||||
connect(GroupVecH->CheckBox2, SIGNAL(toggled(bool)), this, SLOT(onReverse()));
|
||||
connect(GroupVecH->CheckBox3, SIGNAL(toggled(bool)), this, SLOT(onScalePrism()));
|
||||
connect(GroupVecH->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
|
||||
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(onBothway()));
|
||||
connect(Group2Points->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(Group2Points->PushButton2, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(Group2Points->PushButton3, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(Group2Points->CheckBox1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
|
||||
connect(Group2Points->CheckBox2, SIGNAL(toggled(bool)), this, SLOT(onScalePrism()));
|
||||
connect(Group2Points->SpinBox1, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
|
||||
connect(GroupPoints3->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(GroupPoints3->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupPoints3->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupPoints3->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupPoints3->CheckButton1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
|
||||
connect(GroupDXDYDZ->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
||||
connect(GroupDXDYDZ->SpinBox_DX, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupDXDYDZ->SpinBox_DY, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupDXDYDZ->SpinBox_DZ, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupDXDYDZ->SpinBox_SC, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox()));
|
||||
connect(GroupDXDYDZ->CheckBox1, SIGNAL(toggled(bool)), this, SLOT(onBothway()));
|
||||
connect(GroupDXDYDZ->CheckBox2, SIGNAL(toggled(bool)), this, SLOT(onScalePrism()));
|
||||
|
||||
initName(tr("GEOM_EXTRUSION"));
|
||||
|
||||
ConstructorsClicked(0);
|
||||
onBothway();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -207,10 +237,10 @@ void GenerationGUI_PrismDlg::Init()
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::SetDoubleSpinBoxStep (double step)
|
||||
{
|
||||
GroupPoints->SpinBox_DX->setSingleStep(step);
|
||||
GroupPoints3->SpinBox_DX->setSingleStep(step);
|
||||
GroupPoints3->SpinBox_DY->setSingleStep(step);
|
||||
GroupPoints3->SpinBox_DZ->setSingleStep(step);
|
||||
GroupVecH->SpinBox_DX->setSingleStep(step);
|
||||
GroupDXDYDZ->SpinBox_DX->setSingleStep(step);
|
||||
GroupDXDYDZ->SpinBox_DY->setSingleStep(step);
|
||||
GroupDXDYDZ->SpinBox_DZ->setSingleStep(step);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
@ -221,33 +251,33 @@ void GenerationGUI_PrismDlg::ConstructorsClicked (int constructorId)
|
||||
{
|
||||
switch (constructorId) {
|
||||
case 0:
|
||||
GroupPoints2->hide();
|
||||
GroupPoints3->hide();
|
||||
GroupPoints->show();
|
||||
Group2Points->hide();
|
||||
GroupDXDYDZ->hide();
|
||||
GroupVecH->show();
|
||||
|
||||
GroupPoints->LineEdit2->setText("");
|
||||
GroupVecH->LineEdit2->setText("");
|
||||
myVec.nullify();
|
||||
|
||||
GroupPoints->PushButton1->click();
|
||||
GroupVecH->PushButton1->click();
|
||||
break;
|
||||
case 1:
|
||||
GroupPoints->hide();
|
||||
GroupPoints2->show();
|
||||
GroupPoints3->hide();
|
||||
GroupVecH->hide();
|
||||
Group2Points->show();
|
||||
GroupDXDYDZ->hide();
|
||||
|
||||
GroupPoints2->LineEdit2->setText("");
|
||||
GroupPoints2->LineEdit3->setText("");
|
||||
Group2Points->LineEdit2->setText("");
|
||||
Group2Points->LineEdit3->setText("");
|
||||
myPoint1.nullify();
|
||||
myPoint2.nullify();
|
||||
|
||||
GroupPoints2->PushButton1->click();
|
||||
Group2Points->PushButton1->click();
|
||||
break;
|
||||
case 2:
|
||||
GroupPoints->hide();
|
||||
GroupPoints2->hide();
|
||||
GroupPoints3->show();
|
||||
GroupVecH->hide();
|
||||
Group2Points->hide();
|
||||
GroupDXDYDZ->show();
|
||||
|
||||
GroupPoints3->PushButton1->click();
|
||||
GroupDXDYDZ->PushButton1->click();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -295,9 +325,9 @@ void GenerationGUI_PrismDlg::SelectionIntoArgument()
|
||||
erasePreview();
|
||||
myEditCurrentArgument->setText("");
|
||||
|
||||
if ( myEditCurrentArgument == GroupPoints->LineEdit1 ||
|
||||
myEditCurrentArgument == GroupPoints2->LineEdit1 ||
|
||||
myEditCurrentArgument == GroupPoints3->LineEdit1 ) {
|
||||
if ( myEditCurrentArgument == GroupVecH->LineEdit1 ||
|
||||
myEditCurrentArgument == Group2Points->LineEdit1 ||
|
||||
myEditCurrentArgument == GroupDXDYDZ->LineEdit1 ) {
|
||||
myBaseObjects.clear();
|
||||
QList<GEOM::GeomObjPtr> objects = getSelected( TopAbs_SHAPE, -1 );
|
||||
for ( int i = 0; i < objects.count(); i++ ) {
|
||||
@ -308,45 +338,45 @@ void GenerationGUI_PrismDlg::SelectionIntoArgument()
|
||||
}
|
||||
if ( !myBaseObjects.isEmpty() ) {
|
||||
QString aName = myBaseObjects.count() > 1 ? QString( "%1_objects").arg( myBaseObjects.count() ) : GEOMBase::GetName( myBaseObjects[0].get() );
|
||||
GroupPoints->LineEdit1->setText( aName );
|
||||
GroupPoints2->LineEdit1->setText( aName );
|
||||
GroupPoints3->LineEdit1->setText( aName );
|
||||
GroupVecH->LineEdit1->setText( aName );
|
||||
Group2Points->LineEdit1->setText( aName );
|
||||
GroupDXDYDZ->LineEdit1->setText( aName );
|
||||
}
|
||||
else {
|
||||
GroupPoints->LineEdit1->setText( "" );
|
||||
GroupPoints2->LineEdit1->setText( "" );
|
||||
GroupPoints3->LineEdit1->setText( "" );
|
||||
GroupVecH->LineEdit1->setText( "" );
|
||||
Group2Points->LineEdit1->setText( "" );
|
||||
GroupDXDYDZ->LineEdit1->setText( "" );
|
||||
}
|
||||
}
|
||||
else if ( myEditCurrentArgument == GroupPoints->LineEdit2 ) {
|
||||
else if ( myEditCurrentArgument == GroupVecH->LineEdit2 ) {
|
||||
myVec = getSelected( TopAbs_EDGE );
|
||||
if ( myVec ) {
|
||||
QString aName = GEOMBase::GetName( myVec.get() );
|
||||
myEditCurrentArgument->setText( aName );
|
||||
if ( myBaseObjects.isEmpty() )
|
||||
GroupPoints->PushButton1->click();
|
||||
GroupVecH->PushButton1->click();
|
||||
}
|
||||
}
|
||||
if ( myEditCurrentArgument == GroupPoints2->LineEdit2 ) {
|
||||
if ( myEditCurrentArgument == Group2Points->LineEdit2 ) {
|
||||
myPoint1 = getSelected( TopAbs_VERTEX );
|
||||
if ( myPoint1 ) {
|
||||
QString aName = GEOMBase::GetName( myPoint1.get() );
|
||||
myEditCurrentArgument->setText( aName );
|
||||
if ( !myPoint2 )
|
||||
GroupPoints2->PushButton3->click();
|
||||
Group2Points->PushButton3->click();
|
||||
else if ( myBaseObjects.isEmpty() )
|
||||
GroupPoints2->PushButton1->click();
|
||||
Group2Points->PushButton1->click();
|
||||
}
|
||||
}
|
||||
if ( myEditCurrentArgument == GroupPoints2->LineEdit3 ) {
|
||||
if ( myEditCurrentArgument == Group2Points->LineEdit3 ) {
|
||||
myPoint2 = getSelected( TopAbs_VERTEX );
|
||||
if ( myPoint2 ) {
|
||||
QString aName = GEOMBase::GetName( myPoint2.get() );
|
||||
myEditCurrentArgument->setText( aName );
|
||||
if ( myBaseObjects.isEmpty() )
|
||||
GroupPoints2->PushButton1->click();
|
||||
Group2Points->PushButton1->click();
|
||||
else if ( !myPoint1 )
|
||||
GroupPoints2->PushButton2->click();
|
||||
Group2Points->PushButton2->click();
|
||||
}
|
||||
}
|
||||
|
||||
@ -363,42 +393,42 @@ void GenerationGUI_PrismDlg::SetEditCurrentArgument()
|
||||
|
||||
disconnect(myGeomGUI->getApp()->selectionMgr(), 0, this, 0);
|
||||
globalSelection(GEOM_ALLSHAPES);
|
||||
if (send == GroupPoints->PushButton1) {
|
||||
myEditCurrentArgument = GroupPoints->LineEdit1;
|
||||
GroupPoints->PushButton2->setDown(false);
|
||||
GroupPoints->LineEdit2->setEnabled(false);
|
||||
if (send == GroupVecH->PushButton1) {
|
||||
myEditCurrentArgument = GroupVecH->LineEdit1;
|
||||
GroupVecH->PushButton2->setDown(false);
|
||||
GroupVecH->LineEdit2->setEnabled(false);
|
||||
}
|
||||
else if (send == GroupPoints->PushButton2) {
|
||||
myEditCurrentArgument = GroupPoints->LineEdit2;
|
||||
GroupPoints->PushButton1->setDown(false);
|
||||
GroupPoints->LineEdit1->setEnabled(false);
|
||||
else if (send == GroupVecH->PushButton2) {
|
||||
myEditCurrentArgument = GroupVecH->LineEdit2;
|
||||
GroupVecH->PushButton1->setDown(false);
|
||||
GroupVecH->LineEdit1->setEnabled(false);
|
||||
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_EDGE);
|
||||
}
|
||||
else if (send == GroupPoints2->PushButton1) {
|
||||
myEditCurrentArgument = GroupPoints2->LineEdit1;
|
||||
GroupPoints2->PushButton2->setDown(false);
|
||||
GroupPoints2->PushButton3->setDown(false);
|
||||
GroupPoints2->LineEdit2->setEnabled(false);
|
||||
GroupPoints2->LineEdit3->setEnabled(false);
|
||||
else if (send == Group2Points->PushButton1) {
|
||||
myEditCurrentArgument = Group2Points->LineEdit1;
|
||||
Group2Points->PushButton2->setDown(false);
|
||||
Group2Points->PushButton3->setDown(false);
|
||||
Group2Points->LineEdit2->setEnabled(false);
|
||||
Group2Points->LineEdit3->setEnabled(false);
|
||||
}
|
||||
else if (send == GroupPoints2->PushButton2) {
|
||||
myEditCurrentArgument = GroupPoints2->LineEdit2;
|
||||
GroupPoints2->PushButton1->setDown(false);
|
||||
GroupPoints2->PushButton3->setDown(false);
|
||||
GroupPoints2->LineEdit1->setEnabled(false);
|
||||
GroupPoints2->LineEdit3->setEnabled(false);
|
||||
else if (send == Group2Points->PushButton2) {
|
||||
myEditCurrentArgument = Group2Points->LineEdit2;
|
||||
Group2Points->PushButton1->setDown(false);
|
||||
Group2Points->PushButton3->setDown(false);
|
||||
Group2Points->LineEdit1->setEnabled(false);
|
||||
Group2Points->LineEdit3->setEnabled(false);
|
||||
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX);
|
||||
}
|
||||
else if (send == GroupPoints2->PushButton3) {
|
||||
myEditCurrentArgument = GroupPoints2->LineEdit3;
|
||||
GroupPoints2->PushButton1->setDown(false);
|
||||
GroupPoints2->PushButton2->setDown(false);
|
||||
GroupPoints2->LineEdit1->setEnabled(false);
|
||||
GroupPoints2->LineEdit2->setEnabled(false);
|
||||
else if (send == Group2Points->PushButton3) {
|
||||
myEditCurrentArgument = Group2Points->LineEdit3;
|
||||
Group2Points->PushButton1->setDown(false);
|
||||
Group2Points->PushButton2->setDown(false);
|
||||
Group2Points->LineEdit1->setEnabled(false);
|
||||
Group2Points->LineEdit2->setEnabled(false);
|
||||
localSelection(GEOM::GEOM_Object::_nil(), TopAbs_VERTEX);
|
||||
}
|
||||
else if (send == GroupPoints3->PushButton1) {
|
||||
myEditCurrentArgument = GroupPoints3->LineEdit1;
|
||||
else if (send == GroupDXDYDZ->PushButton1) {
|
||||
myEditCurrentArgument = GroupDXDYDZ->LineEdit1;
|
||||
}
|
||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
||||
this, SLOT(SelectionIntoArgument()));
|
||||
@ -446,15 +476,6 @@ void GenerationGUI_PrismDlg::ValueChangedInSpinBox()
|
||||
displayPreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : getHeight()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
double GenerationGUI_PrismDlg::getHeight() const
|
||||
{
|
||||
return GroupPoints->SpinBox_DX->value();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : createOperation
|
||||
// purpose :
|
||||
@ -473,16 +494,16 @@ bool GenerationGUI_PrismDlg::isValid (QString& msg)
|
||||
bool ok = false;
|
||||
switch ( getConstructorId() ) {
|
||||
case 0:
|
||||
ok = GroupPoints->SpinBox_DX->isValid( msg, !IsPreview() ) &&
|
||||
ok = GroupVecH->SpinBox_DX->isValid( msg, !IsPreview() ) &&
|
||||
!myBaseObjects.isEmpty() && myVec;
|
||||
break;
|
||||
case 1:
|
||||
ok = !myBaseObjects.isEmpty() && myPoint1 && myPoint2;
|
||||
break;
|
||||
case 2:
|
||||
ok = GroupPoints3->SpinBox_DX->isValid( msg, !IsPreview() ) &&
|
||||
GroupPoints3->SpinBox_DY->isValid( msg, !IsPreview() ) &&
|
||||
GroupPoints3->SpinBox_DZ->isValid( msg, !IsPreview() ) &&
|
||||
ok = GroupDXDYDZ->SpinBox_DX->isValid( msg, !IsPreview() ) &&
|
||||
GroupDXDYDZ->SpinBox_DY->isValid( msg, !IsPreview() ) &&
|
||||
GroupDXDYDZ->SpinBox_DZ->isValid( msg, !IsPreview() ) &&
|
||||
!myBaseObjects.isEmpty();
|
||||
break;
|
||||
default:
|
||||
@ -492,6 +513,62 @@ bool GenerationGUI_PrismDlg::isValid (QString& msg)
|
||||
return ok;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onReverse()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::onReverse()
|
||||
{
|
||||
double anOldValue = GroupVecH->SpinBox_DX->value();
|
||||
GroupVecH->SpinBox_DX->setValue(-anOldValue);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onBothway()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::onBothway()
|
||||
{
|
||||
GroupVecH->CheckBox2->setEnabled(!GroupVecH->CheckBox1->isChecked()); // is reversed
|
||||
GroupVecH->CheckBox3->setEnabled(!GroupVecH->CheckBox1->isChecked()); // is scaled
|
||||
GroupVecH->TextLabel4->setEnabled(!GroupVecH->CheckBox1->isChecked() &&
|
||||
GroupVecH->CheckBox3->isChecked()); // scale factor
|
||||
GroupVecH->SpinBox_DY->setEnabled(!GroupVecH->CheckBox1->isChecked() &&
|
||||
GroupVecH->CheckBox3->isChecked()); // scale factor
|
||||
|
||||
Group2Points->CheckBox2->setEnabled(!Group2Points->CheckBox1->isChecked()); // is scaled
|
||||
Group2Points->TextLabel4->setEnabled(!Group2Points->CheckBox1->isChecked() &&
|
||||
Group2Points->CheckBox2->isChecked()); // scale factor
|
||||
Group2Points->SpinBox1->setEnabled(!Group2Points->CheckBox1->isChecked() &&
|
||||
Group2Points->CheckBox2->isChecked()); // scale factor
|
||||
|
||||
GroupDXDYDZ->CheckBox2->setEnabled(!GroupDXDYDZ->CheckBox1->isChecked()); // is scaled
|
||||
GroupDXDYDZ->TextLabel5->setEnabled(!GroupDXDYDZ->CheckBox1->isChecked() &&
|
||||
GroupDXDYDZ->CheckBox2->isChecked()); // scale factor
|
||||
GroupDXDYDZ->SpinBox_SC->setEnabled(!GroupDXDYDZ->CheckBox1->isChecked() &&
|
||||
GroupDXDYDZ->CheckBox2->isChecked()); // scale factor
|
||||
|
||||
displayPreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onScalePrism()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::onScalePrism()
|
||||
{
|
||||
GroupVecH->TextLabel4->setEnabled(GroupVecH->CheckBox3->isChecked());
|
||||
GroupVecH->SpinBox_DY->setEnabled(GroupVecH->CheckBox3->isChecked());
|
||||
|
||||
Group2Points->TextLabel4->setEnabled(Group2Points->CheckBox2->isChecked());
|
||||
Group2Points->SpinBox1->setEnabled(Group2Points->CheckBox2->isChecked());
|
||||
|
||||
GroupDXDYDZ->TextLabel5->setEnabled(GroupDXDYDZ->CheckBox2->isChecked());
|
||||
GroupDXDYDZ->SpinBox_SC->setEnabled(GroupDXDYDZ->CheckBox2->isChecked());
|
||||
|
||||
displayPreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : execute
|
||||
// purpose :
|
||||
@ -506,36 +583,54 @@ bool GenerationGUI_PrismDlg::execute (ObjectList& objects)
|
||||
for (int i = 0; i < myBaseObjects.count(); i++) {
|
||||
switch (getConstructorId()) {
|
||||
case 0:
|
||||
if (!GroupPoints->CheckButton1->isChecked())
|
||||
anObj = anOper->MakePrismVecH(myBaseObjects[i].get(), myVec.get(), getHeight());
|
||||
if (GroupVecH->CheckBox1->isChecked())
|
||||
anObj = anOper->MakePrismVecH2Ways(myBaseObjects[i].get(), myVec.get(),
|
||||
GroupVecH->SpinBox_DX->value());
|
||||
else {
|
||||
if (GroupVecH->CheckBox3->isChecked())
|
||||
anObj = anOper->MakePrismVecHWithScaling(myBaseObjects[i].get(), myVec.get(),
|
||||
GroupVecH->SpinBox_DX->value(),
|
||||
GroupVecH->SpinBox_DY->value());
|
||||
else
|
||||
anObj = anOper->MakePrismVecH2Ways(myBaseObjects[i].get(), myVec.get(), getHeight());
|
||||
anObj = anOper->MakePrismVecH(myBaseObjects[i].get(), myVec.get(),
|
||||
GroupVecH->SpinBox_DX->value());
|
||||
}
|
||||
|
||||
if (!anObj->_is_nil() && !IsPreview()) {
|
||||
aParameters << GroupPoints->SpinBox_DX->text();
|
||||
aParameters << GroupVecH->SpinBox_DX->text();
|
||||
anObj->SetParameters(aParameters.join(":").toLatin1().constData());
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (!GroupPoints2->CheckButton1->isChecked())
|
||||
anObj = anOper->MakePrismTwoPnt(myBaseObjects[i].get(), myPoint1.get(), myPoint2.get());
|
||||
else
|
||||
if (Group2Points->CheckBox1->isChecked())
|
||||
anObj = anOper->MakePrismTwoPnt2Ways(myBaseObjects[i].get(), myPoint1.get(), myPoint2.get());
|
||||
else {
|
||||
if (Group2Points->CheckBox2->isChecked())
|
||||
anObj = anOper->MakePrismTwoPntWithScaling(myBaseObjects[i].get(), myPoint1.get(),
|
||||
myPoint2.get(), Group2Points->SpinBox1->value());
|
||||
else
|
||||
anObj = anOper->MakePrismTwoPnt(myBaseObjects[i].get(), myPoint1.get(), myPoint2.get());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
double dx = GroupPoints3->SpinBox_DX->value();
|
||||
double dy = GroupPoints3->SpinBox_DY->value();
|
||||
double dz = GroupPoints3->SpinBox_DZ->value();
|
||||
double dx = GroupDXDYDZ->SpinBox_DX->value();
|
||||
double dy = GroupDXDYDZ->SpinBox_DY->value();
|
||||
double dz = GroupDXDYDZ->SpinBox_DZ->value();
|
||||
|
||||
if (!GroupPoints3->CheckButton1->isChecked())
|
||||
anObj = anOper->MakePrismDXDYDZ(myBaseObjects[i].get(), dx, dy, dz);
|
||||
else
|
||||
if (GroupDXDYDZ->CheckBox1->isChecked())
|
||||
anObj = anOper->MakePrismDXDYDZ2Ways(myBaseObjects[i].get(), dx, dy, dz);
|
||||
else {
|
||||
if (GroupDXDYDZ->CheckBox2->isChecked())
|
||||
anObj = anOper->MakePrismDXDYDZWithScaling(myBaseObjects[i].get(), dx, dy, dz,
|
||||
GroupDXDYDZ->SpinBox_SC->value());
|
||||
else
|
||||
anObj = anOper->MakePrismDXDYDZ(myBaseObjects[i].get(), dx, dy, dz);
|
||||
}
|
||||
|
||||
if (!anObj->_is_nil() && !IsPreview()) {
|
||||
aParameters << GroupPoints3->SpinBox_DX->text();
|
||||
aParameters << GroupPoints3->SpinBox_DY->text();
|
||||
aParameters << GroupPoints3->SpinBox_DZ->text();
|
||||
aParameters << GroupDXDYDZ->SpinBox_DX->text();
|
||||
aParameters << GroupDXDYDZ->SpinBox_DY->text();
|
||||
aParameters << GroupDXDYDZ->SpinBox_DZ->text();
|
||||
anObj->SetParameters(aParameters.join(":").toLatin1().constData());
|
||||
}
|
||||
break;
|
||||
@ -548,26 +643,6 @@ bool GenerationGUI_PrismDlg::execute (ObjectList& objects)
|
||||
return true;
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onReverse()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::onReverse()
|
||||
{
|
||||
double anOldValue = GroupPoints->SpinBox_DX->value();
|
||||
GroupPoints->SpinBox_DX->setValue(-anOldValue);
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : onBothway()
|
||||
// purpose :
|
||||
//=================================================================================
|
||||
void GenerationGUI_PrismDlg::onBothway()
|
||||
{
|
||||
GroupPoints->CheckButton2->setEnabled(!GroupPoints->CheckButton1->isChecked());
|
||||
displayPreview();
|
||||
}
|
||||
|
||||
//=================================================================================
|
||||
// function : addSubshapeToStudy
|
||||
// purpose : virtual method to add new SubObjects if local selection
|
||||
|
@ -18,21 +18,20 @@
|
||||
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
//
|
||||
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
|
||||
//
|
||||
|
||||
// GEOM GEOMGUI : GUI for Geometry component
|
||||
// File : GenerationGUI_PrismDlg.h
|
||||
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
|
||||
//
|
||||
|
||||
#ifndef GENERATIONGUI_PRISMDLG_H
|
||||
#define GENERATIONGUI_PRISMDLG_H
|
||||
|
||||
#include "GEOMBase_Skeleton.h"
|
||||
#include "GEOM_GenericObjPtr.h"
|
||||
|
||||
class DlgRef_2Sel1Spin2Check;
|
||||
class DlgRef_3Sel1Check;
|
||||
class DlgRef_1Sel3Spin1Check;
|
||||
class DlgRef_2Sel2Spin3Check;
|
||||
class DlgRef_3Sel3Spin2Check;
|
||||
class DlgRef_1Sel4Spin2Check;
|
||||
|
||||
//=================================================================================
|
||||
// class : GenerationGUI_PrismDlg
|
||||
@ -57,16 +56,15 @@ protected:
|
||||
private:
|
||||
void Init();
|
||||
void enterEvent( QEvent* );
|
||||
double getHeight() const;
|
||||
|
||||
private:
|
||||
QList<GEOM::GeomObjPtr> myBaseObjects; /* Base shapes */
|
||||
GEOM::GeomObjPtr myVec; /* Vector, defining the direction */
|
||||
GEOM::GeomObjPtr myPoint1, myPoint2; /* Points for extrusion */
|
||||
|
||||
DlgRef_2Sel1Spin2Check* GroupPoints;
|
||||
DlgRef_3Sel1Check* GroupPoints2; // for second layout for extrusion using 2 points
|
||||
DlgRef_1Sel3Spin1Check* GroupPoints3;
|
||||
DlgRef_2Sel2Spin3Check* GroupVecH;
|
||||
DlgRef_3Sel3Spin2Check* Group2Points;
|
||||
DlgRef_1Sel4Spin2Check* GroupDXDYDZ;
|
||||
|
||||
private slots:
|
||||
void ClickOnOk();
|
||||
@ -79,6 +77,7 @@ private slots:
|
||||
void SetDoubleSpinBoxStep( double );
|
||||
void onReverse();
|
||||
void onBothway();
|
||||
void onScalePrism();
|
||||
};
|
||||
|
||||
#endif // GENERATIONGUI_PRISMDLG_H
|
||||
|