I've got a small part, an eccentric. 0.375" thick.
I multiply each parameter by 25.4 to get into metric units.
It consists of these layers:
EccentricSheeveThick = 0.078125
EccentricSheeveThick = 0.078125
EccentricGrooveThick = 0.0625
BossLength = 0.15625
Which when stacked, should equal the total length (the eccentric thickness).
EccentricThick = 0.375 total
But in the SCAD file, the center cylinder (bore) is taller then the stack up
of the 4 parts, seen on the rendered graphic.
A DXF exported to and then scaled back to inches ( scale 1/25.4) shows each
of the layers as being shorter then specified.
Stackup? Or hopefully did I make an error?
Thanks for looking.
--
Sent from: http://forum.openscad.org/
Sharing the source code will help.
Admin - PM me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
Sure,
Here's the source code for eccentric:
/*
scale = 25.4; // for imperial
$fn = 100;
EccentricSheaveDia = 0.625 * scale;
EccentricSheeveThick = 0.078125 * scale;
EccentricGrooveDia = 0.500 * scale;
EccentricGrooveThick = 0.0625 * scale;
EccentricOffset = 0.09375 * scale;
EccentricBore = 0.28125 * scale;
BossDia = 0.4375 * scale;
BossLength = 0.15625 * scale;
EccentricBossSetscrew = 0.089 * scale;
EccentricSetScrewLen = 0.375 * scale;
EccentricSetScrewOffset = (BossLength + EccentricSheeveThick) / 2.0 * scale;
EccentricThick = 0.375 * scale;
//projection(cut = true) // project X - Y plane for creating DXF
// rotate([0, 90, 0]) // flip over if needed
Eccentric(); // top level function
//
---=======================
module Eccentric()
{
translate([0, 0, EccentricSheeveThick / 2.0]) // get 1st sheave bottom
on XY plane to simplify calcs
{
difference()
{
union()
{
/* Sheeve */
translate([EccentricOffset, 0, 0])
linear_extrude(height = EccentricSheeveThick + 0.2, center =
true)
circle(d = EccentricSheaveDia, center = true);
/* Groove */
translate([EccentricOffset, 0, EccentricSheeveThick])
linear_extrude(height = EccentricGrooveThick + 0.1, center =
true)
circle(d = EccentricGrooveDia, center = true);
/* Sheeve */
translate([EccentricOffset, 0, EccentricSheeveThick +
EccentricGrooveThick])
linear_extrude(height = EccentricSheeveThick + 0.1, center =
true)
circle(d = EccentricSheaveDia, center = true);
/* boss */
translate([0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick ])
linear_extrude(height = BossLength, center = true)
circle(d = BossDia, center = true);
// /* Bore .. goes below as a diff */
// translate([0, 0, (EccentricThick / 2.0) - (EccentricSheeveThick /
2.0) -.1 ])
// linear_extrude(height = EccentricThick + .2, center = true)
// circle(d = EccentricBore, center = true);
}
/* set screw goest here! */
translate([BossDia / 2.0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick + (BossLength / 2.0) ] )
rotate([0, 90, 0])
linear_extrude(height = EccentricSetScrewLen, center = true)
circle(d = EccentricBossSetscrew, center = true);
// /* Bore goes here! /
// translate([0, 0, (EccentricThick / 2.0) - (EccentricSheeveThick /
2.0) -.1 ])
// linear_extrude(height = EccentricThick - .1, center = true)
// circle(d = EccentricBore, center = true);
}
}
/ put in as solid to check /
/ Bore */
translate([0, 0, (EccentricThick / 2.0) -.1 ])
linear_extrude(height = EccentricThick + .2, center = true)
circle(d = EccentricBore, center = true);
}
//
---=======================
THANKS!
--
Sent from: http://forum.openscad.org/
Is it the extra 0.2 from:
linear_extrude(height = EccentricThick + .2, center = true)
?
Admin - PM me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
No, sorry...
Admin - PM me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
It is all the center=true in the linear_extrude() in the union().
Change them to false, and remove the z translate at the top and it works.
Use "%" at the front of each linear_extrude() to clearly see where each
layer is ATM.
Admin - PM me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
Thanks, I just tried it!
I re-built and exported a DXF to my CAD program, and in the boss dia and
overall length, I'm spot-on. A little off on the small thicknesses, 'tho,
and they stack up OK as far as I can see. T
http://forum.openscad.org/file/t2193/EngineAssembly2.png he errors are
probably down in the 'noise' of the actual 3D printing, I'm guessing.
Simpler without the 'true's in the various linear_extrudes anyway. So why
the errors? I'd have thought it would have worked anyway. Is this unique?
I've been using the 'center' quite a bit in my other engine parts. (I've
yet to print, waiting on a 3D printer) and in most cases, 'center'
simplifies things. I should check a few parts with a DXF...
What is the internal precision for OpenSCAD? doubles or long doubles?
What's a reasonable limit to the resolution I should expect?
Thanks again!
http://forum.openscad.org/file/t2193/EngineAssembly2.png
--
Sent from: http://forum.openscad.org/
Thanks, I just tried it!
I re-built and exported a DXF to my CAD program, and in the boss dia and
overall length, I'm spot-on. A little off on the small thicknesses, 'tho,
and they stack up OK as far as I can see. T
http://forum.openscad.org/file/t2193/EngineAssembly2.png he errors are
probably down in the 'noise' of the actual 3D printing, I'm guessing.
Simpler without the 'true's in the various linear_extrudes anyway. So why
the errors? I'd have thought it would have worked anyway. Is this unique?
I've been using the 'center' quite a bit in my other engine parts. (I've
yet to print, waiting on a 3D printer) and in most cases, 'center'
simplifies things. I should check a few parts with a DXF...
What is the internal precision for OpenSCAD? doubles or long doubles?
What's a reasonable limit to the resolution I should expect?
Thanks again!
http://forum.openscad.org/file/t2193/EngineAssembly2.png
--
Sent from: http://forum.openscad.org/
KM6VV wrote
So why
the errors?
As you were adding a smidgeon to their height, the center=true dropped their
starting Z position by smidgeon/2, you were not taking that into account
when you placed the next object.
Try this to see (the "%" operator is your friend):
module Eccentric()
{
translate([0, 0, 0]) // EccentricSheeveThick / 2.0]) // get 1st sheave
bottom on XY plane to simplify calcs
{
difference()
{
union()
{
/* Sheeve */
translate([EccentricOffset, 0, 0])
linear_extrude(height = EccentricSheeveThick + 0.2, center =
true)
circle(d = EccentricSheaveDia, center = true);
/* Groove */
translate([EccentricOffset, 0, EccentricSheeveThick])
linear_extrude(height = EccentricGrooveThick + 0.1, center =
true)
circle(d = EccentricGrooveDia, center = true);
/* Sheeve */
%translate([EccentricOffset, 0, EccentricSheeveThick +
EccentricGrooveThick])
linear_extrude(height = EccentricSheeveThick + 0.1, center =
true)
circle(d = EccentricSheaveDia, center = true);
/* boss */
translate([0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick ])
linear_extrude(height = BossLength, center = true)
circle(d = BossDia, center = true);
}
/* set screw goest here! /
translate([BossDia / 2.0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick + (BossLength / 2.0) ] )
rotate([0, 90, 0])
linear_extrude(height = EccentricSetScrewLen, center = true)
circle(d = EccentricBossSetscrew, center = true);
}
}
/ put in as solid to check /
/ Bore */
translate([0, 0, (EccentricThick / 2.0) ])
linear_extrude(height = EccentricThick, center = true)
circle(d = EccentricBore, center = true);
}
What is the internal precision for OpenSCAD? doubles or long doubles?
What's a reasonable limit to the resolution I should expect?
See the wiki
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/General#Values_and_Data_Types
.
Generally resolution, in itself, is not an issue.
There is a current known problem with tiny numbers, e.g. if your whole space
is < ~10 and using fine details (e.g. 0.02), if you see strange things in
such cases, multiply all you numbers by, say, 1000, then scale the final
result down by 1000.
Admin - PM me if you need anything, or if I've done something stupid...
Unless specifically shown otherwise above, my contribution is in the Public Domain; to the extent possible under law, I have waived all copyright and related or neighbouring rights to this work. Obviously inclusion of works of previous authors is not included in the above.
Sent from: http://forum.openscad.org/
I see it:
/* boss */
translate([0, 0, (EccentricSheeveThick * 2.5) +
I had 2.0, so I was a half a sheeve (sheave) off.
I did take out the 'true's in the linear_extrudes, and it looks better
(simpler!):
module Eccentric()
{
difference()
{
union()
{
/* Sheeve */
translate([EccentricOffset, 0, 0])
linear_extrude(height = EccentricSheeveThick + 0.2, center =
false)
circle(d = EccentricSheaveDia, center = true);
/* Groove */
translate([EccentricOffset, 0, EccentricSheeveThick])
linear_extrude(height = EccentricGrooveThick + 0.1, center =
false)
circle(d = EccentricGrooveDia, center = true);
/* Sheeve */
translate([EccentricOffset, 0, EccentricSheeveThick +
EccentricGrooveThick])
linear_extrude(height = EccentricSheeveThick + 0.1, center =
false)
circle(d = EccentricSheaveDia, center = true);
/* boss */
translate([0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick ])
linear_extrude(height = BossLength, center = false)
circle(d = BossDia, center = true);
}
/* Bore goes here! */
translate([0, 0, -.1 ])
linear_extrude(height = EccentricThick + .2, center = false)
circle(d = EccentricBore, center = true);
/* set screw goes here! */
translate([BossDia / 2.0, 0, (EccentricSheeveThick * 2.0) +
EccentricGrooveThick + (BossLength / 2.0) ] )
rotate([0, 90, 0])
linear_extrude(height = EccentricSetScrewLen, center = true)
circle(d = EccentricBossSetscrew, center = true);
}
}
Thanks for the link, I'll study it. I had kicked up my 'scale' to 254, but
didn't notice a difference. I'll keep it in mind. I have a small 'slide
valve' to model.
I really enjoy modeling parts with OpenSCAD! A terrific tool, especially
for a 'C' programmer with a little graphics!
Thanks!
http://forum.openscad.org/file/t2193/Eccentric.png
--
Sent from: http://forum.openscad.org/