<div dir="ltr">In ITK we use traits to turn runtime tests into compile tests. This might help, And specialization might help to provide clamping for those types that need it.<br><br><br></div><div class="gmail_extra"><br><br>
<div class="gmail_quote">On Sun, Apr 21, 2013 at 4:14 PM, David Gobbi <span dir="ltr">&lt;<a href="mailto:david.gobbi@gmail.com" target="_blank">david.gobbi@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Yes, but performance could equally well be a non-issue.  No way to be<br>
sure without trying a fix and doing some timings.  I strongly suspect<br>
the performance hit would be negligible, given the large amount of<br>
code in InterpolateTuple().<br>
<span class="HOEnZb"><font color="#888888"><br>
 - David<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
On Sun, Apr 21, 2013 at 1:43 PM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt; wrote:<br>
&gt; Performance could be an issue.<br>
&gt;<br>
&gt;<br>
&gt; On Sun, Apr 21, 2013 at 3:39 PM, David Gobbi &lt;<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Hi Bill,<br>
&gt;&gt;<br>
&gt;&gt; I traced the code that is interpolating the scalars, and it led me to<br>
&gt;&gt; the following function in vtkDataArray.cxx, which is called from<br>
&gt;&gt; vtkDataArray::InterpolateTuple().  In fact, that is the only place<br>
&gt;&gt; this function is called from.<br>
&gt;&gt;<br>
&gt;&gt;   template &lt;class T&gt;<br>
&gt;&gt;   inline void vtkDataArrayRoundIfNecessary(double val, T* retVal)<br>
&gt;&gt;   {<br>
&gt;&gt;     *retVal = static_cast&lt;T&gt;((val&gt;=0.0)?(val + 0.5):(val - 0.5));<br>
&gt;&gt;   }<br>
&gt;&gt;<br>
&gt;&gt; It might be good for us to add a clamp here immediately before the<br>
&gt;&gt; cast, rather than to trust that the weights will never sum to a value<br>
&gt;&gt; greater than one.<br>
&gt;&gt;<br>
&gt;&gt; Either that, or vtkButterflySubdivisionFilter can be modified so that<br>
&gt;&gt; it normalizes the weights before it interpolates the scalars (i.e. it<br>
&gt;&gt; would be approximating when computing the points, but would use<br>
&gt;&gt; normalized weights when computing the scalars).  My preference,<br>
&gt;&gt; though, would be to modify vtkDataArray in order to make the fix more<br>
&gt;&gt; general.<br>
&gt;&gt;<br>
&gt;&gt;  - David<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Sun, Apr 21, 2013 at 10:12 AM, Bill Lorensen &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt; &gt; Maybe I have it this time.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Multiple problems:<br>
&gt;&gt; &gt; 1) First number of points must be used, not number of ploys<br>
&gt;&gt; &gt; 2) I think color interpolation is overflowing/underflowing the unsigned<br>
&gt;&gt; &gt; char<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Solution. Use FloatArray for colors. After subdivision,  convert the<br>
&gt;&gt; &gt; floats<br>
&gt;&gt; &gt; to unsigned chars, clamping between 0 and 255.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Attached is an example c++ that seems to work.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Sun, Apr 21, 2013 at 11:46 AM, Bill Lorensen<br>
&gt;&gt; &gt; &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;<br>
&gt;&gt; &gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Oops. I still see problems after that change.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; On Sun, Apr 21, 2013 at 11:45 AM, Bill Lorensen<br>
&gt;&gt; &gt;&gt; &lt;<a href="mailto:bill.lorensen@gmail.com">bill.lorensen@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; Found the problem.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; You want to set the point data, but your colors array is filled for<br>
&gt;&gt; &gt;&gt;&gt; NumberOfPolys. Replace NumberOfPolys with NumberOfPoints and the<br>
&gt;&gt; &gt;&gt;&gt; results<br>
&gt;&gt; &gt;&gt;&gt; look good.<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt; On Sun, Apr 21, 2013 at 10:43 AM, DivyaS &lt;<a href="mailto:div.anand141@gmail.com">div.anand141@gmail.com</a>&gt;<br>
&gt;&gt; &gt;&gt;&gt; wrote:<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; Bill,<br>
&gt;&gt; &gt;&gt;&gt;&gt;<br>
&gt;&gt; &gt;&gt;&gt;&gt; Butterfly subdivision gives me better results(shape) to the actual<br>
&gt;&gt; &gt;&gt;&gt;&gt; data<br>
&gt;&gt; &gt;&gt;&gt;&gt; i&#39;m<br>
&gt;&gt; &gt;&gt;&gt;&gt; working on. Is there no other way we can get this working? you were<br>
&gt;&gt; &gt;&gt;&gt;&gt; talking<br>
&gt;&gt; &gt;&gt;&gt;&gt; about assigned scalar float, single component values, I would like to<br>
&gt;&gt; &gt;&gt;&gt;&gt; give<br>
&gt;&gt; &gt;&gt;&gt;&gt; it a try.. could you please give me some details on that.<br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Unpaid intern in BillsBasement at noware dot com<br>
</div>