diff --git a/.openscad_docsgen_rc b/.openscad_docsgen_rc index 919ffe9..9a44f55 100644 --- a/.openscad_docsgen_rc +++ b/.openscad_docsgen_rc @@ -48,6 +48,7 @@ PrioritizeFiles: metric_screws.scad bottlecaps.scad screw_drive.scad + tripod_mounts.scad DefineHeader(BulletList): Side Effects DefineHeader(Table;Headers=Anchor Name|Position): Extra Anchors DefineHeader(Table;Headers=Anchor Type|What it is): Anchor Types diff --git a/skin.scad b/skin.scad index d00ee5b..7a56b1e 100644 --- a/skin.scad +++ b/skin.scad @@ -956,7 +956,7 @@ module spiral_sweep(poly, h, r, turns=1, higbee, center, r1, r2, d, d1, d2, higb // ushape = [[-10, 0],[-10, 10],[ -7, 10],[ -7, 2],[ 7, 2],[ 7, 7],[ 10, 7],[ 10, 0]]; // elliptic_arc = xscale(2, p=arc($fn=64,angle=[180,0], r=30)); // Clockwise // path_sweep(ushape, path3d(elliptic_arc), method="manual", normal=UP+RIGHT); -// Example(NoScales): Here we changed the ellipse to be more pointy, and with the same results as above we get a shape with an irregularity in the middle where it maintains the specified direction around the point of the ellipse. If the ellipse were more pointing, this would result in a bad polyhedron: +// Example(NoScales): Here we changed the ellipse to be more pointy, and with the same results as above we get a shape with an irregularity in the middle where it maintains the specified direction around the point of the ellipse. If the ellipse were more pointy, this would result in a bad polyhedron: // ushape = [[-10, 0],[-10, 10],[ -7, 10],[ -7, 2],[ 7, 2],[ 7, 7],[ 10, 7],[ 10, 0]]; // elliptic_arc = yscale(2, p=arc($fn=64,angle=[180,0], r=30)); // Clockwise // path_sweep(ushape, path3d(elliptic_arc), method="manual", normal=UP+RIGHT); diff --git a/tripod_mounts.scad b/tripod_mounts.scad new file mode 100644 index 0000000..fb8bc7d --- /dev/null +++ b/tripod_mounts.scad @@ -0,0 +1,105 @@ +////////////////////////////////////////////////////////////////////////////////////////////// +// LibFile: tripod_mounts.scad +// Mount plates for tripods. Currently only the Manfrotto RC2 plate. +// Includes: +// include +// include +// FileGroup: Parts +// FileSummary: Tripod mount plates: RC2 +////////////////////////////////////////////////////////////////////////////////////////////// + + +// Module: manfrotto_rc2_plate() +// Usage: +// manfrotto_rc2_plate([chamfer],[anchor],[orient],[spin]) [ATTACHMENTS]; +// Description: +// Creates a Manfrotto RC2 quick release mount plate to mount to a tripod. The chamfer argument +// lets you control whether the model edges are chamfered. By default all edges are chamfered, +// but you can set it to "bot" to chamfer only the bottom, so that connections to a model larger +// than the plate doin't have a V-groove at the junction. The plate is 10.5 mm thick. +// Arguments: +// chamfer = "none" for no chamfer, "all" for full chamfering, and "bot" or "bottom" for bottom chamfering. Default: "all". +// Examples: +// manfrotto_rc2_plate(); +// manfrotto_rc2_plate("bot"); +module manfrotto_rc2_plate(chamfer="all",anchor,orient,spin) +{ + chsize=0.5; + + assert(in_list(chamfer, ["bot","bottom","all","none"]), "chamfer must be \"all\", \"bottom\", \"bot\", or \"none\""); + chamf_top = chamfer=="all"; + chamf_bot = in_list(chamfer, ["bot","bottom","all"]); + + length = 52.5; + innerlen=43; + + topwid = 37.4; + botwid = 42.4; + + thickness = 10.5; + + flat_height=3; + angled_size=5; + angled_height = thickness - flat_height*2; + angled_width = sqrt(angled_size^2-angled_height^2); + + corner_space = 25; + corner_space_ht = 4.5; + + left_top=2; + + pts = turtle([ + "move",botwid, + "left", + "move", flat_height, + "xymove", [-angled_width, angled_height], + "move", flat_height, + "left", + "move", topwid, + "left", + "move", left_top, + "jump", [0,flat_height] + ]); + + + cutout_len=26; + + + facet = [ + back(-left_top,select(pts,-3)), + each fwd(1.5,select(pts,-2,-1)), + [-10,-left_top+select(pts,-1).y], + left(10,back(-flat_height,select(pts,-3))) + ]; + + attachable(anchor,spin,orient,size=[botwid,length,thickness],size2=[topwid,length],shift=[.64115/2,0]){ + down(thickness/2) + diff() + linear_sweep(pts,h=length,convexity=4,orient=FWD,anchor=FWD){ + zflip_copy() + down(.01)fwd(.01)left(.01)position(LEFT+FRONT+BOT) + cuboid([corner_space,(length-innerlen)/2,thickness+.02], chamfer=-chsize, $tags="remove", + orient=FWD,anchor=TOP+LEFT+FWD,edges=chamf_top?"ALL":TOP); + fwd(left_top)position(LEFT+BACK)linear_sweep(h=cutout_len,facet,convexity=4,$tags="remove",anchor=RIGHT+BACK); + if (chamf_bot){ + edge_mask(FRONT+LEFT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(FRONT+RIGHT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(FRONT+TOP)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(FRONT+BOT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(TOP+RIGHT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(BOT+RIGHT)chamfer_edge_mask(length,chsize,$tags="remove"); + zflip_copy(){ + right(corner_space)edge_mask(TOP+LEFT) chamfer_edge_mask(length,chsize,$tags="remove"); + down((length-innerlen)/2)edge_mask(TOP+LEFT) chamfer_edge_mask(length,chsize,$tags="remove"); + } + } + if (chamf_top){ + edge_mask(BACK+LEFT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(BACK+RIGHT)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(BACK+TOP)chamfer_edge_mask(length,chsize,$tags="remove"); + edge_mask(BACK+BOT)chamfer_edge_mask(length,chsize,$tags="remove"); + } + } + children(); + } +}