X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_ImportDriver.cxx;h=3a7159a2f1c949a5504018c76c3b9d43d2825ef3;hb=2736f682fe0d63fbaf9dff49c46b4fa6c23d72ce;hp=748a5a735993b0e7cb6c3204d0a023016353bfc1;hpb=8180539548a5038e52445454e88c1a170ee64e56;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx index 748a5a735..3a7159a2f 100644 --- a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx +++ b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -6,7 +6,7 @@ // 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. +// 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 @@ -18,50 +18,21 @@ // 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 +// internal includes +#include "GEOMImpl_ImportDriver.hxx" +#include "GEOMImpl_IImportExport.hxx" +#include "GEOMImpl_IECallBack.hxx" +#include "GEOMImpl_Types.hxx" -#include -#include -#include +// GEOM includes #include +// OCC includes +#include #include -#include - -#include "utilities.h" - -#include -#include - -#ifdef WNT -#include -#else -#include -#endif - -#ifdef WNT -#define LibHandle HMODULE -#define LoadLib( name ) LoadLibrary( name ) -#define GetProc GetProcAddress -#define UnLoadLib( handle ) FreeLibrary( handle ); -#else -#define LibHandle void* -#define LoadLib( name ) dlopen( name, RTLD_LAZY ) -#define GetProc dlsym -#define UnLoadLib( handle ) dlclose( handle ); -#endif - -typedef TopoDS_Shape (*funcPoint)(const TCollection_AsciiString&, - const TCollection_AsciiString&, - TCollection_AsciiString&, - const TDF_Label&); - -typedef Handle(TCollection_HAsciiString) (*pGetValue)(const TCollection_AsciiString&, - const TCollection_AsciiString&, - TCollection_AsciiString&); - //======================================================================= //function : GetID //purpose : @@ -84,144 +55,55 @@ GEOMImpl_ImportDriver::GEOMImpl_ImportDriver() //function : Execute //purpose : //======================================================================= -Standard_Integer GEOMImpl_ImportDriver::Execute(TFunction_Logbook& log) const +Standard_Integer GEOMImpl_ImportDriver::Execute(Handle(TFunction_Logbook)& log) const { if (Label().IsNull()) return 0; Handle(GEOM_Function) aFunction = GEOM_Function::GetFunction(Label()); GEOMImpl_IImportExport aCI (aFunction); - //Standard_Integer aType = aFunction->GetType(); // retrieve the file and plugin library names TCollection_AsciiString aFileName = aCI.GetFileName(); TCollection_AsciiString aFormatName = aCI.GetFormatName(); - TCollection_AsciiString aLibName = aCI.GetPluginName(); - if (aFileName.IsEmpty() || aFormatName.IsEmpty() || aLibName.IsEmpty()) + if (aFileName.IsEmpty() || aFormatName.IsEmpty() ) return 0; - // load plugin library - LibHandle anImportLib = LoadLib( aLibName.ToCString() ); //This is workaround of BUG OCC13051 - - // Get Import method - funcPoint fp = 0; - if ( anImportLib ) - fp = (funcPoint)GetProc( anImportLib, "Import" ); - - if ( !fp ) { - TCollection_AsciiString aMsg = aFormatName.SubString(1,4); - aMsg += " plugin was not installed"; - Standard_Failure::Raise(aMsg.ToCString()); - } - - // perform the import - TCollection_AsciiString anError; - TopoDS_Shape aShape = fp(aFileName, aFormatName, anError, aFunction->GetNamingEntry()); - - // unload plugin library - // commented by enk: - // the bug was occured: using ACIS Import/Export plugin - //UnLoadLib( anImportLib ); //This is workaround of BUG OCC13051 - - if ( aShape.IsNull() ) { - StdFail_NotDone::Raise(anError.ToCString()); + Handle(TColStd_HSequenceOfTransient) aSeq = + GEOMImpl_IECallBack::GetCallBack( aFormatName )->Import( GetDocID(), aFormatName, aFileName ); + if( aSeq.IsNull() ) return 0; - } - - // set the function result - aFunction->SetValue(aShape); - log.SetTouched(Label()); + Handle(GEOM_Object) anImported = Handle(GEOM_Object)::DownCast( aSeq->Value(1) ); + TopoDS_Shape aShape = anImported->GetValue(); + aFunction->SetValue( aShape ); + log->SetTouched(Label()); return 1; } -//======================================================================= -//function : ReadValue -//purpose : -//======================================================================= -TCollection_AsciiString GEOMImpl_ImportDriver::ReadValue(const TCollection_AsciiString& theFileName, - const TCollection_AsciiString& theLibName, - const TCollection_AsciiString& theParameterName, - TCollection_AsciiString& theError) +bool GEOMImpl_ImportDriver:: +GetCreationInformation(std::string& theOperationName, + std::vector& theParams) { - TCollection_AsciiString aValue; - - if (theFileName.IsEmpty() || theLibName.IsEmpty() || theParameterName.IsEmpty()) - return aValue; - - // load plugin library - LibHandle anImportLib = LoadLib(theLibName.ToCString()); //This is workaround of BUG OCC13051 - if (!anImportLib) { - theError = theLibName + " library was not installed"; - return aValue; - } - - // Get GetValue method - pGetValue pGV = (pGetValue)GetProc(anImportLib, "GetValue"); + if (Label().IsNull()) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - if (!pGV) { - theError = theLibName + " library doesn't support GetValue method"; - return aValue; - } + GEOMImpl_IImportExport aCI( function ); + Standard_Integer aType = function->GetType(); - Handle(TCollection_HAsciiString) aHValue = pGV(theFileName, theParameterName, theError); + theOperationName = "IMPORT"; - if (aHValue.IsNull()) { - if (theError.IsEmpty()) - theError = theFileName + " doesn't contain requested parameter"; - return aValue; + switch ( aType ) { + case IMPORT_SHAPE: + AddParam( theParams, "File name", aCI.GetFileName() ); + AddParam( theParams, "Format", aCI.GetFormatName() ); + AddParam( theParams, "Plugin name", aCI.GetPluginName() ); + break; + default: + return false; } - - aValue = aHValue->String(); - - // unload plugin library - // commented by enk: - // the bug was occured: using ACIS Import/Export plugin - //UnLoadLib( anImportLib ); //This is workaround of BUG OCC13051 - - return aValue; -} - - -//======================================================================= -//function : GEOMImpl_ImportDriver_Type_ -//purpose : -//======================================================================= -Standard_EXPORT Handle_Standard_Type& GEOMImpl_ImportDriver_Type_() -{ - - static Handle_Standard_Type aType1 = STANDARD_TYPE(TFunction_Driver); - if ( aType1.IsNull()) aType1 = STANDARD_TYPE(TFunction_Driver); - static Handle_Standard_Type aType2 = STANDARD_TYPE(MMgt_TShared); - if ( aType2.IsNull()) aType2 = STANDARD_TYPE(MMgt_TShared); - static Handle_Standard_Type aType3 = STANDARD_TYPE(Standard_Transient); - if ( aType3.IsNull()) aType3 = STANDARD_TYPE(Standard_Transient); - - - static Handle_Standard_Transient _Ancestors[]= {aType1,aType2,aType3,NULL}; - static Handle_Standard_Type _aType = new Standard_Type("GEOMImpl_ImportDriver", - sizeof(GEOMImpl_ImportDriver), - 1, - (Standard_Address)_Ancestors, - (Standard_Address)NULL); - - return _aType; + + return true; } -//======================================================================= -//function : DownCast -//purpose : -//======================================================================= -const Handle(GEOMImpl_ImportDriver) Handle(GEOMImpl_ImportDriver)::DownCast - (const Handle(Standard_Transient)& AnObject) -{ - Handle(GEOMImpl_ImportDriver) _anOtherObject; - - if (!AnObject.IsNull()) { - if (AnObject->IsKind(STANDARD_TYPE(GEOMImpl_ImportDriver))) { - _anOtherObject = Handle(GEOMImpl_ImportDriver)((Handle(GEOMImpl_ImportDriver)&)AnObject); - } - } - - return _anOtherObject; -} +IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_ImportDriver,GEOM_BaseDriver);