[Cmake] cmVTKWrapTclCommand : the VTK Tk Widgets problem/suggestion
Sebastien BARRE
sebastien at barre.nom.fr
Tue May 22 10:18:09 EDT 2001
At 13/05/2001 03:05, Sebastien BARRE wrote:
No answers, then I'll implement this one :
> VTK_WRAP_TCL(vtkRenderingTCL
> SOURCES
> RenderingTCL_SRCS
> Rendering_SRCS
> RenderingOpenGL_SRCS
> COMMANDS
> vtkTkRenderWidget
> vtkTkImageViewerWidget
> vtkTkImageWindowWidget)
i.e.
VTK_WRAP_TCL(resultingLibraryName [SOURCES] SourceListName SourceLists ...
[COMMANDS CommandName...])
No problem ?
OK then.
>Hi
>
>Yes, it's related to the compilation of the new VTK tree on Windows, but
>it merely a CMake issue.
>
>I've compiled the new VTK tree, as well as its TCL bindings. The Tcl
>examples scripts run fine... well, not so fine, there is a problem with
>the way they exit (they don't exit, the render window can not be closed
>except by killing the process). The reason : these lines in
>$(BIN)/Rendering/vtkRenderTCLInit.cxx are just missing :
>
>#include "vtkWin32RenderWindowInteractor.h"
>
>int Vtktcl_Init(Tcl_Interp *interp)
>{
>[...]
> vtkWin32RenderWindowInteractor
> ::SetClassExitMethod((void (*)(void *))Tcl_Exit, 0);
>}
>
>Of course, in order to run the Tcl examples I had to replace the usual
>"catch { load vtktcl}" with a more serious solution : "package require
>VTK". More about that a later day.
>
>Anyway, the examples using the Tk render widgets (vtkTkRenderWidget) don't
>work. The vtkTkRenderWidget command is not found (all others are).
>
>I've just checked that vtkTkRenderWidget.obj is properly linked in
>vtkRenderTCL.dll.
>
>Basically, here is what is missing to $(BIN)/Rendering/vtkRenderTCLInit.cxx :
>
>extern "C" {int VTK_EXPORT Vtktkrenderwidget_Init(Tcl_Interp *interp);}
>extern "C" {int VTK_EXPORT Vtktkimageviewerwidget_Init(Tcl_Interp *interp);}
>extern "C" {int VTK_EXPORT Vtktkimagewindowwidget_Init(Tcl_Interp *interp);}
>
>and
>
>int Vtktcl_Init(Tcl_Interp *interp)
>{
>[...]
> Vtktkrenderwidget_Init(interp);
> Vtktkimageviewerwidget_Init(interp);
> Vtktkimagewindowwidget_Init(interp);
>}
>
>As you see, these lines are used to make the interpreter know about these
>3 commands, this explains why they are unknown in the current new tree
>build (I've added them manually to vtkRenderTCLInit.cxx and I checked that
>it solved the problem). These lines were properly generated in the old
>tree (in $(BIN_OLD_TREE)/vtktcl/src/vtktcl.cxx file, without the
>VTK_EXPORT of course), but they were manually generated by Pcmaker (in
>getclasses.cxx).
>
>How are we going to handle this case in Cmake ?
>
>If you remember correctly (see Rendering/CMakeLists.txt), the Tk Widgets
>are not part of the wrapped sources, they are included specifically :
>
>IF (VTK_WRAP_TCL)
> SOURCE_FILES(RenderingTCL_SRCS
> vtkTkRenderWidget
> vtkTkImageViewerWidget
> vtkTkImageWindowWidget)
>[...]
> VTK_WRAP_TCL(vtkRenderingTCL
> RenderingTCL_SRCS
> Rendering_SRCS
> RenderingOpenGL_SRCS)
> ADD_LIBRARY(vtkRenderingTCL RenderingTCL_SRCS)
>
>I guess we might need to either introduce a new CMake command or change
>the VTK_WRAP_TCL command (Ken ?) so that it handles a new parameter type,
>for ex:
>
> VTK_WRAP_TCL(vtkRenderingTCL
> SOURCES
> RenderingTCL_SRCS
> Rendering_SRCS
> RenderingOpenGL_SRCS
> COMMANDS
> vtkTkRenderWidget
> vtkTkImageViewerWidget
> vtkTkImageWindowWidget)
>
>and this would generate the proper lines...
>
>At the moment I do not know how we are going to include lines like ...
> vtkWin32RenderWindowInteractor
> ::SetClassExitMethod((void (*)(void *))Tcl_Exit, 0);
>
>
>_______________________________________________
>Cmake mailing list
>Cmake at public.kitware.com
>http://public.kitware.com/mailman/listinfo/cmake
More information about the CMake
mailing list