discuss@lists.openscad.org

OpenSCAD general discussion Mailing-list

View all threads

BOSL2 rounding edges of rect_tube

BR
Bob Roos
Mon, Dec 26, 2022 8:30 AM

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){
translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation using *

I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
Best regards,
Bob                          mailto:roosbob@wybatap.com

Hello Discuss, T=1.8; W=53.5; L=70; union(){ translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); translate([0,-17,0])cube([W-T,L-T,T],center=true); } I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners. The union is there for the convenience of eliminating the generation using * I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid Is there an easier way? I am trying to learn how to think "OpenSCAD" -- Best regards, Bob mailto:roosbob@wybatap.com
J
jay@jdnd.co.uk
Mon, Dec 26, 2022 11:15 AM

i am no openscad expert, but i use this class cubeR() i wrote for
rounding edges of cubes. you can pass in bools for each edge you want
radius.

$fn= 64;

// 1/4 of an inverted cylinder
module cylinder90i(r, h, tol=0.01)
{
difference()
{
translate([-r-tol, -r-tol, 0])
cube([r+tol+tol, r+tol+tol, h]);

     translate([0, 0, -tol])
     cylinder(r=r, h=h+tol+tol);
 }

}
// cube with selectable radiused edges
module cubeR(args, tol=0.01,
FT1=false, FT2=false, FT3=false, FT4=false,
BK1=false, BK2=false, BK3=false, BK4=false,
L1 =false, L2 =false, L3 =false, L4=false,
R1 =false, R2 =false, R3 =false, R4=false,
TP1=false, TP2=false, TP3=false, TP4=false,
BT1=false, BT2=false, BT3=false, BT4=false)
{
width    = args[0];
height  = args[1];
depth    = args[2];
rad      = args[3];
c        = tol;
difference()
{
cube([width, height, depth]);
union()
{
// Front
if (FT1||TP3)
{
translate([0, rad, depth-rad])
rotate([0, 90, 0])
translate([0, 0, -c])
cylinder90i(r=rad, h=width+c+c);
}
if (FT2||R4)
{
translate([width, 0, 0])
rotate([0, 180, 0]) translate([0, 0, -depth])
translate([rad, rad, 0])
translate([0, 0, -c])
cylinder90i(r=rad, h=depth+c+c);
}
if (FT3||BT1)
{
translate([0,  rad, 0]) rotate([0, 90, 0])
translate([-rad, 0, 0]) rotate([0, 0, 90])
translate([0, 0, -c])
cylinder90i(r=rad, h=width+c+c);
}
if (FT4||L2)
{
translate([rad, rad, 0])
translate([0, 0, -c])
cylinder90i(r=rad, h=depth+c+c);
}

         // Back
         if (BK1||TP1)
         {
             translate([0, 0, 0])
             translate([0, height-rad, depth-rad])
             rotate([270, 0, 0])
             rotate([0, 90, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=width+c+c);
         }
         if (BK2||L4)
         {
             translate([0, height, 0])
             translate([rad, -rad, 0])
             rotate([0, 0, 270])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=depth+c+c);
         }
         if (BK3||BT3)
         {
             translate([0, height-rad, 0])
             translate([0, 0, rad])
             rotate([180, 0, 0])
             rotate([0, 90, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=width+c+c);
         }
         if (BK4||R2)
         {
             translate([width-rad, height-rad, 0])
             rotate([0, 0, 180])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=depth+c+c);
         }

         // left
         if (L1||TP4)
         {
             translate([rad, rad, depth-rad])
             rotate([0, 90, 0])
             translate([0, height-rad, 0]) rotate([90, 0, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=height+c+c);
         }
         if (L3||BT4)
         {
             translate([rad, rad, rad])
             translate([0, height-rad, 0]) rotate([90, 0, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=height+c+c);
         }

         // right
         if (R1||TP2)
         {
             translate([width-rad, 0, depth-rad])
             rotate([270, 90, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=height+c+c);
         }
         if (R3||BT2)
         {
             translate([width-rad, 0])
             rotate([270, 90, 0])
             rotate([0, 0, 90]) translate([0, rad, 0])
             translate([0, 0, -c])
             cylinder90i(r=rad, h=height+c+c);
         }
     }
 }

}
//
//
T=1.8;
W=53.5;
L=70;
rad = 2;
union()
{
cubeR([W, L, T, rad], TP1=true, TP2=true, TP3=true, TP4=true);

 //translate([0,-17,-T/2]) 

rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);

 //translate([0,-17,0]) cube([W-T,L-T,T],center=true);

}

On 2022-12-26 08:30, Bob Roos wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){
translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal
bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation
using *

I thought about using cuboid with rounding and differencing out the top
part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
Best regards,
Bob                          mailto:roosbob@wybatap.com


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

i am no openscad expert, but i use this class cubeR() i wrote for rounding edges of cubes. you can pass in bools for each edge you want radius. $fn= 64; // 1/4 of an inverted cylinder module cylinder90i(r, h, tol=0.01) { difference() { translate([-r-tol, -r-tol, 0]) cube([r+tol+tol, r+tol+tol, h]); translate([0, 0, -tol]) cylinder(r=r, h=h+tol+tol); } } // cube with selectable radiused edges module cubeR(args, tol=0.01, FT1=false, FT2=false, FT3=false, FT4=false, BK1=false, BK2=false, BK3=false, BK4=false, L1 =false, L2 =false, L3 =false, L4=false, R1 =false, R2 =false, R3 =false, R4=false, TP1=false, TP2=false, TP3=false, TP4=false, BT1=false, BT2=false, BT3=false, BT4=false) { width = args[0]; height = args[1]; depth = args[2]; rad = args[3]; c = tol; difference() { cube([width, height, depth]); union() { // Front if (FT1||TP3) { translate([0, rad, depth-rad]) rotate([0, 90, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=width+c+c); } if (FT2||R4) { translate([width, 0, 0]) rotate([0, 180, 0]) translate([0, 0, -depth]) translate([rad, rad, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=depth+c+c); } if (FT3||BT1) { translate([0, rad, 0]) rotate([0, 90, 0]) translate([-rad, 0, 0]) rotate([0, 0, 90]) translate([0, 0, -c]) cylinder90i(r=rad, h=width+c+c); } if (FT4||L2) { translate([rad, rad, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=depth+c+c); } // Back if (BK1||TP1) { translate([0, 0, 0]) translate([0, height-rad, depth-rad]) rotate([270, 0, 0]) rotate([0, 90, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=width+c+c); } if (BK2||L4) { translate([0, height, 0]) translate([rad, -rad, 0]) rotate([0, 0, 270]) translate([0, 0, -c]) cylinder90i(r=rad, h=depth+c+c); } if (BK3||BT3) { translate([0, height-rad, 0]) translate([0, 0, rad]) rotate([180, 0, 0]) rotate([0, 90, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=width+c+c); } if (BK4||R2) { translate([width-rad, height-rad, 0]) rotate([0, 0, 180]) translate([0, 0, -c]) cylinder90i(r=rad, h=depth+c+c); } // left if (L1||TP4) { translate([rad, rad, depth-rad]) rotate([0, 90, 0]) translate([0, height-rad, 0]) rotate([90, 0, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=height+c+c); } if (L3||BT4) { translate([rad, rad, rad]) translate([0, height-rad, 0]) rotate([90, 0, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=height+c+c); } // right if (R1||TP2) { translate([width-rad, 0, depth-rad]) rotate([270, 90, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=height+c+c); } if (R3||BT2) { translate([width-rad, 0]) rotate([270, 90, 0]) rotate([0, 0, 90]) translate([0, rad, 0]) translate([0, 0, -c]) cylinder90i(r=rad, h=height+c+c); } } } } // // T=1.8; W=53.5; L=70; rad = 2; union() { cubeR([W, L, T, rad], TP1=true, TP2=true, TP3=true, TP4=true); //translate([0,-17,-T/2]) rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); //translate([0,-17,0]) cube([W-T,L-T,T],center=true); } On 2022-12-26 08:30, Bob Roos wrote: > Hello Discuss, > > T=1.8; > W=53.5; > L=70; > union(){ > translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > translate([0,-17,0])cube([W-T,L-T,T],center=true); > } > > I want to round the 8 horizontal top edges and the 4 outside horizontal > bottom edges in addition to the already rounded side corners. > The union is there for the convenience of eliminating the generation > using * > > I thought about using cuboid with rounding and differencing out the top > part with negative rounding on the top of the difference cuboid > > Is there an easier way? I am trying to learn how to think "OpenSCAD" > > -- > Best regards, > Bob mailto:roosbob@wybatap.com > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org
J
jay@jdnd.co.uk
Mon, Dec 26, 2022 12:25 PM

i have a redundant file "Connectors.scad.gAoowr" in the same folder as
"Connectors.scad"

i am unable to delete it as it says it dose not exist

it is likely something to do with when i crashed openscad last week
while working with "Connectors.scad" creating a circular reference by
mistake, any ideas how i can get rid of it

screenshot attached

i have a redundant file "Connectors.scad.gAoowr" in the same folder as "Connectors.scad" i am unable to delete it as it says it dose not exist it is likely something to do with when i crashed openscad last week while working with "Connectors.scad" creating a circular reference by mistake, any ideas how i can get rid of it screenshot attached >
NH
nop head
Mon, Dec 26, 2022 12:48 PM

Have you rebooted the computer since the crash? Possibly there is a zombie
process locking the file.

On Mon, 26 Dec 2022 at 12:25, jay@jdnd.co.uk wrote:

i have a redundant file "Connectors.scad.gAoowr" in the same folder as
"Connectors.scad"

i am unable to delete it as it says it dose not exist

it is likely something to do with when i crashed openscad last week while
working with "Connectors.scad" creating a circular reference by mistake,
any ideas how i can get rid of it

screenshot attached


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

Have you rebooted the computer since the crash? Possibly there is a zombie process locking the file. On Mon, 26 Dec 2022 at 12:25, <jay@jdnd.co.uk> wrote: > i have a redundant file "Connectors.scad.gAoowr" in the same folder as > "Connectors.scad" > > > i am unable to delete it as it says it dose not exist > > > it is likely something to do with when i crashed openscad last week while > working with "Connectors.scad" creating a circular reference by mistake, > any ideas how i can get rid of it > > > screenshot attached > > > > > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
BR
Bob Roos
Mon, Dec 26, 2022 1:27 PM

Hi Jay,

It could have the "hidden" attribute set.  I don't speak your OS so can't offer any advice on checking the attribute.  Also notice the little LOCK icon.  It may be considered some kind of a system file and so prevented from an ordinary user's access.  You need super posers.....
 
Bob Roos

Monday, December 26, 2022, 7:25:22 AM, you wrote:

i have a redundant file "Connectors.scad.gAoowr" in the same folder as "Connectors.scad"

i am unable to delete it as it says it dose not exist

it is likely something to do with when i crashed openscad last week while working with "Connectors.scad" creating a circular reference by mistake, any ideas how i can get rid of it

screenshot attached

 

-- 
have Fun,
 Bob                           mailto:roosbob@wybatap.com

Hi Jay, It could have the "hidden" attribute set.  I don't speak your OS so can't offer any advice on checking the attribute.  Also notice the little LOCK icon.  It may be considered some kind of a system file and so prevented from an ordinary user's access.  You need super posers.....   Bob Roos Monday, December 26, 2022, 7:25:22 AM, you wrote: > i have a redundant file "Connectors.scad.gAoowr" in the same folder as "Connectors.scad" > i am unable to delete it as it says it dose not exist > it is likely something to do with when i crashed openscad last week while working with "Connectors.scad" creating a circular reference by mistake, any ideas how i can get rid of it > screenshot attached >>   --  have Fun,  Bob                           mailto:roosbob@wybatap.com
AM
Adrian Mariano
Mon, Dec 26, 2022 2:14 PM

I suggest posting fully valid code for users who may not realize that
you're using BOSL2 or know what that means.  Omitting the include may be
confusing to some.

Yes, the natural way to make a box in OpenSCAD is to make the outside and
subtract the inside.  However, your rounding as shown is too big to be
applied to the top edge on both sides.  If you're satisfied with decreasing
the rounding and using a rounding of T/4 everywhere, then doing it like
this is reasonable:

include<BOSL2/std.scad>

$fn=32;
T=1.8;
W=53.5;
L=70;
diff()
cuboid(size=[W,L,2T], rounding=T/4)
tag("remove")up(T/2+.01)cuboid([W-T,L-T,1
T],rounding=-T/4,edges=TOP);

If you're planning to 3d print this you may want to use the teardrop option
to the outer cuboid, because circular roundings are often problematic
without support.

Note to Jay:  BOSL2's cuboid() can round individual edges, but also can
round by groupings, so edges=TOP rounds all the top edges without the need
to enumerate them individually.  You can also do edges=TOP, except=RIGHT to
round 3 of the top edges.  In additional, cuboid can accept negative values
for the roundings on the top and bottom, which then causes it to produce
roundings that flare out.  That negative rounding is needed to address
Bob's problem.

Getting back to the problem at hand, if you really want the larger rounding
on the outside, then I'd suggest taking a look at either rounded_prism() or
offset_sweep() from rounding.scad.  I basically wrote offset_sweep for the
purpose of making rounded boxes, and there are several examples showing how
to use it.  You can make the outside vertical rounding anything you want
and make the box thickness follow that rounding.  See the examples in the
wiki.  It may be a little simpler to use rounded_prism, but it only makes
continuous curvature roundings, so you won't be specifying them by radius.
Note that for either of these options, you still make the outside and
subtract the inside, it's just that offset_sweep and rounded_prism can make
a shape with different roundings on different edges with graceful corners
where the roundings meet.

The last approach you could use for this case would be to use the rounding
masks in masks3d---you'd make the outside vertical edges unrounded and then
apply the masks to them---but I think you'll get less pleasing corners
compared to the other options.  And to me it seems more complicated than
the other solutions.

On Mon, Dec 26, 2022 at 3:32 AM Bob Roos roosbob@wybatap.com wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){

translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal
bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation using
*

I thought about using cuboid with rounding and differencing out the top
part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
Best regards,
Bob                          mailto:roosbob@wybatap.com


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

I suggest posting fully valid code for users who may not realize that you're using BOSL2 or know what that means. Omitting the include may be confusing to some. Yes, the natural way to make a box in OpenSCAD is to make the outside and subtract the inside. However, your rounding as shown is too big to be applied to the top edge on both sides. If you're satisfied with decreasing the rounding and using a rounding of T/4 everywhere, then doing it like this is reasonable: include<BOSL2/std.scad> $fn=32; T=1.8; W=53.5; L=70; diff() cuboid(size=[W,L,2*T], rounding=T/4) tag("remove")up(T/2+.01)cuboid([W-T,L-T,1*T],rounding=-T/4,edges=TOP); If you're planning to 3d print this you may want to use the teardrop option to the outer cuboid, because circular roundings are often problematic without support. Note to Jay: BOSL2's cuboid() can round individual edges, but also can round by groupings, so edges=TOP rounds all the top edges without the need to enumerate them individually. You can also do edges=TOP, except=RIGHT to round 3 of the top edges. In additional, cuboid can accept negative values for the roundings on the top and bottom, which then causes it to produce roundings that flare out. That negative rounding is needed to address Bob's problem. Getting back to the problem at hand, if you really want the larger rounding on the outside, then I'd suggest taking a look at either rounded_prism() or offset_sweep() from rounding.scad. I basically wrote offset_sweep for the purpose of making rounded boxes, and there are several examples showing how to use it. You can make the outside vertical rounding anything you want and make the box thickness follow that rounding. See the examples in the wiki. It may be a little simpler to use rounded_prism, but it only makes continuous curvature roundings, so you won't be specifying them by radius. Note that for either of these options, you still make the outside and subtract the inside, it's just that offset_sweep and rounded_prism can make a shape with different roundings on different edges with graceful corners where the roundings meet. The last approach you could use for this case would be to use the rounding masks in masks3d---you'd make the outside vertical edges unrounded and then apply the masks to them---but I think you'll get less pleasing corners compared to the other options. And to me it seems more complicated than the other solutions. On Mon, Dec 26, 2022 at 3:32 AM Bob Roos <roosbob@wybatap.com> wrote: > Hello Discuss, > > T=1.8; > W=53.5; > L=70; > union(){ > > translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > translate([0,-17,0])cube([W-T,L-T,T],center=true); > } > > I want to round the 8 horizontal top edges and the 4 outside horizontal > bottom edges in addition to the already rounded side corners. > The union is there for the convenience of eliminating the generation using > * > > I thought about using cuboid with rounding and differencing out the top > part with negative rounding on the top of the difference cuboid > > Is there an easier way? I am trying to learn how to think "OpenSCAD" > > -- > Best regards, > Bob mailto:roosbob@wybatap.com > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
BR
Bob Roos
Mon, Dec 26, 2022 2:16 PM

Hi Bob,

I ended up using brute force by defining each of the sides.  Am curious if there is a better way

T=1.8;
W=53.5;
L=70;
union(){
//translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2
T,rounding=T/2);
translate([0,17,T/2]) cuboid([W+T,T,2T],rounding=T/2);
translate([0,-L+17,T/2]) cuboid([W+T,T,2
T],rounding=T/2);
translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2T],rounding=T/2);
translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2
T],rounding=T/2);
translate([0,-17-T/2,0])cube([W,L,T],center=true);
}

Monday, December 26, 2022, 3:30:35 AM, you wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){
translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation using *

I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
have Fun,
Bob                          mailto:roosbob@wybatap.com

Hi Bob, I ended up using brute force by defining each of the sides. Am curious if there is a better way T=1.8; W=53.5; L=70; *union(){ //translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); translate([0,17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); translate([0,-L+17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); translate([0,-17-T/2,0])cube([W,L,T],center=true); } Monday, December 26, 2022, 3:30:35 AM, you wrote: > Hello Discuss, > T=1.8; > W=53.5; > L=70; > union(){ > translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > translate([0,-17,0])cube([W-T,L-T,T],center=true); > } > I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners. > The union is there for the convenience of eliminating the generation using * > I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid > Is there an easier way? I am trying to learn how to think "OpenSCAD" -- have Fun, Bob mailto:roosbob@wybatap.com
G
gadgetChris
Mon, Dec 26, 2022 2:31 PM

I would do it like this:

include <BOSL2/std.scad>

$fa=4; // min angle
$fs=.3; // min side
draw=true;
ndraw=false;

T=1.8;
W=53.5;
L=70;

%if(ndraw) union(){ // iriginal question

translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

w=(W-T)/2;
l=(L-T)/2;
h=T/2;

if(draw)translate([0,0,h]) {
hull(){ //bottom
translate([ w, l-17,-h]) sphere(d=T);
translate([ w,-l-17,-h]) sphere(d=T);
translate([-w, l-17,-h]) sphere(d=T);
translate([-w,-l-17,-h]) sphere(d=T);
}
hull(){ // +X
translate([ w, l-17, h]) sphere(d=T);
translate([ w,-l-17, h]) sphere(d=T);
translate([ w, l-17,-h]) sphere(d=T);
translate([ w,-l-17,-h]) sphere(d=T);
}
hull(){ // +X
translate([-w, l-17, h]) sphere(d=T);
translate([-w,-l-17, h]) sphere(d=T);
translate([-w, l-17,-h]) sphere(d=T);
translate([-w,-l-17,-h]) sphere(d=T);
}
hull(){ // +Y
translate([ w, l-17, h]) sphere(d=T);
translate([-w, l-17, h]) sphere(d=T);
translate([ w, l-17,-h]) sphere(d=T);
translate([-w, l-17,-h]) sphere(d=T);
}
hull(){ // -Y
translate([ w,-l-17, h]) sphere(d=T);
translate([-w,-l-17, h]) sphere(d=T);
translate([ w,-l-17,-h]) sphere(d=T);
translate([-w,-l-17,-h]) sphere(d=T);
}
}

On Mon, Dec 26, 2022 at 3:31 AM Bob Roos roosbob@wybatap.com wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){

translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal
bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation using
*

I thought about using cuboid with rounding and differencing out the top
part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
Best regards,
Bob                          mailto:roosbob@wybatap.com


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

I would do it like this: include <BOSL2/std.scad> $fa=4; // min angle $fs=.3; // min side draw=true; ndraw=false; T=1.8; W=53.5; L=70; %if(ndraw) union(){ // iriginal question translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); translate([0,-17,0])cube([W-T,L-T,T],center=true); } w=(W-T)/2; l=(L-T)/2; h=T/2; if(draw)translate([0,0,h]) { hull(){ //bottom translate([ w, l-17,-h]) sphere(d=T); translate([ w,-l-17,-h]) sphere(d=T); translate([-w, l-17,-h]) sphere(d=T); translate([-w,-l-17,-h]) sphere(d=T); } hull(){ // +X translate([ w, l-17, h]) sphere(d=T); translate([ w,-l-17, h]) sphere(d=T); translate([ w, l-17,-h]) sphere(d=T); translate([ w,-l-17,-h]) sphere(d=T); } hull(){ // +X translate([-w, l-17, h]) sphere(d=T); translate([-w,-l-17, h]) sphere(d=T); translate([-w, l-17,-h]) sphere(d=T); translate([-w,-l-17,-h]) sphere(d=T); } hull(){ // +Y translate([ w, l-17, h]) sphere(d=T); translate([-w, l-17, h]) sphere(d=T); translate([ w, l-17,-h]) sphere(d=T); translate([-w, l-17,-h]) sphere(d=T); } hull(){ // -Y translate([ w,-l-17, h]) sphere(d=T); translate([-w,-l-17, h]) sphere(d=T); translate([ w,-l-17,-h]) sphere(d=T); translate([-w,-l-17,-h]) sphere(d=T); } } On Mon, Dec 26, 2022 at 3:31 AM Bob Roos <roosbob@wybatap.com> wrote: > Hello Discuss, > > T=1.8; > W=53.5; > L=70; > union(){ > > translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > translate([0,-17,0])cube([W-T,L-T,T],center=true); > } > > I want to round the 8 horizontal top edges and the 4 outside horizontal > bottom edges in addition to the already rounded side corners. > The union is there for the convenience of eliminating the generation using > * > > I thought about using cuboid with rounding and differencing out the top > part with negative rounding on the top of the difference cuboid > > Is there an easier way? I am trying to learn how to think "OpenSCAD" > > -- > Best regards, > Bob mailto:roosbob@wybatap.com > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
AM
Adrian Mariano
Mon, Dec 26, 2022 2:32 PM

That approach looks terrible at the corners because the roundings don't
blend properly.  You can fix it by using except options to cuboid to
exclude from rounding the inner corners of each side wall, but the
approaches I posted already are better.

Another thing, if you want to "think OpenSCAD":  make your object in a
natural place and then translate the finished object into position.  Every
translate has 17 in the Y and T/2 in the Z.  Put that outside the union.
Then using right() and left() to position the walls will make the code more
clear.

On Mon, Dec 26, 2022 at 9:17 AM Bob Roos roosbob@wybatap.com wrote:

Hi Bob,

I ended up using brute force by defining each of the sides.  Am curious if
there is a better way

T=1.8;
W=53.5;
L=70;
union(){
//translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2
T,rounding=T/2);
translate([0,17,T/2]) cuboid([W+T,T,2T],rounding=T/2);
translate([0,-L+17,T/2]) cuboid([W+T,T,2
T],rounding=T/2);
translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2T],rounding=T/2);
translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2
T],rounding=T/2);
translate([0,-17-T/2,0])cube([W,L,T],center=true);
}

Monday, December 26, 2022, 3:30:35 AM, you wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){

translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);

     translate([0,-17,0])cube([W-T,L-T,T],center=true);

}

I want to round the 8 horizontal top edges and the 4 outside horizontal

bottom edges in addition to the already rounded side corners.

The union is there for the convenience of eliminating the generation

using *

I thought about using cuboid with rounding and differencing out the top

part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
have Fun,
Bob                          mailto:roosbob@wybatap.com


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

That approach looks terrible at the corners because the roundings don't blend properly. You can fix it by using except options to cuboid to exclude from rounding the inner corners of each side wall, but the approaches I posted already are better. Another thing, if you want to "think OpenSCAD": make your object in a natural place and then translate the finished object into position. Every translate has 17 in the Y and T/2 in the Z. Put that outside the union. Then using right() and left() to position the walls will make the code more clear. On Mon, Dec 26, 2022 at 9:17 AM Bob Roos <roosbob@wybatap.com> wrote: > Hi Bob, > > I ended up using brute force by defining each of the sides. Am curious if > there is a better way > > > T=1.8; > W=53.5; > L=70; > *union(){ > //translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > translate([0,17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); > translate([0,-L+17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); > translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); > translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); > translate([0,-17-T/2,0])cube([W,L,T],center=true); > } > > Monday, December 26, 2022, 3:30:35 AM, you wrote: > > Hello Discuss, > > > T=1.8; > > W=53.5; > > L=70; > > union(){ > > > translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); > > translate([0,-17,0])cube([W-T,L-T,T],center=true); > > } > > > I want to round the 8 horizontal top edges and the 4 outside horizontal > bottom edges in addition to the already rounded side corners. > > The union is there for the convenience of eliminating the generation > using * > > > I thought about using cuboid with rounding and differencing out the top > part with negative rounding on the top of the difference cuboid > > > Is there an easier way? I am trying to learn how to think "OpenSCAD" > > > > -- > have Fun, > Bob mailto:roosbob@wybatap.com > _______________________________________________ > OpenSCAD mailing list > To unsubscribe send an email to discuss-leave@lists.openscad.org >
J
jay
Mon, Dec 26, 2022 3:05 PM

Yes the corners are spiked, it wouldent take much to dif a sphere from each corner though, there is only 8.I have never had a need to do so as i only rad the edges so thay 3d print better.Like i said, im no openscad expert. I just make cases to box things upSorry.Sent via the Samsung Galaxy S7, an AT&T 4G LTE smartphone
-------- Original message --------From: Adrian Mariano avm4@cornell.edu Date: 12/26/22  2:33 PM  (GMT+00:00) To: OpenSCAD general discussion Mailing-list discuss@lists.openscad.org Subject: [OpenSCAD] Re: BOSL2 rounding edges of rect_tube That approach looks terrible at the corners because the roundings don't blend properly.  You can fix it by using except options to cuboid to exclude from rounding the inner corners of each side wall, but the approaches I posted already are better.  Another thing, if you want to "think OpenSCAD":  make your object in a natural place and then translate the finished object into position.  Every translate has 17 in the Y and T/2 in the Z.  Put that outside the union.   Then using right() and left() to position the walls will make the code more clear.  On Mon, Dec 26, 2022 at 9:17 AM Bob Roos roosbob@wybatap.com wrote:Hi Bob,

I ended up using brute force by defining each of the sides.  Am curious if there is a better way

T=1.8;
W=53.5;
L=70;
union(){
//translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2
T,rounding=T/2);
translate([0,17,T/2]) cuboid([W+T,T,2T],rounding=T/2);
translate([0,-L+17,T/2]) cuboid([W+T,T,2
T],rounding=T/2);
translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2T],rounding=T/2);
translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2
T],rounding=T/2);
translate([0,-17-T/2,0])cube([W,L,T],center=true);
}

Monday, December 26, 2022, 3:30:35 AM, you wrote:

Hello Discuss,

T=1.8;
W=53.5;
L=70;
union(){
         translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2);
         translate([0,-17,0])cube([W-T,L-T,T],center=true);
}

I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners.
The union is there for the convenience of eliminating the generation using *

I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid

Is there an easier way?  I am trying to learn how to think "OpenSCAD"

--
have Fun,
 Bob                           mailto:roosbob@wybatap.com


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

Yes the corners are spiked, it wouldent take much to dif a sphere from each corner though, there is only 8.I have never had a need to do so as i only rad the edges so thay 3d print better.Like i said, im no openscad expert. I just make cases to box things upSorry.Sent via the Samsung Galaxy S7, an AT&T 4G LTE smartphone -------- Original message --------From: Adrian Mariano <avm4@cornell.edu> Date: 12/26/22 2:33 PM (GMT+00:00) To: OpenSCAD general discussion Mailing-list <discuss@lists.openscad.org> Subject: [OpenSCAD] Re: BOSL2 rounding edges of rect_tube That approach looks terrible at the corners because the roundings don't blend properly.  You can fix it by using except options to cuboid to exclude from rounding the inner corners of each side wall, but the approaches I posted already are better.  Another thing, if you want to "think OpenSCAD":  make your object in a natural place and then translate the finished object into position.  Every translate has 17 in the Y and T/2 in the Z.  Put that outside the union.   Then using right() and left() to position the walls will make the code more clear.  On Mon, Dec 26, 2022 at 9:17 AM Bob Roos <roosbob@wybatap.com> wrote:Hi Bob, I ended up using brute force by defining each of the sides.  Am curious if there is a better way T=1.8; W=53.5; L=70; *union(){ //translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); translate([0,17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); translate([0,-L+17,T/2]) cuboid([W+T,T,2*T],rounding=T/2); translate([W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); translate([-W/2,-17-T/2,T/2]) cuboid([T,L+T,2*T],rounding=T/2); translate([0,-17-T/2,0])cube([W,L,T],center=true); } Monday, December 26, 2022, 3:30:35 AM, you wrote: > Hello Discuss, > T=1.8; > W=53.5; > L=70; > union(){ >         translate([0,-17,-T/2])rect_tube(size=[W,L],wall=T/2,h=2*T,rounding=T/2); >         translate([0,-17,0])cube([W-T,L-T,T],center=true); > } > I want to round the 8 horizontal top edges and the 4 outside horizontal bottom edges in addition to the already rounded side corners. > The union is there for the convenience of eliminating the generation using * > I thought about using cuboid with rounding and differencing out the top part with negative rounding on the top of the difference cuboid > Is there an easier way?  I am trying to learn how to think "OpenSCAD" -- have Fun,  Bob                           mailto:roosbob@wybatap.com _______________________________________________ OpenSCAD mailing list To unsubscribe send an email to discuss-leave@lists.openscad.org