mirror of
https://github.com/BelfrySCAD/BOSL2.git
synced 2024-12-29 16:29:40 +00:00
Added generic_airplane(), show_transform_list()
This commit is contained in:
parent
2f5bf86f92
commit
fdac4545e8
2 changed files with 131 additions and 2 deletions
|
@ -3587,7 +3587,7 @@ module show_anchors(s=10, std=true, custom=true) {
|
||||||
// Synopsis: Shows a 3d anchor orientation arrow.
|
// Synopsis: Shows a 3d anchor orientation arrow.
|
||||||
// SynTags: Geom
|
// SynTags: Geom
|
||||||
// Topics: Attachments
|
// Topics: Attachments
|
||||||
// See Also: anchor_arrow2d(), show_anchors(), expose_anchors(), frame_ref()
|
// See Also: anchor_arrow2d(), show_anchors(), expose_anchors(), frame_ref(), generic_airplane()
|
||||||
// Usage:
|
// Usage:
|
||||||
// anchor_arrow([s], [color], [flag], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
|
// anchor_arrow([s], [color], [flag], [anchor=], [orient=], [spin=]) [ATTACHMENTS];
|
||||||
// Description:
|
// Description:
|
||||||
|
@ -3628,7 +3628,7 @@ module anchor_arrow(s=10, color=[0.333,0.333,1], flag=true, $tag="anchor-arrow",
|
||||||
// Topics: Attachments
|
// Topics: Attachments
|
||||||
// See Also: anchor_arrow(), show_anchors(), expose_anchors(), frame_ref()
|
// See Also: anchor_arrow(), show_anchors(), expose_anchors(), frame_ref()
|
||||||
// Usage:
|
// Usage:
|
||||||
// anchor_arrow2d([s], [color], [flag]);
|
// anchor_arrow2d([s], [color]);
|
||||||
// Description:
|
// Description:
|
||||||
// Show an anchor orientation arrow.
|
// Show an anchor orientation arrow.
|
||||||
// Arguments:
|
// Arguments:
|
||||||
|
@ -3668,6 +3668,90 @@ module expose_anchors(opacity=0.2) {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Module: show_transform_list()
|
||||||
|
// Synopsis: Shows a list of transforms and how they connect.
|
||||||
|
// SynTags: Geom
|
||||||
|
// Topics: Attachments
|
||||||
|
// See Also: generic_airplane(), anchor_arrow(), show_anchors(), expose_anchors(), frame_ref()
|
||||||
|
// Usage:
|
||||||
|
// show_transform_list(tlist, [s]);
|
||||||
|
// show_transform_list(tlist) {CHILDREN};
|
||||||
|
// Description:
|
||||||
|
// Given a list of transformation matrices, shows the position and orientation of each one.
|
||||||
|
// A line is drawn from each transform position to the next one, and an orientation indicator is
|
||||||
|
// shown at each position. If a child is passed, that child will be used as the orientation indicator.
|
||||||
|
// By default, a {{generic_airplane()}} is used as the orientation indicator.
|
||||||
|
// Arguments:
|
||||||
|
// s = Length of the {{generic_airplane()}}. Default: 5
|
||||||
|
// Example:
|
||||||
|
// tlist = [
|
||||||
|
// zrot(90),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30) *
|
||||||
|
// fwd(35) * xrot(-30),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30) *
|
||||||
|
// fwd(35) * xrot(-30) * fwd(40) * yrot(15),
|
||||||
|
// ];
|
||||||
|
// show_transform_list(tlist, s=20);
|
||||||
|
// Example:
|
||||||
|
// tlist = [
|
||||||
|
// zrot(90),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30) *
|
||||||
|
// fwd(35) * xrot(-30),
|
||||||
|
// zrot(90) * fwd(30) * zrot(30) *
|
||||||
|
// fwd(35) * xrot(-30) * fwd(40) * yrot(15),
|
||||||
|
// ];
|
||||||
|
// show_transform_list(tlist) frame_ref();
|
||||||
|
module show_transform_list(tlist, s=5) {
|
||||||
|
path = [for (m = tlist) apply(m, [0,0,0])];
|
||||||
|
stroke(path, width=s*0.03);
|
||||||
|
for (m = tlist) {
|
||||||
|
multmatrix(m) {
|
||||||
|
if ($children>0) children();
|
||||||
|
else generic_airplane(s=s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Module: generic_airplane()
|
||||||
|
// Synopsis: Shows a generic airplane shape, useful for viewing orientations.
|
||||||
|
// SynTags: Geom
|
||||||
|
// Topics: Attachments
|
||||||
|
// See Also: anchor_arrow(), show_anchors(), expose_anchors(), frame_ref()
|
||||||
|
// Usage:
|
||||||
|
// generic_airplane([s]);
|
||||||
|
// Description:
|
||||||
|
// Creates a generic airplane shape. This can be useful for viewing the orientation of 3D transforms.
|
||||||
|
// Arguments:
|
||||||
|
// s = Length of the airplane. Default: 5
|
||||||
|
// Example:
|
||||||
|
// generic_airplane(s=20);
|
||||||
|
module generic_airplane(s=5) {
|
||||||
|
$fn = max(segs(0.05*s), 12);
|
||||||
|
color("#ddd")
|
||||||
|
fwd(s*0.05)
|
||||||
|
ycyl(l=0.7*s, d=0.1*s) {
|
||||||
|
attach(FWD) top_half(s=s) zscale(2) sphere(d=0.1*s);
|
||||||
|
attach(BACK,FWD) ycyl(l=0.2*s, d1=0.1*s, d2=0.05*s) {
|
||||||
|
yrot_copies([-90,0,90])
|
||||||
|
prismoid(s*[0.01,0.2], s*[0.01,0.05],
|
||||||
|
h=0.2*s, shift=s*[0,0.15], anchor=BOT);
|
||||||
|
}
|
||||||
|
yrot_copies([-90,90])
|
||||||
|
prismoid(s*[0.01,0.2], s*[0.01,0.05],
|
||||||
|
h=0.5*s, shift=s*[0,0.15], anchor=BOT);
|
||||||
|
}
|
||||||
|
color("#777") zcopies(0.1*s) sphere(d=0.02*s);
|
||||||
|
back(0.09*s) {
|
||||||
|
color("#f00") right(0.46*s) sphere(d=0.04*s);
|
||||||
|
color("#0f0") left(0.46*s) sphere(d=0.04*s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Module: frame_ref()
|
// Module: frame_ref()
|
||||||
// Synopsis: Shows axis orientation arrows.
|
// Synopsis: Shows axis orientation arrows.
|
||||||
// SynTags: Geom
|
// SynTags: Geom
|
||||||
|
|
45
examples/spring_handle.scad
Normal file
45
examples/spring_handle.scad
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
include <BOSL2/std.scad>
|
||||||
|
|
||||||
|
$fn = 45;
|
||||||
|
wire_d = 2;
|
||||||
|
spring_l = 100;
|
||||||
|
spring_d = 20;
|
||||||
|
rod_d = 10;
|
||||||
|
loops = 17;
|
||||||
|
tight_loops=3;
|
||||||
|
|
||||||
|
tpart = tight_loops/loops;
|
||||||
|
lpart = wire_d * tight_loops / 100;
|
||||||
|
r_table = [
|
||||||
|
[0.00, 0],
|
||||||
|
[0+tpart, 0],
|
||||||
|
[0.5, 1],
|
||||||
|
[1-tpart, 0],
|
||||||
|
[1.00, 0],
|
||||||
|
];
|
||||||
|
l_table = [
|
||||||
|
[0.00, -0.50],
|
||||||
|
[0+tpart, -0.5+lpart],
|
||||||
|
[1-tpart, +0.5-lpart],
|
||||||
|
[1.00, +0.50],
|
||||||
|
];
|
||||||
|
lsteps = 45;
|
||||||
|
tsteps = loops * lsteps;
|
||||||
|
path = [
|
||||||
|
for (i = [0:1:tsteps])
|
||||||
|
let(
|
||||||
|
u = i / tsteps,
|
||||||
|
a = u * 360 * loops,
|
||||||
|
r = lookup(u, r_table) * spring_d/2 + wire_d/2 + rod_d/2,
|
||||||
|
z = lookup(u, l_table) * spring_l,
|
||||||
|
pt = [r*cos(a), r*sin(a), z]
|
||||||
|
) pt
|
||||||
|
];
|
||||||
|
yrot(90) {
|
||||||
|
color("lightblue")
|
||||||
|
path_sweep(circle(d=wire_d), path);
|
||||||
|
cylinder(d=rod_d, h=spring_l+10, center=true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// vim: expandtab tabstop=4 shiftwidth=4 softtabstop=4 nowrap
|
Loading…
Reference in a new issue