X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FGEOMImpl%2FGEOMImpl_ImportDriver.cxx;h=52a4cf00f2dbc748cc7bcd6d993bb0dae865371c;hb=40d76807e945ceef6a730f4d0177e167d3ccb453;hp=ee1495f0e0023c22a0425118868760dedab496f4;hpb=73555c78ebf12a1fdb85157b8e7934ad566ae90a;p=modules%2Fgeom.git diff --git a/src/GEOMImpl/GEOMImpl_ImportDriver.cxx b/src/GEOMImpl/GEOMImpl_ImportDriver.cxx index ee1495f0e..52a4cf00f 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 @@ -20,43 +20,19 @@ // 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 -#include "utilities.h" - +// OCC includes +#include #include -#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&); - //======================================================================= //function : GetID //purpose : @@ -67,7 +43,6 @@ const Standard_GUID& GEOMImpl_ImportDriver::GetID() return aImportDriver; } - //======================================================================= //function : GEOMImpl_ImportDriver //purpose : @@ -80,95 +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 - 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( 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 : GEOMImpl_ImportDriver_Type_ -//purpose : -//======================================================================= -Standard_EXPORT Handle_Standard_Type& GEOMImpl_ImportDriver_Type_() +bool GEOMImpl_ImportDriver:: +GetCreationInformation(std::string& theOperationName, + std::vector& theParams) { + if (Label().IsNull()) return 0; + Handle(GEOM_Function) function = GEOM_Function::GetFunction(Label()); - 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); + GEOMImpl_IImportExport aCI( function ); + Standard_Integer aType = function->GetType(); - return _aType; -} + theOperationName = "IMPORT"; -//======================================================================= -//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); - } + 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; } - - return _anOtherObject; + + return true; } + +IMPLEMENT_STANDARD_RTTIEXT (GEOMImpl_ImportDriver,GEOM_BaseDriver);