Mantis issue 0021541: EDF 2213 GEOM: Filling accuracy

This commit is contained in:
jfa 2012-07-06 08:44:12 +00:00
parent f6d916275e
commit 12efffce9b
3 changed files with 191 additions and 134 deletions

View File

@ -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>
@ -98,27 +97,23 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
if (Label().IsNull()) return 0;
Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label());
if (aFunction.IsNull()) return 0;
if (aFunction->GetType() != BASIC_FILLING) return 0;
GEOMImpl_IFilling IF (aFunction);
Handle(GEOM_Function) aShapeFunction = IF.GetShape();
if (aShapeFunction.IsNull()) return 0;
TopoDS_Shape aShape;
BRepBuilderAPI_Copy Copy(aShapeFunction->GetValue());
if( Copy.IsDone() )
TopoDS_Shape aShape;
BRepBuilderAPI_Copy Copy (aShapeFunction->GetValue());
if (Copy.IsDone())
aShape = Copy.Shape();
if (aShape.IsNull() || aShape.ShapeType() != TopAbs_COMPOUND) return 0;
Standard_Integer mindeg = IF.GetMinDeg();
Standard_Integer maxdeg = IF.GetMaxDeg();
Standard_Real tol3d = IF.GetTol2D();
Standard_Real tol2d = IF.GetTol3D();
Standard_Integer nbiter = IF.GetNbIter();
Standard_Real tol3d = IF.GetTol3D();
Standard_Boolean isApprox = IF.GetApprox();
Standard_Integer aMethod = IF.GetMethod();
if (mindeg > maxdeg) {
Standard_RangeError::Raise("Minimal degree can not be more than maximal degree");
@ -134,6 +129,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
BRep_Builder B;
B.MakeCompound(aComp);
// 1. Convert argument wires, if any, into BSpline edges
TopoDS_Iterator It (aShape);
for (; It.More(); It.Next()) {
Scurrent = It.Value();
@ -198,7 +194,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
Pnts.SetValue(i,PntSeq.Value(i));
}
}
GeomAPI_PointsToBSpline PTB(Pnts);
GeomAPI_PointsToBSpline PTB (Pnts);
newC = Handle(Geom_BSplineCurve)::DownCast(PTB.Curve());
// set periodic flag if curve is closed
//if( newC->IsClosed() ) {
@ -220,7 +216,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
Scurrent = newE;
}
}
if(newC.IsNull()) {
if (newC.IsNull()) {
Standard_ConstructionError::Raise("The argument compound must contain only edges");
}
}
@ -228,8 +224,14 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
}
aShape = aComp;
// 2. The surface construction
if (!isApprox) {
// make filling as in old version of SALOME (before 4.1.1)
Standard_Real tol2d = IF.GetTol2D();
Standard_Integer nbiter = IF.GetNbIter();
Standard_Integer aMethod = IF.GetMethod();
GeomFill_SectionGenerator Section;
Standard_Integer i = 0;
Handle(Geom_Curve) aLastC;
@ -249,18 +251,18 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
C->D0(First,P1);
C->D0(Last,P2);
if( aMethod==1 && Scurrent.Orientation() == TopAbs_REVERSED ) {
if (aMethod == 1 && Scurrent.Orientation() == TopAbs_REVERSED) {
C->Reverse();
}
else if( aMethod==2 ) {
if( i==0 ) {
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) {
if (d2 < d1) {
C->Reverse();
PL1 = P2;
PL2 = P1;
@ -301,8 +303,10 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
// implemented by skl 20.03.2008 for bug 16568
// make approximation - try to create bspline surface
// using GeomAPI_PointsToBSplineSurface
TColGeom_SequenceOfCurve aSeq;
int MaxNbPoles = 0;
// add curves from edges to sequence and find maximal
// number of poles if some of them are bsplines
for (Ex.Init(aShape, TopAbs_EDGE); Ex.More(); Ex.Next()) {
@ -311,21 +315,21 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
if (BRep_Tool::Degenerated(TopoDS::Edge(Scurrent))) continue;
C = BRep_Tool::Curve(TopoDS::Edge(Scurrent), First, Last);
Handle(Geom_TrimmedCurve) TC = Handle(Geom_TrimmedCurve)::DownCast(C);
if(TC.IsNull()) {
if (TC.IsNull()) {
Handle(Geom_BSplineCurve) BC = Handle(Geom_BSplineCurve)::DownCast(C);
if(!BC.IsNull()) {
if (!BC.IsNull()) {
MaxNbPoles = Max(MaxNbPoles,BC->NbPoles());
}
}
else {
Handle(Geom_BSplineCurve) BC = Handle(Geom_BSplineCurve)::DownCast(TC->BasisCurve());
if(BC.IsNull()) {
if (BC.IsNull()) {
Handle(Geom_TrimmedCurve) TC1 = Handle(Geom_TrimmedCurve)::DownCast(TC->BasisCurve());
if(!TC1.IsNull()) {
if (!TC1.IsNull()) {
BC = Handle(Geom_BSplineCurve)::DownCast(TC1->BasisCurve());
}
}
if(!BC.IsNull()) {
if (!BC.IsNull()) {
MaxNbPoles = Max(MaxNbPoles,BC->NbPoles());
}
}
@ -336,23 +340,26 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
// by V parameter - determ using MaxNbPoles but it's
// value must be between 21(min) and 101(max)
int nbc = aSeq.Length();
int nbp = Max(21,2*MaxNbPoles-1);
if(nbp>101) nbp = 101;
TColgp_Array2OfPnt Points(1,nbc,1,nbp);
int nbp = Max(21, 2*MaxNbPoles-1);
// commented for Mantis issue 0021541
//if (nbp > 101) nbp = 101;
TColgp_Array2OfPnt Points (1, nbc, 1, nbp);
int ic = 1;
for(; ic<=nbc; ic++) {
for (; ic <= nbc; ic++) {
Handle(Geom_Curve) C = aSeq.Value(ic);
double fp = C->FirstParameter();
double lp = C->LastParameter();
double dp = (lp-fp)/(nbp-1);
int j = 0;
gp_Pnt P;
for(; j<nbp; j++) {
C->D0(fp+dp*j,P);
Points.SetValue(ic,j+1,P);
}
for (; j < nbp; j++) {
C->D0(fp+dp*j, P);
Points.SetValue(ic, j+1, P);
}
}
GeomAPI_PointsToBSplineSurface PTB(Points,mindeg,maxdeg,GeomAbs_C2,tol3d);
GeomAPI_PointsToBSplineSurface PTB (Points, mindeg, maxdeg, GeomAbs_C2, tol3d);
Handle(Geom_BSplineSurface) BS = PTB.Surface();
#if OCC_VERSION_LARGE > 0x06050100 // for OCC-6.5.2 and higher version
BRepBuilderAPI_MakeFace BB (BS, Precision::Confusion());
@ -360,7 +367,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
BRepBuilderAPI_MakeFace BB (BS);
#endif
TopoDS_Face NewF = BB.Face();
Handle(ShapeFix_Face) sff = new ShapeFix_Face(NewF);
Handle(ShapeFix_Face) sff = new ShapeFix_Face (NewF);
sff->Perform();
sff->FixOrientation();
aShape = sff->Face();
@ -368,7 +375,7 @@ Standard_Integer GEOMImpl_FillingDriver::Execute(TFunction_Logbook& log) const
/* We test the validity of resulting shape */
if (!BRepAlgo::IsValid((aShape))) {
Standard_ConstructionError::Raise("Algorithm have produced an invalid shape result");
Standard_ConstructionError::Raise("Algorithm has produced an invalid shape result");
return 0;
}

View File

@ -2481,9 +2481,9 @@ class geompyDC(GEOM._objref_GEOM_Gen):
# @param theMethod Kind of method to perform filling operation(see GEOM::filling_oper_method())
# @param isApprox if True, BSpline curves are generated in the process
# of surface construction. By default it is False, that means
# the surface is created using Besier curves. The usage of
# the surface is created using given curves. The usage of
# Approximation makes the algorithm work slower, but allows
# building the surface for rather complex cases
# building the surface for rather complex cases.
# @return New GEOM.GEOM_Object, containing the created filling surface.
#
# @ref tui_creation_filling "Example"
@ -2502,7 +2502,7 @@ class geompyDC(GEOM._objref_GEOM_Gen):
theMethod Kind of method to perform filling operation(see GEOM::filling_oper_method())
isApprox if True, BSpline curves are generated in the process
of surface construction. By default it is False, that means
the surface is created using Besier curves. The usage of
the surface is created using given curves. The usage of
Approximation makes the algorithm work slower, but allows
building the surface for rather complex cases
@ -2521,6 +2521,41 @@ class geompyDC(GEOM._objref_GEOM_Gen):
anObj.SetParameters(Parameters)
return anObj
## Create a filling from the given compound of contours.
# This method corresponds to MakeFilling with isApprox=True
# @param theShape the compound of contours
# @param theMinDeg a minimal degree of BSpline surface to create
# @param theMaxDeg a maximal degree of BSpline surface to create
# @param theTol3D a 3d tolerance to be reached
# @return New GEOM.GEOM_Object, containing the created filling surface.
#
# @ref tui_creation_filling "Example"
def MakeFillingNew(self, theShape, theMinDeg, theMaxDeg, theTol3D):
"""
Create a filling from the given compound of contours.
This method corresponds to MakeFilling with isApprox=True
Parameters:
theShape the compound of contours
theMinDeg a minimal degree of BSpline surface to create
theMaxDeg a maximal degree of BSpline surface to create
theTol3D a 3d tolerance to be reached
Returns:
New GEOM.GEOM_Object, containing the created filling surface.
Example of usage:
filling = geompy.MakeFillingNew(compound, 2, 5, 0.0001)
"""
# Example: see GEOM_TestAll.py
theMinDeg,theMaxDeg,theTol3D,Parameters = ParseParameters(theMinDeg, theMaxDeg, theTol3D)
anObj = self.PrimOp.MakeFilling(theShape, theMinDeg, theMaxDeg,
0, theTol3D, 0, GEOM.FOM_Default, True)
RaiseIfFailed("MakeFillingNew", self.PrimOp)
anObj.SetParameters(Parameters)
return anObj
## Create a shell or solid passing through set of sections.Sections should be wires,edges or vertices.
# @param theSeqSections - set of specified sections.
# @param theModeSolid - mode defining building solid or shell

View File

@ -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_FillingDlg.cxx
// Author : Lucien PIGNOLONI, Open CASCADE S.A.S.
//
#include "GenerationGUI_FillingDlg.h"
#include <DlgRef.h>
@ -45,42 +44,42 @@
// The dialog will by default be modeless, unless you set 'modal' to
// TRUE to construct a modal dialog.
//=================================================================================
GenerationGUI_FillingDlg::GenerationGUI_FillingDlg( GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl )
: GEOMBase_Skeleton( theGeometryGUI, parent, modal, fl )
GenerationGUI_FillingDlg::GenerationGUI_FillingDlg (GeometryGUI* theGeometryGUI, QWidget* parent,
bool modal, Qt::WindowFlags fl)
: GEOMBase_Skeleton(theGeometryGUI, parent, modal, fl)
{
QPixmap image0( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_DLG_FILLING" ) ) );
QPixmap image1( SUIT_Session::session()->resourceMgr()->loadPixmap( "GEOM", tr( "ICON_SELECT" ) ) );
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_FILLING")));
QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
setWindowTitle( tr( "GEOM_FILLING_TITLE" ) );
setWindowTitle(tr("GEOM_FILLING_TITLE"));
/***************************************************************/
mainFrame()->GroupConstructors->setTitle( tr ( "GEOM_FILLING" ) );
mainFrame()->RadioButton1->setIcon( image0 );
mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
mainFrame()->GroupConstructors->setTitle(tr ("GEOM_FILLING"));
mainFrame()->RadioButton1->setIcon(image0);
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton2->close();
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close();
GroupPoints = new DlgRef_1Sel5Spin1Check( centralWidget() );
GroupPoints->GroupBox1->setTitle( tr( "GEOM_ARGUMENTS" ) );
GroupPoints->TextLabel1->setText( tr( "GEOM_FILLING_COMPOUND" ) );
GroupPoints->TextLabel2->setText( tr( "GEOM_FILLING_MIN_DEG" ) );
GroupPoints->TextLabel3->setText( tr( "GEOM_FILLING_TOL_2D" ) );
GroupPoints->TextLabel4->setText( tr( "GEOM_FILLING_NB_ITER" ) );
GroupPoints->TextLabel5->setText( tr( "GEOM_FILLING_MAX_DEG" ) );
GroupPoints->TextLabel6->setText( tr( "GEOM_FILLING_TOL_3D" ) );
GroupPoints->CheckBox1->setText( tr( "GEOM_FILLING_APPROX" ) );
GroupPoints->TextLabel7->setText( tr( "GEOM_FILLING_METHOD" ) );
GroupPoints->PushButton1->setIcon( image1 );
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints = new DlgRef_1Sel5Spin1Check(centralWidget());
GroupPoints->GroupBox1->setTitle(tr("GEOM_ARGUMENTS"));
GroupPoints->TextLabel1->setText(tr("GEOM_FILLING_COMPOUND"));
GroupPoints->TextLabel2->setText(tr("GEOM_FILLING_MIN_DEG"));
GroupPoints->TextLabel3->setText(tr("GEOM_FILLING_TOL_2D"));
GroupPoints->TextLabel4->setText(tr("GEOM_FILLING_NB_ITER"));
GroupPoints->TextLabel5->setText(tr("GEOM_FILLING_MAX_DEG"));
GroupPoints->TextLabel6->setText(tr("GEOM_FILLING_TOL_3D"));
GroupPoints->CheckBox1->setText(tr("GEOM_FILLING_APPROX"));
GroupPoints->TextLabel7->setText(tr("GEOM_FILLING_METHOD"));
GroupPoints->PushButton1->setIcon(image1);
GroupPoints->LineEdit1->setReadOnly(true);
QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
layout->setMargin( 0 ); layout->setSpacing( 6 );
layout->addWidget( GroupPoints );
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(GroupPoints);
/***************************************************************/
setHelpFileName( "create_filling_page.html" );
setHelpFileName("create_filling_page.html");
/* Initialisations */
Init();
@ -103,24 +102,24 @@ void GenerationGUI_FillingDlg::Init()
{
/* init variables */
myEditCurrentArgument = GroupPoints->LineEdit1;
GroupPoints->LineEdit1->setReadOnly( true );
GroupPoints->LineEdit1->setReadOnly(true);
globalSelection( GEOM_COMPOUND );
globalSelection(GEOM_COMPOUND);
int SpecificStep1 = 1;
double SpecificStep2 = 0.0001;
/* min, max, step and decimals for spin boxes & initial values */
initSpinBox( GroupPoints->SpinBox1, 2, MAX_NUMBER, SpecificStep1 );
initSpinBox( GroupPoints->SpinBox2, 0.00001, 10000.0, SpecificStep2, "len_tol_precision" );
initSpinBox( GroupPoints->SpinBox3, 0, MAX_NUMBER, SpecificStep1 );
initSpinBox( GroupPoints->SpinBox4, 1, MAX_NUMBER, SpecificStep1 );
initSpinBox( GroupPoints->SpinBox5, 0.00001, 10000.0, SpecificStep2, "len_tol_precision" );
initSpinBox(GroupPoints->SpinBox1, 2, MAX_NUMBER, SpecificStep1);
initSpinBox(GroupPoints->SpinBox2, 0.00001, 10000.0, SpecificStep2, "len_tol_precision");
initSpinBox(GroupPoints->SpinBox3, 0, MAX_NUMBER, SpecificStep1);
initSpinBox(GroupPoints->SpinBox4, 1, MAX_NUMBER, SpecificStep1);
initSpinBox(GroupPoints->SpinBox5, 0.00001, 10000.0, SpecificStep2, "len_tol_precision");
GroupPoints->SpinBox1->setValue( 2 );
GroupPoints->SpinBox2->setValue( 0.0001 );
GroupPoints->SpinBox3->setValue( 0 );
GroupPoints->SpinBox4->setValue( 5 );
GroupPoints->SpinBox5->setValue( 0.0001 );
GroupPoints->SpinBox1->setValue(2);
GroupPoints->SpinBox2->setValue(0.0001);
GroupPoints->SpinBox3->setValue(0);
GroupPoints->SpinBox4->setValue(5);
GroupPoints->SpinBox5->setValue(0.0001);
GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_DEFAULT"));
GroupPoints->ComboBox1->addItem(tr("GEOM_FILLING_USEORI"));
@ -129,29 +128,29 @@ void GenerationGUI_FillingDlg::Init()
showOnlyPreviewControl();
/* signals and slots connections */
connect( buttonOk(), SIGNAL( clicked() ), this, SLOT( ClickOnOk() ) );
connect( buttonApply(), SIGNAL( clicked() ), this, SLOT( ClickOnApply() ) );
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect( GroupPoints->PushButton1, SIGNAL( clicked() ), this, SLOT( SetEditCurrentArgument() ) );
connect(GroupPoints->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect( GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(MethodChanged()));
connect(GroupPoints->ComboBox1, SIGNAL(activated(int)), this, SLOT(MethodChanged()));
connect( GroupPoints->SpinBox1, 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->SpinBox4, SIGNAL( valueChanged( double ) ), this, SLOT( ValueChangedInSpinBox( double ) ) );
connect( GroupPoints->SpinBox5, 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->SpinBox3, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect(GroupPoints->SpinBox4, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect(GroupPoints->SpinBox5, SIGNAL(valueChanged(double)), this, SLOT(ValueChangedInSpinBox(double)));
connect( GroupPoints->CheckBox1, SIGNAL( stateChanged( int ) ),
this, SLOT( ApproxChanged() ) );
connect(GroupPoints->CheckBox1, SIGNAL(stateChanged(int)),
this, SLOT(ApproxChanged()));
// san: Commented, as all spin boxes here either are integer or use specific non-default step value
//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(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
initName( tr( "GEOM_FILLING" ) );
initName(tr("GEOM_FILLING"));
resize(100,100);
}
@ -159,39 +158,36 @@ void GenerationGUI_FillingDlg::Init()
// function : SetDoubleSpinBoxStep()
// purpose : Double spin box management
//=================================================================================
void GenerationGUI_FillingDlg::SetDoubleSpinBoxStep( double step )
void GenerationGUI_FillingDlg::SetDoubleSpinBoxStep(double step)
{
GroupPoints->SpinBox2->setSingleStep(step);
GroupPoints->SpinBox5->setSingleStep(step);
}
//=================================================================================
// function : ClickOnOk()
// purpose :
//=================================================================================
void GenerationGUI_FillingDlg::ClickOnOk()
{
setIsApplyAndClose( true );
if ( ClickOnApply() )
setIsApplyAndClose(true);
if (ClickOnApply())
ClickOnCancel();
}
//=================================================================================
// function : ClickOnApply()
// purpose :
//=================================================================================
bool GenerationGUI_FillingDlg::ClickOnApply()
{
if ( !onAccept() )
if (!onAccept())
return false;
initName();
return true;
}
//=================================================================================
// function : SelectionIntoArgument()
// purpose : Called when selection as changed or other case
@ -202,14 +198,14 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument()
myEditCurrentArgument->setText("");
if (myEditCurrentArgument == GroupPoints->LineEdit1) {
myCompound = getSelected( TopAbs_COMPOUND );
if ( myCompound ) {
if ( myCompound->GetMaxShapeType() < GEOM::WIRE || myCompound->GetMinShapeType() > GEOM::EDGE ) {
myCompound.nullify();
myCompound = getSelected(TopAbs_COMPOUND);
if (myCompound) {
if (myCompound->GetMaxShapeType() < GEOM::WIRE || myCompound->GetMinShapeType() > GEOM::EDGE) {
myCompound.nullify();
}
else {
QString aName = GEOMBase::GetName( myCompound.get() );
myEditCurrentArgument->setText( aName );
QString aName = GEOMBase::GetName(myCompound.get());
myEditCurrentArgument->setText(aName);
}
}
}
@ -224,17 +220,16 @@ void GenerationGUI_FillingDlg::SelectionIntoArgument()
void GenerationGUI_FillingDlg::SetEditCurrentArgument()
{
QPushButton* send = (QPushButton*)sender();
globalSelection( GEOM_ALLSHAPES );
globalSelection(GEOM_ALLSHAPES);
if ( send == GroupPoints->PushButton1 ) {
if (send == GroupPoints->PushButton1) {
GroupPoints->LineEdit1->setFocus();
myEditCurrentArgument = GroupPoints->LineEdit1;
globalSelection( GEOM_COMPOUND );
globalSelection(GEOM_COMPOUND);
this->SelectionIntoArgument();
}
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
@ -242,29 +237,27 @@ void GenerationGUI_FillingDlg::SetEditCurrentArgument()
void GenerationGUI_FillingDlg::ActivateThisDialog()
{
GEOMBase_Skeleton::ActivateThisDialog();
connect( ( (SalomeApp_Application*)( SUIT_Session::session()->activeApplication() ) )->selectionMgr(),
SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
globalSelection( GEOM_COMPOUND );
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
globalSelection(GEOM_COMPOUND);
processPreview();
}
//=================================================================================
// function : enterEvent()
// purpose :
//=================================================================================
void GenerationGUI_FillingDlg::enterEvent( QEvent* )
void GenerationGUI_FillingDlg::enterEvent(QEvent*)
{
if ( !mainFrame()->GroupConstructors->isEnabled() )
if (!mainFrame()->GroupConstructors->isEnabled())
ActivateThisDialog();
}
//=================================================================================
// function : ValueChangedInSpinBox()
// purpose :
//=================================================================================
void GenerationGUI_FillingDlg::ValueChangedInSpinBox( double newValue )
void GenerationGUI_FillingDlg::ValueChangedInSpinBox(double newValue)
{
processPreview();
}
@ -284,30 +277,52 @@ void GenerationGUI_FillingDlg::MethodChanged()
//=================================================================================
void GenerationGUI_FillingDlg::ApproxChanged()
{
if (GroupPoints->CheckBox1->isChecked()) {
// tol2d
GroupPoints->TextLabel3->setEnabled(false);
GroupPoints->SpinBox2->setEnabled(false);
// nbIter
GroupPoints->TextLabel4->setEnabled(false);
GroupPoints->SpinBox3->setEnabled(false);
// method
GroupPoints->TextLabel7->setEnabled(false);
GroupPoints->ComboBox1->setEnabled(false);
}
else {
// tol2d
GroupPoints->TextLabel3->setEnabled(true);
GroupPoints->SpinBox2->setEnabled(true);
// nbIter
GroupPoints->TextLabel4->setEnabled(true);
GroupPoints->SpinBox3->setEnabled(true);
// method
GroupPoints->TextLabel7->setEnabled(true);
GroupPoints->ComboBox1->setEnabled(true);
}
processPreview();
}
//=================================================================================
// function : createOperation
// purpose :
//=================================================================================
GEOM::GEOM_IOperations_ptr GenerationGUI_FillingDlg::createOperation()
{
return getGeomEngine()->GetI3DPrimOperations( getStudyId() );
return getGeomEngine()->GetI3DPrimOperations(getStudyId());
}
//=================================================================================
// function : isValid
// purpose :
//=================================================================================
bool GenerationGUI_FillingDlg::isValid( QString& msg )
bool GenerationGUI_FillingDlg::isValid(QString& msg)
{
bool ok = GroupPoints->SpinBox1->isValid( msg, !IsPreview() ) &&
GroupPoints->SpinBox2->isValid( msg, !IsPreview() ) &&
GroupPoints->SpinBox3->isValid( msg, !IsPreview() ) &&
GroupPoints->SpinBox4->isValid( msg, !IsPreview() ) &&
GroupPoints->SpinBox5->isValid( msg, !IsPreview() ) &&
bool ok = GroupPoints->SpinBox1->isValid(msg, !IsPreview()) &&
GroupPoints->SpinBox2->isValid(msg, !IsPreview()) &&
GroupPoints->SpinBox3->isValid(msg, !IsPreview()) &&
GroupPoints->SpinBox4->isValid(msg, !IsPreview()) &&
GroupPoints->SpinBox5->isValid(msg, !IsPreview()) &&
myCompound;
return ok;
}
@ -316,7 +331,7 @@ bool GenerationGUI_FillingDlg::isValid( QString& msg )
// function : execute
// purpose :
//=================================================================================
bool GenerationGUI_FillingDlg::execute( ObjectList& objects )
bool GenerationGUI_FillingDlg::execute(ObjectList& objects)
{
GEOM::GEOM_I3DPrimOperations_var anOper =
GEOM::GEOM_I3DPrimOperations::_narrow(getOperation());
@ -331,17 +346,17 @@ bool GenerationGUI_FillingDlg::execute( ObjectList& objects )
}
GEOM::GEOM_Object_var anObj =
anOper->MakeFilling( myCompound.get(),
GroupPoints->SpinBox1->value(),
GroupPoints->SpinBox4->value(),
GroupPoints->SpinBox2->value(),
GroupPoints->SpinBox5->value(),
anOper->MakeFilling(myCompound.get(),
GroupPoints->SpinBox1->value(),
GroupPoints->SpinBox4->value(),
GroupPoints->SpinBox2->value(),
GroupPoints->SpinBox5->value(),
GroupPoints->SpinBox3->value(),
aMethod,
GroupPoints->CheckBox1->isChecked() );
if ( !anObj->_is_nil() )
aMethod,
GroupPoints->CheckBox1->isChecked());
if (!anObj->_is_nil())
{
if ( !IsPreview() )
if (!IsPreview())
{
QStringList aParameters;
aParameters << GroupPoints->SpinBox1->text();
@ -351,7 +366,7 @@ bool GenerationGUI_FillingDlg::execute( ObjectList& objects )
aParameters << GroupPoints->SpinBox5->text();
anObj->SetParameters(aParameters.join(":").toLatin1().constData());
}
objects.push_back( anObj._retn() );
objects.push_back(anObj._retn());
}
return true;