PAL12003: Problem when importing IGS geometry. Export to IGES 5.3 (supporting BRep) introduced in GUI.

This commit is contained in:
jfa 2006-03-27 08:48:01 +00:00
parent b3bc1fb824
commit 9c64633f71
11 changed files with 95 additions and 52 deletions

View File

@ -1,5 +1,5 @@
Import: BREP|IGES|STEP Import: BREP|IGES|STEP
Export: BREP|IGES|STEP Export: BREP|IGES|IGES_5_3|STEP
BREP.Import: libBREPImport.so BREP.Import: libBREPImport.so
BREP.Export: libBREPExport.so BREP.Export: libBREPExport.so
@ -8,6 +8,10 @@ BREP.Pattern: BREP Files ( *.brep )
IGES.Import: libIGESImport.so IGES.Import: libIGESImport.so
IGES.Export: libIGESExport.so IGES.Export: libIGESExport.so
IGES.Pattern: IGES Files ( *.iges *.igs ) 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.Import: libSTEPImport.so
STEP.Export: libSTEPExport.so STEP.Export: libSTEPExport.so

View File

@ -21,7 +21,9 @@ extern "C"
#ifdef WNT #ifdef WNT
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
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()); MESSAGE("Export BREP into file " << theFileName.ToCString());

View File

@ -23,6 +23,7 @@ extern "C"
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
TopoDS_Shape Import (const TCollection_AsciiString& theFileName, TopoDS_Shape Import (const TCollection_AsciiString& theFileName,
const TCollection_AsciiString& /*theFormatName*/,
TCollection_AsciiString& theError) TCollection_AsciiString& theError)
{ {
MESSAGE("Import BREP from file " << theFileName); MESSAGE("Import BREP from file " << theFileName);

View File

@ -28,7 +28,9 @@ using namespace std;
#define UnLoadLib( handle ) dlclose( handle ); #define UnLoadLib( handle ) dlclose( handle );
#endif #endif
typedef int (*funcPoint)(const TopoDS_Shape&, const TCollection_AsciiString&); typedef int (*funcPoint)(const TopoDS_Shape&,
const TCollection_AsciiString&,
const TCollection_AsciiString&);
//======================================================================= //=======================================================================
//function : GetID //function : GetID
@ -70,9 +72,10 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const
aFunction->SetValue(aShape); aFunction->SetValue(aShape);
// retrieve the file and format names // retrieve the file and format names
TCollection_AsciiString aFileName = aCI.GetFileName(); TCollection_AsciiString aFileName = aCI.GetFileName();
TCollection_AsciiString aLibName = aCI.GetPluginName(); TCollection_AsciiString aFormatName = aCI.GetFormatName();
if (aFileName.IsEmpty() || aLibName.IsEmpty()) TCollection_AsciiString aLibName = aCI.GetPluginName();
if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty())
return 0; return 0;
// load plugin library // load plugin library
@ -85,7 +88,7 @@ Standard_Integer GEOMImpl_ExportDriver::Execute(TFunction_Logbook& log) const
return 0; return 0;
// perform the export // perform the export
int res = fp( aShape, aFileName ); int res = fp( aShape, aFileName, aFormatName );
// unload plugin library // unload plugin library
UnLoadLib( anExportLib ); UnLoadLib( anExportLib );

View File

@ -6,6 +6,7 @@
#define EXP_ARG_REF 1 #define EXP_ARG_REF 1
#define EXP_ARG_FILE 2 #define EXP_ARG_FILE 2
#define EXP_ARG_PLUG 3 #define EXP_ARG_PLUG 3
#define EXP_ARG_FORM 4
class GEOMImpl_IImportExport class GEOMImpl_IImportExport
{ {
@ -17,15 +18,21 @@ class GEOMImpl_IImportExport
Handle(GEOM_Function) GetOriginal() { return _func->GetReference(EXP_ARG_REF); } 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); } TCollection_AsciiString GetFileName() { return _func->GetString(EXP_ARG_FILE); }
void SetPluginName(const TCollection_AsciiString& theFormatName) void SetPluginName(const TCollection_AsciiString& thePluginLibName)
{ _func->SetString(EXP_ARG_PLUG, theFormatName); } { _func->SetString(EXP_ARG_PLUG, thePluginLibName); }
TCollection_AsciiString GetPluginName() { return _func->GetString(EXP_ARG_PLUG); } 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: private:
Handle(GEOM_Function) _func; Handle(GEOM_Function) _func;

View File

@ -126,18 +126,19 @@ void GEOMImpl_IInsertOperations::Export
//Check if the function is set correctly //Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ExportDriver::GetID()) return; if (aFunction->GetDriverGUID() != GEOMImpl_ExportDriver::GetID()) return;
//Set parameters
GEOMImpl_IImportExport aCI (aFunction);
aCI.SetOriginal(aRefFunction);
char* aFileName = (char*)theFileName;
aCI.SetFileName(aFileName);
char* aFormatName = (char*)theFormatName; char* aFormatName = (char*)theFormatName;
Handle(TCollection_HAsciiString) aHLibName; Handle(TCollection_HAsciiString) aHLibName;
if (!IsSupported(Standard_False, aFormatName, aHLibName)) { if (!IsSupported(Standard_False, aFormatName, aHLibName)) {
return; return;
} }
TCollection_AsciiString aLibName = aHLibName->String(); TCollection_AsciiString aLibName = aHLibName->String();
//Set parameters
GEOMImpl_IImportExport aCI (aFunction);
aCI.SetOriginal(aRefFunction);
char* aFileName = (char*)theFileName;
aCI.SetFileName(aFileName);
aCI.SetFormatName(aFormatName);
aCI.SetPluginName(aLibName); aCI.SetPluginName(aLibName);
//Perform the Export //Perform the Export
@ -189,17 +190,18 @@ Handle(GEOM_Object) GEOMImpl_IInsertOperations::Import
//Check if the function is set correctly //Check if the function is set correctly
if (aFunction->GetDriverGUID() != GEOMImpl_ImportDriver::GetID()) return result; if (aFunction->GetDriverGUID() != GEOMImpl_ImportDriver::GetID()) return result;
//Set parameters
GEOMImpl_IImportExport aCI (aFunction);
char* aFileName = (char*)theFileName;
aCI.SetFileName(aFileName);
char* aFormatName = (char*)theFormatName; char* aFormatName = (char*)theFormatName;
Handle(TCollection_HAsciiString) aHLibName; Handle(TCollection_HAsciiString) aHLibName;
if (!IsSupported(Standard_True, aFormatName, aHLibName)) { if (!IsSupported(Standard_True, aFormatName, aHLibName)) {
return result; return result;
} }
TCollection_AsciiString aLibName = aHLibName->String(); TCollection_AsciiString aLibName = aHLibName->String();
//Set parameters
GEOMImpl_IImportExport aCI (aFunction);
char* aFileName = (char*)theFileName;
aCI.SetFileName(aFileName);
aCI.SetFormatName(aFormatName);
aCI.SetPluginName(aLibName); aCI.SetPluginName(aLibName);
//Perform the Import //Perform the Import
@ -262,14 +264,18 @@ Standard_Boolean GEOMImpl_IInsertOperations::ImportTranslators
// Read Patterns for each supported format // Read Patterns for each supported format
int j = 1, len = theFormats->Length(); int j = 1, len = theFormats->Length();
for (; j <= len; j++) { for (; j <= len; j++) {
TCollection_AsciiString aPattern; TCollection_AsciiString aKey, aPattern;
TCollection_AsciiString aKey (theFormats->Value(j)); aKey = theFormats->Value(j) + ".ImportPattern";
aKey += ".Pattern";
if (myResMgr->Find(aKey.ToCString())) if (myResMgr->Find(aKey.ToCString()))
aPattern = myResMgr->Value(aKey.ToCString()); aPattern = myResMgr->Value(aKey.ToCString());
else { else {
aPattern = theFormats->Value(j); aKey = theFormats->Value(j) + ".Pattern";
aPattern += " Files ( *.* )"; if (myResMgr->Find(aKey.ToCString()))
aPattern = myResMgr->Value(aKey.ToCString());
else {
aPattern = theFormats->Value(j);
aPattern += " Files ( *.* )";
}
} }
thePatterns->Append(aPattern); thePatterns->Append(aPattern);
} }
@ -311,14 +317,18 @@ Standard_Boolean GEOMImpl_IInsertOperations::ExportTranslators
// Read Patterns for each supported format // Read Patterns for each supported format
int j = 1, len = theFormats->Length(); int j = 1, len = theFormats->Length();
for (; j <= len; j++) { for (; j <= len; j++) {
TCollection_AsciiString aPattern; TCollection_AsciiString aKey, aPattern;
TCollection_AsciiString aKey (theFormats->Value(j)); aKey = theFormats->Value(j) + ".ExportPattern";
aKey += ".Pattern";
if (myResMgr->Find(aKey.ToCString())) if (myResMgr->Find(aKey.ToCString()))
aPattern = myResMgr->Value(aKey.ToCString()); aPattern = myResMgr->Value(aKey.ToCString());
else { else {
aPattern = theFormats->Value(j); aKey = theFormats->Value(j) + ".Pattern";
aPattern += " Files ( *.* )"; if (myResMgr->Find(aKey.ToCString()))
aPattern = myResMgr->Value(aKey.ToCString());
else {
aPattern = theFormats->Value(j);
aPattern += " Files ( *.* )";
}
} }
thePatterns->Append(aPattern); thePatterns->Append(aPattern);
} }

View File

@ -30,7 +30,9 @@ using namespace std;
#define UnLoadLib( handle ) dlclose( handle ); #define UnLoadLib( handle ) dlclose( handle );
#endif #endif
typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&, TCollection_AsciiString&); typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&,
const TCollection_AsciiString&,
TCollection_AsciiString&);
//======================================================================= //=======================================================================
//function : GetID //function : GetID
@ -64,9 +66,10 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const
//Standard_Integer aType = aFunction->GetType(); //Standard_Integer aType = aFunction->GetType();
// retrieve the file and plugin library names // retrieve the file and plugin library names
TCollection_AsciiString aFileName = aCI.GetFileName(); TCollection_AsciiString aFileName = aCI.GetFileName();
TCollection_AsciiString aLibName = aCI.GetPluginName(); TCollection_AsciiString aFormatName = aCI.GetFormatName();
if (aFileName.IsEmpty() || aLibName.IsEmpty()) TCollection_AsciiString aLibName = aCI.GetPluginName();
if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty())
return 0; return 0;
// load plugin library // load plugin library
@ -80,7 +83,7 @@ Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const
// perform the import // perform the import
TCollection_AsciiString anError; TCollection_AsciiString anError;
TopoDS_Shape aShape = fp( aFileName, anError ); TopoDS_Shape aShape = fp( aFileName, aFormatName, anError );
// unload plugin library // unload plugin library
UnLoadLib( anImportLib ); UnLoadLib( anImportLib );

View File

@ -23,26 +23,35 @@ extern "C"
#ifdef WNT #ifdef WNT
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
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()); MESSAGE("Export IGES into file " << theFileName.ToCString());
try try
{ {
//VRV: OCC 4.0 migration // define, whether to write only faces (5.1 IGES format)
IGESControl_Controller::Init(); // or shells and solids also (5.3 IGES format)
IGESControl_Writer ICW (Interface_Static::CVal("XSTEP.iges.unit"), int aBrepMode = 0;
Interface_Static::IVal("XSTEP.iges.writebrep.mode")); if (theFormatName.IsEqual("IGES_5_3"))
//VRV: OCC 4.0 migration 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);
ICW.AddShape( theShape ); // perform shape writing
ICW.ComputeModel(); ICW.AddShape( theShape );
if ( ICW.Write( theFileName.ToCString() ) ) ICW.ComputeModel();
return 1; if ( ICW.Write( theFileName.ToCString() ) )
} return 1;
}
catch(Standard_Failure) catch(Standard_Failure)
{ {
//THROW_SALOME_CORBA_EXCEPTION("Exception catched in IGESExport", SALOME::BAD_PARAM); //THROW_SALOME_CORBA_EXCEPTION("Exception catched in IGESExport", SALOME::BAD_PARAM);
} }
return 0; return 0;
} }
} }

View File

@ -23,6 +23,7 @@ extern "C"
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
TopoDS_Shape Import (const TCollection_AsciiString& theFileName, TopoDS_Shape Import (const TCollection_AsciiString& theFileName,
const TCollection_AsciiString& /*theFormatName*/,
TCollection_AsciiString& theError) TCollection_AsciiString& theError)
{ {
IGESControl_Reader aReader; IGESControl_Reader aReader;

View File

@ -23,7 +23,9 @@ extern "C"
#ifdef WNT #ifdef WNT
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
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()); MESSAGE("Export STEP into file " << theFileName.ToCString());

View File

@ -29,6 +29,7 @@ extern "C"
__declspec(__dllexport) __declspec(__dllexport)
#endif #endif
TopoDS_Shape Import (const TCollection_AsciiString& theFileName, TopoDS_Shape Import (const TCollection_AsciiString& theFileName,
const TCollection_AsciiString& /*theFormatName*/,
TCollection_AsciiString& theError) TCollection_AsciiString& theError)
{ {
MESSAGE("Import STEP model from file " << theFileName.ToCString()); MESSAGE("Import STEP model from file " << theFileName.ToCString());