mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-13 10:10:34 +05:00
Mantis issue 0021541: EDF 2213 GEOM: Filling accuracy
This commit is contained in:
parent
f6d916275e
commit
12efffce9b
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user