<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2800.1106" name=GENERATOR>
<STYLE></STYLE>
</HEAD>
<BODY bgColor=#ffffff>
<DIV><FONT face=Arial size=2>hi everybody</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>i have a problem with the Execute method of my 
class. If i call it directly in a Tcl script, there is no problem but&nbsp;if I 
call via a write method (look at the script below) it doesn't launch it and says 
that there is an error. I domn't understand why</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>in attached, I have put the files</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>thanks</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>thomas</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>*********************</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>package require vtklocal</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>vtkImageReaderDB inter<BR>inter SetFileName tazc 
<BR>inter SetBeginX 1<BR>inter SetBeginY 1<BR>inter SetEndX 199<BR>inter SetEndY 
189<BR>inter SetXResolution 1<BR>inter SetYResolution 1<BR>puts [[inter 
GetOutput] GetNumberOfPoints]<BR>[inter GetOutput] Print</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>vtkTIFFWriter w<BR>w SetInput [inter 
GetOutput]<BR>w SetFileName "points.tiff"<BR>w Write</FONT></DIV>
<DIV><FONT face=Arial size=2>*****************</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>void vtkImageReaderDB::Execute() {</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;cout&lt;&lt;"debut 
reader"&lt;&lt;endl;<BR>&nbsp;PGconn&nbsp;&nbsp;&nbsp;&nbsp; 
*conn;<BR>&nbsp;&nbsp;&nbsp; PGresult&nbsp;&nbsp; 
*res;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 
int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
i,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
j;<BR>&nbsp;&nbsp;&nbsp; int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
X,<BR>&nbsp;&nbsp;Y,<BR>&nbsp;&nbsp;OriX,<BR>&nbsp;&nbsp;OriY,<BR>&nbsp;&nbsp;DelX,<BR>&nbsp;&nbsp;DelY,<BR>&nbsp;&nbsp;NameOfImage;</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp;&nbsp; * 
begin, by setting the parameters for a backend connection if 
the<BR>&nbsp;&nbsp;&nbsp;&nbsp; * parameters are null, then the system will try 
to use reasonable<BR>&nbsp;&nbsp;&nbsp;&nbsp; * defaults by looking up 
environment variables or, failing that,<BR>&nbsp;&nbsp;&nbsp;&nbsp; * using 
hardwired constants<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; pghost 

"xander.cs.uno.edu";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* host name of the backend server */<BR>&nbsp;&nbsp;&nbsp; pgport = 
"8000";&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* port of the backend server */<BR>&nbsp;&nbsp;&nbsp; pgoptions = 
NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* special 
options to start up the 
backend<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
* server */<BR>&nbsp;&nbsp;&nbsp; pgtty = 
NULL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
/* debugging tty for the backend server */<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; 
dbName = "mydb";&nbsp;&nbsp;&nbsp; /* change this to the name of your 
test<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
* database */<BR>&nbsp;<BR>&nbsp;login = "thomas";<BR>&nbsp;pass = 
"fthomas123";</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; /* make a connection to the 
database */<BR>&nbsp;&nbsp;&nbsp; conn = PQsetdbLogin(pghost, pgport, pgoptions, 
pgtty, dbName, login, pass);</FONT></DIV>
<DIV>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp;&nbsp; * 
check to see that the backend connection was successfully 
made<BR>&nbsp;&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; if (PQstatus(conn) == 
CONNECTION_BAD)<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, "Connection to 
database '%s' failed.\n", dbName);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
fprintf(stderr, "%s", 
PQerrorMessage(conn));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
PQfinish(conn);<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV>&nbsp;</DIV><FONT face=Arial size=2>
<DIV><BR>&nbsp;&nbsp;&nbsp; /* start a transaction block 
*/<BR>&nbsp;&nbsp;&nbsp; res = PQexec(conn, "BEGIN");<BR>&nbsp;&nbsp;&nbsp; if 
(!res || PQresultStatus(res) != PGRES_COMMAND_OK)<BR>&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, "BEGIN command 
failed\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
PQclear(res);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
PQfinish(conn);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp; * should PQclear PGresult 
whenever it is no longer needed to avoid<BR>&nbsp;&nbsp;&nbsp; * memory 
leaks<BR>&nbsp;&nbsp;&nbsp; */<BR>&nbsp;&nbsp;&nbsp; PQclear(res);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp; * reading information 
concerning the image in GENERAL TABLE<BR>&nbsp;&nbsp;&nbsp; */<BR>&nbsp;char 
lecture[70];<BR>&nbsp;j&nbsp; = sprintf( lecture, "%s", "DECLARE mycursor BINARY 
CURSOR FOR SELECT * FROM taz WHERE ImageName='");<BR>&nbsp;j += sprintf( lecture 
+ j, "%s", FileName);<BR>&nbsp;j += sprintf( lecture + j, "%s","'");</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp; &nbsp;res = PQexec(conn,lecture);<BR>&nbsp;&nbsp;&nbsp; if (!res || 
PQresultStatus(res) != PGRES_COMMAND_OK) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;fprintf(stderr, "DECLARE CURSOR 
command failed\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;PQclear(res);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;PQfinish(conn);<BR>&nbsp;&nbsp;&nbsp; }<BR>&nbsp;&nbsp;&nbsp; 
PQclear(res);<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp; res = PQexec(conn, "FETCH ALL in 
mycursor");<BR>&nbsp;&nbsp; &nbsp;if (!res || PQresultStatus(res) != 
PGRES_TUPLES_OK) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;fprintf(stderr, 
"FETCH ALL command didn't return tuples 
properly\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;PQclear(res);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;PQfinish(conn);<BR>&nbsp;&nbsp;&nbsp; }</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;NameOfImage = PQfnumber(res, "ImageName");<BR>&nbsp;X = 
PQfnumber(res, "NumOfX");<BR>&nbsp;Y = PQfnumber(res, "NumOfY");<BR>&nbsp;OriX = 
PQfnumber(res, "OriginX");<BR>&nbsp;OriY = PQfnumber(res, 
"OriginY");<BR>&nbsp;DelX = PQfnumber(res, "DeltaX");<BR>&nbsp;DelY = 
PQfnumber(res, "DeltaY");</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Xval;<BR>&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
Yval;<BR>&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
OriXval;<BR>&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
OriYval;<BR>&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
DelXval;<BR>&nbsp;float&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
DelYval;<BR>&nbsp;char&nbsp;&nbsp;&nbsp; *Nameval;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;i=0;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;/* we hard-wire this to the fields we know about */<BR>&nbsp;Nameval 
= PQgetvalue(res, i, NameOfImage);<BR>&nbsp;Xval = *(int *) PQgetvalue(res, i, 
X);<BR>&nbsp;Yval = *(int *) PQgetvalue(res, i, Y);<BR>&nbsp;OriXval = *(float 
*) PQgetvalue(res, i, OriX);<BR>&nbsp;OriYval = *(float *) PQgetvalue(res, i, 
OriY);<BR>&nbsp;DelXval = *(float *) PQgetvalue(res, i, DelX);<BR>&nbsp;DelYval 
= *(float *) PQgetvalue(res, i, DelY);</DIV>
<DIV>&nbsp;</DIV>
<DIV>//writing the values on 
screen<BR>&nbsp;cout&lt;&lt;Nameval&lt;&lt;endl;<BR>&nbsp;printf("x = %d\n", 
Xval);<BR>&nbsp;printf("y = %d\n", Yval);<BR>&nbsp;printf("OriX = %f\n", 
OriXval);<BR>&nbsp;printf("OriY = %f\n", OriYval);<BR>&nbsp;printf("DelX = 
%f\n", DelXval);<BR>&nbsp;printf("DelY = %f\n", DelYval);</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;/* close the cursor */<BR>&nbsp;res = PQexec(conn, "CLOSE 
mycursor");<BR>&nbsp;PQclear(res);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//initializing a vtkImageData<BR>&nbsp;int DimX = 
Xval/XResolution;<BR>&nbsp;int DimY = Yval/YResolution;<BR>&nbsp;float DeltaX = 
DelXval * (XResolution);<BR>&nbsp;float DeltaY = DelYval * (YResolution);</DIV>
<DIV>&nbsp;</DIV>
<DIV>cout&lt;&lt;DimX&lt;&lt;" "&lt;&lt;DimY&lt;&lt;" "&lt;&lt;DeltaX&lt;&lt;" 
"&lt;&lt;DeltaY&lt;&lt;endl;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;vtkImageData *sp = 
vtkImageData::New();<BR>&nbsp;sp-&gt;SetDimensions(DimX, DimY, 
1);<BR>&nbsp;sp-&gt;SetOrigin(OriXval, OriYval, 
0);<BR>&nbsp;sp-&gt;SetSpacing(DeltaX, DeltaY, 
0);<BR>&nbsp;sp-&gt;SetScalarTypeToUnsignedChar();</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>&nbsp;this-&gt;GetOutput()-&gt;SetDimensions(DimX, DimY, 
1);<BR>&nbsp;this-&gt;GetOutput()-&gt;SetOrigin(OriXval, OriYval, 
0);<BR>&nbsp;this-&gt;GetOutput()-&gt;SetSpacing(DeltaX, DeltaY, 
0);<BR>&nbsp;this-&gt;GetOutput()-&gt;SetScalarTypeToUnsignedChar();</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//read the z value<BR>&nbsp;float *readValue;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;for (i = BeginY; i &lt;= EndY; i = i + YResolution) {</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;j&nbsp; = sprintf( lecture, "%s", "DECLARE mycursorb BINARY 
CURSOR FOR SELECT * FROM "); //changer le select * en select juste ce qui 
faut????<BR>&nbsp;&nbsp;j += sprintf( lecture + j, "%s", 
Nameval);<BR>&nbsp;&nbsp;j += sprintf( lecture + j, "%s", " WHERE 
c0=");<BR>&nbsp;&nbsp;j += sprintf( lecture + j, "%d", 
i);<BR>&nbsp;<BR>&nbsp;&nbsp;res = PQexec(conn,lecture);<BR>&nbsp;&nbsp;if (!res 
|| PQresultStatus(res) != PGRES_COMMAND_OK) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr, "DECLARE 
CURSOR command failed\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;PQclear(res);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;PQfinish(conn);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;PQclear(res);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;res = PQexec(conn, "FETCH ALL in mycursorb");<BR>&nbsp;&nbsp; 
&nbsp;&nbsp;if (!res || PQresultStatus(res) != PGRES_TUPLES_OK) 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;fprintf(stderr, "FETCH ALL 
command didn't return tuples 
properly\n");<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;PQclear(res);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;PQfinish(conn);<BR>&nbsp;&nbsp;}<BR>&nbsp;&nbsp;<BR>cout&lt;&lt;i&lt;&lt;endl;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;&nbsp;//put the value into the scalar field of the 
vtkImageData<BR>&nbsp;&nbsp;for (j = BeginX; j &lt;= EndX; j = j + XResolution) 
{<BR>&nbsp;&nbsp;&nbsp;unsigned char* pixel = (unsigned char*) 
sp-&gt;GetScalarPointer(j-1,i-1,0);<BR>&nbsp;&nbsp;&nbsp;readValue = (float *) 
PQgetvalue(res, 0, j);<BR>&nbsp;&nbsp;&nbsp;*pixel = (unsigned char) 
*readValue;<BR>&nbsp;&nbsp;&nbsp;unsigned char* pixelb = (unsigned char*) 
this-&gt;GetOutput()-&gt;GetScalarPointer(j-1,i-1,0);<BR>&nbsp;&nbsp;&nbsp;*pixelb 
= (unsigned char) *readValue;<BR>&nbsp;&nbsp;}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;<BR>&nbsp;&nbsp;/* close the cursor */<BR>&nbsp;&nbsp;res = 
PQexec(conn, "CLOSE mycursorb");<BR>&nbsp;&nbsp;PQclear(res);</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;}</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;//creating an image</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;vtkTIFFWriter *tiff = 
vtkTIFFWriter::New();<BR>&nbsp;tiff-&gt;SetFileName("taz.tif");<BR>&nbsp;tiff-&gt;SetInput(sp);<BR>&nbsp;tiff-&gt;Write();<BR>&nbsp;cout&lt;&lt;tiff-&gt;GetFileName()&lt;&lt;endl;</DIV>
<DIV>&nbsp;</DIV>
<DIV>&nbsp;<BR>&nbsp;/* commit the transaction */<BR>&nbsp;res = PQexec(conn, 
"COMMIT");<BR>&nbsp;PQclear(res);<BR>&nbsp;<BR>&nbsp;/* close the connection to 
the database and cleanup */<BR>&nbsp;PQfinish(conn);</DIV>
<DIV>&nbsp;</DIV>
<DIV><BR>}</FONT></DIV></BODY></HTML>