discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Making smooth transitions on a handle

RV
Roel Vanhout
Mon, Jan 20, 2025 2:45 PM

Hello all,

Another day, another filleting question! I know there have been many of
these lately (well, I guess there have always been), but I can't figure out
how to apply any of the solutions in those to my current problem, so I'm
hoping someone can point me in the right direction. I'm open to using
Python as well if that makes it easier.

Essentially I want to create a handle with no sharp corners. I have
attached a crude example that I made in Blender. What I did there was start
out with a 2d version of the cross section of the handle, which is an
ellipse that is more squished (at least I think that's the professional
mathematician's term for it) at the top than it is at bottom. That shape is
then extruded along a Bezier curve. Then the bottom few rings of edges are
scaled in the X and Y axes, each subsequent one a bit less, the amounts of
the scaling factors forming an exponential decay curve or some such.

I don't think this sort of direct edge manipulation is possible in
OpenSCAD, but I also can't think of a CSG equivalent of these operations. I
mentioned Python OpenSCAD above because I know it has an extrude along path
function, which would get me partly there, but can I also then select and
manipulate vertices on the result mesh? Or can I go the other way around -
scale the cross section 2d shape on each segment of the bezier and then do
a hull() of all the result 2d shapes in plain OpenSCAD? Thanks!

[image: image.png]

Hello all, Another day, another filleting question! I know there have been many of these lately (well, I guess there have always been), but I can't figure out how to apply any of the solutions in those to my current problem, so I'm hoping someone can point me in the right direction. I'm open to using Python as well if that makes it easier. Essentially I want to create a handle with no sharp corners. I have attached a crude example that I made in Blender. What I did there was start out with a 2d version of the cross section of the handle, which is an ellipse that is more squished (at least I think that's the professional mathematician's term for it) at the top than it is at bottom. That shape is then extruded along a Bezier curve. Then the bottom few rings of edges are scaled in the X and Y axes, each subsequent one a bit less, the amounts of the scaling factors forming an exponential decay curve or some such. I don't think this sort of direct edge manipulation is possible in OpenSCAD, but I also can't think of a CSG equivalent of these operations. I mentioned Python OpenSCAD above because I know it has an extrude along path function, which would get me partly there, but can I also then select and manipulate vertices on the result mesh? Or can I go the other way around - scale the cross section 2d shape on each segment of the bezier and then do a hull() of all the result 2d shapes in plain OpenSCAD? Thanks! [image: image.png]
SP
Sanjeev Prabhakar
Mon, Jan 20, 2025 3:49 PM

If you are trying something like this,
I can explain the process I use.
[image: Screenshot 2025-01-20 at 9.jpg]
Although the code is written, but it might be very intimidating initially

On Mon, 20 Jan 2025 at 20:15, Roel Vanhout via Discuss <
discuss@lists.openscad.org> wrote:

Hello all,

Another day, another filleting question! I know there have been many of
these lately (well, I guess there have always been), but I can't figure out
how to apply any of the solutions in those to my current problem, so I'm
hoping someone can point me in the right direction. I'm open to using
Python as well if that makes it easier.

Essentially I want to create a handle with no sharp corners. I have
attached a crude example that I made in Blender. What I did there was start
out with a 2d version of the cross section of the handle, which is an
ellipse that is more squished (at least I think that's the professional
mathematician's term for it) at the top than it is at bottom. That shape is
then extruded along a Bezier curve. Then the bottom few rings of edges are
scaled in the X and Y axes, each subsequent one a bit less, the amounts of
the scaling factors forming an exponential decay curve or some such.

I don't think this sort of direct edge manipulation is possible in
OpenSCAD, but I also can't think of a CSG equivalent of these operations. I
mentioned Python OpenSCAD above because I know it has an extrude along path
function, which would get me partly there, but can I also then select and
manipulate vertices on the result mesh? Or can I go the other way around -
scale the cross section 2d shape on each segment of the bezier and then do
a hull() of all the result 2d shapes in plain OpenSCAD? Thanks!

[image: image.png]


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

If you are trying something like this, I can explain the process I use. [image: Screenshot 2025-01-20 at 9.jpg] Although the code is written, but it might be very intimidating initially On Mon, 20 Jan 2025 at 20:15, Roel Vanhout via Discuss < discuss@lists.openscad.org> wrote: > Hello all, > > Another day, another filleting question! I know there have been many of > these lately (well, I guess there have always been), but I can't figure out > how to apply any of the solutions in those to my current problem, so I'm > hoping someone can point me in the right direction. I'm open to using > Python as well if that makes it easier. > > Essentially I want to create a handle with no sharp corners. I have > attached a crude example that I made in Blender. What I did there was start > out with a 2d version of the cross section of the handle, which is an > ellipse that is more squished (at least I think that's the professional > mathematician's term for it) at the top than it is at bottom. That shape is > then extruded along a Bezier curve. Then the bottom few rings of edges are > scaled in the X and Y axes, each subsequent one a bit less, the amounts of > the scaling factors forming an exponential decay curve or some such. > > I don't think this sort of direct edge manipulation is possible in > OpenSCAD, but I also can't think of a CSG equivalent of these operations. I > mentioned Python OpenSCAD above because I know it has an extrude along path > function, which would get me partly there, but can I also then select and > manipulate vertices on the result mesh? Or can I go the other way around - > scale the cross section 2d shape on each segment of the bezier and then do > a hull() of all the result 2d shapes in plain OpenSCAD? Thanks! > > > [image: image.png] > > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
SP
Sanjeev Prabhakar
Mon, Jan 20, 2025 4:22 PM

This seems a little better
[image: Screenshot 2025-01-20 at 9 (1).jpg]

This seems a little better [image: Screenshot 2025-01-20 at 9 (1).jpg]
SP
Sanjeev Prabhakar
Tue, Jan 21, 2025 2:32 AM

this video will explain it better:
https://youtu.be/gtiWLeg0l_c

this video will explain it better: https://youtu.be/gtiWLeg0l_c
RV
Roel Vanhout
Tue, Jan 21, 2025 12:16 PM

This is mighty impressive, thank you. I only partly understand what's going
on but I've only watched the video twice now. Where do I find documentation
on functions like ip_fillet_surf_closed(), which seems to do the heavy
lifting of the part I was most unsure about? Is it a matter of downloading
the package and looking at the source or is there documentation somewhere?
Thanks.

regards,

Roel

On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar sprabhakar2006@gmail.com
wrote:

this video will explain it better:
https://youtu.be/gtiWLeg0l_c

This is mighty impressive, thank you. I only partly understand what's going on but I've only watched the video twice now. Where do I find documentation on functions like ip_fillet_surf_closed(), which seems to do the heavy lifting of the part I was most unsure about? Is it a matter of downloading the package and looking at the source or is there documentation somewhere? Thanks. regards, Roel On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar <sprabhakar2006@gmail.com> wrote: > this video will explain it better: > https://youtu.be/gtiWLeg0l_c >
SP
Sanjeev Prabhakar
Tue, Jan 21, 2025 12:48 PM

You can download the files
openscad2.py
dependencies2.scad
From here:
https://github.com/sprabhakar2006/openSCAD

All the explanation of the functions can be found in the file openscad2.py

I am using Jupyter notebook to write codes, but you can use anything you
like for writing python code.

You can keep the above 2 files in the same folder where you intended to
create models.

Thanks

On Tue, 21 Jan, 2025, 5:47 pm Roel Vanhout, roel.vanhout@gmail.com wrote:

This is mighty impressive, thank you. I only partly understand what's
going on but I've only watched the video twice now. Where do I find
documentation on functions like ip_fillet_surf_closed(), which seems to do
the heavy lifting of the part I was most unsure about? Is it a matter of
downloading the package and looking at the source or is there documentation
somewhere? Thanks.

regards,

Roel

On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar <
sprabhakar2006@gmail.com> wrote:

this video will explain it better:
https://youtu.be/gtiWLeg0l_c

You can download the files openscad2.py dependencies2.scad From here: https://github.com/sprabhakar2006/openSCAD All the explanation of the functions can be found in the file openscad2.py I am using Jupyter notebook to write codes, but you can use anything you like for writing python code. You can keep the above 2 files in the same folder where you intended to create models. Thanks On Tue, 21 Jan, 2025, 5:47 pm Roel Vanhout, <roel.vanhout@gmail.com> wrote: > This is mighty impressive, thank you. I only partly understand what's > going on but I've only watched the video twice now. Where do I find > documentation on functions like ip_fillet_surf_closed(), which seems to do > the heavy lifting of the part I was most unsure about? Is it a matter of > downloading the package and looking at the source or is there documentation > somewhere? Thanks. > > regards, > > Roel > > > On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar < > sprabhakar2006@gmail.com> wrote: > >> this video will explain it better: >> https://youtu.be/gtiWLeg0l_c >> >
RW
Raymond West
Wed, Jan 22, 2025 2:29 PM

I posted some code wrt filleting tube joints about two weeks ago - the
concept will do what you want to do wrt the smooth transition (fillet)
for your handle. You can then produce your object in plain openscad,
although python has advantages. I'm not producing the code to solve your
specific problem, but the image below is similar enough to show that a
solution is quite feasible in openscad. (the square tube represents the
flat surface and the tube the handle.)

To generate the fillet, you intersect the two pieces , increased by the
size of the fillet. The 'hulled' result is a fillet, but with straight
sides, maybe you would call it a chamfer. In the example I've pictured
above, then imagine a line around the branched small pipe, at a distance
of the fillet from the flat face of the square tube, and a line on the
flat surface of the tube created by a pipe of  diameter plus 2fillet at
the same angle as the pipe. Let h be the distance that the square pipe
is increased, and v the amount  that the small pipe radius is increased
(in this first instance both h and v are equal to the size of the
fillet). Now you decide how smooth you want the radius to be. Let's say
you want ten steps. If you then do intersections from 0.1
h to 0.9v,
and from 0.2
h to 0.8v and so on, until 0.9h to 0.1*v, you get various
diameter intersections. These intersections give an outside smooth edge
(with the ten steps).

On 21/01/2025 12:16, Roel Vanhout via Discuss wrote:

This is mighty impressive, thank you. I only partly understand what's
going on but I've only watched the video twice now. Where do I find
documentation on functions like ip_fillet_surf_closed(), which seems
to do the heavy lifting of the part I was most unsure about? Is it a
matter of downloading the package and looking at the source or is
there documentation somewhere? Thanks.

regards,

Roel

On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar
sprabhakar2006@gmail.com wrote:

 this video will explain it better:
 https://youtu.be/gtiWLeg0l_c

OpenSCAD mailing list
To unsubscribe send an email todiscuss-leave@lists.openscad.org

I posted some code wrt filleting tube joints about two weeks ago - the concept will do what you want to do wrt the smooth transition (fillet) for your handle. You can then produce your object in plain openscad, although python has advantages. I'm not producing the code to solve your specific problem, but the image below is similar enough to show that a solution is quite feasible in openscad. (the square tube represents the flat surface and the tube the handle.) To generate the fillet, you intersect the two pieces , increased by the size of the fillet. The 'hulled' result is a fillet, but with straight sides, maybe you would call it a chamfer. In the example I've pictured above, then imagine a line around the branched small pipe, at a distance of the fillet from the flat face of the square tube, and a line on the flat surface of the tube created by a pipe of  diameter plus 2*fillet at the same angle as the pipe. Let h be the distance that the square pipe is increased, and v the amount  that the small pipe radius is increased (in this first instance both h and v are equal to the size of the fillet). Now you decide how smooth you want the radius to be. Let's say you want ten steps. If you then do intersections from 0.1*h to 0.9*v, and from 0.2*h to 0.8*v and so on, until 0.9*h to 0.1*v, you get various diameter intersections. These intersections give an outside smooth edge (with the ten steps). On 21/01/2025 12:16, Roel Vanhout via Discuss wrote: > This is mighty impressive, thank you. I only partly understand what's > going on but I've only watched the video twice now. Where do I find > documentation on functions like ip_fillet_surf_closed(), which seems > to do the heavy lifting of the part I was most unsure about? Is it a > matter of downloading the package and looking at the source or is > there documentation somewhere? Thanks. > > regards, > > Roel > > > On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar > <sprabhakar2006@gmail.com> wrote: > > this video will explain it better: > https://youtu.be/gtiWLeg0l_c > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email todiscuss-leave@lists.openscad.org
SP
Sanjeev Prabhakar
Wed, Jan 22, 2025 3:38 PM

Hi Ray,
This looks very nice
I would suggest you to develop some generic function or module to do such
fillets. Even if it is for some specific application.
Regards

On Wed, 22 Jan, 2025, 7:59 pm Raymond West via Discuss, <
discuss@lists.openscad.org> wrote:

I posted some code wrt filleting tube joints about two weeks ago - the
concept will do what you want to do wrt the smooth transition (fillet) for
your handle. You can then produce your object in plain openscad, although
python has advantages. I'm not producing the code to solve your specific
problem, but the image below is similar enough to show that a solution is
quite feasible in openscad. (the square tube represents the flat surface
and the tube the handle.)

To generate the fillet, you intersect the two pieces , increased by the
size of the fillet. The 'hulled' result is a fillet, but with straight
sides, maybe you would call it a chamfer. In the example I've pictured
above, then imagine a line around the branched small pipe, at a distance of
the fillet from the flat face of the square tube, and a line on the flat
surface of the tube created by a pipe of  diameter plus 2fillet at the
same angle as the pipe. Let h be the distance that the square pipe is
increased, and v the amount  that the small pipe radius is increased (in
this first instance both h and v are equal to the size of the fillet). Now
you decide how smooth you want the radius to be. Let's say you want ten
steps. If you then do intersections from 0.1
h to 0.9v, and from 0.2h to
0.8v and so on, until 0.9h to 0.1*v, you get various diameter
intersections. These intersections give an outside smooth edge (with the
ten steps).

On 21/01/2025 12:16, Roel Vanhout via Discuss wrote:

This is mighty impressive, thank you. I only partly understand what's
going on but I've only watched the video twice now. Where do I find
documentation on functions like ip_fillet_surf_closed(), which seems to do
the heavy lifting of the part I was most unsure about? Is it a matter of
downloading the package and looking at the source or is there documentation
somewhere? Thanks.

regards,

Roel

On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar <
sprabhakar2006@gmail.com> wrote:

this video will explain it better:
https://youtu.be/gtiWLeg0l_c


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

Hi Ray, This looks very nice I would suggest you to develop some generic function or module to do such fillets. Even if it is for some specific application. Regards On Wed, 22 Jan, 2025, 7:59 pm Raymond West via Discuss, < discuss@lists.openscad.org> wrote: > I posted some code wrt filleting tube joints about two weeks ago - the > concept will do what you want to do wrt the smooth transition (fillet) for > your handle. You can then produce your object in plain openscad, although > python has advantages. I'm not producing the code to solve your specific > problem, but the image below is similar enough to show that a solution is > quite feasible in openscad. (the square tube represents the flat surface > and the tube the handle.) > > > To generate the fillet, you intersect the two pieces , increased by the > size of the fillet. The 'hulled' result is a fillet, but with straight > sides, maybe you would call it a chamfer. In the example I've pictured > above, then imagine a line around the branched small pipe, at a distance of > the fillet from the flat face of the square tube, and a line on the flat > surface of the tube created by a pipe of diameter plus 2*fillet at the > same angle as the pipe. Let h be the distance that the square pipe is > increased, and v the amount that the small pipe radius is increased (in > this first instance both h and v are equal to the size of the fillet). Now > you decide how smooth you want the radius to be. Let's say you want ten > steps. If you then do intersections from 0.1*h to 0.9*v, and from 0.2*h to > 0.8*v and so on, until 0.9*h to 0.1*v, you get various diameter > intersections. These intersections give an outside smooth edge (with the > ten steps). > > On 21/01/2025 12:16, Roel Vanhout via Discuss wrote: > > This is mighty impressive, thank you. I only partly understand what's > going on but I've only watched the video twice now. Where do I find > documentation on functions like ip_fillet_surf_closed(), which seems to do > the heavy lifting of the part I was most unsure about? Is it a matter of > downloading the package and looking at the source or is there documentation > somewhere? Thanks. > > regards, > > Roel > > > On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar < > sprabhakar2006@gmail.com> wrote: > >> this video will explain it better: >> https://youtu.be/gtiWLeg0l_c >> > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
SP
Sanjeev Prabhakar
Wed, Jan 22, 2025 4:11 PM

posted a video on the concept of drawing a fillet with 3 lines.
I initially started with this and later created a little more complex
examples.
https://youtu.be/yXDSiOUsHTE

posted a video on the concept of drawing a fillet with 3 lines. I initially started with this and later created a little more complex examples. https://youtu.be/yXDSiOUsHTE
RV
Roel Vanhout
Wed, Jan 22, 2025 4:23 PM

Thank you for this, and I think I did see and studied your earlier example,
but it wasn't clear to me how to do this on a non-cilinder shape. Your
example is already covered in BOSL2's join_prism, which natively supports
your example, but not when trying to join an irregular shape like I was.
But maybe I'm misunderstanding something. I'm studying Sanjeev's solution,
in parallel with a solution I wrote in plain Python, until I understand the
various approaches well enough to come up with a plain OpenSCAD solution;
although my approach for now is to just generate faces following the
algorithm I described as the Blender workflow in my original email. Overall
at this point it has turned into a study project for me, to better
understand the process of generating faces for filleting, so thanks for
your help.

Cheers

On Wed, Jan 22, 2025, 15:29 Raymond West via Discuss <
discuss@lists.openscad.org> wrote:

I posted some code wrt filleting tube joints about two weeks ago - the
concept will do what you want to do wrt the smooth transition (fillet) for
your handle. You can then produce your object in plain openscad, although
python has advantages. I'm not producing the code to solve your specific
problem, but the image below is similar enough to show that a solution is
quite feasible in openscad. (the square tube represents the flat surface
and the tube the handle.)

To generate the fillet, you intersect the two pieces , increased by the
size of the fillet. The 'hulled' result is a fillet, but with straight
sides, maybe you would call it a chamfer. In the example I've pictured
above, then imagine a line around the branched small pipe, at a distance of
the fillet from the flat face of the square tube, and a line on the flat
surface of the tube created by a pipe of  diameter plus 2fillet at the
same angle as the pipe. Let h be the distance that the square pipe is
increased, and v the amount  that the small pipe radius is increased (in
this first instance both h and v are equal to the size of the fillet). Now
you decide how smooth you want the radius to be. Let's say you want ten
steps. If you then do intersections from 0.1
h to 0.9v, and from 0.2h to
0.8v and so on, until 0.9h to 0.1*v, you get various diameter
intersections. These intersections give an outside smooth edge (with the
ten steps).

On 21/01/2025 12:16, Roel Vanhout via Discuss wrote:

This is mighty impressive, thank you. I only partly understand what's
going on but I've only watched the video twice now. Where do I find
documentation on functions like ip_fillet_surf_closed(), which seems to do
the heavy lifting of the part I was most unsure about? Is it a matter of
downloading the package and looking at the source or is there documentation
somewhere? Thanks.

regards,

Roel

On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar <
sprabhakar2006@gmail.com> wrote:

this video will explain it better:
https://youtu.be/gtiWLeg0l_c


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org


OpenSCAD mailing list
To unsubscribe send an email to discuss-leave@lists.openscad.org

Thank you for this, and I think I did see and studied your earlier example, but it wasn't clear to me how to do this on a non-cilinder shape. Your example is already covered in BOSL2's join_prism, which natively supports your example, but not when trying to join an irregular shape like I was. But maybe I'm misunderstanding something. I'm studying Sanjeev's solution, in parallel with a solution I wrote in plain Python, until I understand the various approaches well enough to come up with a plain OpenSCAD solution; although my approach for now is to just generate faces following the algorithm I described as the Blender workflow in my original email. Overall at this point it has turned into a study project for me, to better understand the process of generating faces for filleting, so thanks for your help. Cheers On Wed, Jan 22, 2025, 15:29 Raymond West via Discuss < discuss@lists.openscad.org> wrote: > I posted some code wrt filleting tube joints about two weeks ago - the > concept will do what you want to do wrt the smooth transition (fillet) for > your handle. You can then produce your object in plain openscad, although > python has advantages. I'm not producing the code to solve your specific > problem, but the image below is similar enough to show that a solution is > quite feasible in openscad. (the square tube represents the flat surface > and the tube the handle.) > > > To generate the fillet, you intersect the two pieces , increased by the > size of the fillet. The 'hulled' result is a fillet, but with straight > sides, maybe you would call it a chamfer. In the example I've pictured > above, then imagine a line around the branched small pipe, at a distance of > the fillet from the flat face of the square tube, and a line on the flat > surface of the tube created by a pipe of diameter plus 2*fillet at the > same angle as the pipe. Let h be the distance that the square pipe is > increased, and v the amount that the small pipe radius is increased (in > this first instance both h and v are equal to the size of the fillet). Now > you decide how smooth you want the radius to be. Let's say you want ten > steps. If you then do intersections from 0.1*h to 0.9*v, and from 0.2*h to > 0.8*v and so on, until 0.9*h to 0.1*v, you get various diameter > intersections. These intersections give an outside smooth edge (with the > ten steps). > > On 21/01/2025 12:16, Roel Vanhout via Discuss wrote: > > This is mighty impressive, thank you. I only partly understand what's > going on but I've only watched the video twice now. Where do I find > documentation on functions like ip_fillet_surf_closed(), which seems to do > the heavy lifting of the part I was most unsure about? Is it a matter of > downloading the package and looking at the source or is there documentation > somewhere? Thanks. > > regards, > > Roel > > > On Tue, Jan 21, 2025 at 3:32 AM Sanjeev Prabhakar < > sprabhakar2006@gmail.com> wrote: > >> this video will explain it better: >> https://youtu.be/gtiWLeg0l_c >> > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >