[vtkusers] Low level access to Array data (OK, here's a patch suggestion)
H.Vidal, Jr.
hvidal at tesseract-tech.com
Fri Jun 13 21:05:37 EDT 2003
So it would be nice to have pointer level access to things
like the vtkIntArray from tcl. This is handy for a situation where
array data will be loaded from acquisition device for analysis under vtk.
Anyway, this works in tcl for vtkCharArray like this:
vtkCharArray c
c SetNumberOfValues 100
set p [ c GetPointer 0]
Now $p will eval to the raw contents of c because a pointer to a char
array in tcl is how tcl thinks. So I guess this is why vtk developers
left GetPointer in methods supported for vtkCharArray under tcl.
However, as mentioned in other posts, this was not case for vtkIntArray.
I still have not figured out how a tcl implementation of a C++ object is
created, but I do know that, once created, you can patch and rebuild vtk
sources as in:
So vtkIntArrayTcl.cxx is the implementation of vtkIntArray under tcl.
if you patch it thusly (skip the copious comments, if you like...):
0a1,4
> // 12-Jun-03 HCV/TT
> // 1. add GetPointer Method functionality cribbed from existing
> // vtkCharArrayTcl.cxx infrastructure
> //
327a332,359
>
> // HCV/TT: add GetPointer handler
> //
> if((!strcmp("GetPointer",argv[1])) && (argc==3))
> {
> char tempResult[100];
> long temp0;
> int *temp20;
> error = 0;
>
> if(Tcl_GetInt(interp,argv[2],&tempi) != TCL_OK) error = 1;
> temp0 = tempi;
> if(!error)
> {
> temp20 = op->GetPointer(temp0);
> if(temp20)
> {
> sprintf(tempResult,"%p",(void *)temp20);
> Tcl_SetResult(interp, tempResult, TCL_VOLATILE);
> }
> else
> {
> Tcl_ResetResult(interp);
> }
> return TCL_OK;
> }
> }
>
429a462
> Tcl_AppendResult(interp," GetPointer\t with 1 args\n",NULL);
You can then do things like:
vtkIntArray i
i SetNumberOfValues 100
set p [ i GetPointer 0]
RxIntPointer $p
If RxIntPointer looks (in C) kind of like this:
void RxIntPointer(char *pcIn)
{
int *pI;
if(!sscan(pcIn,"%p",&pI))
return;
(now access raw data via *pI indirection)
presumably, if this kind of voodoo is applied to all vtk<thingy>Array
code, everywhere high speed I/O to raw data is possible. Woo hoo!!
have fun.
hv
More information about the vtkusers
mailing list