* - The glue between two quadrangle faces should be applied.
* \note Single block is also accepted as a valid compound of blocks.
* \param theCompound The compound to check.
+ * \param theToleranceC1 the tolerance to check if two neighbor edges are
+ * collinear in the common vertex with this tolerance. Negative
+ * value means that C1 criterion is not used (old implementation).
* \param theErrors Structure, containing discovered errors and incriminated sub-shapes.
* \return TRUE, if the given shape is a compound of blocks.
*/
boolean CheckCompoundOfBlocks (in GEOM_Object theCompound,
+ in double theToleranceC1,
out BCErrors theErrors);
/*!
// Last verification: result should be a block
std::list<GEOMImpl_IBlocksOperations::BCError> errList;
- if (!myBlocksOperations->CheckCompoundOfBlocks(Te3,errList)) {
+ if (!myBlocksOperations->CheckCompoundOfBlocks(Te3, -1, errList)) {
SetErrorCode("TShape is not a compound of block");
return false;
}
#include <BRep_Tool.hxx>
+#include <Geom_Curve.hxx>
+
+#include <gp_Pnt.hxx>
+#include <gp_Vec.hxx>
+
#include <TopExp.hxx>
#include <TopExp_Explorer.hxx>
#include <TopoDS_Face.hxx>
#include <TopoDS_Solid.hxx>
#include <TopoDS_Shape.hxx>
+#include <TopoDS_Vertex.hxx>
#include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
#include <TopTools_MapOfShape.hxx>
#include <TopTools_ListOfShape.hxx>
#include <TopTools_ListIteratorOfListOfShape.hxx>
BlockFix_CheckTool::BlockFix_CheckTool( )
{
myHasCheck = Standard_False;
+ myAngTolerance = -1.;
myPossibleBlocks.Clear();
}
myPossibleBlocks.Clear();
}
+//=======================================================================
+//function : SetAngTolerance
+//purpose :
+//=======================================================================
+void BlockFix_CheckTool::SetAngTolerance(const Standard_Real theTolerance)
+{
+ myHasCheck = Standard_False;
+ myAngTolerance = theTolerance;
+ myPossibleBlocks.Clear();
+}
+
//=======================================================================
//function : Perform
//purpose :
if (nbe < 12)
IsBlock = Standard_False;
if (nbe > 12) {
- IsBlock = Standard_False;
// check edges unification
// creating map of edge faces
TopTools_IndexedDataMapOfShapeListOfShape aMapEdgeFaces;
Standard_Integer i = 1;
for (; i <= aMapFacesEdges.Extent(); i++) {
const TopTools_ListOfShape& ListEdges = aMapFacesEdges.FindFromIndex(i);
- if (ListEdges.Extent() > 1) break;
+ if (ListEdges.Extent() > 1) {
+ if (myAngTolerance < 0.) {
+ break;
+ }
+
+ // Check if edges have C1 continuity.
+ if (!isC1(ListEdges)) {
+ break;
+ }
+ }
}
if (i <= aMapFacesEdges.Extent()) {
+ IsBlock = Standard_False;
MayBeUE = Standard_True;
break;
}
S<<" number of impossible blocks = "<<nbtmp<<endl;
}
}
+
+//=======================================================================
+//function : isC1
+//purpose :
+//=======================================================================
+Standard_Boolean BlockFix_CheckTool::isC1
+ (const TopTools_ListOfShape &theEdges) const
+{
+ // Fill the map vertex - list of ancestor edges
+ TopTools_IndexedDataMapOfShapeListOfShape aMapVE;
+ TopTools_ListIteratorOfListOfShape anIter(theEdges);
+ TopTools_MapOfShape aMapFence;
+ Standard_Integer i;
+ Standard_Integer aNbVtx;
+
+ for (; anIter.More(); anIter.Next()) {
+ TopTools_IndexedMapOfShape aMapVtx;
+ const TopoDS_Shape &anEdge = anIter.Value();
+
+ if (aMapFence.Add(anEdge)) {
+ TopExp::MapShapes(anEdge, TopAbs_VERTEX, aMapVtx);
+ aNbVtx = aMapVtx.Extent();
+
+ for (i = 1; i <= aNbVtx; ++i) {
+ const TopoDS_Shape &aVtx = aMapVtx.FindKey(i);
+
+ if (!aMapVE.Contains(aVtx)) {
+ aMapVE.Add(aVtx, TopTools_ListOfShape());
+ }
+
+ aMapVE.ChangeFromKey(aVtx).Append(anEdge);
+ }
+ }
+ }
+
+ // Check C1 continuity.
+ Standard_Integer aNbEnds = 0;
+
+ for (i = 1, aNbVtx = aMapVE.Extent(); i <= aNbVtx; ++i) {
+ const TopTools_ListOfShape &anEdges = aMapVE.FindFromIndex(i);
+ Standard_Integer aNbEdges = anEdges.Extent();
+
+ if (aNbEdges == 1) {
+ ++aNbEnds;
+ } else if (aNbEdges == 2) {
+ TopoDS_Vertex aCommonVtx = TopoDS::Vertex(aMapVE.FindKey(i));
+ TopoDS_Edge anEdge1 = TopoDS::Edge(anEdges.First());
+ TopoDS_Edge anEdge2 = TopoDS::Edge(anEdges.Last());
+ Standard_Real aParam1 = BRep_Tool::Parameter(aCommonVtx, anEdge1);
+ Standard_Real aParam2 = BRep_Tool::Parameter(aCommonVtx, anEdge2);
+ Standard_Real aPar[2];
+ Handle(Geom_Curve) aCurve1 =
+ BRep_Tool::Curve(anEdge1, aPar[0], aPar[1]);
+ Handle(Geom_Curve) aCurve2 =
+ BRep_Tool::Curve(anEdge2, aPar[0], aPar[1]);
+ gp_Pnt aPnt;
+ gp_Vec aVec1;
+ gp_Vec aVec2;
+
+ aCurve1->D1(aParam1, aPnt, aVec1);
+ aCurve2->D1(aParam2, aPnt, aVec2);
+
+ if (anEdge1.Orientation() != anEdge2.Orientation()) {
+ // Orientations are different. One vector should be reversed.
+ aVec1.Reverse();
+ }
+
+ const Standard_Real anAngle = aVec1.Angle(aVec2);
+
+ if (anAngle > myAngTolerance) {
+ // There is no C1 continuity.
+ break;
+ }
+ } else {
+ // Non-manifold case.
+ break;
+ }
+ }
+
+ return (i > aNbVtx && aNbEnds == 2);
+}
#include <Standard_OStream.hxx>
class TopoDS_Shape;
+class TopTools_ListOfShape;
#include <Standard.hxx>
#include <Standard_Macro.hxx>
public:
Standard_EXPORT BlockFix_CheckTool();
- Standard_EXPORT void SetShape(const TopoDS_Shape& aShape) ;
+ Standard_EXPORT void SetShape(const TopoDS_Shape& aShape);
+ Standard_EXPORT void SetAngTolerance(const Standard_Real theTolerance);
Standard_EXPORT void Perform() ;
Standard_EXPORT Standard_Integer NbPossibleBlocks() const;
Standard_EXPORT TopoDS_Shape PossibleBlock(const Standard_Integer num) const;
Standard_EXPORT void DumpCheckResult(Standard_OStream& S) const;
private:
- TopoDS_Shape myShape;
+
+ Standard_Boolean isC1(const TopTools_ListOfShape &theEdges) const;
+
+private:
+ TopoDS_Shape myShape;
+ Standard_Real myAngTolerance;
Standard_Boolean myHasCheck;
Standard_Integer myNbSolids;
Standard_Integer myNbBlocks;
// Check, if there are seam or degenerated edges
BlockFix_CheckTool aTool;
aTool.SetShape(theShape);
+ aTool.SetAngTolerance(theToleranceC1);
aTool.Perform();
if (aTool.NbPossibleBlocks() > 0) {
EXT.Append(theShape);
//=============================================================================
Standard_Boolean GEOMImpl_IBlocksOperations::CheckCompoundOfBlocks
(Handle(GEOM_Object) theCompound,
+ const Standard_Real theToleranceC1,
std::list<BCError>& theErrors)
{
SetErrorCode(KO);
TopTools_ListOfShape EXT; // Hexahedral solids, having degenerated and/or seam edges
TopTools_ListOfShape BLO; // All blocks from the given compound
TopTools_ListOfShape NOQ; // All non-quadrangular faces
- AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT, NOQ, -1.);
+ AddBlocksFrom(aBlockOrComp, BLO, NOT, EXT, NOQ, theToleranceC1);
// Report non-blocks
if (NOT.Extent() > 0) {
};
Standard_EXPORT Standard_Boolean CheckCompoundOfBlocks (Handle(GEOM_Object) theCompound,
+ const Standard_Real theToleranceC1,
std::list<BCError>& theErrors);
Standard_EXPORT TCollection_AsciiString PrintBCErrors (Handle(GEOM_Object) theCompound,
//=============================================================================
CORBA::Boolean GEOM_IBlocksOperations_i::CheckCompoundOfBlocks
(GEOM::GEOM_Object_ptr theCompound,
+ const CORBA::Double theToleranceC1,
GEOM::GEOM_IBlocksOperations::BCErrors_out theErrors)
{
CORBA::Boolean isComp = false;
//Check
std::list<GEOMImpl_IBlocksOperations::BCError> errList;
- isComp = GetOperations()->CheckCompoundOfBlocks(aCompound, errList);
+ isComp = GetOperations()->CheckCompoundOfBlocks
+ (aCompound, theToleranceC1, errList);
if (!GetOperations()->IsDone())
return isComp;
CORBA::Long& theNbBlocks);
CORBA::Boolean CheckCompoundOfBlocks (GEOM::GEOM_Object_ptr theCompound,
+ const CORBA::Double theToleranceC1,
GEOM::GEOM_IBlocksOperations::BCErrors_out theErrors);
char* PrintBCErrors (GEOM::GEOM_Object_ptr theCompound,
beginService( " GEOM_Superv_i::CheckCompoundOfBlocks" );
MESSAGE("GEOM_Superv_i::CheckCompoundOfBlocks");
getBlocksOp();
- CORBA::Boolean aRes = myBlocksOp->CheckCompoundOfBlocks(theCompound, theErrors);
+ CORBA::Boolean aRes = myBlocksOp->CheckCompoundOfBlocks(theCompound, -1., theErrors);
endService( " GEOM_Superv_i::CheckCompoundOfBlocks" );
return aRes;
}
## Check, if the compound of blocks is given.
# To be considered as a compound of blocks, the
# given shape must satisfy the following conditions:
- # - Each element of the compound should be a Block (6 faces and 12 edges).
+ # - Each element of the compound should be a Block (6 faces).
+ # - Each face should be a quadrangle, i.e. it should have only 1 wire
+ # with 4 edges. If <VAR>theIsUseC1</VAR> is set to True and
+ # there are more than 4 edges in the only wire of a face,
+ # this face is considered to be quadrangle if it has 4 bounds
+ # (1 or more edge) of C1 continuity.
# - A connection between two Blocks should be an entire quadrangle face or an entire edge.
# - The compound should be connexe.
# - The glue between two quadrangle faces should be applied.
# @param theCompound The compound to check.
+ # @param theIsUseC1 Flag to check if there are 4 bounds on a face
+ # taking into account C1 continuity.
+ # @param theAngTolerance the angular tolerance to check if two neighbor
+ # edges are codirectional in the common vertex with this
+ # tolerance. This parameter is used only if
+ # <VAR>theIsUseC1</VAR> is set to True.
# @return TRUE, if the given shape is a compound of blocks.
# If theCompound is not valid, prints all discovered errors.
#
# @ref tui_measurement_tools_page "Example 1"
# \n @ref swig_CheckCompoundOfBlocks "Example 2"
@ManageTransactions("BlocksOp")
- def CheckCompoundOfBlocks(self,theCompound):
+ def CheckCompoundOfBlocks(self,theCompound, theIsUseC1 = False,
+ theAngTolerance = 1.e-12):
"""
Check, if the compound of blocks is given.
To be considered as a compound of blocks, the
given shape must satisfy the following conditions:
- - Each element of the compound should be a Block (6 faces and 12 edges).
+ - Each element of the compound should be a Block (6 faces).
+ - Each face should be a quadrangle, i.e. it should have only 1 wire
+ with 4 edges. If theIsUseC1 is set to True and
+ there are more than 4 edges in the only wire of a face,
+ this face is considered to be quadrangle if it has 4 bounds
+ (1 or more edge) of C1 continuity.
- A connection between two Blocks should be an entire quadrangle face or an entire edge.
- The compound should be connexe.
- The glue between two quadrangle faces should be applied.
Parameters:
theCompound The compound to check.
+ theIsUseC1 Flag to check if there are 4 bounds on a face
+ taking into account C1 continuity.
+ theAngTolerance the angular tolerance to check if two neighbor
+ edges are codirectional in the common vertex with this
+ tolerance. This parameter is used only if
+ theIsUseC1 is set to True.
Returns:
TRUE, if the given shape is a compound of blocks.
If theCompound is not valid, prints all discovered errors.
"""
# Example: see GEOM_Spanner.py
- (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound)
+ aTolerance = -1.0
+ if theIsUseC1:
+ aTolerance = theAngTolerance
+ (IsValid, BCErrors) = self.BlocksOp.CheckCompoundOfBlocks(theCompound, aTolerance)
RaiseIfFailed("CheckCompoundOfBlocks", self.BlocksOp)
if IsValid == 0:
Descr = self.BlocksOp.PrintBCErrors(theCompound, BCErrors)
//
#include "MeasureGUI.h"
#include "MeasureGUI_CheckCompoundOfBlocksDlg.h"
-#include "MeasureGUI_Widgets.h"
#include <SUIT_Session.h>
#include <SUIT_ResourceMgr.h>
#include <GEOMBase.h>
#include <GEOMImpl_Types.hxx>
+#include <QListWidget>
+
#define TEXTEDIT_FONT_FAMILY "Courier"
#define TEXTEDIT_FONT_SIZE 11
// true to construct a modal dialog.
//=================================================================================
MeasureGUI_CheckCompoundOfBlocksDlg::MeasureGUI_CheckCompoundOfBlocksDlg( GeometryGUI* GUI, QWidget* parent )
- : GEOMBase_Skeleton( GUI, parent, false )
+ : GEOMBase_Skeleton(GUI, parent, false),
+ myObjectName (0),
+ mySelButton (0),
+ myUseC1Check (0),
+ myTolLbl (0),
+ mySpinTol (0),
+ myTextView (0),
+ myListBox1 (0),
+ myListBox2 (0)
{
SUIT_ResourceMgr* aResMgr = SUIT_Session::session()->resourceMgr();
QPixmap image0( aResMgr->loadPixmap( "GEOM", tr( "ICON_DLG_CHECK_COMPOUND_OF_BLOCKS" ) ) );
mainFrame()->RadioButton3->setAttribute( Qt::WA_DeleteOnClose );
mainFrame()->RadioButton3->close();
- myGrp = new MeasureGUI_1Sel1TextView2ListBox( centralWidget() );
- myGrp->GroupBox1->setTitle( tr( "GEOM_CHECK_INFOS" ) );
- myGrp->TextLabel1->setText( tr( "GEOM_OBJECT" ) );
-
- myGrp->TextView1->setReadOnly( true );
- QFont aFont( TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE );
- aFont.setStyleHint( QFont::TypeWriter, QFont::PreferAntialias );
- myGrp->TextView1->setFont( aFont );
-
- myGrp->PushButton1->setIcon( image1 );
- myGrp->LineEdit1->setReadOnly( true );
-
- myGrp->TextLabel2->setText( tr( "GEOM_CHECK_BLOCKS_COMPOUND_ERRORS" ) );
- myGrp->TextLabel3->setText( tr( "GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES" ) );
-
- myGrp->ListBox2->setSelectionMode( QAbstractItemView::ExtendedSelection );
+ QGroupBox *aGrpParams =
+ new QGroupBox(tr("GEOM_CHECK_INFOS"), centralWidget());
+ QGridLayout *aParamsLayout = new QGridLayout(aGrpParams);
+ QLabel *anObjLbl = new QLabel(tr("GEOM_OBJECT"), aGrpParams);
+ QLabel *anErrorsLbl =
+ new QLabel(tr("GEOM_CHECK_BLOCKS_COMPOUND_ERRORS"), aGrpParams);
+ QLabel *aNonBlocksLbl =
+ new QLabel(tr("GEOM_CHECK_BLOCKS_COMPOUND_SUBSHAPES"), aGrpParams);
+
+ myObjectName = new QLineEdit(aGrpParams);
+ mySelButton = new QPushButton(aGrpParams);
+ myUseC1Check = new QCheckBox(tr("GEOM_USE_C1_CRITERION"), aGrpParams);
+ myTolLbl = new QLabel(tr("GEOM_ANGULAR_TOLERANCE"), aGrpParams);
+ mySpinTol = new SalomeApp_DoubleSpinBox(aGrpParams);
+ myTextView = new QTextBrowser(aGrpParams);
+ myListBox1 = new QListWidget(aGrpParams);
+ myListBox2 = new QListWidget(aGrpParams);
+
+ myObjectName->setReadOnly(true);
+ mySelButton->setIcon(image1);
+ mySelButton->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ myUseC1Check->setText(tr("GEOM_USE_C1_CRITERION"));
+ myUseC1Check->setChecked(true);
+ myTextView->setReadOnly(true);
+ myListBox2->setSelectionMode(QAbstractItemView::ExtendedSelection);
+
+ // Set text view font.
+ QFont aFont(TEXTEDIT_FONT_FAMILY, TEXTEDIT_FONT_SIZE);
+
+ aFont.setStyleHint(QFont::TypeWriter, QFont::PreferAntialias);
+ myTextView->setFont(aFont);
+
+ aParamsLayout->setMargin(9);
+ aParamsLayout->setSpacing(6);
+ aParamsLayout->addWidget(anObjLbl, 0, 0);
+ aParamsLayout->addWidget(mySelButton, 0, 1);
+ aParamsLayout->addWidget(myObjectName, 0, 2);
+ aParamsLayout->addWidget(myUseC1Check, 1, 0, 1, 3);
+ aParamsLayout->addWidget(myTolLbl, 2, 0);
+ aParamsLayout->addWidget(mySpinTol, 2, 1, 1, 2);
+ aParamsLayout->addWidget(myTextView, 3, 0, 1, 3);
+ aParamsLayout->addWidget(anErrorsLbl, 4, 0);
+ aParamsLayout->addWidget(myListBox1, 5, 0, 1, 2);
+ aParamsLayout->addWidget(aNonBlocksLbl, 4, 2);
+ aParamsLayout->addWidget(myListBox2, 5, 2);
QVBoxLayout* layout = new QVBoxLayout( centralWidget() );
layout->setMargin( 0 ); layout->setSpacing( 6 );
- layout->addWidget( myGrp );
-
- connect( myGrp->ListBox1, SIGNAL( itemSelectionChanged() ), SLOT( onErrorsListSelectionChanged() ) );
- connect( myGrp->ListBox2, SIGNAL( itemSelectionChanged() ), SLOT( onSubShapesListSelectionChanged() ) );
+ layout->addWidget( aGrpParams );
/***************************************************************/
//=================================================================================
void MeasureGUI_CheckCompoundOfBlocksDlg::Init()
{
- myEditCurrentArgument = myGrp->LineEdit1;
+ /* init variables */
+ double SpecificStep = 0.0001;
+ double aDefaultTol = Precision::Angular();
+
+ initSpinBox(mySpinTol, aDefaultTol, MAX_NUMBER, SpecificStep, "ang_tol_precision");
+ mySpinTol->setValue(aDefaultTol);
+ myEditCurrentArgument = myObjectName;
// 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(myObjectName, SIGNAL(returnPressed()), this, SLOT(LineEditReturnPressed()));
+ connect(mySelButton, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
+ connect(myListBox1, SIGNAL(itemSelectionChanged()), this, SLOT(onErrorsListSelectionChanged()));
+ connect(myListBox2, SIGNAL(itemSelectionChanged()), this, SLOT(onSubShapesListSelectionChanged()));
+ connect(myUseC1Check, SIGNAL(clicked()), this, SLOT(SetUseC1Tolerance()));
+ connect(mySpinTol, SIGNAL(valueChanged(double)), this, SLOT(processObject()));
connect( myGeomGUI->getApp()->selectionMgr(), SIGNAL( currentSelectionChanged() ),
this, SLOT( SelectionIntoArgument() ) );
aSelMgr->selectedObjects(aSelList);
if (aSelList.Extent() != 1) {
- myGrp->LineEdit1->setText( "" );
+ myObjectName->setText( "" );
processObject();
return;
}
GEOMBase::ConvertIOinGEOMObject( aSelList.First() );
if ( aSelectedObject->_is_nil() ) {
- myGrp->LineEdit1->setText( "" );
+ myObjectName->setText( "" );
processObject();
return;
}
myObj = aSelectedObject;
- myGrp->LineEdit1->setText( GEOMBase::GetName( myObj ) );
+ myObjectName->setText( GEOMBase::GetName( myObj ) );
processObject();
DISPLAY_PREVIEW_MACRO;
}
//=================================================================================
void MeasureGUI_CheckCompoundOfBlocksDlg::SetEditCurrentArgument()
{
- myGrp->LineEdit1->setFocus();
- myEditCurrentArgument = myGrp->LineEdit1;
+ myObjectName->setFocus();
+ myEditCurrentArgument = myObjectName;
SelectionIntoArgument();
}
+//=================================================================================
+// function : SetUseC1Tolerance()
+// purpose :
+//=================================================================================
+void MeasureGUI_CheckCompoundOfBlocksDlg::SetUseC1Tolerance()
+{
+ myTolLbl->setEnabled(myUseC1Check->isChecked());
+ mySpinTol->setEnabled(myUseC1Check->isChecked());
+ processObject();
+}
+
//=================================================================================
// function : LineEditReturnPressed()
// purpose :
void MeasureGUI_CheckCompoundOfBlocksDlg::LineEditReturnPressed()
{
QLineEdit* send = (QLineEdit*)sender();
- if ( send == myGrp->LineEdit1 ) {
- myEditCurrentArgument = myGrp->LineEdit1;
+ if ( send == myObjectName ) {
+ myEditCurrentArgument = myObjectName;
GEOMBase_Skeleton::LineEditReturnPressed();
}
}
GEOM::GEOM_IBlocksOperations_var anOper = GEOM::GEOM_IBlocksOperations::_narrow( getOperation() );
try {
GEOM::GEOM_IBlocksOperations::BCErrors_var aErrs;
- theIsCompoundOfBlocks = anOper->CheckCompoundOfBlocks( myObj, aErrs );
+ double aC1Tol = -1.;
+
+ if (myUseC1Check->isChecked()) {
+ aC1Tol = mySpinTol->value();
+ }
+
+ theIsCompoundOfBlocks = anOper->CheckCompoundOfBlocks( myObj, aC1Tol, aErrs );
if (anOper->IsDone() && aErrs->length() > 0)
//if (anOper->IsDone() && !aErrs._is_nil())
theErrors = aErrs;
GEOM::GEOM_IBlocksOperations::BCErrors aErrs;
if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) {
aMsg += tr( "GEOM_CHECK_BLOCKS_COMPOUND_FAILED" );
- myGrp->TextView1->setText( aMsg );
- myGrp->ListBox1->clear();
- myGrp->ListBox2->clear();
+ myTextView->setText( aMsg );
+ myListBox1->clear();
+ myListBox2->clear();
erasePreview();
return;
}
buttonOk()->setEnabled( true );
buttonApply()->setEnabled( true );
}
- myGrp->TextView1->setText( aMsg );
+ myTextView->setText( aMsg );
QStringList aErrList;
QString aErrStr( "" );
aErrList.append( aErrStr );
}
- myGrp->ListBox1->clear();
- myGrp->ListBox2->clear();
- myGrp->ListBox1->addItems( aErrList );
+ myListBox1->clear();
+ myListBox2->clear();
+ myListBox1->addItems( aErrList );
}
//=================================================================================
void MeasureGUI_CheckCompoundOfBlocksDlg::onErrorsListSelectionChanged()
{
erasePreview();
- int aCurItem = myGrp->ListBox1->currentRow();
+ int aCurItem = myListBox1->currentRow();
if ( aCurItem < 0 )
return;
bool isCompoundOfBlocks;
GEOM::GEOM_IBlocksOperations::BCErrors aErrs;
if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) {
- myGrp->TextView1->setText( "" );
- myGrp->ListBox1->clear();
- myGrp->ListBox2->clear();
+ myTextView->setText( "" );
+ myListBox1->clear();
+ myListBox2->clear();
return;
}
- myGrp->ListBox2->clear();
+ myListBox2->clear();
if (aCurItem < aErrs.length()) {
GEOM::GEOM_IBlocksOperations::BCError aErr = aErrs[aCurItem];
aSubShapeList.append( QString( "%1_%2" ).arg( aType ).arg( aObjLst[i] ) );
}
}
- myGrp->ListBox2->addItems( aSubShapeList );
+ myListBox2->addItems( aSubShapeList );
}
}
void MeasureGUI_CheckCompoundOfBlocksDlg::onSubShapesListSelectionChanged()
{
erasePreview();
- int aErrCurItem = myGrp->ListBox1->currentRow();
+ int aErrCurItem = myListBox1->currentRow();
if ( aErrCurItem < 0 )
return;
QList<int> aIds;
- for ( int i = 0, n = myGrp->ListBox2->count(); i < n; i++ ) {
- if ( myGrp->ListBox2->item( i )->isSelected() )
+ for ( int i = 0, n = myListBox2->count(); i < n; i++ ) {
+ if ( myListBox2->item( i )->isSelected() )
aIds.append( i );
}
if ( aIds.count() < 1 )
bool isCompoundOfBlocks;
GEOM::GEOM_IBlocksOperations::BCErrors aErrs;
if ( !getBCErrors( isCompoundOfBlocks, aErrs ) ) {
- myGrp->TextView1->setText( "" );
- myGrp->ListBox1->clear();
- myGrp->ListBox2->clear();
+ myTextView->setText( "" );
+ myListBox1->clear();
+ myListBox2->clear();
return;
}
}
}
+//=================================================================================
+// function : onDisplayPreview
+// purpose :
+//=================================================================================
+void MeasureGUI_CheckCompoundOfBlocksDlg::onDisplayPreview()
+{
+ DISPLAY_PREVIEW_MACRO;
+}
+
//=================================================================================
// function : activateSelection
// purpose : activate selection of faces, shells, and solids
// function : isValid
// purpose :
//=================================================================================
-bool MeasureGUI_CheckCompoundOfBlocksDlg::isValid( QString& )
+bool MeasureGUI_CheckCompoundOfBlocksDlg::isValid( QString &msg)
{
- return !myObj->_is_nil();
+ return !myObj->_is_nil() && mySpinTol->isValid(msg, !IsPreview());
}
//=================================================================================
#include <GEOMBase_Skeleton.h>
-class MeasureGUI_1Sel1TextView2ListBox;
+class QCheckBox;
+class QLabel;
+class QLineEdit;
+class QListWidget;
+class QPushButton;
+class QTextBrowser;
+class SalomeApp_DoubleSpinBox;
//=================================================================================
// class : MeasureGUI_CheckCompoundOfBlocksDlg
protected:
// redefined from GEOMBase_Helper and GEOMBase_Skeleton
virtual GEOM::GEOM_IOperations_ptr createOperation();
- virtual bool isValid( QString& );
+ virtual bool isValid( QString &msg );
virtual bool execute( ObjectList& );
virtual void processObject();
void onErrorsListSelectionChanged();
void onSubShapesListSelectionChanged();
+ void SetUseC1Tolerance();
+ void onDisplayPreview();
private:
void Init();
private:
GEOM::GEOM_Object_var myObj;
- MeasureGUI_1Sel1TextView2ListBox* myGrp;
+ QLineEdit *myObjectName;
+ QPushButton *mySelButton;
+ QCheckBox *myUseC1Check;
+ QLabel *myTolLbl;
+ SalomeApp_DoubleSpinBox *mySpinTol;
+ QTextBrowser *myTextView;
+ QListWidget *myListBox1;
+ QListWidget *myListBox2;
};
#endif // MEASUREGUI_CHECKCOMPOUNDOFBLOCKSDLG_H