From fef01ebcd41566df70fd7300de4fcf66070c4afd Mon Sep 17 00:00:00 2001 From: jfa Date: Mon, 27 Mar 2006 08:43:05 +0000 Subject: [PATCH] PAL12003: Problem when importing IGS geometry. Export to IGES 5.3 (supporting BRep) introduced in GUI. --- resources/ImportExport | 6 ++- src/BREPExport/BREPExport.cxx | 4 +- src/BREPImport/BREPImport.cxx | 1 + src/GEOMImpl/GEOMImpl_ExportDriver.cxx | 13 +++--- src/GEOMImpl/GEOMImpl_IImportExport.hxx | 13 ++++-- src/GEOMImpl/GEOMImpl_IInsertOperations.cxx | 48 +++++++++++++-------- src/GEOMImpl/GEOMImpl_ImportDriver.cxx | 13 +++--- src/IGESExport/IGESExport.cxx | 45 +++++++++++-------- src/IGESImport/IGESImport.cxx | 1 + src/STEPExport/STEPExport.cxx | 4 +- src/STEPImport/STEPImport.cxx | 1 + 11 files changed, 96 insertions(+), 53 deletions(-) diff --git a/resources/ImportExport b/resources/ImportExport index 574e0e2e3..d6837858e 100644 --- a/resources/ImportExport +++ b/resources/ImportExport @@ -1,5 +1,5 @@ Import: BREP|IGES|STEP -Export: BREP|IGES|STEP +Export: BREP|IGES|IGES_5_3|STEP BREP.Import: libBREPImport.so BREP.Export: libBREPExport.so @@ -8,6 +8,10 @@ BREP.Pattern: BREP Files ( *.brep ) IGES.Import: libIGESImport.so IGES.Export: libIGESExport.so IGES.Pattern: IGES Files ( *.iges *.igs ) +IGES.ExportPattern: IGES 5.1 Files ( *.iges *.igs ) + +IGES_5_3.Export: libIGESExport.so +IGES_5_3.Pattern: IGES 5.3 Files ( *.iges *.igs ) STEP.Import: libSTEPImport.so STEP.Export: libSTEPExport.so diff --git a/src/BREPExport/BREPExport.cxx b/src/BREPExport/BREPExport.cxx index 2580cfac0..2f5dd70a2 100644 --- a/src/BREPExport/BREPExport.cxx +++ b/src/BREPExport/BREPExport.cxx @@ -44,7 +44,9 @@ extern "C" { SALOME_WNT_EXPORT - int Export(const TopoDS_Shape& theShape, const TCollection_AsciiString& theFileName) + int Export(const TopoDS_Shape& theShape, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& /*theFormatName*/) { MESSAGE("Export BREP into file " << theFileName.ToCString()); diff --git a/src/BREPImport/BREPImport.cxx b/src/BREPImport/BREPImport.cxx index 5412fb3e8..9153d14a3 100644 --- a/src/BREPImport/BREPImport.cxx +++ b/src/BREPImport/BREPImport.cxx @@ -46,6 +46,7 @@ extern "C" { SALOME_WNT_EXPORT TopoDS_Shape Import (const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& /*theFormatName*/, TCollection_AsciiString& theError) { MESSAGE("Import BREP from file " << theFileName); diff --git a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx index 5898d9e1b..ecd9e7f08 100644 --- a/src/GEOMImpl/GEOMImpl_ExportDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ExportDriver.cxx @@ -48,7 +48,9 @@ #define UnLoadLib( handle ) dlclose( handle ); #endif -typedef int (*funcPoint)(const TopoDS_Shape&, const TCollection_AsciiString&); +typedef int (*funcPoint)(const TopoDS_Shape&, + const TCollection_AsciiString&, + const TCollection_AsciiString&); //======================================================================= //function : GetID @@ -90,9 +92,10 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const aFunction->SetValue(aShape); // retrieve the file and format names - TCollection_AsciiString aFileName = aCI.GetFileName(); - TCollection_AsciiString aLibName = aCI.GetPluginName(); - if (aFileName.IsEmpty() || aLibName.IsEmpty()) + TCollection_AsciiString aFileName = aCI.GetFileName(); + TCollection_AsciiString aFormatName = aCI.GetFormatName(); + TCollection_AsciiString aLibName = aCI.GetPluginName(); + if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty()) return 0; // load plugin library @@ -105,7 +108,7 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const return 0; // perform the export - int res = fp( aShape, aFileName ); + int res = fp( aShape, aFileName, aFormatName ); // unload plugin library UnLoadLib( anExportLib ); diff --git a/src/GEOMImpl/GEOMImpl_IImportExport.hxx b/src/GEOMImpl/GEOMImpl_IImportExport.hxx index efa6b2bec..ea9a45edf 100644 --- a/src/GEOMImpl/GEOMImpl_IImportExport.hxx +++ b/src/GEOMImpl/GEOMImpl_IImportExport.hxx @@ -25,6 +25,7 @@ #define EXP_ARG_REF 1 #define EXP_ARG_FILE 2 #define EXP_ARG_PLUG 3 +#define EXP_ARG_FORM 4 class GEOMImpl_IImportExport { @@ -36,15 +37,21 @@ class GEOMImpl_IImportExport Handle(GEOM_Function) GetOriginal() { return _func->GetReference(EXP_ARG_REF); } - void SetFileName(const TCollection_AsciiString& theFileName) { _func->SetString(EXP_ARG_FILE, theFileName); } + void SetFileName(const TCollection_AsciiString& theFileName) + { _func->SetString(EXP_ARG_FILE, theFileName); } TCollection_AsciiString GetFileName() { return _func->GetString(EXP_ARG_FILE); } - void SetPluginName(const TCollection_AsciiString& theFormatName) - { _func->SetString(EXP_ARG_PLUG, theFormatName); } + void SetPluginName(const TCollection_AsciiString& thePluginLibName) + { _func->SetString(EXP_ARG_PLUG, thePluginLibName); } TCollection_AsciiString GetPluginName() { return _func->GetString(EXP_ARG_PLUG); } + void SetFormatName(const TCollection_AsciiString& theFormatName) + { _func->SetString(EXP_ARG_FORM, theFormatName); } + + TCollection_AsciiString GetFormatName() { return _func->GetString(EXP_ARG_FORM); } + private: Handle(GEOM_Function) _func; diff --git a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx index 6aee3f044..f0fc7443d 100644 --- a/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx +++ b/src/GEOMImpl/GEOMImpl_IInsertOperations.cxx @@ -140,16 +140,17 @@ void GEOMImpl_IInsertOperations::Export //Check if the function is set correctly if (aFunction->GetDriverGUID() != GEOMImpl_ExportDriver::GetID()) return; - //Set parameters - GEOMImpl_IImportExport aCI (aFunction); - aCI.SetOriginal(aRefFunction); - aCI.SetFileName(theFileName); - Handle(TCollection_HAsciiString) aHLibName; if (!IsSupported(Standard_False, theFormatName, aHLibName)) { return; } TCollection_AsciiString aLibName = aHLibName->String(); + + //Set parameters + GEOMImpl_IImportExport aCI (aFunction); + aCI.SetOriginal(aRefFunction); + aCI.SetFileName(theFileName); + aCI.SetFormatName(theFormatName); aCI.SetPluginName(aLibName); //Perform the Export @@ -195,15 +196,16 @@ Handle(GEOM_Object) GEOMImpl_IInsertOperations::Import //Check if the function is set correctly if (aFunction->GetDriverGUID() != GEOMImpl_ImportDriver::GetID()) return result; - //Set parameters - GEOMImpl_IImportExport aCI (aFunction); - aCI.SetFileName(theFileName); - Handle(TCollection_HAsciiString) aHLibName; if (!IsSupported(Standard_True, theFormatName, aHLibName)) { return result; } TCollection_AsciiString aLibName = aHLibName->String(); + + //Set parameters + GEOMImpl_IImportExport aCI (aFunction); + aCI.SetFileName(theFileName); + aCI.SetFormatName(theFormatName); aCI.SetPluginName(aLibName); //Perform the Import @@ -261,14 +263,18 @@ Standard_Boolean GEOMImpl_IInsertOperations::ImportTranslators // Read Patterns for each supported format int j = 1, len = theFormats->Length(); for (; j <= len; j++) { - TCollection_AsciiString aPattern; - TCollection_AsciiString aKey (theFormats->Value(j)); - aKey += ".Pattern"; + TCollection_AsciiString aKey, aPattern; + aKey = theFormats->Value(j) + ".ImportPattern"; if (myResMgr->Find(aKey.ToCString())) aPattern = myResMgr->Value(aKey.ToCString()); else { - aPattern = theFormats->Value(j); - aPattern += " Files ( *.* )"; + aKey = theFormats->Value(j) + ".Pattern"; + if (myResMgr->Find(aKey.ToCString())) + aPattern = myResMgr->Value(aKey.ToCString()); + else { + aPattern = theFormats->Value(j); + aPattern += " Files ( *.* )"; + } } thePatterns->Append(aPattern); } @@ -310,14 +316,18 @@ Standard_Boolean GEOMImpl_IInsertOperations::ExportTranslators // Read Patterns for each supported format int j = 1, len = theFormats->Length(); for (; j <= len; j++) { - TCollection_AsciiString aPattern; - TCollection_AsciiString aKey (theFormats->Value(j)); - aKey += ".Pattern"; + TCollection_AsciiString aKey, aPattern; + aKey = theFormats->Value(j) + ".ExportPattern"; if (myResMgr->Find(aKey.ToCString())) aPattern = myResMgr->Value(aKey.ToCString()); else { - aPattern = theFormats->Value(j); - aPattern += " Files ( *.* )"; + aKey = theFormats->Value(j) + ".Pattern"; + if (myResMgr->Find(aKey.ToCString())) + aPattern = myResMgr->Value(aKey.ToCString()); + else { + aPattern = theFormats->Value(j); + aPattern += " Files ( *.* )"; + } } thePatterns->Append(aPattern); } diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx index e7c263c72..1e9616700 100644 --- a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx @@ -50,7 +50,9 @@ #define UnLoadLib( handle ) dlclose( handle ); #endif -typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&, TCollection_AsciiString&); +typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&, + const TCollection_AsciiString&, + TCollection_AsciiString&); //======================================================================= //function : GetID @@ -84,9 +86,10 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const //Standard_Integer aType = aFunction->GetType(); // retrieve the file and plugin library names - TCollection_AsciiString aFileName = aCI.GetFileName(); - TCollection_AsciiString aLibName = aCI.GetPluginName(); - if (aFileName.IsEmpty() || aLibName.IsEmpty()) + TCollection_AsciiString aFileName = aCI.GetFileName(); + TCollection_AsciiString aFormatName = aCI.GetFormatName(); + TCollection_AsciiString aLibName = aCI.GetPluginName(); + if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty()) return 0; // load plugin library @@ -100,7 +103,7 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const // perform the import TCollection_AsciiString anError; - TopoDS_Shape aShape = fp( aFileName, anError ); + TopoDS_Shape aShape = fp( aFileName, aFormatName, anError ); // unload plugin library UnLoadLib( anImportLib ); diff --git a/src/IGESExport/IGESExport.cxx b/src/IGESExport/IGESExport.cxx index 591016460..1d2793d2f 100644 --- a/src/IGESExport/IGESExport.cxx +++ b/src/IGESExport/IGESExport.cxx @@ -46,26 +46,35 @@ extern "C" { SALOME_WNT_EXPORT - int Export(const TopoDS_Shape& theShape, const TCollection_AsciiString& theFileName) + int Export(const TopoDS_Shape& theShape, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& theFormatName) { MESSAGE("Export IGES into file " << theFileName.ToCString()); - try - { - //VRV: OCC 4.0 migration - IGESControl_Controller::Init(); - IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"), - Interface_Static::IVal("XSTEP.iges.writebrep.mode")); - //VRV: OCC 4.0 migration - - ICW.AddShape( theShape ); - ICW.ComputeModel(); - if ( ICW.Write( theFileName.ToCString() ) ) - return 1; - } - catch(Standard_Failure) - { - //THROW_SALOME_CORBA_EXCEPTION("Exception catched in IGESExport", SALOME::BAD_PARAM); - } + try + { + // define, whether to write only faces (5.1 IGES format) + // or shells and solids also (5.3 IGES format) + int aBrepMode = 0; + if (theFormatName.IsEqual("IGES_5_3")) + aBrepMode = 1; + + // initialize writer + IGESControl_Controller::Init(); + //IGESControl_Writer ICW (Interface_Static::CVal("write.iges.unit"), + // Interface_Static::IVal("write.iges.brep.mode")); + IGESControl_Writer ICW (Interface_Static::CVal("write.iges.unit"), aBrepMode); + + // perform shape writing + ICW.AddShape( theShape ); + ICW.ComputeModel(); + if ( ICW.Write( theFileName.ToCString() ) ) + return 1; + } + catch(Standard_Failure) + { + //THROW_SALOME_CORBA_EXCEPTION("Exception catched in IGESExport", SALOME::BAD_PARAM); + } return 0; } } diff --git a/src/IGESImport/IGESImport.cxx b/src/IGESImport/IGESImport.cxx index 3a59922c9..b6d2b953b 100644 --- a/src/IGESImport/IGESImport.cxx +++ b/src/IGESImport/IGESImport.cxx @@ -46,6 +46,7 @@ extern "C" { SALOME_WNT_EXPORT TopoDS_Shape Import (const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& /*theFormatName*/, TCollection_AsciiString& theError) { IGESControl_Reader aReader; diff --git a/src/STEPExport/STEPExport.cxx b/src/STEPExport/STEPExport.cxx index d7ed96b6f..1bd902c09 100644 --- a/src/STEPExport/STEPExport.cxx +++ b/src/STEPExport/STEPExport.cxx @@ -46,7 +46,9 @@ extern "C" { SALOME_WNT_EXPORT - int Export(const TopoDS_Shape& theShape, const TCollection_AsciiString& theFileName) + int Export(const TopoDS_Shape& theShape, + const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& /*theFormatName*/) { MESSAGE("Export STEP into file " << theFileName.ToCString()); diff --git a/src/STEPImport/STEPImport.cxx b/src/STEPImport/STEPImport.cxx index 3fb9cc511..1eb9ea062 100644 --- a/src/STEPImport/STEPImport.cxx +++ b/src/STEPImport/STEPImport.cxx @@ -52,6 +52,7 @@ extern "C" { SALOME_WNT_EXPORT TopoDS_Shape Import (const TCollection_AsciiString& theFileName, + const TCollection_AsciiString& /*theFormatName*/, TCollection_AsciiString& theError) { MESSAGE("Import STEP model from file " << theFileName.ToCString()); -- 2.39.2