<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">The following is code that I wrote some years ago that takes a 3D path and smoothes the corners by a requested smoothing radius. It may be used as a preprocessor before calling a tube filter. It is in python and uses the euclid package, but it should be easy to translate to whatever language and system you need:<br>
<br><pre class=""><span style="color:rgb(160,32,240)">def</span> <span style="color:rgb(0,0,255)">smooth_corner_points</span>(points,
                         smooth_dist = 2,
                         num_corner_smooth_points = 5):
    <span style="color:rgb(0,139,0)">"""Smooth corners of the input path in points by adding additional</span>
<span style="color:rgb(0,139,0)">    points corresponding to connecting the pair of points at a respective</span>
<span style="color:rgb(0,139,0)">    distance of smooth_dist from a corner by a circular arc with</span>
<span style="color:rgb(0,139,0)">    num_corner_smooth_points extra points.</span>
<span style="color:rgb(0,139,0)">    """</span>
    <span style="color:rgb(160,32,240)">if</span> num_corner_smooth_points < 2:
        <span style="color:rgb(160,32,240)">return</span> points

    <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">This section takes a list of points and calculates a new list</span>
    <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">of points that have new nodes added to make corners "smoother".</span>
    points_smooth = []
    prev_vdir = <span style="color:rgb(160,32,240)">None</span>
    <span style="color:rgb(160,32,240)">for</span> i <span style="color:rgb(160,32,240)">in</span> <span style="color:rgb(160,32,240)">range</span>(len(points)):
        p = points[i]

        <span style="color:rgb(160,32,240)">if</span> i < <span style="color:rgb(160,32,240)">len</span>(points)-1:
            vdir = points[i+1]-points[i]

        <span style="color:rgb(160,32,240)">if</span> <span style="color:rgb(160,32,240)">not</span> prev_vdir <span style="color:rgb(160,32,240)">is</span> <span style="color:rgb(160,32,240)">None</span>:
            circle_vdir = (0.5*(prev_vdir.normalized()+vdir.normalized())).normalized()
        <span style="color:rgb(160,32,240)">else:</span>
            circle_vdir = vdir.normalized()

        <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">Calculate smoothing for interior points</span>
        <span style="color:rgb(160,32,240)">if</span> i>0 <span style="color:rgb(160,32,240)">and</span> i < <span style="color:rgb(160,32,240)">len</span>(points)-1:
            sd = smooth_dist
            <span style="color:rgb(160,32,240)">if</span> sd > prev_vdir.magnitude()/3:
                sd = prev_vdir.magnitude()/3
            <span style="color:rgb(160,32,240)">if</span> sd > vdir.magnitude()/3:
                sd = vdir.magnitude()/3
<span style="color:rgb(178,34,34)">#            </span><span style="color:rgb(178,34,34)">print "sd = ", sd</span>
            s1 = p - sd*prev_vdir.normalized()
            s2 = p + sd*vdir.normalized()

            <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">Calc the smooth point.</span>
            theta = math.pi - math.acos(prev_vdir.normalized()
                                        .dot(vdir.normalized()))
<span style="color:rgb(178,34,34)">#            </span><span style="color:rgb(178,34,34)">print "theta = ", theta*rad2deg</span>
            smooth_radius = sd * math.tan(theta/2)
            vperp = prev_vdir.cross(vdir).normalized()
            vplane = vperp.cross(prev_vdir).normalized()
            sr = s1 + vplane * smooth_radius

            <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">Replace p with several smooth points</span>
            beta = 2.0 * (math.pi/2-theta/2)
            <span style="color:rgb(160,32,240)">for</span> j <span style="color:rgb(160,32,240)">in</span> <span style="color:rgb(160,32,240)">range</span>(num_corner_smooth_points):
                <span style="color:rgb(178,34,34)"># </span><span style="color:rgb(178,34,34)">Angle to rotate around</span>
                b = beta/(num_corner_smooth_points-1)*j
                pp = sr + smooth_radius * (-math.cos(b) * vplane
                                           + math.sin(b) * prev_vdir.normalized())
                points_smooth += [pp]
        <span style="color:rgb(160,32,240)">else:</span>
            points_smooth += [p]
        prev_vdir = vdir

    <span style="color:rgb(160,32,240)">return</span> points_smooth</pre><br></div><div style id="divCleekiAttrib"></div><div style id="divCleekiAttrib"></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">
On Sun, May 11, 2014 at 5:35 PM, Bill Lorensen <span dir="ltr"><<a href="mailto:bill.lorensen@gmail.com" target="_blank">bill.lorensen@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
You could try the vtkImplicitModeller. The resulting line resolution<br>
will depend on the sample size. 'll see if I can put together an<br>
example in the next day or two…<br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Sat, May 10, 2014 at 7:39 PM, Ahmet Doğan <<a href="mailto:isimtic@gmail.com">isimtic@gmail.com</a>> wrote:<br>
> That way, I need to write a filter which can cut the edge and put there a<br>
> arcs correlated with angle.<br>
><br>
> On 10.05.2014 23:16, Bill Lorensen wrote:<br>
>><br>
>> That is the best we can do...<br>
>><br>
>><br>
>> On Sat, May 10, 2014 at 4:01 PM, Ahmet Doğan <<a href="mailto:isimtic@gmail.com">isimtic@gmail.com</a>> wrote:<br>
>>><br>
>>> Hi Bill,<br>
>>><br>
>>> <a href="http://i61.tinypic.com/2ps15dd.jpg" target="_blank">http://i61.tinypic.com/2ps15dd.jpg</a><br>
>>><br>
>>> Thank you for answer vtkStripper has closed gap on edge but still sharp I<br>
>>> want to have soft edge like in image.<br>
>>> By the way after I applied the vtkStripper one has been thicker than two<br>
>>> why?<br>
>>><br>
>>> Kind Regards.<br>
>>><br>
>>><br>
>>> On 10.05.2014 22:41, Bill Lorensen wrote:<br>
>>>><br>
>>>> Pass your polydata through vtkStripper before you run the TibeFilter.<br>
>>>><br>
>>>><br>
>>>> On Sat, May 10, 2014 at 3:15 PM, Ahmet Doğan <<a href="mailto:isimtic@gmail.com">isimtic@gmail.com</a>> wrote:<br>
>>>>><br>
>>>>> Hi Dženan,<br>
>>>>> spline isn't exactly I need. I want to bend polyline edges like in<br>
>>>>> picture.<br>
>>>>> Is there any way to do it in vtk.<br>
>>>>><br>
>>>>> <a href="http://i57.tinypic.com/t658as.jpg" target="_blank">http://i57.tinypic.com/t658as.jpg</a><br>
>>>>><br>
>>>>> Kind Regards.<br>
>>>>><br>
>>>>> On 10.05.2014 00:38, Dženan Zukić wrote:<br>
>>>>><br>
>>>>> I doubt something like that already exists. However you should search<br>
>>>>> through the hierarchy, with this as the starting point:<br>
>>>>> <a href="http://www.vtk.org/doc/nightly/html/classvtkSplineFilter.html" target="_blank">http://www.vtk.org/doc/nightly/html/classvtkSplineFilter.html</a><br>
>>>>><br>
>>>>><br>
>>>>> On Fri, May 9, 2014 at 11:08 PM, Ahmet Doğan <<a href="mailto:isimtic@gmail.com">isimtic@gmail.com</a>> wrote:<br>
>>>>>><br>
>>>>>> Hi Dženan,<br>
>>>>>> Thank you for answer, i mean exactly smoothing polyline edges.<br>
>>>>>> For example like here:<br>
>>>>>><br>
>>>>>><br>
>>>>>> <a href="http://stackoverflow.com/questions/10162864/how-to-soften-the-edges-of-a-polyline" target="_blank">http://stackoverflow.com/questions/10162864/how-to-soften-the-edges-of-a-polyline</a><br>

>>>>>> and I dont want to interpolate all lines just edges.<br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>>> On <a href="tel:09.05.2014%2017" value="+46905201417">09.05.2014 17</a>:12, Dženan Zukić wrote:<br>
>>>>>><br>
>>>>>> Does tubeFilter->CappingOn() do what you want? Otherwise you should<br>
>>>>>> explain in more detail what you want, because it is not clear to me.<br>
>>>>>><br>
>>>>>><br>
>>>>>> On Fri, May 9, 2014 at 11:16 AM, isimtic <<a href="mailto:isimtic@gmail.com">isimtic@gmail.com</a>> wrote:<br>
>>>>>>><br>
>>>>>>> Hi everyone,<br>
>>>>>>><br>
>>>>>>> I just want to smooth or interpolate edges not all how can I do that<br>
>>>>>>> in<br>
>>>>>>> vtk<br>
>>>>>>> when I work with polyline in polydata. I am gonna use it with tube<br>
>>>>>>> filter<br>
>>>>>>> and I dont want edges to open<br>
>>>>>>><br>
>>>>>>> Kind Regards.<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> --<br>
>>>>>>> View this message in context:<br>
>>>>>>><br>
>>>>>>><br>
>>>>>>> <a href="http://vtk.1045678.n5.nabble.com/How-to-soften-the-edges-of-a-polyline-tp5727045.html" target="_blank">http://vtk.1045678.n5.nabble.com/How-to-soften-the-edges-of-a-polyline-tp5727045.html</a><br>

>>>>>>> Sent from the VTK - Users mailing list archive at Nabble.com.<br>
>>>>>>> _______________________________________________<br>
>>>>>>> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
>>>>>>><br>
>>>>>>> Visit other Kitware open-source projects at<br>
>>>>>>> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
>>>>>>><br>
>>>>>>> Please keep messages on-topic and check the VTK FAQ at:<br>
>>>>>>> <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
>>>>>>><br>
>>>>>>> Follow this link to subscribe/unsubscribe:<br>
>>>>>>> <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
>>>>>><br>
>>>>>><br>
>>>>>><br>
>>>>><br>
>>>>> _______________________________________________<br>
>>>>> Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
>>>>><br>
>>>>> Visit other Kitware open-source projects at<br>
>>>>> <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
>>>>><br>
>>>>> Please keep messages on-topic and check the VTK FAQ at:<br>
>>>>> <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
>>>>><br>
>>>>> Follow this link to subscribe/unsubscribe:<br>
>>>>> <a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
>>>>><br>
>>>><br>
>><br>
>><br>
><br>
<br>
<br>
<br>
</div></div><div class="im HOEnZb">--<br>
Unpaid intern in BillsBasement at noware dot com<br>
</div><div class="HOEnZb"><div class="h5">_______________________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Please keep messages on-topic and check the VTK FAQ at: <a href="http://www.vtk.org/Wiki/VTK_FAQ" target="_blank">http://www.vtk.org/Wiki/VTK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.vtk.org/mailman/listinfo/vtkusers" target="_blank">http://www.vtk.org/mailman/listinfo/vtkusers</a><br>
</div></div></blockquote></div><br></div>