discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

Creating inner bevel

M
mzimbaro@gmail.com
Wed, Aug 14, 2024 1:49 PM

I am trying to create the following part but I am stuck on how you would create the inner bevels.  Any suggestions?

The first pic is what I am trying to make.

I am trying to create the following part but I am stuck on how you would create the inner bevels. Any suggestions? The first pic is what I am trying to make.
MM
Michael Marx (spintel)
Thu, Aug 15, 2024 2:30 AM

You're missing your pic.


From: mzimbaro--- via Discuss [mailto:discuss@lists.openscad.org]
Sent: Wed, 14 Aug 2024 23:50
To: discuss@lists.openscad.org
Cc: mzimbaro@gmail.com
Subject: [OpenSCAD] Creating inner bevel

I am trying to create the following part but I am stuck on how you would create the inner bevels.
Any suggestions?

The first pic is what I am trying to make.

You're missing your pic. _____ From: mzimbaro--- via Discuss [mailto:discuss@lists.openscad.org] Sent: Wed, 14 Aug 2024 23:50 To: discuss@lists.openscad.org Cc: mzimbaro@gmail.com Subject: [OpenSCAD] Creating inner bevel I am trying to create the following part but I am stuck on how you would create the inner bevels. Any suggestions? The first pic is what I am trying to make.
WF
William F. Adams
Thu, Aug 15, 2024 11:49 AM

mzimbaro--- via Discuss [mailto:discuss@lists.openscad.org] wrote:

I am trying to create the following part but I am stuck on how you would create the inner bevels. Any suggestions?

I can't see the picture either.

The way I do this is to make a pointy end on a cylinder:

module gcp_endmill_v(es_v_angle, es_diameter) {
  union(){
    cylinder(r1=0, r2=(es_diameter / 2), h=((es_diameter / 2) / tan((es_v_angle / 2))), center=false);
    translate([0, 0, ((es_diameter / 2) / tan((es_v_angle / 2)))]){
      cylinder(r1=(es_diameter / 2), r2=(es_diameter / 2), h=((es_diameter / 2) / tan((es_v_angle / 2))), center=false);
    }
  }
}

and then position it along the perimeter and hull() them and then subtract that from the part.

That code is copied from

https://www.blockscad3d.com/community/projects/1430644

which in turn was used in:

https://github.com/WillAdams/gcodepreview

which while it uses Guenther Soehler's nifty OpenPythonSCAD internally is still mostly plain OpenSCAD code.

William

mzimbaro--- via Discuss [mailto:discuss@lists.openscad.org] wrote: >I am trying to create the following part but I am stuck on how you would create the inner bevels. Any suggestions? I can't see the picture either. The way I do this is to make a pointy end on a cylinder: module gcp_endmill_v(es_v_angle, es_diameter) {   union(){     cylinder(r1=0, r2=(es_diameter / 2), h=((es_diameter / 2) / tan((es_v_angle / 2))), center=false);     translate([0, 0, ((es_diameter / 2) / tan((es_v_angle / 2)))]){       cylinder(r1=(es_diameter / 2), r2=(es_diameter / 2), h=((es_diameter / 2) / tan((es_v_angle / 2))), center=false);     }   } } and then position it along the perimeter and hull() them and then subtract that from the part. That code is copied from https://www.blockscad3d.com/community/projects/1430644 which in turn was used in: https://github.com/WillAdams/gcodepreview which while it uses Guenther Soehler's nifty OpenPythonSCAD internally is still mostly plain OpenSCAD code. William
RW
Raymond West
Thu, Aug 15, 2024 4:41 PM

no idea of your  the intenal shape, but  you can use minkowski and a cone

minkowski(){

    linear_extrude(10)
       difference(){
         translate([-10,-10,0]) // make hollow shape
           square(100);
            square(50);
      }
      cylinder(d1=10,d2=0,h=5);  //cone
}

and remove the parts you don't want, resize if needed, etc, but it gives
a bevel around any polygon, afaik

On 14/08/2024 14:49, mzimbaro--- via Discuss wrote:

I am trying to create the following part but I am stuck on how you
would create the inner bevels. Any suggestions?

The first pic is what I am trying to make.


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

no idea of your  the intenal shape, but  you can use minkowski and a cone minkowski(){     linear_extrude(10)        difference(){          translate([-10,-10,0]) // make hollow shape            square(100);             square(50);       }       cylinder(d1=10,d2=0,h=5);  //cone } and remove the parts you don't want, resize if needed, etc, but it gives a bevel around any polygon, afaik On 14/08/2024 14:49, mzimbaro--- via Discuss wrote: > > I am trying to create the following part but I am stuck on how you > would create the inner bevels. Any suggestions? > > > The first pic is what I am trying to make. > > > > > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
M
mzimbaro@gmail.com
Thu, Aug 15, 2024 6:06 PM

For some reason it wouldn’t accept the pictures.  Trying again.

For some reason it wouldn’t accept the pictures. Trying again. ![](data:image/png;base64,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)
RW
Raymond West
Thu, Aug 15, 2024 7:37 PM

If it is a shape with  rounded chamfers that you want, like you show
below, then again Minkowski, but with a sphere. draw the shape smaller
by the radius of the sphere , holes, bigger by radius all around edge.
e.g., if it was a 50mm square, and 5mm thick, sphere would be d=5, and
square would be 2.5mm less on each side.

d=5; // plate thickness, and diameter of rounding
$fn=100;

// overall width of 'square' =50, hole = 10
minkowski (){
  linear_extrude(0.0001){
     difference(){
        square([50-d,50-d]);
          translate([15,15])
          square([10+d,10+d]);
     }
  }
  sphere(d=d);
}

On 15/08/2024 19:06, mzimbaro--- via Discuss wrote:

For some reason it wouldn’t accept the pictures. Trying again.


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

If it is a shape with  rounded chamfers that you want, like you show below, then again Minkowski, but with a sphere. draw the shape smaller by the radius of the sphere , holes, bigger by radius all around edge. e.g., if it was a 50mm square, and 5mm thick, sphere would be d=5, and square would be 2.5mm less on each side. d=5; // plate thickness, and diameter of rounding $fn=100; // overall width of 'square' =50, hole = 10 minkowski (){   linear_extrude(0.0001){      difference(){         square([50-d,50-d]);           translate([15,15])           square([10+d,10+d]);      }   }   sphere(d=d); } On 15/08/2024 19:06, mzimbaro--- via Discuss wrote: > > For some reason it wouldn’t accept the pictures. Trying again. > > > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email todiscuss-leave@lists.openscad.org
M
mzimbaro@gmail.com
Thu, Aug 15, 2024 8:34 PM

Thank you.  I think I can make this work like you suggested.  Thank you everyone for the suggestions.

Thank you. I think I can make this work like you suggested. Thank you everyone for the suggestions.
MZ
Michael Zimbaro
Thu, Aug 15, 2024 10:11 PM

It's definitely a work in progress but it is getting there.

[image: image.png]

On Thu, Aug 15, 2024 at 4:34 PM mzimbaro--- via Discuss <
discuss@lists.openscad.org> wrote:

Thank you. I think I can make this work like you suggested. Thank you
everyone for the suggestions.


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

It's definitely a work in progress but it is getting there. [image: image.png] On Thu, Aug 15, 2024 at 4:34 PM mzimbaro--- via Discuss < discuss@lists.openscad.org> wrote: > Thank you. I think I can make this work like you suggested. Thank you > everyone for the suggestions. > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
WW
Whosa whatsis
Thu, Aug 15, 2024 10:32 PM

The trick to getting those inner corners is that the minkowki'd shape should have rounded inner-corners. If you start from 2d, it's easy to get those (and compensate for the added width from minkowski at the same time) by offsetting your original shape inward by the same radius. Example:

$fs = .2;
$fa = 2;

thickness = 10.0001;
radius = 5;

module shape() difference() {
union() {
square([100, 50], center = true);
square([50, 100], center = true);
}
square(20, center = true);
}

minkowski() {
linear_extrude(thickness - radius * 2, center = true) offset(-radius) shape();
sphere(radius);
}

If you ALSO want the sharpest part of those corners to be rounded like the photo, just offset it outward a little first. The back-and-forth offsetting technique is great for rounding internal and external corners (depending on the order) in 2d shapes. Example:

$fs = .2;
$fa = 2;

thickness = 10.0001;
radius = 5;
corner = 5;

module shape() difference() {
union() {
square([100, 50], center = true);
square([50, 100], center = true);
}
square(20, center = true);
}

minkowski() {
linear_extrude(thickness - radius * 2, center = true) offset(-radius - corner) offset(corner) shape();
sphere(radius);
}

On Aug 15, 2024, at 15:11, Michael Zimbaro via Discuss discuss@lists.openscad.org wrote:

It's definitely a work in progress but it is getting there.

<image.png>

On Thu, Aug 15, 2024 at 4:34 PM mzimbaro--- via Discuss discuss@lists.openscad.org wrote:
Thank you. I think I can make this work like you suggested. Thank you everyone for the suggestions.


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

The trick to getting those inner corners is that the minkowki'd shape should have rounded inner-corners. If you start from 2d, it's easy to get those (and compensate for the added width from minkowski at the same time) by offsetting your original shape inward by the same radius. Example: $fs = .2; $fa = 2; thickness = 10.0001; radius = 5; module shape() difference() { union() { square([100, 50], center = true); square([50, 100], center = true); } square(20, center = true); } minkowski() { linear_extrude(thickness - radius * 2, center = true) offset(-radius) shape(); sphere(radius); } If you ALSO want the sharpest part of those corners to be rounded like the photo, just offset it outward a little first. The back-and-forth offsetting technique is great for rounding internal and external corners (depending on the order) in 2d shapes. Example: $fs = .2; $fa = 2; thickness = 10.0001; radius = 5; corner = 5; module shape() difference() { union() { square([100, 50], center = true); square([50, 100], center = true); } square(20, center = true); } minkowski() { linear_extrude(thickness - radius * 2, center = true) offset(-radius - corner) offset(corner) shape(); sphere(radius); } > On Aug 15, 2024, at 15:11, Michael Zimbaro via Discuss <discuss@lists.openscad.org> wrote: > > It's definitely a work in progress but it is getting there. > > <image.png> > > On Thu, Aug 15, 2024 at 4:34 PM mzimbaro--- via Discuss <discuss@lists.openscad.org> wrote: > Thank you. I think I can make this work like you suggested. Thank you everyone for the suggestions. > _______________________________________________ > 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
JB
Jordan Brown
Thu, Aug 15, 2024 10:49 PM

There has been a lot of detailed discussion, but little in the way of general discussion of the problem.

There are three basic approaches:
Create a 2D shape with holes, extrude it, and somehow (probably with Minkowski) round the corners.
Create a 3D shape, and a shape that you want removed, and difference the two.
Create the entire shape as a polyhedron, with the rounding designed in.
Minkowski can be really slow, so I generally don’t consider it. Also, it might be tricky to restrict its effect to the edges that you want rounded.

Creating a polyhedron is very very powerful and can be very very hard.  I think BOSL2 might have the tools required to create a polyhedron like this, but I’m not familiar enough to be sure. Maybe Adrian can chime in there.

I would personally think in terms of the second option, subtracting the unwanted shape from the original shape.

Constructing the negative shape can be complex, but is generally straightforward even if tedious. For your oval slots, start with two cylinders joined by a cube.

I’m on my iPad so can’t experiment, but something like

difference() {
cube([50,50,10], center=true);
translate([-10,0,0]) cylinder(h=11, d=10, center=true);
translate([10,0,0]) cylinder(h=11, d=10, center=true);
cube([20,10,11], center=true);
}

That gets you a straight-sided slot.  Sculpt it as desired by subtracting stuff from the negative piece. Note, for instance, that a cylinder is a rotationally-extruded square, so if you want round edges at the ends you might take a square, subtract a circle along one edge, and rotationally extrude that. Similarly, the cube in the middle is an extruded square, so take a square, subtract circles on each side, and extrude that. However you construct it, when you have your negative “die”, subtract it from the main object. Always remember to make the negative object a little thicker than the original, so that it protrudes from both sides.

If there is interest, I’ll write up a demo snippet in a few days when I get back to my desktop computer.

There has been a lot of detailed discussion, but little in the way of general discussion of the problem. There are three basic approaches: Create a 2D shape with holes, extrude it, and somehow (probably with Minkowski) round the corners. Create a 3D shape, and a shape that you want removed, and difference the two. Create the entire shape as a polyhedron, with the rounding designed in. Minkowski can be really slow, so I generally don’t consider it. Also, it might be tricky to restrict its effect to the edges that you want rounded. Creating a polyhedron is very very powerful and can be very very hard. I think BOSL2 might have the tools required to create a polyhedron like this, but I’m not familiar enough to be sure. Maybe Adrian can chime in there. I would personally think in terms of the second option, subtracting the unwanted shape from the original shape. Constructing the negative shape can be complex, but is generally straightforward even if tedious. For your oval slots, start with two cylinders joined by a cube. I’m on my iPad so can’t experiment, but something like difference() { cube([50,50,10], center=true); translate([-10,0,0]) cylinder(h=11, d=10, center=true); translate([10,0,0]) cylinder(h=11, d=10, center=true); cube([20,10,11], center=true); } That gets you a straight-sided slot. Sculpt it as desired by subtracting stuff from the negative piece. Note, for instance, that a cylinder is a rotationally-extruded square, so if you want round edges at the ends you might take a square, subtract a circle along one edge, and rotationally extrude that. Similarly, the cube in the middle is an extruded square, so take a square, subtract circles on each side, and extrude that. However you construct it, when you have your negative “die”, subtract it from the main object. Always remember to make the negative object a little thicker than the original, so that it protrudes from both sides. If there is interest, I’ll write up a demo snippet in a few days when I get back to my desktop computer.