mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-27 09:50:34 +05:00
0022762: [EDF] Fast detection of face/face face/solid solid/solid interference
Minor additional improvements: - display sub-shapes from 1st and 2nd source shapes with different colors - limit minimal value of deflection to avoid long computation of tesselation (well, this is "fast" intersection algorithm)
This commit is contained in:
parent
84828621fc
commit
d55c107e74
@ -56,17 +56,7 @@
|
|||||||
// true to construct a modal dialog.
|
// true to construct a modal dialog.
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
MeasureGUI_FastCheckIntersectionsDlg::MeasureGUI_FastCheckIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
|
MeasureGUI_FastCheckIntersectionsDlg::MeasureGUI_FastCheckIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
|
||||||
: GEOMBase_Skeleton (GUI, parent, false),
|
: GEOMBase_Skeleton (GUI, parent, false)
|
||||||
mySelButton1 (0),
|
|
||||||
mySelButton2 (0),
|
|
||||||
myEditObjName1 (0),
|
|
||||||
myEditObjName2 (0),
|
|
||||||
myDetGaps (0),
|
|
||||||
myTolerance (0),
|
|
||||||
myDeflection (0),
|
|
||||||
myComputeButton (0),
|
|
||||||
myShapeList1 (0),
|
|
||||||
myShapeList2 (0)
|
|
||||||
{
|
{
|
||||||
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
||||||
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_FAST_CHECK_INTERSECTIONS")));
|
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_FAST_CHECK_INTERSECTIONS")));
|
||||||
@ -82,33 +72,30 @@ MeasureGUI_FastCheckIntersectionsDlg::MeasureGUI_FastCheckIntersectionsDlg (Geom
|
|||||||
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
|
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
|
||||||
mainFrame()->RadioButton3->close();
|
mainFrame()->RadioButton3->close();
|
||||||
|
|
||||||
QGroupBox *aGrp = new QGroupBox(tr("GEOM_FAST_CHECK_OBJ"));
|
QGroupBox* aGrp = new QGroupBox(tr("GEOM_FAST_CHECK_OBJ"), centralWidget());
|
||||||
QLabel *anObjLbl1 = new QLabel(tr("GEOM_OBJECT_I").arg("1"));
|
QLabel* anObjLbl1 = new QLabel(tr("GEOM_OBJECT_I").arg("1"), aGrp);
|
||||||
QLabel *anObjLbl2 = new QLabel(tr("GEOM_OBJECT_I").arg("2"));
|
QLabel* anObjLbl2 = new QLabel(tr("GEOM_OBJECT_I").arg("2"), aGrp);
|
||||||
QLabel *aShapeLbl1 = new QLabel(tr("GEOM_FAST_CHECK_INT_SUBSHAPES").arg("1"));
|
QLabel* aShapeLbl1 = new QLabel(tr("GEOM_FAST_CHECK_INT_SUBSHAPES").arg("1"), aGrp);
|
||||||
QLabel *aShapeLbl2 = new QLabel(tr("GEOM_FAST_CHECK_INT_SUBSHAPES").arg("2"));
|
QLabel* aShapeLbl2 = new QLabel(tr("GEOM_FAST_CHECK_INT_SUBSHAPES").arg("2"), aGrp);
|
||||||
QLabel *aDeflectLbl = new QLabel(tr("GEOM_FAST_CHECK_INT_DEFLECT"));
|
QLabel* aDeflectLbl = new QLabel(tr("GEOM_FAST_CHECK_INT_DEFLECT"), aGrp);
|
||||||
QFont aFont (TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
|
|
||||||
|
|
||||||
aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
|
mySelButton1 = new QPushButton(aGrp);
|
||||||
|
|
||||||
mySelButton1 = new QPushButton;
|
|
||||||
mySelButton1->setIcon(image1);
|
mySelButton1->setIcon(image1);
|
||||||
mySelButton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
mySelButton1->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
mySelButton2 = new QPushButton;
|
mySelButton2 = new QPushButton(aGrp);
|
||||||
mySelButton2->setIcon(image1);
|
mySelButton2->setIcon(image1);
|
||||||
mySelButton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
mySelButton2->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
|
|
||||||
myEditObjName1 = new QLineEdit;
|
myEditObjName1 = new QLineEdit(aGrp);
|
||||||
myEditObjName1->setReadOnly(true);
|
myEditObjName1->setReadOnly(true);
|
||||||
myEditObjName2 = new QLineEdit;
|
myEditObjName2 = new QLineEdit(aGrp);
|
||||||
myEditObjName2->setReadOnly(true);
|
myEditObjName2->setReadOnly(true);
|
||||||
|
|
||||||
myDetGaps = new QCheckBox( tr( "GEOM_FAST_CHECK_INT_DETECT_GAPS" ));
|
myDetGaps = new QCheckBox(tr( "GEOM_FAST_CHECK_INT_DETECT_GAPS" ));
|
||||||
myTolerance = new SalomeApp_DoubleSpinBox;
|
myTolerance = new SalomeApp_DoubleSpinBox(aGrp);
|
||||||
myDeflection = new SalomeApp_DoubleSpinBox;
|
myDeflection = new SalomeApp_DoubleSpinBox(aGrp);
|
||||||
myShapeList1 = new QListWidget;
|
myShapeList1 = new QListWidget(aGrp);
|
||||||
myShapeList2 = new QListWidget;
|
myShapeList2 = new QListWidget(aGrp);
|
||||||
myShapeList1->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
myShapeList1->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
myShapeList2->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
myShapeList2->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
|
||||||
@ -170,18 +157,14 @@ void MeasureGUI_FastCheckIntersectionsDlg::Init()
|
|||||||
myEditObjName2->setEnabled(false);
|
myEditObjName2->setEnabled(false);
|
||||||
|
|
||||||
myDetGaps->setChecked(false);
|
myDetGaps->setChecked(false);
|
||||||
double SpecificStep = 0.001;
|
initSpinBox(myTolerance, 0, MAX_NUMBER, 1);
|
||||||
double prec = Precision::Confusion();
|
myTolerance->setValue(0);
|
||||||
initSpinBox(myTolerance, prec, MAX_NUMBER, SpecificStep);
|
|
||||||
myTolerance->setValue(SpecificStep);
|
|
||||||
myTolerance->setEnabled(false);
|
myTolerance->setEnabled(false);
|
||||||
|
|
||||||
// Obtain deflection from preferences
|
// Obtain deflection from preferences
|
||||||
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
|
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
|
||||||
const char* quantity = "deflection_coeff";
|
initSpinBox(myDeflection, 1e-3, 1.0, 1e-3);
|
||||||
double aDeflection = resMgr->doubleValue("Geometry", quantity, 0.00001);
|
myDeflection->setValue(qMax(1e-3, resMgr->doubleValue("Geometry", "deflection_coeff", 1e-3)));
|
||||||
initSpinBox(myDeflection, prec, 1.0, aDeflection);
|
|
||||||
myDeflection->setValue(aDeflection);
|
|
||||||
|
|
||||||
myEditCurrentArgument = myEditObjName1;
|
myEditCurrentArgument = myEditObjName1;
|
||||||
|
|
||||||
@ -560,12 +543,12 @@ void MeasureGUI_FastCheckIntersectionsDlg::previewSubShapesListSelection(QListWi
|
|||||||
SALOME_Prs* aPrs = 0;
|
SALOME_Prs* aPrs = 0;
|
||||||
TopExp::MapShapes(aSelShape, anIndices);
|
TopExp::MapShapes(aSelShape, anIndices);
|
||||||
QList<int>::iterator it;
|
QList<int>::iterator it;
|
||||||
|
getDisplayer()->SetColor(theWidget == myShapeList1 ? Quantity_NOC_RED : Quantity_NOC_GREEN);
|
||||||
|
getDisplayer()->SetWidth(3);
|
||||||
|
getDisplayer()->SetToActivate(false);
|
||||||
for (it = aIds.begin(); it != aIds.end(); ++it) {
|
for (it = aIds.begin(); it != aIds.end(); ++it) {
|
||||||
aSubShape = anIndices.FindKey(anInters[(*it)]);
|
aSubShape = anIndices.FindKey(anInters[(*it)]);
|
||||||
try {
|
try {
|
||||||
getDisplayer()->SetColor(Quantity_NOC_RED);
|
|
||||||
getDisplayer()->SetWidth(3);
|
|
||||||
getDisplayer()->SetToActivate(false);
|
|
||||||
aPrs = !aSubShape.IsNull() ? getDisplayer()->BuildPrs(aSubShape) : 0;
|
aPrs = !aSubShape.IsNull() ? getDisplayer()->BuildPrs(aSubShape) : 0;
|
||||||
if (aPrs)
|
if (aPrs)
|
||||||
displayPreview(aPrs, true);
|
displayPreview(aPrs, true);
|
||||||
|
Loading…
Reference in New Issue
Block a user