mirror of
https://git.salome-platform.org/gitpub/modules/geom.git
synced 2025-01-16 02:00:37 +05:00
457 lines
14 KiB
C++
457 lines
14 KiB
C++
|
// Copyright (C) 2013-2014 CEA/DEN, EDF R&D, OPEN CASCADE
|
|||
|
//
|
|||
|
// 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, or (at your option) any later version.
|
|||
|
//
|
|||
|
// 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
|
|||
|
//
|
|||
|
|
|||
|
// internal includes
|
|||
|
#include "XAOPlugin_ExportDlg.h"
|
|||
|
#include "XAOPlugin_IOperations_i.hh"
|
|||
|
|
|||
|
// GUI includes
|
|||
|
#include <SUIT_Session.h>
|
|||
|
#include <SUIT_ResourceMgr.h>
|
|||
|
#include <SUIT_OverrideCursor.h>
|
|||
|
#include <SUIT_FileDlg.h>
|
|||
|
|
|||
|
#include <SalomeApp_Application.h>
|
|||
|
#include <SalomeApp_Study.h>
|
|||
|
#include <SalomeApp_Tools.h>
|
|||
|
#include <LightApp_SelectionMgr.h>
|
|||
|
|
|||
|
// GEOM includes
|
|||
|
#include "GeometryGUI.h"
|
|||
|
#include "GEOMBase.h"
|
|||
|
#include "GEOMImpl_Types.hxx"
|
|||
|
|
|||
|
// OCCT Includes
|
|||
|
#include <TopoDS_Shape.hxx>
|
|||
|
#include <TopoDS.hxx>
|
|||
|
#include <TopExp.hxx>
|
|||
|
#include <TColStd_IndexedMapOfInteger.hxx>
|
|||
|
#include <TopTools_IndexedMapOfShape.hxx>
|
|||
|
|
|||
|
// QT includes
|
|||
|
#include <QLabel>
|
|||
|
#include <QLineEdit>
|
|||
|
#include <QButtonGroup>
|
|||
|
#include <QListWidget>
|
|||
|
#include <QFileDialog>
|
|||
|
#include <QGroupBox>
|
|||
|
#include <QRadioButton>
|
|||
|
#include <QGridLayout>
|
|||
|
#include <QPushButton>
|
|||
|
#include <QMap>
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// Constructor
|
|||
|
//=================================================================================
|
|||
|
XAOPlugin_ExportDlg::XAOPlugin_ExportDlg(GeometryGUI* geometryGUI, QWidget* parent)
|
|||
|
:
|
|||
|
GEOMBase_Skeleton(geometryGUI, parent, false)
|
|||
|
{
|
|||
|
m_mainObj = GEOM::GEOM_Object::_nil();
|
|||
|
|
|||
|
SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
|
|||
|
QPixmap imageOp(resMgr->loadPixmap("GEOM", tr("XAOPLUGIN_EXPORT_ICON")));
|
|||
|
QPixmap iconSelect(resMgr->loadPixmap("GEOM", tr("ICON_SELECT")));
|
|||
|
|
|||
|
setWindowTitle(tr("XAOPLUGIN_EXPORT_TITLE"));
|
|||
|
|
|||
|
/***************************************************************/
|
|||
|
mainFrame()->GroupConstructors->setTitle(tr("XAOPLUGIN_EXPORT_TITLE"));
|
|||
|
mainFrame()->RadioButton1->setIcon(imageOp);
|
|||
|
mainFrame()->RadioButton2->setAttribute(Qt::WA_DeleteOnClose);
|
|||
|
mainFrame()->RadioButton2->close();
|
|||
|
mainFrame()->RadioButton3->setAttribute(Qt::WA_DeleteOnClose);
|
|||
|
mainFrame()->RadioButton3->close();
|
|||
|
|
|||
|
// hide name
|
|||
|
mainFrame()->GroupBoxName->hide();
|
|||
|
|
|||
|
//****************************
|
|||
|
// Selection Group box
|
|||
|
QGroupBox* gbxExport = new QGroupBox(parent);
|
|||
|
|
|||
|
QGridLayout* gridLayoutExport = new QGridLayout(gbxExport);
|
|||
|
#ifndef Q_OS_MAC
|
|||
|
gridLayoutExport->setSpacing(6);
|
|||
|
gridLayoutExport->setContentsMargins(9, 9, 9, 9);
|
|||
|
#endif
|
|||
|
gridLayoutExport->setObjectName(QString::fromUtf8("gridLayoutExport"));
|
|||
|
|
|||
|
// Line 0
|
|||
|
QLabel* lblShape = new QLabel(tr("XAOPLUGIN_EXPORT_INGSHAPE"), gbxExport);
|
|||
|
btnShapeSelect = new QPushButton(gbxExport);
|
|||
|
btnShapeSelect->setIcon(iconSelect);
|
|||
|
ledShape = new QLineEdit(gbxExport);
|
|||
|
ledShape->setMinimumSize(QSize(100, 0));
|
|||
|
|
|||
|
int line = 0, col = 0;
|
|||
|
gridLayoutExport->addWidget(lblShape, line, col++, 1, 1);
|
|||
|
gridLayoutExport->addWidget(btnShapeSelect, line, col++, 1, 1);
|
|||
|
gridLayoutExport->addWidget(ledShape, line, col++, 1, 1);
|
|||
|
|
|||
|
// Line 1
|
|||
|
QLabel* lblFileName = new QLabel(tr("XAOPLUGIN_EXPORT_FILENAME"), gbxExport);
|
|||
|
btnFileSelect = new QPushButton(gbxExport);
|
|||
|
ledFileName = new QLineEdit(gbxExport);
|
|||
|
btnFileSelect->setText("...");
|
|||
|
|
|||
|
line++; col = 0;
|
|||
|
gridLayoutExport->addWidget(lblFileName, line, col++, 1, 1);
|
|||
|
gridLayoutExport->addWidget(btnFileSelect, line, col++, 1, 1);
|
|||
|
gridLayoutExport->addWidget(ledFileName, line, col++, 1, 1);
|
|||
|
|
|||
|
// Line 2
|
|||
|
QLabel* lblAuthor = new QLabel(tr("XAOPLUGIN_EXPORT_AUTHOR"), gbxExport);
|
|||
|
ledAuthor = new QLineEdit(gbxExport);
|
|||
|
|
|||
|
line++; col = 0;
|
|||
|
gridLayoutExport->addWidget(lblAuthor, line, col++, 2, 1);
|
|||
|
col++; // span
|
|||
|
gridLayoutExport->addWidget(ledAuthor, line, col++, 1, 1);
|
|||
|
|
|||
|
//****************************
|
|||
|
// Filter Group box
|
|||
|
QGroupBox* gbxFilter = new QGroupBox(parent);
|
|||
|
|
|||
|
QGridLayout* gridLayoutFilter = new QGridLayout(gbxFilter);
|
|||
|
#ifndef Q_OS_MAC
|
|||
|
gridLayoutFilter->setSpacing(6);
|
|||
|
gridLayoutFilter->setContentsMargins(9, 9, 9, 9);
|
|||
|
#endif
|
|||
|
gridLayoutFilter->setObjectName(QString::fromUtf8("gbxFilter"));
|
|||
|
|
|||
|
// Line 0
|
|||
|
QLabel* lblGroups = new QLabel(tr("XAOPLUGIN_EXPORT_LGROUPS"), gbxFilter);
|
|||
|
QLabel* lblFields = new QLabel(tr("XAOPLUGIN_EXPORT_LFIELDS"), gbxFilter);
|
|||
|
|
|||
|
line = 0, col = 0;
|
|||
|
gridLayoutFilter->addWidget(lblGroups, line, col++, 1, 1);
|
|||
|
gridLayoutFilter->addWidget(lblFields, line, col++, 1, 1);
|
|||
|
|
|||
|
// Line 1
|
|||
|
lstGroups = new QListWidget(gbxFilter);
|
|||
|
lstGroups->setSelectionMode(QAbstractItemView::NoSelection);
|
|||
|
lstFields = new QListWidget(gbxFilter);
|
|||
|
lstFields->setSelectionMode(QAbstractItemView::NoSelection);
|
|||
|
|
|||
|
line++; col = 0;
|
|||
|
gridLayoutFilter->addWidget(lstGroups, line, col++, 1, 1);
|
|||
|
gridLayoutFilter->addWidget(lstFields, line, col++, 1, 1);
|
|||
|
|
|||
|
//****************************
|
|||
|
QVBoxLayout* layout = new QVBoxLayout(centralWidget());
|
|||
|
layout->setMargin(0);
|
|||
|
layout->setSpacing(6);
|
|||
|
layout->addWidget(gbxExport);
|
|||
|
layout->addWidget(gbxFilter);
|
|||
|
|
|||
|
// set help
|
|||
|
setHelpFileName("xao_format_page.html");
|
|||
|
|
|||
|
Init();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// Destructor
|
|||
|
//=================================================================================
|
|||
|
XAOPlugin_ExportDlg::~XAOPlugin_ExportDlg()
|
|||
|
{
|
|||
|
// no need to delete child widgets, Qt does it all for us
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : Init()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::Init()
|
|||
|
{
|
|||
|
// Get setting of step value from file configuration
|
|||
|
m_groups.clear();
|
|||
|
m_fields.clear();
|
|||
|
|
|||
|
// Signal/slot connections
|
|||
|
connect(buttonOk(), SIGNAL(clicked()), this, SLOT(ClickOnOk()));
|
|||
|
connect(buttonApply(), SIGNAL(clicked()), this, SLOT(ClickOnApply()));
|
|||
|
|
|||
|
connect(btnShapeSelect, SIGNAL(clicked()), this, SLOT(SetEditCurrentArgument()));
|
|||
|
connect(((SalomeApp_Application*) (SUIT_Session::session()->activeApplication()))->selectionMgr(),
|
|||
|
SIGNAL(currentSelectionChanged()), this, SLOT(SelectionIntoArgument()));
|
|||
|
|
|||
|
connect(btnFileSelect, SIGNAL(clicked()), this, SLOT(btnFileSelectClicked()));
|
|||
|
|
|||
|
initName(tr("XAOPLUGIN_EXPORTXAO"));
|
|||
|
SelectionIntoArgument();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : processObject()
|
|||
|
// purpose : Fill dialog fields in accordance with myObj
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::processObject()
|
|||
|
{
|
|||
|
lstGroups->clear();
|
|||
|
lstFields->clear();
|
|||
|
m_groups.clear();
|
|||
|
m_fields.clear();
|
|||
|
|
|||
|
if (m_mainObj->_is_nil())
|
|||
|
{
|
|||
|
ledShape->setText("");
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ledShape->setText(GEOMBase::GetName(m_mainObj));
|
|||
|
GEOM::GEOM_IShapesOperations_var shapeOp = getGeomEngine()->GetIShapesOperations(getStudyId());
|
|||
|
|
|||
|
// add groups names
|
|||
|
GEOM::ListOfGO_var groups = shapeOp->GetExistingSubObjects(m_mainObj, true);
|
|||
|
for (int i = 0, n = groups->length(); i < n; i++)
|
|||
|
{
|
|||
|
QListWidgetItem* item = new QListWidgetItem();
|
|||
|
item->setData(Qt::UserRole, QVariant(i));
|
|||
|
item->setText(GEOMBase::GetName(groups[i]));
|
|||
|
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
|||
|
item->setCheckState(Qt::Checked);
|
|||
|
lstGroups->addItem(item);
|
|||
|
m_groups.append(GEOM::GeomObjPtr(groups[i].in()));
|
|||
|
}
|
|||
|
lstGroups->sortItems(Qt::AscendingOrder);
|
|||
|
|
|||
|
// add fields
|
|||
|
GEOM::GEOM_IFieldOperations_var fieldOp = getGeomEngine()->GetIFieldOperations(getStudyId());
|
|||
|
|
|||
|
GEOM::ListOfFields_var fields = fieldOp->GetFields(m_mainObj);
|
|||
|
for (int i = 0, n = fields->length(); i < n; i++)
|
|||
|
{
|
|||
|
QListWidgetItem* item = new QListWidgetItem();
|
|||
|
item->setData(Qt::UserRole, QVariant(i));
|
|||
|
item->setText(fields[i]->GetName());
|
|||
|
item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
|
|||
|
item->setCheckState(Qt::Checked);
|
|||
|
lstFields->addItem(item);
|
|||
|
m_fields.append(GEOM::GeomFieldPtr(fields[i].in()));
|
|||
|
}
|
|||
|
lstFields->sortItems(Qt::AscendingOrder);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : ClickOnOk()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::ClickOnOk()
|
|||
|
{
|
|||
|
setIsApplyAndClose(true);
|
|||
|
if (ClickOnApply())
|
|||
|
ClickOnCancel();
|
|||
|
setIsApplyAndClose(false);
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : ClickOnApply()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
bool XAOPlugin_ExportDlg::ClickOnApply()
|
|||
|
{
|
|||
|
if (!isApplyAndClose())
|
|||
|
{
|
|||
|
setIsDisableBrowsing(true);
|
|||
|
setIsDisplayResult(false);
|
|||
|
}
|
|||
|
|
|||
|
QString msg;
|
|||
|
if (!isValid(msg))
|
|||
|
{
|
|||
|
showError(msg);
|
|||
|
return false;
|
|||
|
}
|
|||
|
SUIT_OverrideCursor wc;
|
|||
|
SUIT_Session::session()->activeApplication()->putInfo("");
|
|||
|
|
|||
|
try
|
|||
|
{
|
|||
|
if (openCommand())
|
|||
|
if (!execute())
|
|||
|
{
|
|||
|
abortCommand();
|
|||
|
showError();
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
catch (const SALOME::SALOME_Exception& e)
|
|||
|
{
|
|||
|
SalomeApp_Tools::QtCatchCorbaException(e);
|
|||
|
abortCommand();
|
|||
|
return false;
|
|||
|
}
|
|||
|
commitCommand();
|
|||
|
|
|||
|
if (!isApplyAndClose())
|
|||
|
{
|
|||
|
setIsDisableBrowsing(false);
|
|||
|
setIsDisplayResult(true);
|
|||
|
}
|
|||
|
|
|||
|
processObject();
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : SelectionIntoArgument()
|
|||
|
// purpose : Called when selection as changed or other case
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::SelectionIntoArgument()
|
|||
|
{
|
|||
|
m_mainObj = GEOM::GEOM_Object::_nil();
|
|||
|
LightApp_SelectionMgr* selMgr = myGeomGUI->getApp()->selectionMgr();
|
|||
|
SALOME_ListIO selList;
|
|||
|
selMgr->selectedObjects(selList);
|
|||
|
|
|||
|
if (selList.Extent() == 1)
|
|||
|
{
|
|||
|
m_mainObj = GEOMBase::ConvertIOinGEOMObject(selList.First());
|
|||
|
}
|
|||
|
|
|||
|
processObject();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : SetEditCurrentArgument()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::SetEditCurrentArgument()
|
|||
|
{
|
|||
|
ledShape->setFocus();
|
|||
|
myEditCurrentArgument = ledShape;
|
|||
|
SelectionIntoArgument();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : btnFileSelectClicked()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::btnFileSelectClicked()
|
|||
|
{
|
|||
|
QString file = SUIT_FileDlg::getFileName(this, ledFileName->text(),
|
|||
|
tr("XAOPLUGIN_FILES"),
|
|||
|
tr("XAOPLUGIN_EXPORT_SELECT"), false);
|
|||
|
if ( !file.isEmpty() )
|
|||
|
ledFileName->setText( file );
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : ActivateThisDialog()
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::ActivateThisDialog()
|
|||
|
{
|
|||
|
GEOMBase_Skeleton::ActivateThisDialog();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : enterEvent [REDEFINED]
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
void XAOPlugin_ExportDlg::enterEvent(QEvent*)
|
|||
|
{
|
|||
|
if (!mainFrame()->GroupConstructors->isEnabled())
|
|||
|
ActivateThisDialog();
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : createOperation
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
GEOM::GEOM_IOperations_ptr XAOPlugin_ExportDlg::createOperation()
|
|||
|
{
|
|||
|
return getGeomEngine()->GetPluginOperations( getStudyId(), "XAOPluginEngine" );
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : isValid
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
bool XAOPlugin_ExportDlg::isValid(QString& msg)
|
|||
|
{
|
|||
|
// check shape
|
|||
|
if (ledShape->text().isEmpty())
|
|||
|
return false;
|
|||
|
|
|||
|
// check file name
|
|||
|
if (ledFileName->text().isEmpty())
|
|||
|
return false;
|
|||
|
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
//=================================================================================
|
|||
|
// function : execute
|
|||
|
// purpose :
|
|||
|
//=================================================================================
|
|||
|
bool XAOPlugin_ExportDlg::execute()
|
|||
|
{
|
|||
|
bool res = false;
|
|||
|
|
|||
|
QString author = ledAuthor->text();
|
|||
|
QString fileName = ledFileName->text();
|
|||
|
|
|||
|
// get selected groups
|
|||
|
QList<QListWidgetItem*> selGroups;
|
|||
|
for (int j = 0; j < lstGroups->count(); ++j)
|
|||
|
{
|
|||
|
if (lstGroups->item(j)->checkState() == Qt::Checked)
|
|||
|
selGroups.append(lstGroups->item(j));
|
|||
|
}
|
|||
|
|
|||
|
GEOM::ListOfGO_var groups = new GEOM::ListOfGO();
|
|||
|
groups->length(selGroups.count());
|
|||
|
int i = 0;
|
|||
|
for (QList<QListWidgetItem*>::iterator it = selGroups.begin(); it != selGroups.end(); ++it)
|
|||
|
{
|
|||
|
QListWidgetItem* item = (*it);
|
|||
|
int index = item->data(Qt::UserRole).toInt();
|
|||
|
groups[i++] = m_groups[index].copy();
|
|||
|
}
|
|||
|
|
|||
|
// get selected fields
|
|||
|
QList<QListWidgetItem*> selFields;
|
|||
|
for (int j = 0; j < lstFields->count(); ++j)
|
|||
|
{
|
|||
|
if (lstFields->item(j)->checkState() == Qt::Checked)
|
|||
|
selFields.append(lstFields->item(j));
|
|||
|
}
|
|||
|
|
|||
|
GEOM::ListOfFields_var fields = new GEOM::ListOfFields();
|
|||
|
fields->length(selFields.count());
|
|||
|
i = 0;
|
|||
|
for (QList<QListWidgetItem*>::iterator it = selFields.begin(); it != selFields.end(); ++it)
|
|||
|
{
|
|||
|
QListWidgetItem* item = (*it);
|
|||
|
int index = item->data(Qt::UserRole).toInt();
|
|||
|
fields[i++] = m_fields[index].copy();
|
|||
|
}
|
|||
|
|
|||
|
// call engine function
|
|||
|
GEOM::IXAOOperations_var aXAOOp = GEOM::IXAOOperations::_narrow( getOperation() );
|
|||
|
res = aXAOOp->ExportXAO(m_mainObj, groups, fields,
|
|||
|
author.toStdString().c_str(),
|
|||
|
fileName.toStdString().c_str());
|
|||
|
return res;
|
|||
|
}
|