# [OpenSCAD] Newbie question

Jordan Brown openscad at jordan.maileater.net
Wed May 22 20:15:50 EDT 2019

```On 5/22/2019 1:00 PM, Dirk Willems wrote:
> But for now I'm struggling with the following
>
> difference() {
>    translate([0,37,15]) rotate([90,0,0]) cylinder(h=20,r=5);
>    translate([0,37,15]) rotate([90,0,0]) cylinder(h=20,r=4);
> }
>
> difference() {
>     cylinder(h=30,r1=25,r2=16,central=true);
>     cylinder(h=30,r1=23,r2=14,central=true);
> }
>
> What I want to accomplish is to combine the 2 cylinders into each
> other with the inside is smooth and off course having my hole in the
> second cylinder.

You say in the second block "central=true".  Perhaps you meant
"center=true", but that doesn't seem to do what you want.  (But maybe it
would, if you took away the translate.)

Others have talked about the "Z fighting" issue of having a difference
(or intersection) yield a zero-thickness piece.  The software can't
quite decide whether or not there's something there.  (Suggestion to
developers:  if you can detect this case... there's nothing there.
There's no practical reason for a zero-thickness piece; the intent is
almost certainly that it's nothing.)

Here's a simple tweak to fix that.  It nudges the "negative" cylinders
down a little and makes them a little longer so the boundaries of the
result are unambiguous.  And while we're there, let's factor out the
translate and rotate so we don't have to repeat them.

eps=0.01;
translate([0,37,15]) rotate([90,0,0]) {
difference() {
cylinder(h=20,r=5);
translate([0,0,-eps]) cylinder(h=20+eps*2,r=4);
}
}

difference() {
cylinder(h=30,r1=25,r2=16);
translate([0,0,-eps]) cylinder(h=30+2*eps,r1=23,r2=14);
}

But if you look carefully, maybe that isn't what you want.  Note that
the hole in the horizontal pipe doesn't go through; it's blocked by the
cone's wall.  That's because you're taking a pipe and unioning it with a
hollow cone.  You might also notice that the pipe protrudes into the
hollow cone, which might not be what you want.

Here's a version that fixes both of those.  Alas, because of the
regrouping we have to bring back the duplicated translate and rotate.

eps=0.01;
difference() {
union() {
translate([0,37,15]) rotate([90,0,0]) cylinder(h=20,r=5);
cylinder(h=30,r1=25,r2=16);
}
union() {
translate([0,37+eps,15]) rotate([90,0,0]) cylinder(h=20+eps*2,r=4);
translate([0,0,-eps]) cylinder(h=30+2*eps,r1=23,r2=14);
}
}

If you really did want the pipe to protrude into the cone, you have to
regroup a little:

eps=0.01;
difference() {
union() {
difference() {
cylinder(h=30,r1=25,r2=16);
translate([0,0,-eps]) cylinder(h=30+2*eps,r1=23,r2=14);
}
translate([0,37,15]) rotate([90,0,0]) cylinder(h=20,r=5);
}
translate([0,37+eps,15]) rotate([90,0,0]) cylinder(h=20+eps*2,r=4);
}

-------------- next part --------------
An HTML attachment was scrubbed...