Mantis issue 0021483: EDF 1638 GEOM: Retrieve non blocks solids and faces from a shape.

This commit is contained in:
jfa 2012-08-15 10:34:21 +00:00
parent 3b485f4d87
commit 8a7faf3ee5
26 changed files with 720 additions and 41 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,23 @@
/*!
\page get_non_blocks_page Get Non Blocks
\image html measures2.png
Retrieve all non blocks solids and faces from the given shape.
Collect them in two groups: solids and faces separately.
\n <b>Result:</b> Two or less groups are published in the Object
Browser under the processed object. Reports error if
no bad sub-shapes (solids and faces) have been found.
\n <b>TUI Command:</b>
<em>geompy.GetNonBlocks(Compound).</em> Returns a tuple of two
GEOM_Objects. The first object is a group of all non block solids
(= not 6 faces, or with 6 faces, but with the presence of
non-quadrangular faces). The second object is a group of all non
quadrangular faces.
See also a \ref tui_get_non_blocks_page "TUI example".
*/

View File

@ -0,0 +1,32 @@
/*!
\page tui_get_non_blocks_page Get Non Blocks
\code
import geompy
import salome
# create solids
box = geompy.MakeBoxDXDYDZ(100, 100, 100)
cyl = geompy.MakeCylinderRH(100, 200)
geompy.addToStudy(box, 'box')
geompy.addToStudy(cyl, 'cyl')
# make a compound
compound = geompy.MakeCompound([box1, box2])
geompy.addToStudy(compound, 'compound')
# explore the compound
pair = geompy.GetNonBlocks(compound)
if pair[0] is not None:
geompy.addToStudyInFather(compound, pair[0], "GrNonBlocks")
pass
if pair[1] is not None:
geompy.addToStudyInFather(compound, pair[1], "GrNonQuads")
pass
\endcode
*/

View File

@ -17,6 +17,7 @@
<li>\subpage tui_free_faces_page</li>
<li>\subpage tui_check_shape_page</li>
<li>\subpage tui_check_compound_of_blocks_page</li>
<li>\subpage tui_get_non_blocks_page</li>
<li>\subpage tui_check_self_intersections_page</li>
</ul>

View File

@ -35,6 +35,11 @@
\anchor swig_GetOppositeFace
\until id_face41
\until id_glueALL
\anchor swig_GetNonBlocks
\until Spanner is a
\anchor spanner_continue
\until return Spanner

View File

@ -25,6 +25,7 @@ concerning created or imported geometrical objects :
<li>\subpage free_faces_page "Check Free Faces"</li>
<li>\subpage check_shape_page "Check Shape"</li>
<li>\subpage check_compound_of_blocks_page "Check compound of blocks"</li>
<li>\subpage get_non_blocks_page "Get non blocks"</li>
<li>\subpage check_self_intersections_page "Detect Self-intersections"</li>
</ul>
@ -32,4 +33,4 @@ concerning created or imported geometrical objects :
\ref tui_measurement_tools_page "Measurement Tools" with <b>TUI
commands</b>.
*/
*/

View File

@ -2403,6 +2403,17 @@ module GEOM
string PrintBCErrors (in GEOM_Object theCompound,
in BCErrors theErrors);
/*!
* \brief Retrieve all non blocks solids and faces from a shape.
*
* \param theShape The shape to explore.
* \param theNonQuads Output parameter. Group of all non quadrangular faces.
*
* \return Group of all non block solids (= not 6 faces, or with 6
* faces, but with the presence of non-quadrangular faces).
*/
GEOM_Object GetNonBlocks (in GEOM_Object theShape, out GEOM_Object theNonQuads);
/*!
* \brief Remove all seam and degenerated edges from \a theShape.
*

View File

@ -232,6 +232,7 @@ group_new.png \
group_edit.png \
glue.png \
check_blocks_compound.png \
get_non_blocks.png \
check_self_intersections.png \
free_faces.png \
propagate.png \

Binary file not shown.

After

Width:  |  Height:  |  Size: 1004 B

View File

@ -167,6 +167,10 @@
<source>ICON_DLG_CHECK_COMPOUND_OF_BLOCKS</source>
<translation>check_blocks_compound.png</translation>
</message>
<message>
<source>ICON_DLG_GETNONBLOCKS</source>
<translation>get_non_blocks.png</translation>
</message>
<message>
<source>ICON_DLG_CHECK_SELF_INTERSECTIONS</source>
<translation>check_self_intersections.png</translation>
@ -739,6 +743,10 @@
<source>ICO_CHECK_COMPOUND</source>
<translation>check_blocks_compound.png</translation>
</message>
<message>
<source>ICO_GET_NON_BLOCKS</source>
<translation>get_non_blocks.png</translation>
</message>
<message>
<source>ICO_CHECK_SELF_INTERSECTIONS</source>
<translation>check_self_intersections.png</translation>

View File

@ -357,6 +357,18 @@ Please, select face, shell or solid and try again</translation>
<source>GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES</source>
<translation>Incriminated Sub-shapes</translation>
</message>
<message>
<source>GEOM_GETNONBLOCKS_TITLE</source>
<translation>Get non-hexahedral solids and non-quadrangular faces</translation>
</message>
<message>
<source>GEOM_GETNONBLOCKS</source>
<translation>Get non blocks</translation>
</message>
<message>
<source>GEOM_NONBLOCKS</source>
<translation>NonBlocksGroup</translation>
</message>
<message>
<source>GEOM_CHECK_INFOS</source>
<translation>Object And Its Topological Information</translation>
@ -2310,6 +2322,10 @@ Please, select face, shell or solid and try again</translation>
<source>MEN_CHECK_COMPOUND</source>
<translation>Check Compound of Blocks</translation>
</message>
<message>
<source>MEN_GET_NON_BLOCKS</source>
<translation>Get Non Blocks</translation>
</message>
<message>
<source>MEN_CHECK_SELF_INTERSECTIONS</source>
<translation>Detect Self-intersections</translation>
@ -3154,6 +3170,10 @@ Please, select face, shell or solid and try again</translation>
<source>STB_CHECK_COMPOUND</source>
<translation>Check compound of blocks</translation>
</message>
<message>
<source>STB_GET_NON_BLOCKS</source>
<translation>Get non blocks</translation>
</message>
<message>
<source>STB_CHECK_SELF_INTERSECTIONS</source>
<translation>Detect Self-intersections</translation>
@ -3762,6 +3782,10 @@ Please, select face, shell or solid and try again</translation>
<source>TOP_CHECK_COMPOUND</source>
<translation>Check compound of blocks</translation>
</message>
<message>
<source>TOP_GET_NON_BLOCKS</source>
<translation>Get non blocks</translation>
</message>
<message>
<source>TOP_CHECK_SELF_INTERSECTIONS</source>
<translation>Detect Self-intersections</translation>

View File

@ -549,6 +549,7 @@ void GeometryGUI::OnGUIEvent( int id )
case GEOMOp::OpWhatIs: // MENU MEASURE - WHATIS
case GEOMOp::OpCheckShape: // MENU MEASURE - CHECK
case GEOMOp::OpCheckCompound: // MENU MEASURE - CHECK COMPOUND OF BLOCKS
case GEOMOp::OpGetNonBlocks: // MENU MEASURE - Get NON BLOCKS
case GEOMOp::OpPointCoordinates: // MENU MEASURE - POINT COORDINATES
case GEOMOp::OpCheckSelfInters: // MENU MEASURE - CHECK SELF INTERSECTIONS
libName = "MeasureGUI";
@ -829,6 +830,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createGeomAction( GEOMOp::OpWhatIs, "WHAT_IS" );
createGeomAction( GEOMOp::OpCheckShape, "CHECK" );
createGeomAction( GEOMOp::OpCheckCompound, "CHECK_COMPOUND" );
createGeomAction( GEOMOp::OpGetNonBlocks, "GET_NON_BLOCKS" );
createGeomAction( GEOMOp::OpCheckSelfInters, "CHECK_SELF_INTERSECTIONS" );
#ifdef _DEBUG_ // PAL16821
@ -1059,6 +1061,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createMenu( GEOMOp::OpWhatIs, measurId, -1 );
createMenu( GEOMOp::OpCheckShape, measurId, -1 );
createMenu( GEOMOp::OpCheckCompound, measurId, -1 );
createMenu( GEOMOp::OpGetNonBlocks, measurId, -1 );
createMenu( GEOMOp::OpCheckSelfInters, measurId, -1 );
#ifdef _DEBUG_ // PAL16821
@ -1196,6 +1199,7 @@ void GeometryGUI::initialize( CAM_Application* app )
createTool( GEOMOp::OpWhatIs, measureTbId );
createTool( GEOMOp::OpCheckShape, measureTbId );
createTool( GEOMOp::OpCheckCompound, measureTbId );
createTool( GEOMOp::OpGetNonBlocks, measureTbId );
createTool( GEOMOp::OpCheckSelfInters, measureTbId );
int picturesTbId = createTool( tr( "TOOL_PICTURES" ) );

View File

@ -24,7 +24,7 @@
namespace GEOMOp {
enum {
// ToolsGUI ------------------//--------------------------------
// ToolsGUI --------------------//--------------------------------
OpImport = 1000, // MENU FILE - IMPORT
OpExport = 1001, // MENU FILE - EXPORT
OpDelete = 1020, // MENU EDIT - DELETE
@ -57,7 +57,7 @@ namespace GEOMOp {
OpEdgeWidth = 1260, // POPUP MENU - LINE WIDTH - EDGE WIDTH
OpIsosWidth = 1261, // POPUP MENU - LINE WIDTH - ISOS WIDTH
// DisplayGUI ----------------//--------------------------------
// DisplayGUI ------------------//--------------------------------
OpSwitchVectors = 2001, // MENU VIEW - DISPLAY MODE - SHOW/HIDE EDGE DIRECTION
OpShowAll = 2002, // MENU VIEW - SHOW ALL
OpHideAll = 2003, // MENU VIEW - HIDE ALL
@ -74,7 +74,7 @@ namespace GEOMOp {
OpTexture = 2204, // POPUP MENU - DISPLAY MODE - TEXTURE
OpBringToFront = 2205, // POPUP MENU - BRING TO FRONT
OpClsBringToFront = 2206,
// BasicGUI ------------------//--------------------------------
// BasicGUI --------------------//--------------------------------
OpPoint = 3000, // MENU NEW ENTITY - BASIC - POINT
OpLine = 3001, // MENU NEW ENTITY - BASIC - LINE
OpCircle = 3002, // MENU NEW ENTITY - BASIC - CIRCLE
@ -85,7 +85,7 @@ namespace GEOMOp {
OpCurve = 3007, // MENU NEW ENTITY - BASIC - CURVE
OpLCS = 3008, // MENU NEW ENTITY - BASIC - LOCAL COORDINATE SYSTEM
OpOriginAndVectors = 3009, // MENU NEW ENTITY - BASIC - ORIGIN AND BASE VECTORS
// PrimitiveGUI --------------//--------------------------------
// PrimitiveGUI ----------------//--------------------------------
OpBox = 3100, // MENU NEW ENTITY - PRIMITIVES - BOX
OpCylinder = 3101, // MENU NEW ENTITY - PRIMITIVES - CYLINDER
OpSphere = 3102, // MENU NEW ENTITY - PRIMITIVES - SPHERE
@ -93,12 +93,12 @@ namespace GEOMOp {
OpCone = 3104, // MENU NEW ENTITY - PRIMITIVES - CONE
OpRectangle = 3105, // MENU NEW ENTITY - PRIMITIVES - FACE
OpDisk = 3106, // MENU NEW ENTITY - PRIMITIVES - DISK
// GenerationGUI -------------//--------------------------------
// GenerationGUI ---------------//--------------------------------
OpPrism = 3200, // MENU NEW ENTITY - GENERATION - EXTRUSION
OpRevolution = 3201, // MENU NEW ENTITY - GENERATION - REVOLUTION
OpFilling = 3202, // MENU NEW ENTITY - GENERATION - FILLING
OpPipe = 3203, // MENU NEW ENTITY - GENERATION - EXTRUSION ALONG PATH
// EntityGUI -----------------//--------------------------------
// EntityGUI -------------------//--------------------------------
Op2dSketcher = 3300, // MENU NEW ENTITY - SKETCHER
Op3dSketcher = 3301, // MENU NEW ENTITY - 3D SKETCHER
OpExplode = 3302, // MENU NEW ENTITY - EXPLODE
@ -106,20 +106,19 @@ namespace GEOMOp {
OpFeatureDetect = 3303, // MENU NEW ENTITY - FEATURE DETECTION
#endif
OpPictureImport = 3304, // MENU NEW ENTITY - IMPORT PICTURE IN VIEWER
// BuildGUI ------------------//--------------------------------
// BuildGUI --------------------//--------------------------------
OpEdge = 3400, // MENU NEW ENTITY - BUILD - EDGE
OpWire = 3401, // MENU NEW ENTITY - BUILD - WIRE
OpFace = 3402, // MENU NEW ENTITY - BUILD - FACE
OpShell = 3403, // MENU NEW ENTITY - BUILD - SHELL
OpSolid = 3404, // MENU NEW ENTITY - BUILD - SOLID
OpCompound = 3405, // MENU NEW ENTITY - BUILD - COMPOUND
// BooleanGUI ----------------//--------------------------------
// BooleanGUI ------------------//--------------------------------
OpFuse = 3500, // MENU OPERATIONS - BOOLEAN - FUSE
OpCommon = 3501, // MENU OPERATIONS - BOOLEAN - COMMON
OpCut = 3502, // MENU OPERATIONS - BOOLEAN - CUT
OpSection = 3503, // MENU OPERATIONS - BOOLEAN - SECTION
// TransformationGUI ---------//--------------------------------
// TransformationGUI -----------//--------------------------------
OpTranslate = 3600, // MENU OPERATIONS - TRANSFORMATION - TRANSLATION
OpRotate = 3601, // MENU OPERATIONS - TRANSFORMATION - ROTATION
OpChangeLoc = 3602, // MENU OPERATIONS - TRANSFORMATION - LOCATION
@ -130,7 +129,7 @@ namespace GEOMOp {
OpMultiRotate = 3607, // MENU OPERATIONS - TRANSFORMATION - MULTI-ROTATION
OpReimport = 3608, // POPUP MENU - RELOAD IMPORTED
OpProjection = 3609, // MENU OPERATIONS - TRANSFORMATION - PROJECTION
// OperationGUI
// OperationGUI ----------------//--------------------------------
OpPartition = 3700, // MENU OPERATION - PARTITION
OpArchimede = 3701, // MENU OPERATION - ARCHIMEDE
OpFillet3d = 3702, // MENU OPERATION - FILLET
@ -142,7 +141,7 @@ namespace GEOMOp {
OpSharedShapes = 3708, // MENU OPERATION - GET SHARED SHAPES
OpExtrudedBoss = 3709, // MENU OPERATION - ETRUDED BOSS
OpExtrudedCut = 3710, // MENU OPERATION - ETRUDED CUT
// RepairGUI -----------------//--------------------------------
// RepairGUI -------------------//--------------------------------
OpSewing = 4000, // MENU REPAIR - SEWING
OpSuppressFaces = 4001, // MENU REPAIR - SUPPRESS FACES
OpSuppressHoles = 4002, // MENU REPAIR - SUPPRESS HOLES
@ -158,7 +157,7 @@ namespace GEOMOp {
OpLimitTolerance = 4012, // MENU REPAIR - LIMIT TOLERANCE
OpGlueEdges = 4013, // MENU REPAIR - GLUE EDGES
OpFuseEdges = 4014, // MENU REPAIR - FUSE COLLINEAR EDGES
// MeasureGUI ----------------//--------------------------------
// MeasureGUI ------------------//--------------------------------
OpProperties = 5000, // MENU MEASURES - PROPERTIES
OpCenterMass = 5001, // MENU MEASURES - CENTRE OF MASS
OpInertia = 5002, // MENU MEASURES - INERTIA
@ -172,22 +171,23 @@ namespace GEOMOp {
OpCheckCompound = 5010, // MENU MEASURES - CHECK COMPOUND OF BLOCKS
OpPointCoordinates = 5011, // MENU MEASURES - POINT COORDINATES
OpCheckSelfInters = 5012, // MENU MEASURES - CHECK SELF INTERSECTIONS
// GroupGUI ------------------//--------------------------------
OpGetNonBlocks = 5013, // MENU MEASURES - GET NON BLOCKS
// GroupGUI --------------------//--------------------------------
OpGroupCreate = 6000, // MENU GROUP - CREATE
OpGroupEdit = 6001, // MENU GROUP - EDIT
OpGroupCreatePopup = 6002, // POPUP MENU - CREATE GROUP
// BlocksGUI -----------------//--------------------------------
// BlocksGUI -------------------//--------------------------------
OpHexaSolid = 6100, // MENU BLOCKS - HEXAHEDRAL SOLID
OpMultiTransform = 6101, // MENU BLOCKS - MULTI-TRANSFORMATION
OpQuadFace = 6102, // MENU BLOCKS - QUADRANGLE FACE
OpPropagate = 6103, // MENU BLOCKS - PROPAGATE
OpExplodeBlock = 6104, // MENU BLOCKS - EXPLODE ON BLOCKS
// AdvancedGUI ---------------//--------------------------------
// AdvancedGUI -----------------//--------------------------------
OpAdvancedNoOp = 10000, // NO OPERATION (advanced operations base)
OpPipeTShape = 10001, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE
// OpPipeTShapeGroups = 10002, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
OpDividedDisk = 10003, // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
OpDividedCylinder = 10004, // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
//OpPipeTShapeGroups = 10002, // MENU NEW ENTITY - ADVANCED - PIPE TSHAPE GROUPS
OpDividedDisk = 10003, // MENU NEW ENTITY - ADVANCED - DIVIDEDDISK
OpDividedCylinder = 10004, // MENU NEW ENTITY - ADVANCED - DIVIDEDCYLINDER
//@@ insert new functions before this line @@ do not remove this line @@//
};
}

View File

@ -600,7 +600,8 @@ Standard_Integer GEOMImpl_BlockDriver::Execute(TFunction_Logbook& log) const
TopTools_ListOfShape BLO; // All blocks from the given compound
TopTools_ListOfShape NOT; // Not blocks
TopTools_ListOfShape EXT; // Hexahedral solids, having degenerated and/or seam edges
GEOMImpl_IBlocksOperations::AddBlocksFrom(aFixedExtra, BLO, NOT, EXT);
TopTools_ListOfShape NOQ; // All non-quadrangular faces
GEOMImpl_IBlocksOperations::AddBlocksFrom(aFixedExtra, BLO, NOT, EXT, NOQ);
if (NOT.Extent() > 0) {
MESSAGE("Some non-blocks have been removed");

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
//
#ifdef WNT
#pragma warning( disable:4786 )
@ -1735,7 +1734,8 @@ Standard_Boolean GEOMImpl_IBlocksOperations::IsCompoundOfBlocks
void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
TopTools_ListOfShape& BLO,
TopTools_ListOfShape& NOT,
TopTools_ListOfShape& EXT)
TopTools_ListOfShape& EXT,
TopTools_ListOfShape& NOQ)
{
TopAbs_ShapeEnum aType = theShape.ShapeType();
switch (aType) {
@ -1744,7 +1744,7 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
{
TopoDS_Iterator It (theShape);
for (; It.More(); It.Next()) {
AddBlocksFrom(It.Value(), BLO, NOT, EXT);
AddBlocksFrom(It.Value(), BLO, NOT, EXT, NOQ);
}
}
break;
@ -1766,7 +1766,7 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
for (; expF.More(); expF.Next()) {
if (mapFaces.Add(expF.Current())) {
nbFaces++;
if (nbFaces > 6) break;
//0021483//if (nbFaces > 6) break;
// get wire
TopoDS_Shape aF = expF.Current();
@ -1774,14 +1774,18 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
if (!wires.More()) {
// no wire in the face
hasNonQuadr = Standard_True;
break;
NOQ.Append(aF);//0021483
//0021483//break;
continue;
}
TopoDS_Shape aWire = wires.Current();
wires.Next();
if (wires.More()) {
// multiple wires in the face
hasNonQuadr = Standard_True;
break;
NOQ.Append(aF);//0021483
//0021483//break;
continue;
}
// Check number of edges in the face
@ -1796,6 +1800,7 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
}
if (nbEdges != 4) {
hasNonQuadr = Standard_True;
NOQ.Append(aF);//0021483
}
}
}
@ -1808,6 +1813,47 @@ void GEOMImpl_IBlocksOperations::AddBlocksFrom (const TopoDS_Shape& theShape,
}
}
break;
case TopAbs_SHELL: //0021483
case TopAbs_FACE: //0021483
{
// Count edges in each face
TopTools_MapOfShape mapFaces;
TopExp_Explorer expF (theShape, TopAbs_FACE);
for (; expF.More(); expF.Next()) {
if (mapFaces.Add(expF.Current())) {
// get wire
TopoDS_Shape aF = expF.Current();
TopExp_Explorer wires (aF, TopAbs_WIRE);
if (!wires.More()) {
// no wire in the face
NOQ.Append(aF);//0021483
continue;
}
TopoDS_Shape aWire = wires.Current();
wires.Next();
if (wires.More()) {
// multiple wires in the face
NOQ.Append(aF);//0021483
continue;
}
// Check number of edges in the face
Standard_Integer nbEdges = 0;
TopTools_MapOfShape mapEdges;
TopExp_Explorer expW (aWire, TopAbs_EDGE);
for (; expW.More(); expW.Next()) {
if (mapEdges.Add(expW.Current())) {
nbEdges++;
if (nbEdges > 4) break;
}
}
if (nbEdges != 4) {
NOQ.Append(aF);//0021483
}
}
}
}
break;
default:
NOT.Append(theShape);
}
@ -2353,7 +2399,8 @@ Standard_Boolean GEOMImpl_IBlocksOperations::CheckCompoundOfBlocks
TopTools_ListOfShape NOT; // Not blocks
TopTools_ListOfShape EXT; // Hexahedral solids, having degenerated and/or seam edges
TopTools_ListOfShape BLO; // All blocks from the given compound
AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT);
TopTools_ListOfShape NOQ; // All non-quadrangular faces
AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT, NOQ);
// Report non-blocks
if (NOT.Extent() > 0) {
@ -2513,6 +2560,100 @@ Standard_Boolean GEOMImpl_IBlocksOperations::CheckCompoundOfBlocks
return isCompOfBlocks;
}
//=============================================================================
/*!
* GetNonBlocks
*/
//=============================================================================
Handle(GEOM_Object) GEOMImpl_IBlocksOperations::GetNonBlocks
(Handle(GEOM_Object) theShape,
Handle(GEOM_Object)& theNonQuads)
{
SetErrorCode(KO);
if (theShape.IsNull()) return NULL;
TopoDS_Shape aShape = theShape->GetValue();
// Separate blocks from non-blocks
TopTools_ListOfShape BLO; // All blocks from the given compound
TopTools_ListOfShape NOT; // Not blocks
TopTools_ListOfShape EXT; // Hexahedral solids, having degenerated and/or seam edges
TopTools_ListOfShape NOQ; // All non-quadrangular faces
AddBlocksFrom(aShape, BLO, NOT, EXT, NOQ);
if (NOT.IsEmpty() && EXT.IsEmpty() && NOQ.IsEmpty()) {
SetErrorCode("NOT_FOUND_ANY");
return NULL;
}
// Map sub-shapes and their indices
TopTools_IndexedMapOfShape anIndices;
TopExp::MapShapes(aShape, anIndices);
// Non-blocks
Handle(GEOM_Object) aNonBlocks;
if (NOT.Extent() > 0 || EXT.Extent() > 0) {
Handle(TColStd_HArray1OfInteger) anArray =
new TColStd_HArray1OfInteger (1, NOT.Extent() + EXT.Extent());
Standard_Integer ii = 1;
TopTools_ListIteratorOfListOfShape it1 (NOT);
for (; it1.More(); it1.Next(), ii++) {
anArray->SetValue(ii, anIndices.FindIndex(it1.Value()));
}
TopTools_ListIteratorOfListOfShape it2 (EXT);
for (; it2.More(); it2.Next(), ii++) {
anArray->SetValue(ii, anIndices.FindIndex(it2.Value()));
}
aNonBlocks = GetEngine()->AddSubShape(theShape, anArray);
if (aNonBlocks.IsNull()) {
SetErrorCode("Error in algorithm: result found, but cannot be returned.");
return NULL;
}
aNonBlocks->SetType(GEOM_GROUP);
TDF_Label aFreeLabel = aNonBlocks->GetFreeLabel();
TDataStd_Integer::Set(aFreeLabel, (Standard_Integer)TopAbs_SOLID);
}
// Non-quadrangles
if (NOQ.Extent() > 0) {
Handle(TColStd_HArray1OfInteger) anArray =
new TColStd_HArray1OfInteger (1, NOQ.Extent());
Standard_Integer ii = 1;
TopTools_ListIteratorOfListOfShape it1 (NOQ);
for (; it1.More(); it1.Next(), ii++) {
anArray->SetValue(ii, anIndices.FindIndex(it1.Value()));
}
theNonQuads = GetEngine()->AddSubShape(theShape, anArray);
if (theNonQuads.IsNull()) {
SetErrorCode("Error in algorithm: result found, but cannot be returned.");
return NULL;
}
theNonQuads->SetType(GEOM_GROUP);
TDF_Label aFreeLabel = theNonQuads->GetFreeLabel();
TDataStd_Integer::Set(aFreeLabel, (Standard_Integer)TopAbs_FACE);
}
//Make a Python command
Handle(GEOM_Function) aMainShape = theShape->GetLastFunction();
GEOM::TPythonDump pd (aMainShape, /*append=*/true);
pd << "(";
if (aNonBlocks.IsNull())
pd << "no_bad_solids";
else
pd << aNonBlocks;
pd << ", ";
if (theNonQuads.IsNull())
pd << "no_bad_faces";
else
pd << theNonQuads;
pd << ") = geompy.GetNonBlocks(" << theShape << ")";
SetErrorCode(OK);
return aNonBlocks;
}
//=============================================================================
/*!
* RemoveExtraEdges

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
//
#ifndef _GEOMImpl_IBlocksOperations_HXX_
#define _GEOMImpl_IBlocksOperations_HXX_
@ -126,14 +125,17 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
};
Standard_EXPORT Standard_Boolean CheckCompoundOfBlocksOld (Handle(GEOM_Object) theCompound,
std::list<BCError>& theErrors);
std::list<BCError>& theErrors);
Standard_EXPORT Standard_Boolean CheckCompoundOfBlocks (Handle(GEOM_Object) theCompound,
std::list<BCError>& theErrors);
std::list<BCError>& theErrors);
Standard_EXPORT TCollection_AsciiString PrintBCErrors (Handle(GEOM_Object) theCompound,
Standard_EXPORT TCollection_AsciiString PrintBCErrors (Handle(GEOM_Object) theCompound,
const std::list<BCError>& theErrors);
Standard_EXPORT Handle(GEOM_Object) GetNonBlocks (Handle(GEOM_Object) theShape,
Handle(GEOM_Object)& theNonQuads);
Standard_EXPORT Handle(GEOM_Object) RemoveExtraEdges (Handle(GEOM_Object) theShape,
const Standard_Integer theOptimumNbFaces = 6);
@ -142,7 +144,8 @@ class GEOMImpl_IBlocksOperations : public GEOM_IOperations {
Standard_EXPORT static void AddBlocksFrom (const TopoDS_Shape& theShape,
TopTools_ListOfShape& BLO,
TopTools_ListOfShape& NOT,
TopTools_ListOfShape& EXT);
TopTools_ListOfShape& EXT,
TopTools_ListOfShape& NOQ);
// Extract blocks from blocks compounds
Standard_EXPORT Handle(TColStd_HSequenceOfTransient) ExplodeCompoundOfBlocks

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>
@ -742,6 +741,39 @@ char* GEOM_IBlocksOperations_i::PrintBCErrors
return CORBA::string_dup(aDescr.ToCString());
}
//=============================================================================
/*!
* GetNonBlocks
*/
//=============================================================================
GEOM::GEOM_Object_ptr GEOM_IBlocksOperations_i::GetNonBlocks
(GEOM::GEOM_Object_ptr theShape,
GEOM::GEOM_Object_out theNonQuads)
{
GEOM::GEOM_Object_var aGEOMObject;
GEOM::GEOM_Object_var aNonQuads;
theNonQuads = aNonQuads._retn();
//Set a not done flag
GetOperations()->SetNotDone();
//Get the reference Objects
Handle(GEOM_Object) aShape = GetObjectImpl(theShape);
if (aShape.IsNull()) return aGEOMObject._retn();
//Get the result
Handle(GEOM_Object) aFaces;
Handle(GEOM_Object) anObject = GetOperations()->GetNonBlocks(aShape, aFaces);
if (!GetOperations()->IsDone() || anObject.IsNull())
return aGEOMObject._retn();
if (!aFaces.IsNull())
theNonQuads = GetObject(aFaces);
return GetObject(anObject);
}
//=============================================================================
/*!
* RemoveExtraEdges

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
//
#ifndef _GEOM_IBlocksOperations_i_HeaderFile
#define _GEOM_IBlocksOperations_i_HeaderFile
@ -121,6 +120,9 @@ class GEOM_I_EXPORT GEOM_IBlocksOperations_i :
char* PrintBCErrors (GEOM::GEOM_Object_ptr theCompound,
const GEOM::GEOM_IBlocksOperations::BCErrors& theErrors);
GEOM::GEOM_Object_ptr GetNonBlocks (GEOM::GEOM_Object_ptr theShape,
GEOM::GEOM_Object_out theNonQuads);
GEOM::GEOM_Object_ptr RemoveExtraEdges (GEOM::GEOM_Object_ptr theShape,
CORBA::Long theOptimumNbFaces);

View File

@ -20,18 +20,17 @@
#
# See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
#
# GEOM GEOM_SWIG : binding of C++ implementaion with Python
# File : GEOM_Spanner.py
# Author : Julia DOROVSKIKH
# Module : GEOM
# $Header$
#
# ! Please, if you edit this example file, update also
# ! GEOM_SRC/doc/salome/gui/GEOM/input/tui_test_spanner.doc
# ! as some sequences of symbols from this example are used during
# ! documentation generation to identify certain places of this file
############# MakeSpanner #############
#
############# MakeSpanner #############
def MakeSpanner (geompy, math, isBlocksTest = 0, isMeshTest = 0, smesh = None):
### Variables ###
@ -304,6 +303,11 @@ def MakeSpanner (geompy, math, isBlocksTest = 0, isMeshTest = 0, smesh = None):
isCompOfBlocks6 = BlocksOp.CheckCompoundOfBlocks(Spanner)
if isCompOfBlocks6 == 0:
print "Spanner is not a compound of hexahedral solids"
(NonBlocks, NonQuads) = geompy.GetNonBlocks(Spanner)
if NonBlocks is not None:
geompy.addToStudyInFather(Spanner, NonBlocks, "Group of non-hexahedral solids")
if NonQuads is not None:
geompy.addToStudyInFather(Spanner, NonQuads, "Group of non-quadrangular faces")
else:
print "Spanner is a compound of hexahedral solids"

View File

@ -243,6 +243,11 @@ def TestOtherOperations (geompy, math):
IsValid = geompy.CheckCompoundOfBlocks(Compound1)
if IsValid == 0:
print "The Blocks Compound is NOT VALID"
(NonBlocks, NonQuads) = geompy.GetNonBlocks(Compound1)
if NonBlocks is not None:
geompy.addToStudyInFather(Compound1, NonBlocks, "Group of non-hexahedral solids")
if NonQuads is not None:
geompy.addToStudyInFather(Compound1, NonQuads, "Group of non-quadrangular faces")
else:
print "The Blocks Compound is VALID"

View File

@ -7774,6 +7774,36 @@ class geompyDC(GEOM._objref_GEOM_Gen):
print Descr
return IsValid
## Retrieve all non blocks solids and faces from \a theShape.
# @param theShape The shape to explore.
# @return A tuple of two GEOM_Objects. The first object is a group of all
# non block solids (= not 6 faces, or with 6 faces, but with the
# presence of non-quadrangular faces). The second object is a
# group of all non quadrangular faces.
#
# @ref tui_measurement_tools_page "Example 1"
# \n @ref swig_GetNonBlocks "Example 2"
def GetNonBlocks (self, theShape):
"""
Retrieve all non blocks solids and faces from theShape.
Parameters:
theShape The shape to explore.
Returns:
A tuple of two GEOM_Objects. The first object is a group of all
non block solids (= not 6 faces, or with 6 faces, but with the
presence of non-quadrangular faces). The second object is a
group of all non quadrangular faces.
Usage:
(res_sols, res_faces) = geompy.GetNonBlocks(myShape1)
"""
# Example: see GEOM_Spanner.py
aTuple = self.BlocksOp.GetNonBlocks(theShape)
RaiseIfFailed("GetNonBlocks", self.BlocksOp)
return aTuple
## Remove all seam and degenerated edges from \a theShape.
# Unite faces and edges, sharing one surface. It means that
# this faces must have references to one C++ surface object (handle).

View File

@ -40,6 +40,7 @@ salomeinclude_HEADERS = \
MeasureGUI_WhatisDlg.h \
MeasureGUI_CheckShapeDlg.h \
MeasureGUI_CheckCompoundOfBlocksDlg.h \
MeasureGUI_GetNonBlocksDlg.h \
MeasureGUI_CheckSelfIntersectionsDlg.h \
MeasureGUI_PointDlg.h
@ -61,6 +62,7 @@ dist_libMeasureGUI_la_SOURCES = \
MeasureGUI_WhatisDlg.cxx \
MeasureGUI_CheckShapeDlg.cxx \
MeasureGUI_CheckCompoundOfBlocksDlg.cxx \
MeasureGUI_GetNonBlocksDlg.cxx \
MeasureGUI_CheckSelfIntersectionsDlg.cxx \
MeasureGUI_PointDlg.cxx
@ -78,6 +80,7 @@ MOC_FILES = \
MeasureGUI_WhatisDlg_moc.cxx \
MeasureGUI_CheckShapeDlg_moc.cxx \
MeasureGUI_CheckCompoundOfBlocksDlg_moc.cxx \
MeasureGUI_GetNonBlocksDlg_moc.cxx \
MeasureGUI_CheckSelfIntersectionsDlg_moc.cxx \
MeasureGUI_PointDlg_moc.cxx
@ -122,4 +125,3 @@ libMeasureGUI_la_CPPFLAGS = \
libMeasureGUI_la_LDFLAGS = \
$(CAS_LDFLAGS) -lTKGeomBase \
../GEOMBase/libGEOMBase.la ../DlgRef/libDlgRef.la

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
//
// GEOM GEOMGUI : GUI for Geometry component
// File : MeasureGUI.cxx
@ -42,6 +41,7 @@
#include "MeasureGUI_WhatisDlg.h" // Method WHATIS
#include "MeasureGUI_CheckShapeDlg.h" // Method CHECKSHAPE
#include "MeasureGUI_CheckCompoundOfBlocksDlg.h" // Method CHECKCOMPOUND
#include "MeasureGUI_GetNonBlocksDlg.h" // Method GET NON BLOCKS
#include "MeasureGUI_CheckSelfIntersectionsDlg.h" // Method CHECK SELF INTERSCTIONS
#include "MeasureGUI_PointDlg.h" // Method POINTCOORDINATES
@ -110,6 +110,9 @@ bool MeasureGUI::OnGUIEvent( int theCommandID, SUIT_Desktop* parent )
case GEOMOp::OpCheckCompound:
dlg = new MeasureGUI_CheckCompoundOfBlocksDlg( getGeometryGUI(), parent );
break; // CHECKCOMPOUND
case GEOMOp::OpGetNonBlocks:
dlg = new MeasureGUI_GetNonBlocksDlg(getGeometryGUI(), parent);
break; // GET NON BLOCKS
case GEOMOp::OpCheckSelfInters:
dlg = new MeasureGUI_CheckSelfIntersectionsDlg( getGeometryGUI(), parent );
break; // CHECK SELF INTERSCTIONS

View File

@ -84,7 +84,7 @@ MeasureGUI_CenterMassDlg::MeasureGUI_CenterMassDlg( GeometryGUI* theGeometryGUI,
/***************************************************************/
myHelpFileName = "using_measurement_tools_page.html#center_mass_anchor";
myHelpFileName = "center_mass_page.html";
/* Initialisation */
Init();

View File

@ -0,0 +1,277 @@
// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// 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 : MeasureGUI_GetNonBlocksDlg.cxx
#include "MeasureGUI_GetNonBlocksDlg.h"
#include <DlgRef.h>
#include <GEOMBase.h>
#include <GeometryGUI.h>
#include <SUIT_Session.h>
#include <SUIT_ResourceMgr.h>
#include <SalomeApp_Application.h>
#include <LightApp_SelectionMgr.h>
#include <SalomeApp_Tools.h>
//=================================================================================
// class : MeasureGUI_GetNonBlocksDlg()
// purpose : Constructs a MeasureGUI_GetNonBlocksDlg which is a child of 'parent',
// with the name 'name' and widget flags set to 'f'.
// The dialog will by default be modeless, unless you set 'modal' to
// true to construct a modal dialog.
//=================================================================================
MeasureGUI_GetNonBlocksDlg::MeasureGUI_GetNonBlocksDlg (GeometryGUI* theGeometryGUI, QWidget* parent)
: GEOMBase_Skeleton(theGeometryGUI, parent, false)
{
QPixmap image0 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_DLG_GETNONBLOCKS")));
QPixmap image1 (SUIT_Session::session()->resourceMgr()->loadPixmap("GEOM", tr("ICON_SELECT")));
setWindowTitle(tr("GEOM_GETNONBLOCKS_TITLE"));
/***************************************************************/
mainFrame()->GroupConstructors->setTitle(tr("GEOM_GETNONBLOCKS"));
mainFrame()->RadioButton1->setIcon(image0);
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton2->close();
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
mainFrame()->RadioButton3->close();
myGrp = new DlgRef_1Sel (centralWidget());
myGrp->GroupBox1->setTitle(tr("GEOM_GETNONBLOCKS"));
myGrp->TextLabel1->setText(tr("GEOM_OBJECT"));
myGrp->PushButton1->setIcon(image1);
myGrp->LineEdit1->setReadOnly(true);
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
layout->setMargin(0); layout->setSpacing(6);
layout->addWidget(myGrp);
/***************************************************************/
myHelpFileName = "get_non_blocks_page.html";
/* Initialisation */
Init();
}
//=================================================================================
// function : ~MeasureGUI_GetNonBlocksDlg()
// purpose : Destroys the object and frees any allocated resources
//=================================================================================
MeasureGUI_GetNonBlocksDlg::~MeasureGUI_GetNonBlocksDlg()
{
}
//=================================================================================
// function : Init()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::Init()
{
showOnlyPreviewControl();
/* init variables */
myEditCurrentArgument = myGrp->LineEdit1;
/* signals and slots connections */
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
connect(myGrp->LineEdit1, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
//initName(tr("GEOM_NONBLOCKS"));
mainFrame()->ResultName->setText(tr("GEOM_NONBLOCKS"));
globalSelection();
SelectionIntoArgument();
}
//=================================================================================
// function : ClickOnOk()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::ClickOnOk()
{
if (ClickOnApply())
ClickOnCancel();
}
//=================================================================================
// function : ClickOnApply()
// purpose :
//=================================================================================
bool MeasureGUI_GetNonBlocksDlg::ClickOnApply()
{
if (!onAccept())
return false;
//initName();
return true;
}
//=================================================================================
// function : SelectionIntoArgument()
// purpose : Called when selection as changed or other case
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::SelectionIntoArgument()
{
erasePreview();
myObj = GEOM::GEOM_Object::_nil();
LightApp_SelectionMgr* aSelMgr = myGeomGUI->getApp()->selectionMgr();
SALOME_ListIO aSelList;
aSelMgr->selectedObjects(aSelList);
if (aSelList.Extent() != 1) {
processObject();
return;
}
GEOM::GEOM_Object_var aSelectedObject =
GEOMBase::ConvertIOinGEOMObject(aSelList.First());
if (aSelectedObject->_is_nil()) {
processObject();
return;
}
myObj = aSelectedObject;
processObject();
}
//=================================================================================
// function : SetEditCurrentArgument()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::SetEditCurrentArgument()
{
myGrp->LineEdit1->setFocus();
myEditCurrentArgument = myGrp->LineEdit1;
SelectionIntoArgument();
}
//=================================================================================
// function : LineEditReturnPressed()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::LineEditReturnPressed()
{
QLineEdit* send = (QLineEdit*)sender();
if (send == myGrp->LineEdit1) {
myEditCurrentArgument = myGrp->LineEdit1;
GEOMBase_Skeleton::LineEditReturnPressed();
}
}
//=================================================================================
// function : ActivateThisDialog()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::ActivateThisDialog()
{
GEOMBase_Skeleton::ActivateThisDialog();
connect(((SalomeApp_Application*)(SUIT_Session::session()->activeApplication()))->selectionMgr(),
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
globalSelection();
processPreview();
}
//=================================================================================
// function : processObject()
// purpose : Fill dialog fields in accordance with myObj
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::processObject()
{
if (myObj->_is_nil()) {
erasePreview();
}
else {
myGrp->LineEdit1->setText(GEOMBase::GetName(myObj));
processPreview();
}
}
//=================================================================================
// function : enterEvent()
// purpose :
//=================================================================================
void MeasureGUI_GetNonBlocksDlg::enterEvent (QEvent*)
{
if (!mainFrame()->GroupConstructors->isEnabled())
ActivateThisDialog();
}
//=================================================================================
// function : createOperation
// purpose :
//=================================================================================
GEOM::GEOM_IOperations_ptr MeasureGUI_GetNonBlocksDlg::createOperation()
{
return getGeomEngine()->GetIBlocksOperations(getStudyId());
}
//=================================================================================
// function : isValid
// purpose :
//=================================================================================
bool MeasureGUI_GetNonBlocksDlg::isValid (QString&)
{
return !myObj->_is_nil();
}
//=================================================================================
// function : execute
// purpose :
//=================================================================================
bool MeasureGUI_GetNonBlocksDlg::execute (ObjectList& objects)
{
GEOM::GEOM_IBlocksOperations_var anOper = GEOM::GEOM_IBlocksOperations::_narrow(getOperation());
GEOM::GEOM_Object_var aNonQuads;
GEOM::GEOM_Object_var anObj = anOper->GetNonBlocks(myObj, aNonQuads);
//mainFrame()->ResultName->setText(tr("GEOM_NONBLOCKS"));
if (!anObj->_is_nil())
objects.push_back(anObj._retn());
if (!aNonQuads->_is_nil())
objects.push_back(aNonQuads._retn());
return true;
}
//================================================================
// Function : getFather
// Purpose : Get father object for object to be added in study
// ( called with addInStudy method )
//================================================================
GEOM::GEOM_Object_ptr MeasureGUI_GetNonBlocksDlg::getFather (GEOM::GEOM_Object_ptr)
{
return myObj;
}

View File

@ -0,0 +1,69 @@
// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// 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 : MeasureGUI_GetNonBlocksDlg.h
#ifndef MEASUREGUI_GETNONBLOCKSDLG_H
#define MEASUREGUI_GETNONBLOCKSDLG_H
#include <GEOMBase_Skeleton.h>
class DlgRef_1Sel;
//=================================================================================
// class : MeasureGUI_GetNonBlocksDlg
// purpose :
//=================================================================================
class MeasureGUI_GetNonBlocksDlg : public GEOMBase_Skeleton
{
Q_OBJECT
public:
MeasureGUI_GetNonBlocksDlg (GeometryGUI*, QWidget*);
~MeasureGUI_GetNonBlocksDlg();
protected:
// redefined from GEOMBase_Helper
virtual GEOM::GEOM_IOperations_ptr createOperation();
virtual bool isValid (QString&);
virtual bool execute (ObjectList&);
virtual GEOM::GEOM_Object_ptr getFather (GEOM::GEOM_Object_ptr);
private slots:
void ClickOnOk();
bool ClickOnApply();
void ActivateThisDialog();
void LineEditReturnPressed();
void SelectionIntoArgument();
void SetEditCurrentArgument();
private:
void Init();
void enterEvent (QEvent*);
void processObject();
private:
GEOM::GEOM_Object_var myObj;
DlgRef_1Sel* myGrp;
};
#endif // MEASUREGUI_GETNONBLOCKSDLG_H