mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2024-12-26 17:30:35 +05:00
0022750: [EDF] Improve ergonomics of the "Detect Self-intersections" dialog box
This commit is contained in:
parent
568f30b167
commit
dff9617e4b
Binary file not shown.
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 32 KiB |
@ -9,8 +9,15 @@ This operation checks the topology of the selected shape to detect self-intersec
|
|||||||
In this dialog:
|
In this dialog:
|
||||||
|
|
||||||
- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser.
|
- \b Object - the checked object. \b Selection button allows picking it in the viewer or in the object browser.
|
||||||
- \b Errors list contains the list of intersections. Select the intersection to show <b>Incriminated Sub-shapes</b> in the field to the right.
|
- <b>Level of check</b> - The combo box that allows to set the level of checking shape on self-interference.
|
||||||
|
It defines which interferferences will be checked. Default value is "All interferences".
|
||||||
|
- <b>Compute self-intersections</b> button computes self-interferences.
|
||||||
|
- \b Summary section contains the general report if the object has self-intersections and/or if errors are occured during computation.
|
||||||
|
- \b Self-intersections list contains the list of self-intersections detected.
|
||||||
|
Select the intersection to show <b>Sub-shapes</b> in the field to the right.
|
||||||
|
- \b Apply and <b>Apply and Close</b> buttons are used to store selected self-intersected shapes in the study for further analysis.
|
||||||
|
If no shapes are selected, but an intersection is selected the both of intersected shapes are stored. If no intersections selected
|
||||||
|
all shapes of all intersections are stored in the study.
|
||||||
|
|
||||||
\note This tool is useful for detection of shapes, not suitable for
|
\note This tool is useful for detection of shapes, not suitable for
|
||||||
arguments of Boolean operations and Partition algorithm.
|
arguments of Boolean operations and Partition algorithm.
|
||||||
@ -18,8 +25,10 @@ For more information about Partition and Boolean Operations Algorithms
|
|||||||
and their limitations refer to <a href="SALOME_BOA_PA.pdf">this document</a>.
|
and their limitations refer to <a href="SALOME_BOA_PA.pdf">this document</a>.
|
||||||
|
|
||||||
\n <b>Result:</b> Boolean.
|
\n <b>Result:</b> Boolean.
|
||||||
\n <b>TUI Command:</b> <em>geompy.CheckSelfIntersections(theShape),</em>
|
\n <b>TUI Command:</b> <em>geompy.CheckSelfIntersections(theShape, theCheckLevel = GEOM.SI_ALL),</em> \n
|
||||||
where \em theShape is the shape checked for validity.
|
where: \n
|
||||||
|
\em theShape is the shape checked for validity. \n
|
||||||
|
\em theCheckLevel is the level of check. Default value is GEOM.SI_ALL to check all interferences.
|
||||||
|
|
||||||
See also a \ref tui_check_self_intersections_page "TUI example".
|
See also a \ref tui_check_self_intersections_page "TUI example".
|
||||||
|
|
||||||
|
@ -188,6 +188,20 @@ module GEOM
|
|||||||
FDT_String
|
FDT_String
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This enumeration represents the level of checking shape on
|
||||||
|
* self-interference. It defines which interferferences will be checked.
|
||||||
|
*/
|
||||||
|
enum si_check_level
|
||||||
|
{
|
||||||
|
SI_V_V, // only V/V interferences
|
||||||
|
SI_V_E, // V/V and V/E interferences
|
||||||
|
SI_E_E, // V/V, V/E and E/E interferences
|
||||||
|
SI_V_F, // V/V, V/E, E/E and V/F interferences
|
||||||
|
SI_E_F, // V/V, V/E, E/E, V/F and E/F interferences
|
||||||
|
SI_ALL // all interferences
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Object creation parameters
|
* \brief Object creation parameters
|
||||||
@ -4148,10 +4162,12 @@ module GEOM
|
|||||||
/*!
|
/*!
|
||||||
* \brief Check a topology of the given shape on self-intersections presence.
|
* \brief Check a topology of the given shape on self-intersections presence.
|
||||||
* \param theShape Shape to check validity of.
|
* \param theShape Shape to check validity of.
|
||||||
|
* \param theCheckLevel the level of self-interference check.
|
||||||
* \param theIntersections Output. List of intersected sub-shapes IDs, it contains pairs of IDs.
|
* \param theIntersections Output. List of intersected sub-shapes IDs, it contains pairs of IDs.
|
||||||
* \return TRUE, if the shape does not have any self-intersections.
|
* \return TRUE, if the shape does not have any self-intersections.
|
||||||
*/
|
*/
|
||||||
boolean CheckSelfIntersections (in GEOM_Object theShape,
|
boolean CheckSelfIntersections (in GEOM_Object theShape,
|
||||||
|
in long theCheckLevel,
|
||||||
out ListOfLong theIntersections);
|
out ListOfLong theIntersections);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@ -415,22 +415,6 @@ Please, select face, shell or solid and try again</translation>
|
|||||||
<source>GEOM_CHECK_SELF_INTERSECTIONS</source>
|
<source>GEOM_CHECK_SELF_INTERSECTIONS</source>
|
||||||
<translation>Detect Self-intersections</translation>
|
<translation>Detect Self-intersections</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>GEOM_CHECK_SELF_INTERSECTIONS_FAILED</source>
|
|
||||||
<translation>Detection of self-intersections failed</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>GEOM_NO_SELF_INTERSECTIONS</source>
|
|
||||||
<translation>There are no self-intersections in the shape</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>GEOM_SELF_INTERSECTIONS_FOUND</source>
|
|
||||||
<translation>Some self-intersections detected</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
|
|
||||||
<translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>GEOM_CIRCLE</source>
|
<source>GEOM_CIRCLE</source>
|
||||||
<translation>Circle</translation>
|
<translation>Circle</translation>
|
||||||
@ -6927,4 +6911,71 @@ Do you want to create new material?</translation>
|
|||||||
<translation>V-Isoline</translation>
|
<translation>V-Isoline</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
|
<context>
|
||||||
|
<name>MeasureGUI_CheckSelfIntersectionsDlg</name>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_INTERSECTIONS</source>
|
||||||
|
<translation>Self-intersections</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_SUBSHAPES</source>
|
||||||
|
<translation>Sub-shapes</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_CHECK_LEVEL</source>
|
||||||
|
<translation>Level of check</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_SUMMARY</source>
|
||||||
|
<translation>Summary</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_COMPUTE</source>
|
||||||
|
<translation>Compute self-intersections</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_SELF_INTERSECTION_NAME</source>
|
||||||
|
<translation>Self_intersection</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_NO_SELF_INTERSECTIONS</source>
|
||||||
|
<translation>There are no self-intersections in the shape</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_SELF_INTERSECTIONS_FOUND</source>
|
||||||
|
<translation>Some self-intersections detected</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_SELF_INTERSECTIONS_FAILED</source>
|
||||||
|
<translation>Detection of self-intersections failed</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
|
||||||
|
<translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_V_V</source>
|
||||||
|
<translation>Vertex to Vertex</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_V_E</source>
|
||||||
|
<translation>Vertex to Edge + all above</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_E_E</source>
|
||||||
|
<translation>Edge to Edge + all above</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_V_F</source>
|
||||||
|
<translation>Vertex to Face + all above</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_E_F</source>
|
||||||
|
<translation>Edge to Face + all above</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_CHECK_INTE_ALL</source>
|
||||||
|
<translation>All interferences</translation>
|
||||||
|
</message>
|
||||||
|
</context>
|
||||||
</TS>
|
</TS>
|
||||||
|
@ -1501,6 +1501,7 @@ TCollection_AsciiString GEOMImpl_IMeasureOperations::PrintShapeErrors
|
|||||||
//=============================================================================
|
//=============================================================================
|
||||||
bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
|
bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
|
||||||
(Handle(GEOM_Object) theShape,
|
(Handle(GEOM_Object) theShape,
|
||||||
|
const SICheckLevel theCheckLevel,
|
||||||
Handle(TColStd_HSequenceOfInteger)& theIntersections)
|
Handle(TColStd_HSequenceOfInteger)& theIntersections)
|
||||||
{
|
{
|
||||||
SetErrorCode(KO);
|
SetErrorCode(KO);
|
||||||
@ -1534,6 +1535,7 @@ bool GEOMImpl_IMeasureOperations::CheckSelfIntersections
|
|||||||
//
|
//
|
||||||
BOPAlgo_CheckerSI aCSI; // checker of self-interferences
|
BOPAlgo_CheckerSI aCSI; // checker of self-interferences
|
||||||
aCSI.SetArguments(aLCS);
|
aCSI.SetArguments(aLCS);
|
||||||
|
aCSI.SetLevelOfCheck(theCheckLevel);
|
||||||
|
|
||||||
// 1. Launch the checker
|
// 1. Launch the checker
|
||||||
aCSI.Perform();
|
aCSI.Perform();
|
||||||
|
@ -85,6 +85,20 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
|
|||||||
SK_ADVANCED, // all advanced shapes (temporary implementation)
|
SK_ADVANCED, // all advanced shapes (temporary implementation)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This enumeration represents the level of checking shape on
|
||||||
|
* self-interference. It defines which interferferences will be checked.
|
||||||
|
*/
|
||||||
|
enum SICheckLevel
|
||||||
|
{
|
||||||
|
SI_V_V = 0, // only V/V interferences
|
||||||
|
SI_V_E, // V/V and V/E interferences
|
||||||
|
SI_E_E, // V/V, V/E and E/E interferences
|
||||||
|
SI_V_F, // V/V, V/E, E/E and V/F interferences
|
||||||
|
SI_E_F, // V/V, V/E, E/E, V/F and E/F interferences
|
||||||
|
SI_ALL // all interferences
|
||||||
|
};
|
||||||
|
|
||||||
Standard_EXPORT ShapeKind KindOfShape (Handle(GEOM_Object) theShape,
|
Standard_EXPORT ShapeKind KindOfShape (Handle(GEOM_Object) theShape,
|
||||||
Handle(TColStd_HSequenceOfInteger)& theIntegers,
|
Handle(TColStd_HSequenceOfInteger)& theIntegers,
|
||||||
Handle(TColStd_HSequenceOfReal)& theDoubles);
|
Handle(TColStd_HSequenceOfReal)& theDoubles);
|
||||||
@ -141,6 +155,7 @@ class GEOMImpl_IMeasureOperations : public GEOM_IOperations {
|
|||||||
const std::list<ShapeError> &theErrors);
|
const std::list<ShapeError> &theErrors);
|
||||||
|
|
||||||
Standard_EXPORT bool CheckSelfIntersections (Handle(GEOM_Object) theShape,
|
Standard_EXPORT bool CheckSelfIntersections (Handle(GEOM_Object) theShape,
|
||||||
|
const SICheckLevel theCheckLevel,
|
||||||
Handle(TColStd_HSequenceOfInteger)& theIntersections);
|
Handle(TColStd_HSequenceOfInteger)& theIntersections);
|
||||||
|
|
||||||
Standard_EXPORT TCollection_AsciiString IsGoodForSolid (Handle(GEOM_Object) theShape);
|
Standard_EXPORT TCollection_AsciiString IsGoodForSolid (Handle(GEOM_Object) theShape);
|
||||||
|
@ -706,6 +706,7 @@ char* GEOM_IMeasureOperations_i::PrintShapeErrors
|
|||||||
*/
|
*/
|
||||||
//=============================================================================
|
//=============================================================================
|
||||||
CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
|
CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
|
||||||
|
CORBA::Long theCheckLevel,
|
||||||
GEOM::ListOfLong_out theIntersections)
|
GEOM::ListOfLong_out theIntersections)
|
||||||
{
|
{
|
||||||
// Set a not done flag
|
// Set a not done flag
|
||||||
@ -720,10 +721,35 @@ CORBA::Boolean GEOM_IMeasureOperations_i::CheckSelfIntersections (GEOM::GEOM_Obj
|
|||||||
Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
|
Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
|
||||||
|
|
||||||
if (!aShape.IsNull()) {
|
if (!aShape.IsNull()) {
|
||||||
|
GEOMImpl_IMeasureOperations::SICheckLevel aCheckLevel;
|
||||||
|
|
||||||
|
switch(theCheckLevel) {
|
||||||
|
case GEOM::SI_V_V:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_V;
|
||||||
|
break;
|
||||||
|
case GEOM::SI_V_E:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_E;
|
||||||
|
break;
|
||||||
|
case GEOM::SI_E_E:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_E_E;
|
||||||
|
break;
|
||||||
|
case GEOM::SI_V_F:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_V_F;
|
||||||
|
break;
|
||||||
|
case GEOM::SI_E_F:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_E_F;
|
||||||
|
break;
|
||||||
|
case GEOM::SI_ALL:
|
||||||
|
default:
|
||||||
|
aCheckLevel = GEOMImpl_IMeasureOperations::SI_ALL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
Handle(TColStd_HSequenceOfInteger) anIntegers = new TColStd_HSequenceOfInteger;
|
Handle(TColStd_HSequenceOfInteger) anIntegers = new TColStd_HSequenceOfInteger;
|
||||||
|
|
||||||
// Detect self-intersections
|
// Detect self-intersections
|
||||||
isGood = GetOperations()->CheckSelfIntersections(aShape, anIntegers);
|
isGood = GetOperations()->CheckSelfIntersections
|
||||||
|
(aShape, aCheckLevel, anIntegers);
|
||||||
|
|
||||||
int nbInts = anIntegers->Length();
|
int nbInts = anIntegers->Length();
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@ class GEOM_I_EXPORT GEOM_IMeasureOperations_i :
|
|||||||
const GEOM::GEOM_IMeasureOperations::ShapeErrors &theErrors);
|
const GEOM::GEOM_IMeasureOperations::ShapeErrors &theErrors);
|
||||||
|
|
||||||
CORBA::Boolean CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
|
CORBA::Boolean CheckSelfIntersections (GEOM::GEOM_Object_ptr theShape,
|
||||||
|
CORBA::Long theCheckLevel,
|
||||||
GEOM::ListOfLong_out theIntersections);
|
GEOM::ListOfLong_out theIntersections);
|
||||||
|
|
||||||
char* IsGoodForSolid (GEOM::GEOM_Object_ptr theShape);
|
char* IsGoodForSolid (GEOM::GEOM_Object_ptr theShape);
|
||||||
|
@ -10588,22 +10588,38 @@ class geomBuilder(object, GEOM._objref_GEOM_Gen):
|
|||||||
|
|
||||||
## Detect self-intersections in the given shape.
|
## Detect self-intersections in the given shape.
|
||||||
# @param theShape Shape to check.
|
# @param theShape Shape to check.
|
||||||
|
# @param theCheckLevel is the level of self-intersection check.
|
||||||
|
# Possible input values are:
|
||||||
|
# - GEOM.SI_V_V(0) - only V/V interferences
|
||||||
|
# - GEOM.SI_V_E(1) - V/V and V/E interferences
|
||||||
|
# - GEOM.SI_E_E(2) - V/V, V/E and E/E interferences
|
||||||
|
# - GEOM.SI_V_F(3) - V/V, V/E, E/E and V/F interferences
|
||||||
|
# - GEOM.SI_E_F(4) - V/V, V/E, E/E, V/F and E/F interferences
|
||||||
|
# - GEOM.SI_ALL(5) - all interferences.
|
||||||
# @return TRUE, if the shape contains no self-intersections.
|
# @return TRUE, if the shape contains no self-intersections.
|
||||||
#
|
#
|
||||||
# @ref tui_measurement_tools_page "Example"
|
# @ref tui_measurement_tools_page "Example"
|
||||||
@ManageTransactions("MeasuOp")
|
@ManageTransactions("MeasuOp")
|
||||||
def CheckSelfIntersections(self, theShape):
|
def CheckSelfIntersections(self, theShape, theCheckLevel = GEOM.SI_ALL):
|
||||||
"""
|
"""
|
||||||
Detect self-intersections in the given shape.
|
Detect self-intersections in the given shape.
|
||||||
|
|
||||||
Parameters:
|
Parameters:
|
||||||
theShape Shape to check.
|
theShape Shape to check.
|
||||||
|
theCheckLevel is the level of self-intersection check.
|
||||||
|
Possible input values are:
|
||||||
|
- GEOM.SI_V_V(0) - only V/V interferences
|
||||||
|
- GEOM.SI_V_E(1) - V/V and V/E interferences
|
||||||
|
- GEOM.SI_E_E(2) - V/V, V/E and E/E interferences
|
||||||
|
- GEOM.SI_V_F(3) - V/V, V/E, E/E and V/F interferences
|
||||||
|
- GEOM.SI_E_F(4) - V/V, V/E, E/E, V/F and E/F interferences
|
||||||
|
- GEOM.SI_ALL(5) - all interferences.
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
TRUE, if the shape contains no self-intersections.
|
TRUE, if the shape contains no self-intersections.
|
||||||
"""
|
"""
|
||||||
# Example: see GEOM_TestMeasures.py
|
# Example: see GEOM_TestMeasures.py
|
||||||
(IsValid, Pairs) = self.MeasuOp.CheckSelfIntersections(theShape)
|
(IsValid, Pairs) = self.MeasuOp.CheckSelfIntersections(theShape, EnumToLong(theCheckLevel))
|
||||||
RaiseIfFailed("CheckSelfIntersections", self.MeasuOp)
|
RaiseIfFailed("CheckSelfIntersections", self.MeasuOp)
|
||||||
return IsValid
|
return IsValid
|
||||||
|
|
||||||
|
@ -24,8 +24,9 @@
|
|||||||
// File : MeasureGUI_CheckSelfIntersectionsDlg.cxx
|
// File : MeasureGUI_CheckSelfIntersectionsDlg.cxx
|
||||||
|
|
||||||
#include "MeasureGUI_CheckSelfIntersectionsDlg.h"
|
#include "MeasureGUI_CheckSelfIntersectionsDlg.h"
|
||||||
#include "MeasureGUI_Widgets.h"
|
#include "MeasureGUI.h"
|
||||||
|
|
||||||
|
#include <SUIT_OverrideCursor.h>
|
||||||
#include <SUIT_Session.h>
|
#include <SUIT_Session.h>
|
||||||
#include <SUIT_ResourceMgr.h>
|
#include <SUIT_ResourceMgr.h>
|
||||||
#include <LightApp_SelectionMgr.h>
|
#include <LightApp_SelectionMgr.h>
|
||||||
@ -34,6 +35,7 @@
|
|||||||
|
|
||||||
#include <TopTools_IndexedMapOfShape.hxx>
|
#include <TopTools_IndexedMapOfShape.hxx>
|
||||||
#include <TopExp.hxx>
|
#include <TopExp.hxx>
|
||||||
|
#include <TColStd_IndexedMapOfInteger.hxx>
|
||||||
#include <TColStd_MapOfInteger.hxx>
|
#include <TColStd_MapOfInteger.hxx>
|
||||||
|
|
||||||
#include <DlgRef.h>
|
#include <DlgRef.h>
|
||||||
@ -41,6 +43,8 @@
|
|||||||
#include <GEOMBase.h>
|
#include <GEOMBase.h>
|
||||||
#include <GEOMImpl_Types.hxx>
|
#include <GEOMImpl_Types.hxx>
|
||||||
|
|
||||||
|
#include <QListWidget>
|
||||||
|
|
||||||
#define TEXTEDIT_FONT_FAMILY "Courier"
|
#define TEXTEDIT_FONT_FAMILY "Courier"
|
||||||
#define TEXTEDIT_FONT_SIZE 11
|
#define TEXTEDIT_FONT_SIZE 11
|
||||||
|
|
||||||
@ -52,7 +56,14 @@
|
|||||||
// true to construct a modal dialog.
|
// true to construct a modal dialog.
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
|
MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (GeometryGUI* GUI, QWidget* parent)
|
||||||
: MeasureGUI_Skeleton(GUI, parent, false)
|
: GEOMBase_Skeleton (GUI, parent, false),
|
||||||
|
myTextView (0),
|
||||||
|
mySelButton (0),
|
||||||
|
myEditObjName (0),
|
||||||
|
myLevelBox (0),
|
||||||
|
myComputeButton (0),
|
||||||
|
myInteList (0),
|
||||||
|
myShapeList (0)
|
||||||
{
|
{
|
||||||
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
|
||||||
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHECK_SELF_INTERSECTIONS")));
|
QPixmap image0 (aResMgr->loadPixmap("GEOM", tr("ICON_DLG_CHECK_SELF_INTERSECTIONS")));
|
||||||
@ -63,27 +74,60 @@ MeasureGUI_CheckSelfIntersectionsDlg::MeasureGUI_CheckSelfIntersectionsDlg (Geom
|
|||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHECK_SELF_INTERSECTIONS"));
|
mainFrame()->GroupConstructors->setTitle(tr("GEOM_CHECK_SELF_INTERSECTIONS"));
|
||||||
mainFrame()->RadioButton1->setIcon(image0);
|
mainFrame()->RadioButton1->setIcon(image0);
|
||||||
|
mainFrame()->RadioButton2->setAttribute( Qt::WA_DeleteOnClose );
|
||||||
|
mainFrame()->RadioButton2->close();
|
||||||
|
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
|
||||||
|
mainFrame()->RadioButton3->close();
|
||||||
|
|
||||||
myGrp = new MeasureGUI_1Sel1TextView2ListBox (centralWidget());
|
QGroupBox *aGrp = new QGroupBox(tr("GEOM_CHECK_INFOS"));
|
||||||
myGrp->GroupBox1->setTitle(tr("GEOM_CHECK_INFOS"));
|
QLabel *anObjLbl = new QLabel(tr("GEOM_OBJECT"));
|
||||||
myGrp->TextLabel1->setText(tr("GEOM_OBJECT"));
|
QLabel *anInteLbl = new QLabel(tr("GEOM_CHECK_INTE_INTERSECTIONS"));
|
||||||
|
QLabel *aShapeLbl = new QLabel(tr("GEOM_CHECK_INTE_SUBSHAPES"));
|
||||||
myGrp->TextView1->setReadOnly(true);
|
QLabel *aLevelLbl = new QLabel(tr("GEOM_CHECK_INTE_CHECK_LEVEL"));
|
||||||
|
QLabel *aSummaryLbl = new QLabel(tr("GEOM_CHECK_INTE_SUMMARY"));
|
||||||
QFont aFont (TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
|
QFont aFont (TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
|
||||||
|
|
||||||
aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
|
aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
|
||||||
myGrp->TextView1->setFont(aFont);
|
myTextView = new QTextBrowser;
|
||||||
|
myTextView->setReadOnly(true);
|
||||||
|
myTextView->setFont(aFont);
|
||||||
|
|
||||||
myGrp->PushButton1->setIcon(image1);
|
mySelButton = new QPushButton;
|
||||||
myGrp->LineEdit1->setReadOnly(true);
|
mySelButton->setIcon(image1);
|
||||||
|
mySelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||||
|
|
||||||
myGrp->TextLabel2->setText(tr("GEOM_CHECK_BLOCKS_COMPOUND_ERRORS"));
|
myEditObjName = new QLineEdit;
|
||||||
myGrp->TextLabel3->setText(tr("GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES"));
|
myEditObjName->setReadOnly(true);
|
||||||
|
|
||||||
myGrp->ListBox2->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
myLevelBox = new QComboBox;
|
||||||
|
|
||||||
|
myComputeButton = new QPushButton(tr("GEOM_CHECK_INTE_COMPUTE"));
|
||||||
|
|
||||||
|
|
||||||
|
myInteList = new QListWidget;
|
||||||
|
myShapeList = new QListWidget;
|
||||||
|
myShapeList->setSelectionMode(QAbstractItemView::ExtendedSelection);
|
||||||
|
|
||||||
|
QGridLayout *aGrpLayout = new QGridLayout(aGrp);
|
||||||
|
|
||||||
|
aGrpLayout->setMargin(9);
|
||||||
|
aGrpLayout->setSpacing(6);
|
||||||
|
aGrpLayout->addWidget(anObjLbl, 0, 0);
|
||||||
|
aGrpLayout->addWidget(anInteLbl, 5, 0);
|
||||||
|
aGrpLayout->addWidget(aShapeLbl, 5, 2);
|
||||||
|
aGrpLayout->addWidget(aLevelLbl, 1, 0);
|
||||||
|
aGrpLayout->addWidget(myLevelBox, 1, 1, 1, 2);
|
||||||
|
aGrpLayout->addWidget(myComputeButton, 2, 0, 1, 3);
|
||||||
|
aGrpLayout->addWidget(aSummaryLbl, 3, 0);
|
||||||
|
aGrpLayout->addWidget(myTextView, 4, 0, 1, 3);
|
||||||
|
aGrpLayout->addWidget(mySelButton, 0, 1);
|
||||||
|
aGrpLayout->addWidget(myEditObjName, 0, 2);
|
||||||
|
aGrpLayout->addWidget(myInteList, 6, 0, 1, 2);
|
||||||
|
aGrpLayout->addWidget(myShapeList, 6, 2);
|
||||||
|
|
||||||
QVBoxLayout* layout = new QVBoxLayout (centralWidget());
|
QVBoxLayout* layout = new QVBoxLayout (centralWidget());
|
||||||
layout->setMargin(0); layout->setSpacing(6);
|
layout->setMargin(0); layout->setSpacing(6);
|
||||||
layout->addWidget(myGrp);
|
layout->addWidget(aGrp);
|
||||||
|
|
||||||
/***************************************************************/
|
/***************************************************************/
|
||||||
|
|
||||||
@ -107,94 +151,302 @@ MeasureGUI_CheckSelfIntersectionsDlg::~MeasureGUI_CheckSelfIntersectionsDlg()
|
|||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::Init()
|
void MeasureGUI_CheckSelfIntersectionsDlg::Init()
|
||||||
{
|
{
|
||||||
mySelBtn = myGrp->PushButton1;
|
// Fill in the combo box.
|
||||||
mySelEdit = myGrp->LineEdit1;
|
myLevelBox->insertItem(GEOM::SI_V_V, tr("GEOM_CHECK_INTE_V_V"));
|
||||||
MeasureGUI_Skeleton::Init();
|
myLevelBox->insertItem(GEOM::SI_V_E, tr("GEOM_CHECK_INTE_V_E"));
|
||||||
|
myLevelBox->insertItem(GEOM::SI_E_E, tr("GEOM_CHECK_INTE_E_E"));
|
||||||
|
myLevelBox->insertItem(GEOM::SI_V_F, tr("GEOM_CHECK_INTE_V_F"));
|
||||||
|
myLevelBox->insertItem(GEOM::SI_E_F, tr("GEOM_CHECK_INTE_E_F"));
|
||||||
|
myLevelBox->insertItem(GEOM::SI_ALL, tr("GEOM_CHECK_INTE_ALL"));
|
||||||
|
myLevelBox->setCurrentIndex(GEOM::SI_ALL);
|
||||||
|
|
||||||
connect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()), SLOT(onErrorsListSelectionChanged()));
|
connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()),
|
||||||
connect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()), SLOT(onSubShapesListSelectionChanged()));
|
this, SLOT(DeactivateActiveDialog()));
|
||||||
|
connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()),
|
||||||
|
this, SLOT(ClickOnCancel()));
|
||||||
|
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||||
|
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||||
|
connect(mySelButton, SIGNAL(clicked()),
|
||||||
|
this, SLOT(SetEditCurrentArgument()));
|
||||||
|
connect(myInteList, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onInteListSelectionChanged()));
|
||||||
|
connect(myShapeList, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onSubShapesListSelectionChanged()));
|
||||||
|
connect(myLevelBox, SIGNAL(currentIndexChanged(int)),
|
||||||
|
this, SLOT(clear()));
|
||||||
|
connect(myComputeButton, SIGNAL(clicked()), this, SLOT(onCompute()));
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* aSel = myGeomGUI->getApp()->selectionMgr();
|
||||||
|
|
||||||
|
connect(aSel, SIGNAL(currentSelectionChanged()),
|
||||||
|
this, SLOT(SelectionIntoArgument()));
|
||||||
|
|
||||||
|
initName( tr( "GEOM_SELF_INTERSECTION_NAME") );
|
||||||
|
buttonOk()->setEnabled(false);
|
||||||
|
buttonApply()->setEnabled(false);
|
||||||
|
myComputeButton->setEnabled(false);
|
||||||
|
activateSelection();
|
||||||
|
SelectionIntoArgument();
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : processObject
|
// function : clear
|
||||||
// purpose :
|
// purpose :
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
|
void MeasureGUI_CheckSelfIntersectionsDlg::clear()
|
||||||
{
|
{
|
||||||
myGrp->ListBox1->clear();
|
myTextView->setText("");
|
||||||
myGrp->ListBox2->clear();
|
disconnect(myInteList, SIGNAL(itemSelectionChanged()), this, 0);
|
||||||
|
disconnect(myShapeList, SIGNAL(itemSelectionChanged()), this, 0);
|
||||||
|
myInteList->clear();
|
||||||
|
myShapeList->clear();
|
||||||
|
connect(myInteList, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onInteListSelectionChanged()));
|
||||||
|
connect(myShapeList, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onSubShapesListSelectionChanged()));
|
||||||
erasePreview();
|
erasePreview();
|
||||||
|
buttonOk()->setEnabled(false);
|
||||||
|
buttonApply()->setEnabled(false);
|
||||||
|
myComputeButton->setEnabled(true);
|
||||||
|
}
|
||||||
|
|
||||||
if (myObj->_is_nil())
|
//=================================================================================
|
||||||
|
// function : onCompute
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::onCompute()
|
||||||
|
{
|
||||||
|
bool hasSelfInte = false;
|
||||||
|
QString anErrMsg("");
|
||||||
|
|
||||||
|
if (!findSelfIntersections(hasSelfInte, anErrMsg)) {
|
||||||
|
myTextView->setText(anErrMsg);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
QString aMsg ("");
|
// Status and apply buttons
|
||||||
GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
|
QString aMsg("");
|
||||||
bool isGood = false, isFailed = false;
|
|
||||||
|
if (hasSelfInte) {
|
||||||
|
aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
|
||||||
|
buttonOk()->setEnabled(true);
|
||||||
|
buttonApply()->setEnabled(true);
|
||||||
|
} else {
|
||||||
|
aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!anErrMsg.isEmpty()) {
|
||||||
|
aMsg += "\n\n";
|
||||||
|
aMsg += anErrMsg;
|
||||||
|
}
|
||||||
|
|
||||||
|
myTextView->setText(aMsg);
|
||||||
|
|
||||||
|
// Pairs
|
||||||
|
QStringList anInteList;
|
||||||
|
QString anInteStr ("");
|
||||||
|
int nbPairs = myInters->length()/2;
|
||||||
|
|
||||||
|
for (int i = 1; i <= nbPairs; i++) {
|
||||||
|
anInteStr = "Intersection # ";
|
||||||
|
anInteStr += QString::number(i);
|
||||||
|
anInteList.append(anInteStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
myInteList->addItems(anInteList);
|
||||||
|
myComputeButton->setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ActivateThisDialog
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::ActivateThisDialog()
|
||||||
|
{
|
||||||
|
GEOMBase_Skeleton::ActivateThisDialog();
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* aSel = myGeomGUI->getApp()->selectionMgr();
|
||||||
|
if ( aSel )
|
||||||
|
connect( aSel, SIGNAL( currentSelectionChanged() ), this, SLOT( SelectionIntoArgument() ) );
|
||||||
|
|
||||||
|
activateSelection();
|
||||||
|
DISPLAY_PREVIEW_MACRO
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : DeactivateActiveDialog()
|
||||||
|
// purpose : public slot to deactivate if active
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::DeactivateActiveDialog()
|
||||||
|
{
|
||||||
|
GEOMBase_Skeleton::DeactivateActiveDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : activateSelection
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::activateSelection()
|
||||||
|
{
|
||||||
|
globalSelection(GEOM_ALLSHAPES);
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnOk()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::ClickOnOk()
|
||||||
|
{
|
||||||
|
if ( ClickOnApply() )
|
||||||
|
ClickOnCancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : ClickOnApply()
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::ClickOnApply()
|
||||||
|
{
|
||||||
|
if ( !onAccept() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
initName();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : extractPrefix
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::extractPrefix() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : createOperation
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
GEOM::GEOM_IOperations_ptr MeasureGUI_CheckSelfIntersectionsDlg::createOperation()
|
||||||
|
{
|
||||||
|
return getGeomEngine()->GetIMeasureOperations( getStudyId() );
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : isValid
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::isValid( QString& )
|
||||||
|
{
|
||||||
|
return !myObj->_is_nil();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SetEditCurrentArgument
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::SetEditCurrentArgument()
|
||||||
|
{
|
||||||
|
myEditObjName->setFocus();
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : SelectionIntoArgument
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::SelectionIntoArgument()
|
||||||
|
{
|
||||||
|
// Clear the dialog.
|
||||||
|
clear();
|
||||||
|
myObj = GEOM::GEOM_Object::_nil();
|
||||||
|
|
||||||
|
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
|
||||||
|
SALOME_ListIO aSelList;
|
||||||
|
aSelMgr->selectedObjects(aSelList);
|
||||||
|
|
||||||
|
GEOM::GEOM_Object_var aSelectedObject = GEOM::GEOM_Object::_nil();
|
||||||
|
|
||||||
|
if (aSelList.Extent() > 0) {
|
||||||
|
aSelectedObject = GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aSelectedObject->_is_nil()) {
|
||||||
|
myEditObjName->setText("");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
myObj = aSelectedObject;
|
||||||
|
myEditObjName->setText(GEOMBase::GetName(myObj));
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : enterEvent
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
void MeasureGUI_CheckSelfIntersectionsDlg::enterEvent(QEvent *)
|
||||||
|
{
|
||||||
|
if ( !mainFrame()->GroupConstructors->isEnabled() )
|
||||||
|
ActivateThisDialog();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : findSelfIntersections
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::findSelfIntersections
|
||||||
|
(bool &HasSelfInte, QString &theErrMsg)
|
||||||
|
{
|
||||||
|
if (myObj->_is_nil()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
GEOM::GEOM_IMeasureOperations_var anOper =
|
||||||
|
GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
|
||||||
|
bool isOK = true;
|
||||||
int nbPairs = 0;
|
int nbPairs = 0;
|
||||||
|
int aLevel = myLevelBox->currentIndex();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
isGood = anOper->CheckSelfIntersections(myObj, myInters);
|
HasSelfInte = !anOper->CheckSelfIntersections(myObj, aLevel, myInters);
|
||||||
nbPairs = myInters->length()/2;
|
nbPairs = myInters->length()/2;
|
||||||
|
|
||||||
if (nbPairs*2 != myInters->length()) {
|
if (nbPairs*2 != myInters->length()) {
|
||||||
isFailed = true;
|
isOK = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (const SALOME::SALOME_Exception& e) {
|
catch (const SALOME::SALOME_Exception& e) {
|
||||||
SalomeApp_Tools::QtCatchCorbaException(e);
|
SalomeApp_Tools::QtCatchCorbaException(e);
|
||||||
isFailed = true;
|
isOK = false;
|
||||||
}
|
|
||||||
|
|
||||||
if (!anOper->IsDone() && myInters->length() == 0) {
|
|
||||||
aMsg += tr(anOper->GetErrorCode());
|
|
||||||
myGrp->TextView1->setText(aMsg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (isFailed) {
|
|
||||||
aMsg += tr("GEOM_CHECK_SELF_INTERSECTIONS_FAILED");
|
|
||||||
myGrp->TextView1->setText(aMsg);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Status
|
|
||||||
if (isGood) {
|
|
||||||
aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!anOper->IsDone()) {
|
if (!anOper->IsDone()) {
|
||||||
aMsg += "\n\n";
|
if (myInters->length() == 0) {
|
||||||
aMsg += tr("GEOM_CHECK_SELF_INTERSECTIONS_ERRORS");
|
theErrMsg = tr(anOper->GetErrorCode());
|
||||||
|
isOK = false;
|
||||||
|
} else {
|
||||||
|
// Valid case. Display all computed self-intersections
|
||||||
|
theErrMsg = tr("GEOM_CHECK_SELF_INTERSECTIONS_ERRORS");
|
||||||
|
}
|
||||||
|
} else if (!isOK) {
|
||||||
|
theErrMsg = tr("GEOM_CHECK_SELF_INTERSECTIONS_FAILED");
|
||||||
}
|
}
|
||||||
|
|
||||||
myGrp->TextView1->setText(aMsg);
|
return isOK;
|
||||||
|
|
||||||
// Pairs
|
|
||||||
QStringList aErrList;
|
|
||||||
QString aErrStr ("");
|
|
||||||
for (int i = 1; i <= nbPairs; i++) {
|
|
||||||
aErrStr = "Intersection # ";
|
|
||||||
aErrStr += QString::number(i);
|
|
||||||
aErrList.append(aErrStr);
|
|
||||||
}
|
|
||||||
|
|
||||||
myGrp->ListBox1->addItems(aErrList);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : onErrorsListSelectionChanged
|
// function : onInteListSelectionChanged
|
||||||
// purpose :
|
// purpose :
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
|
void MeasureGUI_CheckSelfIntersectionsDlg::onInteListSelectionChanged()
|
||||||
{
|
{
|
||||||
erasePreview();
|
erasePreview();
|
||||||
int aCurItem = myGrp->ListBox1->currentRow();
|
int aCurItem = myInteList->currentRow();
|
||||||
|
|
||||||
if (aCurItem < 0)
|
if (aCurItem < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//int nbPairs = myInters->length()/2;
|
|
||||||
|
|
||||||
QStringList aSubShapeList;
|
QStringList aSubShapeList;
|
||||||
TopoDS_Shape aSelShape;
|
TopoDS_Shape aSelShape;
|
||||||
if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
|
if (!myObj->_is_nil() && GEOMBase::GetShape(myObj, aSelShape)) {
|
||||||
@ -210,8 +462,8 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
|
|||||||
if (!aType.isEmpty())
|
if (!aType.isEmpty())
|
||||||
aSubShapeList.append(QString("%1_%2").arg(aType).arg(myInters[aCurItem*2 + 1]));
|
aSubShapeList.append(QString("%1_%2").arg(aType).arg(myInters[aCurItem*2 + 1]));
|
||||||
}
|
}
|
||||||
myGrp->ListBox2->clear();
|
myShapeList->clear();
|
||||||
myGrp->ListBox2->addItems(aSubShapeList);
|
myShapeList->addItems(aSubShapeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -223,14 +475,14 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged()
|
|||||||
erasePreview();
|
erasePreview();
|
||||||
|
|
||||||
// Current pair
|
// Current pair
|
||||||
int aErrCurItem = myGrp->ListBox1->currentRow();
|
int aErrCurItem = myInteList->currentRow();
|
||||||
if (aErrCurItem < 0)
|
if (aErrCurItem < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Selected IDs
|
// Selected IDs
|
||||||
QList<int> aIds;
|
QList<int> aIds;
|
||||||
for (int i = 0, n = myGrp->ListBox2->count(); i < n; i++) {
|
for (int i = 0, n = myShapeList->count(); i < n; i++) {
|
||||||
if (myGrp->ListBox2->item(i)->isSelected())
|
if (myShapeList->item(i)->isSelected())
|
||||||
aIds.append(i);
|
aIds.append(i);
|
||||||
}
|
}
|
||||||
if (aIds.count() < 1)
|
if (aIds.count() < 1)
|
||||||
@ -259,3 +511,82 @@ void MeasureGUI_CheckSelfIntersectionsDlg::onSubShapesListSelectionChanged()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : execute
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::execute(ObjectList& objects)
|
||||||
|
{
|
||||||
|
bool hasSelfInte;
|
||||||
|
QString anErrMsg;
|
||||||
|
|
||||||
|
if (!findSelfIntersections(hasSelfInte, anErrMsg)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const int aNbInteSelected = myInteList->selectedItems().size();
|
||||||
|
const bool isPublishAllInte = (aNbInteSelected < 1);
|
||||||
|
const bool isPublishAllShapes =
|
||||||
|
(aNbInteSelected != 1 || myShapeList->selectedItems().empty());
|
||||||
|
int i;
|
||||||
|
const int n = myInteList->count();
|
||||||
|
TColStd_IndexedMapOfInteger aMapIndex;
|
||||||
|
|
||||||
|
// Collect the map of indices.
|
||||||
|
for (i = 0; i < n; i++) {
|
||||||
|
if (isPublishAllInte) {
|
||||||
|
// Collect the both of two indices.
|
||||||
|
aMapIndex.Add(myInters[i*2]);
|
||||||
|
aMapIndex.Add(myInters[i*2 + 1]);
|
||||||
|
} else if (myInteList->item(i)->isSelected()) {
|
||||||
|
if (isPublishAllShapes) {
|
||||||
|
// Collect the both of two indices.
|
||||||
|
aMapIndex.Add(myInters[i*2]);
|
||||||
|
aMapIndex.Add(myInters[i*2 + 1]);
|
||||||
|
} else if (myShapeList->count() == 2) {
|
||||||
|
// Collect only selected items.
|
||||||
|
if (myShapeList->item(0)->isSelected()) {
|
||||||
|
aMapIndex.Add(myInters[i*2]);
|
||||||
|
}
|
||||||
|
if (myShapeList->item(1)->isSelected()) {
|
||||||
|
aMapIndex.Add(myInters[i*2 + 1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create objects.
|
||||||
|
GEOM::ListOfLong_var anArray = new GEOM::ListOfLong;
|
||||||
|
const int aNbShapes = aMapIndex.Extent();
|
||||||
|
|
||||||
|
anArray->length(aNbShapes);
|
||||||
|
|
||||||
|
for (i = 1; i <= aNbShapes; i++) {
|
||||||
|
anArray[i - 1] = aMapIndex.FindKey(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (myShapesOper->_is_nil()) {
|
||||||
|
myShapesOper = getGeomEngine()->GetIShapesOperations(getStudyId());
|
||||||
|
}
|
||||||
|
|
||||||
|
GEOM::ListOfGO_var aList = myShapesOper->MakeSubShapes(myObj, anArray);
|
||||||
|
const int aNbObj = aList->length();
|
||||||
|
|
||||||
|
for (i = 0; i < aNbObj; i++) {
|
||||||
|
objects.push_back(GEOM::GEOM_Object::_duplicate(aList[i]));
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
//================================================================
|
||||||
|
// Function : getFather
|
||||||
|
// Purpose : Get father object for object to be added in study
|
||||||
|
// (called with addInStudy method)
|
||||||
|
//================================================================
|
||||||
|
GEOM::GEOM_Object_ptr MeasureGUI_CheckSelfIntersectionsDlg::getFather
|
||||||
|
(GEOM::GEOM_Object_ptr)
|
||||||
|
{
|
||||||
|
return myObj;
|
||||||
|
}
|
||||||
|
@ -26,38 +26,70 @@
|
|||||||
#ifndef MEASUREGUI_CHECKSELFINTERDLG_H
|
#ifndef MEASUREGUI_CHECKSELFINTERDLG_H
|
||||||
#define MEASUREGUI_CHECKSELFINTERDLG_H
|
#define MEASUREGUI_CHECKSELFINTERDLG_H
|
||||||
|
|
||||||
#include <MeasureGUI_Skeleton.h>
|
#include <GEOMBase_Skeleton.h>
|
||||||
|
|
||||||
|
class QComboBox;
|
||||||
|
class QListWidget;
|
||||||
|
class QTextBrowser;
|
||||||
|
|
||||||
class MeasureGUI_1Sel1TextView2ListBox;
|
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// class : MeasureGUI_CheckSelfIntersectionsDlg
|
// class : MeasureGUI_CheckSelfIntersectionsDlg
|
||||||
// purpose :
|
// purpose :
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
|
|
||||||
class MeasureGUI_CheckSelfIntersectionsDlg : public MeasureGUI_Skeleton
|
class MeasureGUI_CheckSelfIntersectionsDlg : public GEOMBase_Skeleton
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
MeasureGUI_CheckSelfIntersectionsDlg(GeometryGUI*, QWidget*);
|
MeasureGUI_CheckSelfIntersectionsDlg(GeometryGUI*, QWidget*);
|
||||||
~MeasureGUI_CheckSelfIntersectionsDlg();
|
~MeasureGUI_CheckSelfIntersectionsDlg();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// redefined from GEOMBase_Helper and MeasureGUI_Skeleton
|
// redefined from GEOMBase_Helper
|
||||||
virtual void processObject();
|
virtual GEOM::GEOM_IOperations_ptr createOperation();
|
||||||
|
virtual bool isValid(QString &);
|
||||||
|
virtual bool execute(ObjectList &);
|
||||||
|
virtual bool extractPrefix() const;
|
||||||
|
virtual GEOM::GEOM_Object_ptr getFather (GEOM::GEOM_Object_ptr);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onErrorsListSelectionChanged();
|
|
||||||
|
void onInteListSelectionChanged();
|
||||||
void onSubShapesListSelectionChanged();
|
void onSubShapesListSelectionChanged();
|
||||||
|
void clear();
|
||||||
|
void onCompute();
|
||||||
|
void ClickOnOk();
|
||||||
|
bool ClickOnApply();
|
||||||
|
void ActivateThisDialog();
|
||||||
|
void DeactivateActiveDialog();
|
||||||
|
void SelectionIntoArgument();
|
||||||
|
void SetEditCurrentArgument();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
void activateSelection();
|
||||||
|
void enterEvent(QEvent *);
|
||||||
|
bool findSelfIntersections
|
||||||
|
(bool &HasSelfInte,
|
||||||
|
QString &theErrMsg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
MeasureGUI_1Sel1TextView2ListBox* myGrp;
|
|
||||||
|
|
||||||
|
QTextBrowser *myTextView;
|
||||||
|
QPushButton *mySelButton;
|
||||||
|
QLineEdit *myEditObjName;
|
||||||
|
QComboBox *myLevelBox;
|
||||||
|
QPushButton *myComputeButton;
|
||||||
|
QListWidget *myInteList;
|
||||||
|
QListWidget *myShapeList;
|
||||||
|
GEOM::GEOM_Object_var myObj;
|
||||||
GEOM::ListOfLong_var myInters;
|
GEOM::ListOfLong_var myInters;
|
||||||
|
GEOM::GEOM_IShapesOperations_var myShapesOper;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MEASUREGUI_CHECKSELFINTERDLG_H
|
#endif // MEASUREGUI_CHECKSELFINTERDLG_H
|
||||||
|
Loading…
Reference in New Issue
Block a user