Thank You Bill. It worked!!<br><br>Sanket Jain<br><br><div class="gmail_quote">On Thu, Dec 17, 2009 at 10:17 AM, Bill Lorensen <span dir="ltr">&lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">In tcl, if you are reusing an object in a proc, just put a catch<br>
around the construction:<br>
<br>
catch {vtkPolyDataMapper partMapper}<br>
<br>
The first time the statement is executed it will create partMapper.<br>
Subsequent calls, the statement will fail silently.<br>
<br>
Be careful when you are first writing the code. The catch can hide errors.<br>
<br>
Bill<br>
<div><div></div><div class="h5"><br>
On Thu, Dec 17, 2009 at 10:26 AM, Sanket Jain &lt;<a href="mailto:jainsanket1@gmail.com">jainsanket1@gmail.com</a>&gt; wrote:<br>
&gt; Hello Experts,,<br>
&gt;<br>
&gt; My question is a TCL question rather than a VTK question. I hope it is fine<br>
&gt; with other members. At the end, is the part of my code required for<br>
&gt; understanding my question.<br>
&gt;<br>
&gt; If you look at my code, I have defined 2 procedures: MakeSTLActor and<br>
&gt; MakeDataActor. The main function call these procedures whenever required.<br>
&gt; Now, when these procedures are called for the 1st time, only the highlighted<br>
&gt; portion of the procedure gets the job done.<br>
&gt;<br>
&gt; If the procedure is called again for the 2nd time, the interpreter<br>
&gt; give error saying that objects partMapper and partActoro (in MakeSTLActor<br>
&gt; procedure; this also implies for the objects in the other procedure) is<br>
&gt; already created. So, I can delete the partMapper object as soon as its job<br>
&gt; is done (specifically, after creation of partActoro). But I cannot delete<br>
&gt; partActoro because I have to return this object. So, next time when the<br>
&gt; procedure is called, I get the error regarding the existence of partActoro.<br>
&gt;<br>
&gt; At, this point I am using flags in my procedures (closeevent, isotrack), to<br>
&gt; delete the objects before calling the procedure for 2nd time. Although, my<br>
&gt; script runs without any bugs, I think this might not be the most elegant way<br>
&gt; of doing it. So, does any one knows a way by which I can avoid using the<br>
&gt; flags in my procedure and delete the objects (partActoro and dataActoro in<br>
&gt; the 2 procedures) before/while the return to the main function.<br>
&gt;<br>
&gt; Let me know if I need to clarify my question.<br>
&gt;<br>
&gt; Thank You,<br>
&gt;<br>
&gt; Sanket Jain<br>
&gt;<br>
&gt;<br>
&gt; # CODE STARTS HERE......<br>
&gt;<br>
&gt; package require vtk<br>
&gt;<br>
&gt; package require<br>
&gt;<br>
&gt; vtkinteractionpackage require vtktesting<br>
&gt;<br>
&gt; #... Relevant Tk Codes for building the GUI.<br>
&gt;<br>
&gt; proc main {} {<br>
&gt;<br>
&gt; #......Some Relevant TCL Codes<br>
&gt;<br>
&gt; vtkActor partActor<br>
&gt;<br>
&gt; set partActor [MakeSTLActor vtkSTLReader part]<br>
&gt;<br>
&gt; [$partActor GetProperty] SetOpacity 1<br>
&gt;<br>
&gt; vtkActor dataActor<br>
&gt;<br>
&gt; set dataActor [MakeDataActor vtkConnectivityFilter connect]<br>
&gt;<br>
&gt; #.... Other Relevant TCL Codes<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; #Make Actor for STL File<br>
&gt;<br>
&gt; proc MakeSTLActor {vtkSTLReader part} {<br>
&gt;<br>
&gt; global closeevent<br>
&gt;<br>
&gt; global isotrack<br>
&gt;<br>
&gt; if {$isotrack==1} {<br>
&gt;<br>
&gt; partMapper Delete<br>
&gt;<br>
&gt; partActoro Delete<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; if {$closeevent == 0} {<br>
&gt;<br>
&gt; partMapper Delete<br>
&gt;<br>
&gt; partActoro Delete<br>
&gt;<br>
&gt; } else {<br>
&gt;<br>
&gt; vtkPolyDataMapper partMapper<br>
&gt;<br>
&gt; partMapper SetInputConnection [$part GetOutputPort]<br>
&gt;<br>
&gt; vtkActor partActoro<br>
&gt;<br>
&gt; partActoro SetMapper partMapper<br>
&gt;<br>
&gt; return partActoro<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; # Makes Actor for the Original Data<br>
&gt;<br>
&gt; proc MakeDataActor {vtkConnectivityFilter connecto} {<br>
&gt;<br>
&gt; global closeevent<br>
&gt;<br>
&gt; global isotrack<br>
&gt;<br>
&gt; if {$isotrack==1} {<br>
&gt;<br>
&gt; dataMapper Delete<br>
&gt;<br>
&gt; prop Delete<br>
&gt;<br>
&gt; dataActoro Delete<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; if {$closeevent == 0} {<br>
&gt;<br>
&gt; dataMapper Delete<br>
&gt;<br>
&gt; prop Delete<br>
&gt;<br>
&gt; dataActoro Delete<br>
&gt;<br>
&gt; } else {<br>
&gt;<br>
&gt; vtkDataSetMapper dataMapper<br>
&gt;<br>
&gt; dataMapper SetInputConnection [$connecto GetOutputPort]<br>
&gt;<br>
&gt; vtkProperty prop<br>
&gt;<br>
&gt; prop SetOpacity 0.1<br>
&gt;<br>
&gt; vtkActor dataActoro<br>
&gt;<br>
&gt; dataActoro SetMapper dataMapper<br>
&gt;<br>
&gt; dataActoro SetProperty prop<br>
&gt;<br>
&gt; dataActoro SetOrigin 0 0 0<br>
&gt;<br>
&gt; return dataActoro<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; }<br>
&gt;<br>
&gt; #.... Similarly Defining other procedures<br>
&gt;<br>
&gt; #which creates actors and returns to the main<br>
&gt;<br>
&gt; #function which renders them.<br>
&gt;<br>
&gt; --<br>
&gt; Sanket Jain<br>
&gt;<br>
</div></div>&gt; _______________________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the VTK FAQ at:<br>
&gt; <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
&gt;<br>
&gt;<br>
</blockquote></div><br><br clear="all"><br>-- <br>Sanket Jain<br>