Changes for 0020673 - Implementation of "Auto-correct edges orientation".

This commit is contained in:
skl 2010-03-18 13:18:15 +00:00
parent 2fa6df2c26
commit 04e48a4907
16 changed files with 157 additions and 44 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -18,9 +18,13 @@ created surface and the reference edge;
Iterations</b> - defines the maximum number of iterations. The Iterations</b> - defines the maximum number of iterations. The
iterations are repeated until the required tolerance is reached. So, a iterations are repeated until the required tolerance is reached. So, a
greater number of iterations allows producing a better surface. greater number of iterations allows producing a better surface.
\n <b>Use orientation</b> - if checked, orientation of edges are used: \n <b>Method</b> - Kind of method to perform filling operation
if edge is reversed curve from this edge is reversed before using in 1. Default - standard behaviour
filling algorithm. 2. Use edges orientation - orientation of edges are used: if edge is
reversed curve from this edge is reversed before using in filling
algorithm.
3. Auto-correct edges orientation - change orientation of curves using
minimization of sum of distances between ends points of edges.
\n <b>Approximation</b> - if checked, BSpline curves are generated in \n <b>Approximation</b> - if checked, BSpline curves are generated in
the process of surface construction (using the process of surface construction (using
GeomAPI_PointsToBSplineSurface functionality). By default the surface GeomAPI_PointsToBSplineSurface functionality). By default the surface

View File

@ -114,6 +114,22 @@ module GEOM
FSM_GetInPlaceByHistory FSM_GetInPlaceByHistory
}; };
/*!
* Kind of method to perform filling operation
* Is used in functions GEOM_Gen.MakeFilling<xxx>()
*/
enum filling_oper_method
{
/*! Default (standard behaviour) */
FOM_Default,
/*! Use edges orientation */
FOM_UseOri,
/*! Auto-correct edges orientation */
FOM_AutoCorrect
};
typedef sequence<string> string_array; typedef sequence<string> string_array;
typedef sequence<short> short_array; typedef sequence<short> short_array;
@ -1180,12 +1196,14 @@ module GEOM
* \param theTol2D a 2d tolerance to be reached * \param theTol2D a 2d tolerance to be reached
* \param theTol3D a 3d tolerance to be reached * \param theTol3D a 3d tolerance to be reached
* \param theNbIter a number of iteration of approximation algorithm * \param theNbIter a number of iteration of approximation algorithm
* \param theMethod Kind of method to perform filling operation.
* \return New GEOM_Object, containing the created filling surface. * \return New GEOM_Object, containing the created filling surface.
*/ */
GEOM_Object MakeFilling (in GEOM_Object theShape, GEOM_Object MakeFilling (in GEOM_Object theShape,
in long theMinDeg, in long theMaxDeg, in long theMinDeg, in long theMaxDeg,
in double theTol2D, in double theTol3D, in double theTol2D, in double theTol3D,
in long theNbIter, in boolean theUseOri, in long theNbIter,
in filling_oper_method theMethod,
in boolean theApprox); in boolean theApprox);
/*! /*!

View File

@ -200,7 +200,8 @@ module GEOM
GEOM_Object MakeFilling (in GEOM_Object theShape, GEOM_Object MakeFilling (in GEOM_Object theShape,
in long theMinDeg, in long theMaxDeg, in long theMinDeg, in long theMaxDeg,
in double theTol2D, in double theTol3D, in double theTol2D, in double theTol3D,
in long theNbIter, in boolean theUseOri, in long theNbIter,
in filling_oper_method theMethod,
in boolean theApprox) ; in boolean theApprox) ;
GEOM_Object MakeThruSections(in ListOfGO theSeqSections, GEOM_Object MakeThruSections(in ListOfGO theSeqSections,
in boolean theModeSolid, in boolean theModeSolid,

View File

@ -7,13 +7,13 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>200</width> <width>200</width>
<height>153</height> <height>162</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string/> <string/>
</property> </property>
<layout class="QGridLayout"> <layout class="QGridLayout" name="gridLayout_2">
<property name="margin"> <property name="margin">
<number>0</number> <number>0</number>
</property> </property>
@ -59,13 +59,25 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="1" column="0">
<widget class="QCheckBox" name="CheckBox2"> <widget class="QLabel" name="TextLabel7">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string/> <string>TL7</string>
</property>
<property name="wordWrap">
<bool>false</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QComboBox" name="ComboBox1"/>
</item>
<item row="2" column="0" colspan="2"> <item row="2" column="0" colspan="2">
<layout class="QGridLayout"> <layout class="QGridLayout">
<item row="0" column="0"> <item row="0" column="0">
@ -187,7 +199,7 @@
<tabstops> <tabstops>
<tabstop>PushButton1</tabstop> <tabstop>PushButton1</tabstop>
<tabstop>LineEdit1</tabstop> <tabstop>LineEdit1</tabstop>
<tabstop>CheckBox2</tabstop> <tabstop>ComboBox1</tabstop>
<tabstop>SpinBox1</tabstop> <tabstop>SpinBox1</tabstop>
<tabstop>SpinBox2</tabstop> <tabstop>SpinBox2</tabstop>
<tabstop>SpinBox4</tabstop> <tabstop>SpinBox4</tabstop>

View File

@ -3787,9 +3787,21 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_FILLING_APPROX</source> <source>GEOM_FILLING_APPROX</source>
<translation>Approximation</translation> <translation>Approximation</translation>
</message> </message>
<message>
<source>GEOM_FILLING_METHOD</source>
<translation>Method</translation>
</message>
<message>
<source>GEOM_FILLING_DEFAULT</source>
<translation>Default (standard behaviour)</translation>
</message>
<message> <message>
<source>GEOM_FILLING_USEORI</source> <source>GEOM_FILLING_USEORI</source>
<translation>Use orientation</translation> <translation>Use edges orientation</translation>
</message>
<message>
<source>GEOM_FILLING_AUTO</source>
<translation>Auto-correct edges orientation</translation>
</message> </message>
<message> <message>
<source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source> <source>GEOM_WRN_NO_APPROPRIATE_SELECTION</source>

View File

@ -110,7 +110,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
Standard_Real tol2d = IF.GetTol3D(); Standard_Real tol2d = IF.GetTol3D();
Standard_Integer nbiter = IF.GetNbIter(); Standard_Integer nbiter = IF.GetNbIter();
Standard_Boolean isApprox = IF.GetApprox(); Standard_Boolean isApprox = IF.GetApprox();
Standard_Boolean isUseOri = IF.GetUseOri(); Standard_Integer aMethod = IF.GetMethod();
if (mindeg > maxdeg) { if (mindeg > maxdeg) {
Standard_RangeError::Raise("Minimal degree can not be more than maximal degree"); Standard_RangeError::Raise("Minimal degree can not be more than maximal degree");
@ -224,6 +224,8 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
// make filling as in old version of SALOME (before 4.1.1) // make filling as in old version of SALOME (before 4.1.1)
GeomFill_SectionGenerator Section; GeomFill_SectionGenerator Section;
Standard_Integer i = 0; Standard_Integer i = 0;
Handle(Geom_Curve) aLastC;
gp_Pnt PL1,PL2;
for (Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) { for (Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) {
Scurrent = Ex.Current(); Scurrent = Ex.Current();
if (Scurrent.IsNull() || Scurrent.ShapeType() != TopAbs_EDGE) return 0; if (Scurrent.IsNull() || Scurrent.ShapeType() != TopAbs_EDGE) return 0;
@ -235,9 +237,33 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
//else //else
// C = new Geom_TrimmedCurve(C, First, Last); // C = new Geom_TrimmedCurve(C, First, Last);
C = new Geom_TrimmedCurve(C, First, Last); C = new Geom_TrimmedCurve(C, First, Last);
if( isUseOri && Scurrent.Orientation() == TopAbs_REVERSED ) { gp_Pnt P1,P2;
C->D0(First,P1);
C->D0(Last,P2);
if( aMethod==1 && Scurrent.Orientation() == TopAbs_REVERSED ) {
C->Reverse(); C->Reverse();
} }
else if( aMethod==2 ) {
if( i==0 ) {
PL1 = P1;
PL2 = P2;
}
else {
double d1 = PL1.Distance(P1) + PL2.Distance(P2);
double d2 = PL1.Distance(P2) + PL2.Distance(P1);
if(d2<d1) {
C->Reverse();
PL1 = P2;
PL2 = P1;
}
else {
PL1 = P1;
PL2 = P2;
}
}
}
Section.AddCurve(C); Section.AddCurve(C);
i++; i++;
} }

View File

@ -1454,7 +1454,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeRevolutionAxisAngle2Ways
Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFilling Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFilling
(Handle(GEOM_Object) theShape, int theMinDeg, int theMaxDeg, (Handle(GEOM_Object) theShape, int theMinDeg, int theMaxDeg,
double theTol2D, double theTol3D, int theNbIter, double theTol2D, double theTol3D, int theNbIter,
bool isUseOri, bool isApprox) int theMethod, bool isApprox)
{ {
SetErrorCode(KO); SetErrorCode(KO);
@ -1483,7 +1483,7 @@ Handle(GEOM_Object) GEOMImpl_I3DPrimOperations::MakeFilling
aFI.SetTol3D(theTol3D); aFI.SetTol3D(theTol3D);
aFI.SetNbIter(theNbIter); aFI.SetNbIter(theNbIter);
aFI.SetApprox(isApprox); aFI.SetApprox(isApprox);
aFI.SetUseOri(isUseOri); aFI.SetMethod(theMethod);
//Compute the Solid value //Compute the Solid value
try { try {

View File

@ -100,7 +100,7 @@ class GEOMImpl_I3DPrimOperations : public GEOM_IOperations {
Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape, Standard_EXPORT Handle(GEOM_Object) MakeFilling (Handle(GEOM_Object) theShape,
int theMinDeg, int theMaxDeg, int theMinDeg, int theMaxDeg,
double theTol2D, double theTol3D, double theTol2D, double theTol3D,
int theNbIter, bool isUseOri, int theNbIter, int theMethod,
bool isApprox); bool isApprox);
Standard_EXPORT Handle(GEOM_Object) MakeThruSections Standard_EXPORT Handle(GEOM_Object) MakeThruSections

View File

@ -30,7 +30,7 @@
#define FILL_ARG_SHAPE 5 #define FILL_ARG_SHAPE 5
#define FILL_ARG_NBITER 6 #define FILL_ARG_NBITER 6
#define FILL_ARG_APPROX 7 #define FILL_ARG_APPROX 7
#define FILL_ARG_USEORI 8 #define FILL_ARG_METHOD 8
class GEOMImpl_IFilling class GEOMImpl_IFilling
{ {
@ -53,8 +53,8 @@ class GEOMImpl_IFilling
void SetApprox(bool theApprox) { _func->SetInteger(FILL_ARG_APPROX, theApprox); } void SetApprox(bool theApprox) { _func->SetInteger(FILL_ARG_APPROX, theApprox); }
bool GetApprox() { return _func->GetInteger(FILL_ARG_APPROX); } bool GetApprox() { return _func->GetInteger(FILL_ARG_APPROX); }
void SetUseOri(bool theUseOri) { _func->SetInteger(FILL_ARG_USEORI, theUseOri); } void SetMethod(int theMethod) { _func->SetInteger(FILL_ARG_METHOD, theMethod); }
bool GetUseOri() { return _func->GetInteger(FILL_ARG_USEORI); } int GetMethod() { return _func->GetInteger(FILL_ARG_METHOD); }
void SetShape(Handle(GEOM_Function) theShape) { _func->SetReference(FILL_ARG_SHAPE, theShape); } void SetShape(Handle(GEOM_Function) theShape) { _func->SetReference(FILL_ARG_SHAPE, theShape); }
Handle(GEOM_Function) GetShape() { return _func->GetReference(FILL_ARG_SHAPE); } Handle(GEOM_Function) GetShape() { return _func->GetReference(FILL_ARG_SHAPE); }

View File

@ -704,14 +704,15 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeRevolutionAxisAngle2Ways
* MakeFilling * MakeFilling
*/ */
//============================================================================= //=============================================================================
GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape, GEOM::GEOM_Object_ptr
CORBA::Long theMinDeg, GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_ptr theShape,
CORBA::Long theMaxDeg, CORBA::Long theMinDeg,
CORBA::Double theTol2D, CORBA::Long theMaxDeg,
CORBA::Double theTol3D, CORBA::Double theTol2D,
CORBA::Long theNbIter, CORBA::Double theTol3D,
CORBA::Boolean theUseOri, CORBA::Long theNbIter,
CORBA::Boolean theApprox) GEOM::filling_oper_method theMethod,
CORBA::Boolean theApprox)
{ {
GEOM::GEOM_Object_var aGEOMObject; GEOM::GEOM_Object_var aGEOMObject;
@ -723,10 +724,34 @@ GEOM::GEOM_Object_ptr GEOM_I3DPrimOperations_i::MakeFilling(GEOM::GEOM_Object_pt
if (aShape.IsNull()) return aGEOMObject._retn(); if (aShape.IsNull()) return aGEOMObject._retn();
int aMethod = 0;
switch (theMethod) {
case GEOM::FOM_Default:
{
// Default (standard behaviour)
aMethod = 0;
}
break;
case GEOM::FOM_UseOri:
{
// Use edges orientation
aMethod = 1;
}
break;
case GEOM::FOM_AutoCorrect:
{
// Auto-correct edges orientation
aMethod = 2;
}
break;
default:
{}
}
//Create the Solid //Create the Solid
Handle(GEOM_Object) anObject = GetOperations()->MakeFilling Handle(GEOM_Object) anObject = GetOperations()->MakeFilling
(aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter, (aShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, theNbIter,
theUseOri, theApprox); aMethod, theApprox);
if (!GetOperations()->IsDone() || anObject.IsNull()) if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn(); return aGEOMObject._retn();

View File

@ -137,7 +137,8 @@ class GEOM_I_EXPORT GEOM_I3DPrimOperations_i :
GEOM::GEOM_Object_ptr MakeFilling(GEOM::GEOM_Object_ptr theShape, GEOM::GEOM_Object_ptr MakeFilling(GEOM::GEOM_Object_ptr theShape,
CORBA::Long theMinDeg, CORBA::Long theMaxDeg, CORBA::Long theMinDeg, CORBA::Long theMaxDeg,
CORBA::Double theTol2D, CORBA::Double theTol3D, CORBA::Double theTol2D, CORBA::Double theTol3D,
CORBA::Long theNbIter, CORBA::Boolean theUseOri, CORBA::Long theNbIter,
GEOM::filling_oper_method theMethod,
CORBA::Boolean theApprox); CORBA::Boolean theApprox);
GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections, GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections,

View File

@ -1247,7 +1247,7 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilling (GEOM::GEOM_Object_ptr theShape
CORBA::Double theTol2D, CORBA::Double theTol2D,
CORBA::Double theTol3D, CORBA::Double theTol3D,
CORBA::Long theNbIter, CORBA::Long theNbIter,
CORBA::Boolean theUseOri, GEOM::filling_oper_method theMethod,
CORBA::Boolean theApprox) CORBA::Boolean theApprox)
{ {
beginService( " GEOM_Superv_i::MakeFilling" ); beginService( " GEOM_Superv_i::MakeFilling" );
@ -1255,7 +1255,7 @@ GEOM::GEOM_Object_ptr GEOM_Superv_i::MakeFilling (GEOM::GEOM_Object_ptr theShape
get3DPrimOp(); get3DPrimOp();
GEOM::GEOM_Object_ptr anObj = GEOM::GEOM_Object_ptr anObj =
my3DPrimOp->MakeFilling(theShape, theMinDeg, theMaxDeg, theTol2D, theTol3D, my3DPrimOp->MakeFilling(theShape, theMinDeg, theMaxDeg, theTol2D, theTol3D,
theNbIter, theUseOri, theApprox); theNbIter, theMethod, theApprox);
endService( " GEOM_Superv_i::MakeFilling" ); endService( " GEOM_Superv_i::MakeFilling" );
return anObj; return anObj;
} }

View File

@ -288,7 +288,8 @@ public:
GEOM::GEOM_Object_ptr MakeFilling (GEOM::GEOM_Object_ptr theShape, GEOM::GEOM_Object_ptr MakeFilling (GEOM::GEOM_Object_ptr theShape,
CORBA::Long theMinDeg, CORBA::Long theMaxDeg, CORBA::Long theMinDeg, CORBA::Long theMaxDeg,
CORBA::Double theTol2D, CORBA::Double theTol3D, CORBA::Double theTol2D, CORBA::Double theTol3D,
CORBA::Long theNbIter, CORBA::Boolean theUseOri, CORBA::Long theNbIter,
GEOM::filling_oper_method theMethod,
CORBA::Boolean theApprox); CORBA::Boolean theApprox);
GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections, GEOM::GEOM_Object_ptr MakeThruSections(const GEOM::ListOfGO& theSeqSections,

View File

@ -70,7 +70,7 @@ GenerationGUI_FillingDlg::GenerationGUI_FillingDlg( GeometryGUI* theGeometryGUI,
GroupPoints->TextLabel5->setText( tr( "GEOM_FILLING_MAX_DEG" ) ); GroupPoints->TextLabel5->setText( tr( "GEOM_FILLING_MAX_DEG" ) );
GroupPoints->TextLabel6->setText( tr( "GEOM_FILLING_TOL_3D" ) ); GroupPoints->TextLabel6->setText( tr( "GEOM_FILLING_TOL_3D" ) );
GroupPoints->CheckBox1->setText( tr( "GEOM_FILLING_APPROX" ) ); GroupPoints->CheckBox1->setText( tr( "GEOM_FILLING_APPROX" ) );
GroupPoints->CheckBox2->setText( tr( "GEOM_FILLING_USEORI" ) ); GroupPoints->TextLabel7->setText( tr( "GEOM_FILLING_METHOD" ) );
GroupPoints->PushButton1->setIcon( image1 ); GroupPoints->PushButton1->setIcon( image1 );
GroupPoints->LineEdit1->setReadOnly( true ); GroupPoints->LineEdit1->setReadOnly( true );
@ -109,7 +109,7 @@ void GenerationGUI_FillingDlg::Init()
myTol3D = 0.0001; myTol3D = 0.0001;
myTol2D = 0.0001; myTol2D = 0.0001;
myNbIter = 0; myNbIter = 0;
myIsUseOri = false; myMethod = 0;
myIsApprox = false; myIsApprox = false;
myOkCompound = false; myOkCompound = false;
@ -130,6 +130,10 @@ void GenerationGUI_FillingDlg::Init()
GroupPoints->SpinBox4->setValue( myMaxDeg ); GroupPoints->SpinBox4->setValue( myMaxDeg );
GroupPoints->SpinBox5->setValue( myTol3D ); GroupPoints->SpinBox5->setValue( myTol3D );
GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_DEFAULT"));
GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_USEORI"));
GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_AUTO"));
/* signals and slots connections */ /* signals and slots connections */
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) ); connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) ); connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
@ -137,6 +141,8 @@ void GenerationGUI_FillingDlg::Init()
connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) ); connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) ); connect( GroupPoints->LineEdit1, SIGNAL( returnPressed() ), this, SLOT( LineEditReturnPressed() ) );
connect( GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(MethodChanged()));
connect( GroupPoints->SpinBox1, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); connect( GroupPoints->SpinBox1, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
connect( GroupPoints->SpinBox2, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); connect( GroupPoints->SpinBox2, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
connect( GroupPoints->SpinBox3, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) ); connect( GroupPoints->SpinBox3, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
@ -146,9 +152,6 @@ void GenerationGUI_FillingDlg::Init()
connect( GroupPoints->CheckBox1, SIGNAL( stateChanged( int ) ), connect( GroupPoints->CheckBox1, SIGNAL( stateChanged( int ) ),
this, SLOT( ApproxChanged() ) ); this, SLOT( ApproxChanged() ) );
connect( GroupPoints->CheckBox2, SIGNAL( stateChanged( int ) ),
this, SLOT( UseOriChanged() ) );
connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) ); connect( myGeomGUI, SIGNAL( SignalDefaultStepValueChanged( double ) ), this, SLOT( SetDoubleSpinBoxStep( double ) ) );
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(), connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
@ -322,12 +325,12 @@ void GenerationGUI_FillingDlg::ValueChangedInSpinBox( double newValue )
} }
//================================================================================= //=================================================================================
// function : UseOriChanged() // function : MethodChanged
// purpose : // purpose :
//================================================================================= //=================================================================================
void GenerationGUI_FillingDlg::UseOriChanged() void GenerationGUI_FillingDlg::MethodChanged()
{ {
myIsUseOri = GroupPoints->CheckBox2->isChecked(); myMethod = GroupPoints->ComboBox1->currentIndex();
displayPreview(); displayPreview();
} }
@ -375,9 +378,19 @@ bool GenerationGUI_FillingDlg::execute( ObjectList& objects )
{ {
GEOM::GEOM_I3DPrimOperations_var anOper = GEOM::GEOM_I3DPrimOperations_var anOper =
GEOM::GEOM_I3DPrimOperations::_narrow(getOperation()); GEOM::GEOM_I3DPrimOperations::_narrow(getOperation());
GEOM::filling_oper_method aMethod;
switch (GroupPoints->ComboBox1->currentIndex())
{
case 0: aMethod = GEOM::FOM_Default; break;
case 1: aMethod = GEOM::FOM_UseOri; break;
case 2: aMethod = GEOM::FOM_AutoCorrect; break;
default: break;
}
GEOM::GEOM_Object_var anObj = GEOM::GEOM_Object_var anObj =
anOper->MakeFilling( myCompound, myMinDeg, myMaxDeg, myTol2D, myTol3D, anOper->MakeFilling( myCompound, myMinDeg, myMaxDeg, myTol2D, myTol3D,
myNbIter, myIsUseOri, myIsApprox ); myNbIter, aMethod, myIsApprox );
if ( !anObj->_is_nil() ) if ( !anObj->_is_nil() )
{ {
if ( !IsPreview() ) if ( !IsPreview() )

View File

@ -60,7 +60,7 @@ private:
Standard_Real myTol2D; Standard_Real myTol2D;
Standard_Integer myNbIter; Standard_Integer myNbIter;
bool myIsApprox; bool myIsApprox;
bool myIsUseOri; int myMethod;
bool myOkCompound; /* to check when curv. compound is defined */ bool myOkCompound; /* to check when curv. compound is defined */
DlgRef_1Sel5Spin1Check* GroupPoints; DlgRef_1Sel5Spin1Check* GroupPoints;
@ -73,7 +73,7 @@ private slots:
void SelectionIntoArgument(); void SelectionIntoArgument();
void SetEditCurrentArgument(); void SetEditCurrentArgument();
void ValueChangedInSpinBox( double ); void ValueChangedInSpinBox( double );
void UseOriChanged(); void MethodChanged();
void ApproxChanged(); void ApproxChanged();
void SetDoubleSpinBoxStep( double ); void SetDoubleSpinBoxStep( double );
}; };