1 // Copyright (C) 2014-2019 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 #include "STEPPlugin_ExportDriver.hxx"
22 #include "STEPPlugin_IExport.hxx"
23 #include "STEPPlugin_IOperations.hxx"
26 #include <utilities.h>
27 #include <Basics_Utils.hxx>
30 #include "GEOM_Function.hxx"
33 #include <IFSelect_ReturnStatus.hxx>
34 #include <STEPControl_Writer.hxx>
35 #include <Interface_Static.hxx>
36 #include <TCollection_AsciiString.hxx>
37 #include <TopoDS_Shape.hxx>
39 //=======================================================================
42 //=======================================================================
43 const Standard_GUID& STEPPlugin_ExportDriver::GetID()
45 static Standard_GUID aGUID("c47b9a61-c6a4-4335-8b13-6badb16b036f");
49 //=======================================================================
50 //function : STEPPlugin_ExportDriver
52 //=======================================================================
53 STEPPlugin_ExportDriver::STEPPlugin_ExportDriver()
57 //=======================================================================
60 //=======================================================================
61 Standard_Integer STEPPlugin_ExportDriver::Execute(Handle(TFunction_Logbook)& log) const
63 if (Label().IsNull()) return 0;
64 Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction( Label() );
66 STEPPlugin_IExport aData (aFunction);
68 // retrieve the being exported shape
70 Handle(GEOM_Function) aRefFunction = aData.GetOriginal();
71 if( aRefFunction.IsNull() ) return 0;
72 aShape = aRefFunction->GetValue();
73 if( aShape.IsNull() ) return 0;
74 // set the result of function to be used by next operations
75 aFunction->SetValue( aShape );
77 TCollection_AsciiString aFileName = aData.GetFileName();
78 Standard_Integer anUnit = aData.GetUnit();
79 TCollection_AsciiString aWriteUnit;
82 case STEPPlugin_IOperations::LengthUnit_Inch:
85 case STEPPlugin_IOperations::LengthUnit_Millimeter:
88 case STEPPlugin_IOperations::LengthUnit_Foot:
91 case STEPPlugin_IOperations::LengthUnit_Mile:
94 case STEPPlugin_IOperations::LengthUnit_Meter:
97 case STEPPlugin_IOperations::LengthUnit_Kilometer:
100 case STEPPlugin_IOperations::LengthUnit_Milliinch:
103 case STEPPlugin_IOperations::LengthUnit_Micrometer:
106 case STEPPlugin_IOperations::LengthUnit_Centimeter:
109 case STEPPlugin_IOperations::LengthUnit_Microinch:
116 MESSAGE("Export STEP into file " << aFileName.ToCString());
120 // Set "C" numeric locale to save numbers correctly
121 Kernel_Utils::Localizer loc;
123 IFSelect_ReturnStatus status ;
124 //VRV: OCC 4.0 migration
125 STEPControl_Writer aWriter;
126 Interface_Static::SetCVal("xstep.cascade.unit","M");
127 Interface_Static::SetCVal("write.step.unit", aWriteUnit.ToCString());
128 Interface_Static::SetIVal("write.step.nonmanifold", 1);
129 status = aWriter.Transfer( aShape, STEPControl_AsIs );
130 //VRV: OCC 4.0 migration
131 if( status == IFSelect_RetDone )
132 status = aWriter.Write( aFileName.ToCString() );
134 // Return previous locale
135 if( status == IFSelect_RetDone )
138 catch (Standard_Failure)
140 //THROW_SALOME_CORBA_EXCEPTION("Exception caught in STEPExport", SALOME::BAD_PARAM);
145 //================================================================================
147 * \brief Returns a name of creation operation and names and values of creation parameters
149 //================================================================================
150 bool STEPPlugin_ExportDriver::
151 GetCreationInformation( std::string& theOperationName,
152 std::vector<GEOM_Param>& theParams )
157 IMPLEMENT_STANDARD_RTTIEXT( STEPPlugin_ExportDriver,GEOM_BaseDriver );