X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGeomAlgoAPI%2FGeomAlgoAPI_IGESExport.cpp;h=7cc6a022ffc9fe4c03b897644744a0c3c093cdac;hb=0cf99274b55d2df4c2d547ccdfc6f2e4d6369257;hp=593c49670f5e04629cb840a2e213ea439f1a889d;hpb=144fb75724b240b9a627ce7179f43e04ee90b465;p=modules%2Fshaper.git diff --git a/src/GeomAlgoAPI/GeomAlgoAPI_IGESExport.cpp b/src/GeomAlgoAPI/GeomAlgoAPI_IGESExport.cpp index 593c49670..7cc6a022f 100644 --- a/src/GeomAlgoAPI/GeomAlgoAPI_IGESExport.cpp +++ b/src/GeomAlgoAPI/GeomAlgoAPI_IGESExport.cpp @@ -1,19 +1,42 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D +// Copyright (C) 2014-2022 CEA/DEN, EDF R&D +// +// 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 -//// KERNEL includes -//#include -//#include +#include "GeomAlgoAPI_Tools.h" + +#include // OOCT includes #include #include +#include #include +#include +#include + #include #include +#include + //============================================================================= /*! * @@ -76,17 +99,23 @@ int KindOfBRep (const TopoDS_Shape& theShape) } //============================================================================= -//extern "C" { +bool IGESExport(const std::string& theFileName, + const std::string& theFormatName, + const std::shared_ptr& theShape, + std::string& theError) +{ + #ifdef _DEBUG + std::cout << "Export IGES into file " << theFileName << std::endl; + #endif -namespace IGESExport { + if (!theShape.get()) { + theError = "IGES Export failed: An invalid argument"; + return false; + } -bool Export(const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theFormatName, - const TopoDS_Shape& theShape, - TCollection_AsciiString& theError) -{ // theFormatName expected "IGES-5.1", "IGES-5.3"... - TCollection_AsciiString aVersion = theFormatName.Token("-", 2); + TCollection_AsciiString aFormatName(theFormatName.c_str()); + TCollection_AsciiString aVersion = aFormatName.Token("-", 2); #ifdef _DEBUG if (!aVersion.IsEqual("5.1") || !aVersion.IsEqual("5.3")) std::cout << "Warning: unrecognized version " << aVersion.ToCString() @@ -98,14 +127,10 @@ bool Export(const TCollection_AsciiString& theFileName, if( aVersion.IsEqual( "5.3" ) ) aBrepMode = 1; - #ifdef _DEBUG - std::cout << "Export IGES into file " << theFileName.ToCString() << std::endl; - #endif - // Mantis issue 0021350: check being exported shape, as some stand-alone // entities (edges, wires and vertices) cannot be saved in BRepMode if( aBrepMode == 1 ) { - int aKind = KindOfBRep( theShape ); + int aKind = KindOfBRep( theShape->impl() ); if( aKind == -1 ) { theError = "EXPORT_IGES_HETEROGENEOUS_COMPOUND"; return false; @@ -115,26 +140,29 @@ bool Export(const TCollection_AsciiString& theFileName, aBrepMode = aKind; } -// // Set "C" numeric locale to save numbers correctly -// Kernel_Utils::Localizer loc; + // Set "C" numeric locale to save numbers correctly + GeomAlgoAPI_Tools::Localizer loc; // initialize writer IGESControl_Controller::Init(); IGESControl_Writer ICW( "M", aBrepMode ); // export explicitly in meters Interface_Static::SetCVal( "xstep.cascade.unit", "M" ); +#if OCC_VERSION_LARGE >= 0x07070000 + Interface_Static::SetCVal("write.iges.unit", "M"); + XSAlgo::AlgoContainer()->PrepareForTransfer(); // update unit info + Standard_Real aScaleFactorMM = UnitsMethods::GetCasCadeLengthUnit(); + ICW.Model()->ChangeGlobalSection().SetCascadeUnit(aScaleFactorMM); +#endif + // 09.03.2010 skl for bug 0020726 // change default value "Average" to "Max" Interface_Static::SetCVal( "write.precision.mode", "Max" ); // perform shape writing - if( ICW.AddShape( theShape ) ) { + if( ICW.AddShape( theShape->impl() ) ) { ICW.ComputeModel(); - return ICW.Write( theFileName.ToCString() ); + return ICW.Write(theFileName.c_str()) == Standard_True; } return false; } - -} - -//}