mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-15 12:20:37 +05:00
Implement Apply buttons functionality
This commit is contained in:
parent
942d70ff34
commit
8e43b2d3fa
@ -427,6 +427,10 @@ Please, select face, shell or solid and try again</translation>
|
|||||||
<source>GEOM_SELF_INTERSECTIONS_FOUND</source>
|
<source>GEOM_SELF_INTERSECTIONS_FOUND</source>
|
||||||
<translation>Some self-intersections detected</translation>
|
<translation>Some self-intersections detected</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<source>GEOM_SELF_INTERSECTION_NAME</source>
|
||||||
|
<translation>Self_intersection</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
|
<source>GEOM_CHECK_SELF_INTERSECTIONS_ERRORS</source>
|
||||||
<translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
|
<translation>Warning: there were errors during the operation, so the list may be incomplete.</translation>
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
// File : MeasureGUI_CheckSelfIntersectionsDlg.cxx
|
// File : MeasureGUI_CheckSelfIntersectionsDlg.cxx
|
||||||
|
|
||||||
#include "MeasureGUI_CheckSelfIntersectionsDlg.h"
|
#include "MeasureGUI_CheckSelfIntersectionsDlg.h"
|
||||||
|
#include "MeasureGUI.h"
|
||||||
#include "MeasureGUI_Widgets.h"
|
#include "MeasureGUI_Widgets.h"
|
||||||
|
|
||||||
#include <SUIT_OverrideCursor.h>
|
#include <SUIT_OverrideCursor.h>
|
||||||
@ -35,6 +36,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>
|
||||||
@ -112,11 +114,95 @@ MeasureGUI_CheckSelfIntersectionsDlg::~MeasureGUI_CheckSelfIntersectionsDlg()
|
|||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::Init()
|
void MeasureGUI_CheckSelfIntersectionsDlg::Init()
|
||||||
{
|
{
|
||||||
connect(myGrp->PushButton1, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
connect(myGeomGUI, SIGNAL(SignalDeactivateActiveDialog()),
|
||||||
connect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()), SLOT(onErrorsListSelectionChanged()));
|
this, SLOT(DeactivateActiveDialog()));
|
||||||
connect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()), SLOT(onSubShapesListSelectionChanged()));
|
connect(myGeomGUI, SIGNAL(SignalCloseAllDialogs()),
|
||||||
connect(myGeomGUI->getApp()->selectionMgr(), SIGNAL(currentSelectionChanged()),
|
this, SLOT(ClickOnCancel()));
|
||||||
this, SLOT(SelectionIntoArgument()));
|
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
||||||
|
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
||||||
|
connect(myGrp->PushButton1, SIGNAL(clicked()),
|
||||||
|
this, SLOT(SetEditCurrentArgument()));
|
||||||
|
connect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onInteListSelectionChanged()));
|
||||||
|
connect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onSubShapesListSelectionChanged()));
|
||||||
|
|
||||||
|
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 );
|
||||||
|
activateSelection();
|
||||||
|
SelectionIntoArgument();
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// 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 : SelectionIntoArgument
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::extractPrefix() const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -128,6 +214,15 @@ GEOM::GEOM_IOperations_ptr MeasureGUI_CheckSelfIntersectionsDlg::createOperation
|
|||||||
return getGeomEngine()->GetIMeasureOperations( getStudyId() );
|
return getGeomEngine()->GetIMeasureOperations( getStudyId() );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// function : isValid
|
||||||
|
// purpose :
|
||||||
|
//=================================================================================
|
||||||
|
bool MeasureGUI_CheckSelfIntersectionsDlg::isValid( QString& )
|
||||||
|
{
|
||||||
|
return !myObj->_is_nil();
|
||||||
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : SetEditCurrentArgument
|
// function : SetEditCurrentArgument
|
||||||
// purpose :
|
// purpose :
|
||||||
@ -166,6 +261,61 @@ void MeasureGUI_CheckSelfIntersectionsDlg::SelectionIntoArgument()
|
|||||||
myObj = aSelectedObject;
|
myObj = aSelectedObject;
|
||||||
myGrp->LineEdit1->setText(GEOMBase::GetName(myObj));
|
myGrp->LineEdit1->setText(GEOMBase::GetName(myObj));
|
||||||
processObject();
|
processObject();
|
||||||
|
DISPLAY_PREVIEW_MACRO;
|
||||||
|
}
|
||||||
|
|
||||||
|
//=================================================================================
|
||||||
|
// 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;
|
||||||
|
|
||||||
|
try {
|
||||||
|
HasSelfInte = !anOper->CheckSelfIntersections(myObj, myInters);
|
||||||
|
nbPairs = myInters->length()/2;
|
||||||
|
|
||||||
|
if (nbPairs*2 != myInters->length()) {
|
||||||
|
isOK = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (const SALOME::SALOME_Exception& e) {
|
||||||
|
SalomeApp_Tools::QtCatchCorbaException(e);
|
||||||
|
isOK = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!anOper->IsDone()) {
|
||||||
|
if (myInters->length() == 0) {
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
|
||||||
|
return isOK;
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
@ -174,75 +324,67 @@ void MeasureGUI_CheckSelfIntersectionsDlg::SelectionIntoArgument()
|
|||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
|
void MeasureGUI_CheckSelfIntersectionsDlg::processObject()
|
||||||
{
|
{
|
||||||
|
disconnect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()), this, 0 );
|
||||||
|
disconnect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()), this, 0 );
|
||||||
myGrp->ListBox1->clear();
|
myGrp->ListBox1->clear();
|
||||||
myGrp->ListBox2->clear();
|
myGrp->ListBox2->clear();
|
||||||
|
connect(myGrp->ListBox1, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onInteListSelectionChanged()));
|
||||||
|
connect(myGrp->ListBox2, SIGNAL(itemSelectionChanged()),
|
||||||
|
SLOT(onSubShapesListSelectionChanged()));
|
||||||
erasePreview();
|
erasePreview();
|
||||||
|
|
||||||
if (myObj->_is_nil())
|
bool hasSelfInte = false;
|
||||||
return;
|
QString anErrMsg("");
|
||||||
|
|
||||||
QString aMsg ("");
|
if (!findSelfIntersections(hasSelfInte, anErrMsg)) {
|
||||||
GEOM::GEOM_IMeasureOperations_var anOper = GEOM::GEOM_IMeasureOperations::_narrow(getOperation());
|
myGrp->TextView1->setText(anErrMsg);
|
||||||
bool isGood = false, isFailed = false;
|
|
||||||
int nbPairs = 0;
|
|
||||||
try {
|
|
||||||
isGood = anOper->CheckSelfIntersections(myObj, myInters);
|
|
||||||
nbPairs = myInters->length()/2;
|
|
||||||
if (nbPairs*2 != myInters->length()) {
|
|
||||||
isFailed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (const SALOME::SALOME_Exception& e) {
|
|
||||||
SalomeApp_Tools::QtCatchCorbaException(e);
|
|
||||||
isFailed = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Status
|
// Status and apply buttons
|
||||||
if (isGood) {
|
QString aMsg("");
|
||||||
aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
|
|
||||||
}
|
if (hasSelfInte) {
|
||||||
else {
|
|
||||||
aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
|
aMsg += tr("GEOM_SELF_INTERSECTIONS_FOUND");
|
||||||
|
buttonOk()->setEnabled(true);
|
||||||
|
buttonApply()->setEnabled(true);
|
||||||
|
} else {
|
||||||
|
aMsg += tr("GEOM_NO_SELF_INTERSECTIONS");
|
||||||
|
buttonOk()->setEnabled(false);
|
||||||
|
buttonApply()->setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!anOper->IsDone()) {
|
if (!anErrMsg.isEmpty()) {
|
||||||
aMsg += "\n\n";
|
aMsg += "\n\n";
|
||||||
aMsg += tr("GEOM_CHECK_SELF_INTERSECTIONS_ERRORS");
|
aMsg += anErrMsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
myGrp->TextView1->setText(aMsg);
|
myGrp->TextView1->setText(aMsg);
|
||||||
|
|
||||||
// Pairs
|
// Pairs
|
||||||
QStringList aErrList;
|
QStringList anInteList;
|
||||||
QString aErrStr ("");
|
QString anInteStr ("");
|
||||||
|
int nbPairs = myInters->length()/2;
|
||||||
|
|
||||||
for (int i = 1; i <= nbPairs; i++) {
|
for (int i = 1; i <= nbPairs; i++) {
|
||||||
aErrStr = "Intersection # ";
|
anInteStr = "Intersection # ";
|
||||||
aErrStr += QString::number(i);
|
anInteStr += QString::number(i);
|
||||||
aErrList.append(aErrStr);
|
anInteList.append(anInteStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
myGrp->ListBox1->addItems(aErrList);
|
myGrp->ListBox1->addItems(anInteList);
|
||||||
}
|
}
|
||||||
|
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
// function : onErrorsListSelectionChanged
|
// function : onInteListSelectionChanged
|
||||||
// purpose :
|
// purpose :
|
||||||
//=================================================================================
|
//=================================================================================
|
||||||
void MeasureGUI_CheckSelfIntersectionsDlg::onErrorsListSelectionChanged()
|
void MeasureGUI_CheckSelfIntersectionsDlg::onInteListSelectionChanged()
|
||||||
{
|
{
|
||||||
erasePreview();
|
erasePreview();
|
||||||
int aCurItem = myGrp->ListBox1->currentRow();
|
int aCurItem = myGrp->ListBox1->currentRow();
|
||||||
|
int aNbItems = myGrp->ListBox1->count();
|
||||||
if (aCurItem < 0)
|
if (aCurItem < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -312,3 +454,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 = myGrp->ListBox1->selectedItems().size();
|
||||||
|
const bool isPublishAllInte = (aNbInteSelected < 1);
|
||||||
|
const bool isPublishAllShapes =
|
||||||
|
(aNbInteSelected != 1 || myGrp->ListBox2->selectedItems().empty());
|
||||||
|
int i;
|
||||||
|
const int n = myGrp->ListBox1->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 (myGrp->ListBox1->item(i)->isSelected()) {
|
||||||
|
if (isPublishAllShapes) {
|
||||||
|
// Collect the both of two indices.
|
||||||
|
aMapIndex.Add(myInters[i*2]);
|
||||||
|
aMapIndex.Add(myInters[i*2 + 1]);
|
||||||
|
} else if (myGrp->ListBox2->count() == 2) {
|
||||||
|
// Collect only selected items.
|
||||||
|
if (myGrp->ListBox2->item(0)->isSelected()) {
|
||||||
|
aMapIndex.Add(myInters[i*2]);
|
||||||
|
}
|
||||||
|
if (myGrp->ListBox2->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;
|
||||||
|
}
|
||||||
|
@ -47,25 +47,39 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
// redefined from GEOMBase_Helper
|
// redefined from GEOMBase_Helper
|
||||||
virtual GEOM::GEOM_IOperations_ptr createOperation();
|
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);
|
||||||
|
|
||||||
void processObject();
|
void processObject();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
void onErrorsListSelectionChanged();
|
void onInteListSelectionChanged();
|
||||||
void onSubShapesListSelectionChanged();
|
void onSubShapesListSelectionChanged();
|
||||||
|
void ClickOnOk();
|
||||||
|
bool ClickOnApply();
|
||||||
|
void ActivateThisDialog();
|
||||||
|
void DeactivateActiveDialog();
|
||||||
void SelectionIntoArgument();
|
void SelectionIntoArgument();
|
||||||
void SetEditCurrentArgument();
|
void SetEditCurrentArgument();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void Init();
|
void Init();
|
||||||
|
void activateSelection();
|
||||||
|
void enterEvent(QEvent *);
|
||||||
|
bool findSelfIntersections
|
||||||
|
(bool &HasSelfInte,
|
||||||
|
QString &theErrMsg);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
MeasureGUI_1Sel1TextView2ListBox* myGrp;
|
MeasureGUI_1Sel1TextView2ListBox* myGrp;
|
||||||
GEOM::GEOM_Object_var myObj;
|
GEOM::GEOM_Object_var myObj;
|
||||||
GEOM::ListOfLong_var myInters;
|
GEOM::ListOfLong_var myInters;
|
||||||
|
GEOM::GEOM_IShapesOperations_var myShapesOper;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user