module GEOM
{
+ /*!
+ * \brief Units of length
+ */
+ enum length_unit
+ {
+ LU_INCH,
+ LU_MILLIMETER,
+ LU_FOOT,
+ LU_MILE,
+ LU_METER,
+ LU_KILOMETER,
+ LU_MILLIINCH,
+ LU_MICROMETER,
+ LU_CENTIMETER,
+ LU_MICROINCH
+ };
+
/*!
* \brief Interface for STEPPlugin modeling functions.
*/
*
* \param theObject Shape to be stored in the file.
* \param theFileName Name of the file to store the given shape in.
+ * \param theUnit the length unit.
*/
void ExportSTEP( in GEOM::GEOM_Object theObject,
- in string theFileName );
+ in string theFileName,
+ in GEOM::length_unit theUnit);
/*!
* \brief Import a shape from the STEP file.
beginService( " GEOM_Superv_i::ExportSTEP" );
MESSAGE("GEOM_Superv_i::ExportSTEP");
getSTEPPluginOp();
- mySTEPOp->ExportSTEP( theObject, theFileName );
+
+ const GEOM::length_unit aUnit = GEOM::LU_METER;
+
+ mySTEPOp->ExportSTEP( theObject, theFileName, aUnit );
endService( " GEOM_Superv_i::ExportSTEP" );
}
#
from GEOM import ISTEPOperations
+import GEOM
# Engine Library Name
__libraryName__ = "STEPPluginEngine"
## Export the given shape into a file with given name in STEP format.
# @param theObject Shape to be stored in the file.
# @param theFileName Name of the file to store the given shape in.
+# @param theUnit the length unit (see GEOM::length_unit). In meters by default.
# @ingroup l2_import_export
-def ExportSTEP(self, theObject, theFileName):
+def ExportSTEP(self, theObject, theFileName, theUnit=GEOM.LU_METER):
"""
Export the given shape into a file with given name in STEP format.
Parameters:
theObject Shape to be stored in the file.
theFileName Name of the file to store the given shape in.
+ theUnit the length unit (see GEOM::length_unit). In meters by default.
"""
anOp = GetSTEPPluginOperations(self)
- anOp.ExportSTEP(theObject, theFileName)
+ anOp.ExportSTEP(theObject, theFileName, theUnit)
if anOp.IsDone() == 0:
raise RuntimeError, "Export : " + anOp.GetErrorCode()
pass
STEPPlugin_IExport.hxx
STEPPlugin_IImport.hxx
STEPPlugin_ImportDriver.hxx
+ STEPPlugin_ExportDlg.h
STEPPlugin_ExportDriver.hxx
STEPPlugin_IECallBack.hxx
)
# header files / to be processed by moc
SET(_moc_HEADERS
STEPPlugin_GUI.h
+ STEPPlugin_ExportDlg.h
)
ENDIF()
SET(STEPPluginGUI_SOURCES
STEPPlugin_GUI.cxx
+ STEPPlugin_ExportDlg.cxx
${_moc_SOURCES}
)
ENDIF()
--- /dev/null
+// Copyright (C) 2014-2015 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
+//
+
+#include "STEPPlugin_ExportDlg.h"
+
+#include <QApplication>
+#include <QLabel>
+#include <QLayout>
+#include <QComboBox>
+
+//=============================================================================
+// Constructor
+//=============================================================================
+STEPPlugin_ExportDlg::STEPPlugin_ExportDlg(QWidget *parent)
+ : SUIT_FileDlg (parent, false, true, true),
+ myUnitCB (0)
+{
+ QLabel* aUnitLabel = new QLabel(tr("STEP_LENGTH_UNITS"), this);
+
+ myUnitCB = new QComboBox(this);
+ myUnitCB->addItem(tr("STEP_UNITS_KILOMETER"), GEOM::LU_KILOMETER);
+ myUnitCB->addItem(tr("STEP_UNITS_METER"), GEOM::LU_METER);
+ myUnitCB->addItem(tr("STEP_UNITS_CENTIMETER"), GEOM::LU_CENTIMETER);
+ myUnitCB->addItem(tr("STEP_UNITS_MILLIMETER"), GEOM::LU_MILLIMETER);
+ myUnitCB->addItem(tr("STEP_UNITS_MICROMETER"), GEOM::LU_MICROMETER);
+ myUnitCB->addItem(tr("STEP_UNITS_MILE"), GEOM::LU_MILE);
+ myUnitCB->addItem(tr("STEP_UNITS_FOOT"), GEOM::LU_FOOT);
+ myUnitCB->addItem(tr("STEP_UNITS_INCH"), GEOM::LU_INCH);
+ myUnitCB->addItem(tr("STEP_UNITS_MILLIINCH"), GEOM::LU_MILLIINCH);
+ myUnitCB->addItem(tr("STEP_UNITS_MICROINCH"), GEOM::LU_MICROINCH);
+
+ // Meters by default.
+ myUnitCB->setCurrentIndex(1);
+
+ layout()->addWidget(aUnitLabel);
+ layout()->addWidget(myUnitCB);
+}
+
+//=============================================================================
+// Destructor
+//=============================================================================
+STEPPlugin_ExportDlg::~STEPPlugin_ExportDlg()
+{
+}
+
+//=============================================================================
+// getUnits
+//=============================================================================
+GEOM::length_unit STEPPlugin_ExportDlg::getUnits() const
+{
+ const GEOM::length_unit anUnit =
+ (GEOM::length_unit) myUnitCB->itemData(myUnitCB->currentIndex()).toInt();
+
+ return anUnit;
+}
+
+//=============================================================================
+// getFileName
+//=============================================================================
+QString STEPPlugin_ExportDlg::getFileName(const QString &theInitial,
+ const QString &theFilters,
+ const QString &theCaption,
+ QWidget *theParent,
+ GEOM::length_unit &theUnits)
+{
+ QStringList aFls = theFilters.split(";;", QString::SkipEmptyParts);
+ QString aTmpFileName = theInitial;
+
+ aTmpFileName = aTmpFileName.simplified();
+ aTmpFileName =
+ aTmpFileName.replace(QRegExp("\\*"), "").replace(QRegExp("\\?"), "");
+
+ STEPPlugin_ExportDlg aDlg(theParent);
+
+ aDlg.setFileMode(AnyFile);
+ aDlg.setFilters(aFls);
+ aDlg.setWindowTitle(theCaption);
+
+ if (!aTmpFileName.isEmpty()) {
+ aDlg.processPath(aTmpFileName);
+ }
+
+ QString aFileName;
+
+ if (aDlg.exec() == QDialog::Accepted) {
+ aFileName = aDlg.selectedFile();
+ theUnits = aDlg.getUnits();
+ }
+
+ QApplication::processEvents();
+
+ return aFileName;
+}
--- /dev/null
+// Copyright (C) 2014-2015 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
+//
+
+#ifndef STEPPlugin_ExportDlg_H
+#define STEPPlugin_ExportDlg_H
+
+#include <SUIT_FileDlg.h>
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(STEPPlugin)
+
+class QComboBox;
+
+class STEPPlugin_ExportDlg: public SUIT_FileDlg
+{
+ Q_OBJECT
+
+public:
+
+ STEPPlugin_ExportDlg(QWidget *parent);
+ ~STEPPlugin_ExportDlg();
+
+ GEOM::length_unit getUnits() const;
+
+ static QString getFileName(const QString &theInitial,
+ const QString &theFilters,
+ const QString &theCaption,
+ QWidget *theParent,
+ GEOM::length_unit &theUnits);
+
+private:
+
+ QComboBox *myUnitCB;
+
+};
+
+#endif // STEPPlugin_ExportDlg_H
// internal includes
#include "STEPPlugin_ExportDriver.hxx"
#include "STEPPlugin_IExport.hxx"
+#include "STEPPlugin_IOperations.hxx"
// KERNEL includes
#include <utilities.h>
aFunction->SetValue( aShape );
TCollection_AsciiString aFileName = aData.GetFileName();
+ Standard_Integer anUnit = aData.GetUnit();
+ TCollection_AsciiString aWriteUnit;
+
+ switch (anUnit) {
+ case STEPPlugin_IOperations::LengthUnit_Inch:
+ aWriteUnit = "INCH";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Millimeter:
+ aWriteUnit = "MM";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Foot:
+ aWriteUnit = "FT";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Mile:
+ aWriteUnit = "MI";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Meter:
+ aWriteUnit = "M";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Kilometer:
+ aWriteUnit = "KM";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Milliinch:
+ aWriteUnit = "MIL";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Micrometer:
+ aWriteUnit = "UM";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Centimeter:
+ aWriteUnit = "CM";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Microinch:
+ aWriteUnit = "UIN";
+ break;
+ default:
+ return 0;
+ }
MESSAGE("Export STEP into file " << aFileName.ToCString());
//VRV: OCC 4.0 migration
STEPControl_Writer aWriter;
Interface_Static::SetCVal("xstep.cascade.unit","M");
- Interface_Static::SetCVal("write.step.unit", "M");
+ Interface_Static::SetCVal("write.step.unit", aWriteUnit.ToCString());
Interface_Static::SetIVal("write.step.nonmanifold", 1);
status = aWriter.Transfer( aShape, STEPControl_AsIs );
//VRV: OCC 4.0 migration
#include "GEOMBase.h"
#include "GEOM_Displayer.h"
#include "GEOM_GenericObjPtr.h"
+#include "STEPPlugin_ExportDlg.h"
#include <SALOMEconfig.h>
#include CORBA_SERVER_HEADER(STEPPlugin)
if ( CORBA::is_nil( obj ) ) continue;
- QString fileName = app->getFileName( false,
- QString( io->getName() ),
+ GEOM::length_unit anUnit;
+ QString fileName = STEPPlugin_ExportDlg::getFileName
+ (QString( io->getName() ),
tr( "STEP_FILES" ),
tr( "EXPORT_TITLE" ),
- parent );
+ parent, anUnit);
if ( fileName.isEmpty() )
return false;
app->putInfo( tr( "GEOM_PRP_EXPORT" ).arg( fileName ) );
transaction.start();
- stepOp->ExportSTEP( obj, fileName.toUtf8().constData() );
+ stepOp->ExportSTEP( obj, fileName.toUtf8().constData(), anUnit);
if ( stepOp->IsDone() )
{
const TCollection_AsciiString& theFormatName )
{
STEPPlugin_IOperations* aPluginOperations = STEPPlugin_OperationsCreator::get( GetEngine(), theDocId );
- aPluginOperations->ExportSTEP( theOriginal, theFileName );
+ const STEPPlugin_IOperations::LengthUnit aUnit = STEPPlugin_IOperations::LengthUnit_Meter;
+
+ aPluginOperations->ExportSTEP( theOriginal, theFileName, aUnit );
return true;
}
#define EXPORTSTEP_ARG_ORIGINAL 1
#define EXPORTSTEP_ARG_FILENAME 2
+#define EXPORTSTEP_ARG_UNIT 3
class STEPPlugin_IExport
{
{ _func->SetString( EXPORTSTEP_ARG_FILENAME, theFileName ); }
TCollection_AsciiString GetFileName()
{ return _func->GetString( EXPORTSTEP_ARG_FILENAME ); }
+
+ void SetUnit(const Standard_Integer theUnit)
+ { _func->SetInteger(EXPORTSTEP_ARG_UNIT, theUnit); }
+ Standard_Integer GetUnit()
+ { return _func->GetInteger(EXPORTSTEP_ARG_UNIT); }
private:
Handle(GEOM_Function) _func;
MESSAGE( "STEPPlugin_IOperations::~STEPPlugin_IOperations" );
}
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+static GEOM::TPythonDump& operator<<
+ (GEOM::TPythonDump &theDump,
+ const STEPPlugin_IOperations::LengthUnit theState)
+{
+ switch (theState) {
+ case STEPPlugin_IOperations::LengthUnit_Inch:
+ theDump << "GEOM.LU_INCH";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Millimeter:
+ theDump << "GEOM.LU_MILLIMETER";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Foot:
+ theDump << "GEOM.LU_FOOT";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Mile:
+ theDump << "GEOM.LU_MILE";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Meter:
+ theDump << "GEOM.LU_METER";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Kilometer:
+ theDump << "GEOM.LU_KILOMETER";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Milliinch:
+ theDump << "GEOM.LU_MILLIINCH";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Micrometer:
+ theDump << "GEOM.LU_MICROMETER";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Centimeter:
+ theDump << "GEOM.LU_CENTIMETER";
+ break;
+ case STEPPlugin_IOperations::LengthUnit_Microinch:
+ theDump << "GEOM.LU_MICROINCH";
+ break;
+ default:
+ break;
+ }
+
+ return theDump;
+}
+
//=============================================================================
/*!
* ExportSTEP
* Export a shape to STEP format
* \param theOriginal The shape to export
* \param theFileName The name of the file to exported
- * \param theIsASCII The format of the exported file (ASCII or Binary)
- * \param theDeflection The deflection of the shape to exported
+ * \param theUnit the length unit
*/
//=============================================================================
-void STEPPlugin_IOperations::ExportSTEP( const Handle(GEOM_Object) theOriginal,
- const TCollection_AsciiString& theFileName )
+void STEPPlugin_IOperations::ExportSTEP
+ (const Handle(GEOM_Object) theOriginal,
+ const TCollection_AsciiString &theFileName,
+ const LengthUnit theUnit)
{
SetErrorCode(KO);
if( theOriginal.IsNull() ) return;
STEPPlugin_IExport aCI( aFunction );
aCI.SetOriginal( aRefFunction );
aCI.SetFileName( theFileName );
+ aCI.SetUnit( theUnit );
//Perform the Export
try {
//Make a Python command
GEOM::TPythonDump(aFunction) << "geompy.ExportSTEP(" << theOriginal << ", \""
- << theFileName.ToCString() << "\" )";
+ << theFileName.ToCString() << "\", " << theUnit << " )";
SetErrorCode(OK);
}
class STEPPLUGINENGINE_EXPORT STEPPlugin_IOperations: public GEOMImpl_IBaseIEOperations
{
+
+public:
+
+ /*!
+ * \brief Units of length
+ */
+ enum LengthUnit
+ {
+ LengthUnit_Inch,
+ LengthUnit_Millimeter,
+ LengthUnit_Foot,
+ LengthUnit_Mile,
+ LengthUnit_Meter,
+ LengthUnit_Kilometer,
+ LengthUnit_Milliinch,
+ LengthUnit_Micrometer,
+ LengthUnit_Centimeter,
+ LengthUnit_Microinch
+ };
+
+
public:
STEPPlugin_IOperations( GEOM_Engine*, int );
~STEPPlugin_IOperations();
void ExportSTEP( const Handle(GEOM_Object),
- const TCollection_AsciiString& );
+ const TCollection_AsciiString&, const LengthUnit );
Handle(TColStd_HSequenceOfTransient) ImportSTEP( const TCollection_AsciiString&,
const bool );
* Export a shape to STEP format
* \param theOriginal The shape to export
* \param theFileName The name of the exported file
+ * \param theUnit the length unit.
*/
//=============================================================================
-void STEPPlugin_IOperations_i::ExportSTEP( GEOM::GEOM_Object_ptr theOriginal,
- const char* theFileName )
+void STEPPlugin_IOperations_i::ExportSTEP(GEOM::GEOM_Object_ptr theOriginal,
+ const char* theFileName,
+ GEOM::length_unit theUnit)
{
// duplicate the original shape
GEOM::GEOM_Object_var aGEOMObject = GEOM::GEOM_Object::_duplicate( theOriginal );
Handle(GEOM_Object) anOriginal = GetObjectImpl( theOriginal );
if (anOriginal.IsNull()) return;
+ STEPPlugin_IOperations::LengthUnit aUnit;
+
+ switch (theUnit) {
+ case GEOM::LU_INCH:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Inch;
+ break;
+ case GEOM::LU_MILLIMETER:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Millimeter;
+ break;
+ case GEOM::LU_FOOT:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Foot;
+ break;
+ case GEOM::LU_MILE:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Mile;
+ break;
+ case GEOM::LU_METER:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Meter;
+ break;
+ case GEOM::LU_KILOMETER:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Kilometer;
+ break;
+ case GEOM::LU_MILLIINCH:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Milliinch;
+ break;
+ case GEOM::LU_MICROMETER:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Micrometer;
+ break;
+ case GEOM::LU_CENTIMETER:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Centimeter;
+ break;
+ case GEOM::LU_MICROINCH:
+ aUnit = STEPPlugin_IOperations::LengthUnit_Microinch;
+ break;
+ default:
+ return;
+ }
+
//Export the shape to the file
- GetOperations()->ExportSTEP( anOriginal, theFileName );
+ GetOperations()->ExportSTEP( anOriginal, theFileName, aUnit );
}
//=============================================================================
STEPPlugin_IOperations* theImpl );
~STEPPlugin_IOperations_i();
- void ExportSTEP( GEOM::GEOM_Object_ptr, const char* );
+ void ExportSTEP( GEOM::GEOM_Object_ptr, const char*,
+ GEOM::length_unit );
GEOM::ListOfGO* ImportSTEP( const char*, const bool );
char* ReadValue( const char*, const char* );
Ignoring units will cause model scaling (as dimensions are supposed to be specified in meters).</translation>
</message>
</context>
+<context>
+ <name>STEPPlugin_ExportDlg</name>
+ <message>
+ <source>STEP_LENGTH_UNITS</source>
+ <translation>Length units</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_INCH</source>
+ <translation>inch</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_MILLIMETER</source>
+ <translation>millimeter</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_FOOT</source>
+ <translation>foot</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_MILE</source>
+ <translation>mile</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_METER</source>
+ <translation>meter</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_KILOMETER</source>
+ <translation>kilometer</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_MILLIINCH</source>
+ <translation>milliinch</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_MICROMETER</source>
+ <translation>micrometer</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_CENTIMETER</source>
+ <translation>centimeter</translation>
+ </message>
+ <message>
+ <source>STEP_UNITS_MICROINCH</source>
+ <translation>microinch</translation>
+ </message>
+</context>
</TS>