123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784 |
- /* This is a first pass at dimension lines for OpenSCAD. The text generated for
- * this comes from http://www.thingiverse.com/thing:59817, and I gratefully
- * acknowledge user PGreenland for creating this dotmatrix style font.
- *
- * Download his file first, TextGenerator.scad, before attempting to run this
- * program.
- *
- * What this program does:
- *
- * This program can draw lines with arrows and has a primitive dimensioning
- * element for putting text within arrows. In addition, should the area being
- * dimensioned be too narrow, there is a provision for putting the text on
- * either side of the arrows.
- *
- * The dimension lines are drawn on the xy plane and are meant to be seen in a
- * top view.
- *
- * =======================================================
- * Be sure to view this from above -- ctrl-4
- * =======================================================
- *
- * Available:
- *
- * Assorted constants to ease the use of dimensioning line. Because there is
- * no introspection regarding the dimensions of your creations, you will want
- * to adjust the parameters to fit the context of your creation. You can adjust
- * the size of the text, lines, etc to match the rest of your objects.
- *
- * the following functions or modules are available.
- *
- * line(length, width, height=DIM_HEIGHT, left_arrow=false, right_arrow=false)
- * Can draw a line with the options of including an arrow at either end
- *
- * circle_center(radius, size, line_width)
- * Draws the cross in the center of a circle. There are defaults for the
- * cross size and line width
- *
- * dimensions(length, line_width, loc=DIM_CENTER)
- * draws text within lines, such as <--- 3.5 --->
- * with the use of the variable loc you can alter the placement of the text
- * loc=DIM_CENTER <--- 3.5 ---> this is the default
- * loc=DIM_LEFT 3.5 <---->
- * loc=DIM_RIGHT <----> 3.5
- * loc=DIM_OUTSIDE ---> 3.5 <---
- *
- * leader_line(angle, radius, angle_length, horz_line_length,
- * direction=DIM_RIGHT, line_width, text)
- *
- * for use in pointing to the edge of a circle and showing text
- *
- * usage of the leader line:
- * translate to the center of the circle
- * Typically leader lines have a bend in them. The angle variable is used
- * to specify the angle from which the line will point to the center of the
- * circle. The radius specifies the location of the arrow. The
- * angle_length is distance that the leader line takes until meeting the
- * horizontal line. Once the angled line meets the horizontal line, that
- * line will either extend to the right or left. direction and therefore
- * be either DIM_RIGHT or DIM_LEFT. line_width typically would be whatever
- * constant you have selected for all your dimensioned lines. Finally, the
- * text will be the value that you wish to show, such as R 0.500.
- *
- *
- * Created by Don Smiley
- */
- //use <OpenSCAD_3D_Text_Generator/TextGenerator.scad>
- use <TextGenerator.scad>
- // these variables are used within the modules
- DIM_CENTER = 0;
- DIM_LEFT = 1;
- DIM_RIGHT = 2;
- DIM_OUTSIDE = 3;
- DIM_HORZ = 0;
- DIM_VERT = 1;
- DIM_UPPER_LEFT = 0;
- DIM_UPPER_RIGHT = 1;
- DIM_LOWER_LEFT = 2;
- DIM_LOWER_RIGHT = 3;
- /* Constants related to the annotation lines
- *
- * Because the dimension of the part to be documented can vary widely, you
- * probably are going to need to adjust the parameters to fit the context of
- * your part.
- *
- * For example, the following parameters were used for a part 3.5 units long.
- * In addition, DIM_HEIGHT is a height meant to be slightly above your tallest
- * part.
- */
- DIM_LINE_WIDTH = .025; // width of dimension lines
- DIM_SPACE = .1; // a spacing value to make it easier to adjust line spacing etc
- DIM_HEIGHT = .01; // height of lines
- // refers to the size of the cross within a circle
- DIM_HOLE_CENTER = DIM_LINE_WIDTH * 6;
- // an approximation that sets the font size relative to the line widths
- DIM_FONTSCALEFACTOR = .7;
- OFFSET = .05; // added to the hole length to extend past the surface of the cube
- module arrow(arr_points, arr_length, height) {
- // arrow points to the left
- linear_extrude(height=height, convexity=2)
- polygon(
- points = [[0, 0],
- [arr_points, arr_points / 2],
- [arr_length, 0],
- [arr_points, -arr_points / 2]],
- paths = [[0, 1, 2, 3]], convexity = 2);
- }
- module line(length, width=DIM_LINE_WIDTH,
- height=DIM_HEIGHT,
- left_arrow=false,
- right_arrow=false
- ) {
- /* This module draws a line that can have an arrow on either end. Because
- * the intended use is to be viewed strictly from above, the height of the
- * line is set arbitrarily thin.
- *
- * The factors arr_length and arr_points are used to create a proportionate
- * arrow. Your sense of asthetics may lead you to choose different
- * numbers.
- */
- arr_points = width * 4;
- arr_length = arr_points * .6;
- union() {
- if (left_arrow && right_arrow) {
- translate([arr_length, -width / 2, 0])
- cube([length - arr_length * 2, width, height], center=false);
- } else {
- if (left_arrow) {
- translate([arr_length, -width / 2, 0])
- cube([length - arr_length, width, height], center=false);
- } else {
- if (right_arrow) {
- translate([0, -width / 2, 0])
- cube([length - arr_length, width, height], center=false);
- } else {
- translate([0, -width / 2, 0])
- cube([length, width, height], center=false);
- }
- }
- }
- if (left_arrow) {
- arrow(arr_points, arr_length, height);
- }
- if (right_arrow) {
- translate([length, 0, 0])
- rotate([0, 0, 180])
- arrow(arr_points, arr_length, height);
- }
- }
- }
- module circle_center(radius, size=DIM_HOLE_CENTER, line_width=DIM_LINE_WIDTH) {
- translate([-size / 2, 0, 0])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- translate([radius - size / 2, 0, 0])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- translate([-radius - size / 2, 0, 0])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- translate([0, -size / 2, 0])
- rotate([0, 0, 90])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- translate([0, radius - size / 2, 0])
- rotate([0, 0, 90])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- translate([0, -radius - size / 2, 0])
- rotate([0, 0, 90])
- line(length=size, width=line_width, height=DIM_HEIGHT, left_arrow=false,
- right_arrow=false);
- }
- module dimensions(length, line_width=DIM_LINE_WIDTH, loc=DIM_CENTER) {
- DIM_FONTSCALE = line_width * DIM_FONTSCALEFACTOR;
- text = str(length);
- space = len(text) * DIM_FONTSCALE * 7;
- if (loc == DIM_CENTER) {
- line(length=length / 2 - space / 2, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=false);
- translate([(length) / 2 - space / 2 * .9, -DIM_FONTSCALE * 3, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- translate([length / 2 + space / 2, 0, 0])
- line(length=length / 2 - space / 2, width=line_width, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=true);
- } else {
- if (loc == DIM_LEFT) {
- line(length=length, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=true);
- translate([-space, -DIM_FONTSCALE * 3, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- } else {
- if (loc == DIM_RIGHT) {
- line(length=length, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=true);
- translate([length + space, -DIM_FONTSCALE * 3, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- } else {
- if (loc == DIM_OUTSIDE) {
- rotate([0, 180, 0])
- line(length=length / 2, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=false);
- translate([(length) / 2 - space / 2 * .9,
- -DIM_FONTSCALE * 3, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- translate([length, 0, 0])
- line(length=length / 2, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=false);
- }
- }
- }
- }
- }
- module leader_line(angle, radius, angle_length, horz_line_length,
- direction=DIM_RIGHT, line_width=DIM_LINE_WIDTH, text, do_circle=false) {
- /* leader_line
- *
- * Creates a line that points directly at a center point from the given
- * radius.
- * Then, a short horzizontal line is generated, followed by text. The
- * direction of the horizontal short line defaults to the right, the
- * choice made by either DIM_RIGHT or DIM_LEFT
- */
- DIM_FONTSCALE = line_width * DIM_FONTSCALEFACTOR;
- text_length = len(text) * DIM_FONTSCALE * 6;
- space = DIM_FONTSCALE * 6;
- rotate([0, 0, angle])
- translate([radius, 0, 0])
- line(length=angle_length, width=line_width, height=DIM_HEIGHT,
- left_arrow=true, right_arrow=false);
- rotate([0, 0, angle])
- translate([radius + angle_length, 0, 0])
- rotate([0, 0, -angle])
- union() {
- if (direction == DIM_RIGHT) {
- line(length=horz_line_length, width=line_width, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- translate([(horz_line_length + space), -DIM_FONTSCALE * 3, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- if (do_circle) {
- translate([(horz_line_length + space + text_length/2),
- 0, 0])
- difference() {
- cylinder(h=DIM_HEIGHT, r=text_length + space - line_width,
- center=true, $fn=100);
- cylinder(h=.05, r=text_length + space - line_width * 2,
- center=true, $fn=100);
- }
- }
- } else {
- translate([-horz_line_length, 0, 0])
- line(length=horz_line_length, width=line_width, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- translate([-(horz_line_length + space + text_length),
- -DIM_FONTSCALE * 3,
- 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(text);
- }
- }
- }
- module titleblock(lines, descs, details) {
- /* titleblock
- *
- * This module accepts the following arrays with formats:
- *
- * holds the description of the lines. width is a factor that
- * expands the line width beyond DIM_LINE_WIDTH
- *
- * lines = [[startx, starty, horz/vert, length, width],
- * [startx, starty, horz/vert, length, width]]
- *
- * holds the descriptions of the title blocks. these are meant to sit in
- * the upper left corner. size, like width above, is a factor that
- * increases/decreases the size of the font
- *
- * descs = [[startx, starty, horz/vert, text, size],
- * [startx, starty, horz/vert, text, size]]
- *
- * holds the detail associated with the part being documented
- *
- * details = [[startx, starty, horz/vert, text, size],
- * [startx, starty, horz/vert, text, size]]
- */
- DIM_FONTSCALE = DIM_LINE_WIDTH * .7;
- for (line = lines) {
- translate([line[0] * DIM_LINE_WIDTH,
- line[1] * DIM_LINE_WIDTH,
- 0])
- if (line[2] == DIM_VERT) {
- rotate([0, 0, -90])
- line(length=line[3] * DIM_LINE_WIDTH,
- width=DIM_LINE_WIDTH * line[4], height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- } else {
- line(length=(line[3] + 1) * DIM_LINE_WIDTH,
- width=DIM_LINE_WIDTH * line[4], height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- }
- }
- for (line = descs) {
- translate([line[0] * DIM_LINE_WIDTH, line[1] * DIM_LINE_WIDTH, 0])
- if (line[2] == DIM_VERT) {
- rotate([0, 0, 90])
- scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4],
- DIM_FONTSCALE * line[4]])
- drawtext(line[3]);
- } else {
- scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4],
- DIM_FONTSCALE * line[4]])
- drawtext(line[3]);
- }
- }
- for (line = details) {
- translate([line[0] * DIM_LINE_WIDTH, line[1] * DIM_LINE_WIDTH, 0])
- if (line[2] == DIM_VERT) {
- rotate([0, 0, 90])
- scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4],
- DIM_FONTSCALE * line[4]])
- drawtext(line[3]);
- } else {
- scale([DIM_FONTSCALE * line[4], DIM_FONTSCALE * line[4],
- DIM_FONTSCALE * line[4]])
- drawtext(line[3]);
- }
- }
- }
- module sample_titleblock1() {
- /* sample titleblock
- *
- * Note the use of double thickness lines around the perimeter. Any line
- * can be adjusted to be thinner or thicker.
- *
- * Note also that since lines are centered on their widths, some adjustments
- * for half-width spacing is needed to avoid a jagged look on corners.
- * You can see that in the horizontal lines in the first section that are
- * offset by 1, which is the half-width of the outside line.
- */
- title_width = 290;
- row_height = 15;
- cols = [-1, 50, 114, 200, 215, 260];
- rows = [0, -row_height, -row_height * 2, -row_height * 3, -row_height * 4];
- // spacing tweaks to fit into the blocks
- desc_x = 2; // column offset for start of small text
- desc_y = -5; // row offset for start of small text
- det_y = -12; // row offset for start of detail text
- desc_size = .75; // relative size of description text
- lines = [
- // horizontal lines
- [cols[0], rows[0], DIM_HORZ, title_width, 2],
- [cols[0], rows[1], DIM_HORZ, title_width, 1],
- [cols[2], rows[2], DIM_HORZ, title_width - cols[2] - 1, 1],
- [cols[3], rows[3], DIM_HORZ, title_width - cols[3] - 1, 1],
- [cols[0], rows[4] - 1, DIM_HORZ, title_width, 2],
- // vertical lines
- [0, 0, DIM_VERT, row_height * 4, 2],
- [cols[1], rows[0], DIM_VERT, row_height, 1],
- [cols[2], rows[0], DIM_VERT, row_height * 4, 1],
- [cols[3], rows[0], DIM_VERT, row_height * 4, 1],
- [cols[4], rows[3], DIM_VERT, row_height, 1],
- [cols[5], rows[3], DIM_VERT, row_height, 1],
- [title_width - 1, 0, DIM_VERT, row_height * 4, 2],
- ];
- descs = [
- [cols[0] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Responsible dep", desc_size],
- [cols[1] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Technical reference", desc_size],
- [cols[2] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Creator", desc_size],
- [cols[3] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Approval person", desc_size],
- [cols[2] + desc_x, rows[1] + desc_y, DIM_HORZ,
- "Document type", desc_size],
- [cols[3] + desc_x, rows[1] + desc_y, DIM_HORZ,
- "Document status", desc_size],
- [cols[2] + desc_x, rows[2] + desc_y, DIM_HORZ,
- "Title", desc_size],
- [cols[3] + desc_x, rows[2] + desc_y, DIM_HORZ,
- "Identification number", desc_size],
- [cols[3] + desc_x, rows[3] + desc_y, DIM_HORZ,
- "Rev", desc_size],
- [cols[4] + desc_x, rows[3] + desc_y, DIM_HORZ,
- "Date of issue", desc_size],
- [cols[5] + desc_x, rows[3] + desc_y, DIM_HORZ,
- "Sheet", desc_size]
- ];
- details = [
- [cols[0] + desc_x, rows[0] + det_y, DIM_HORZ,
- " ", 1], //Responsible dep.
- [cols[1] + desc_x, rows[0] + det_y, DIM_HORZ,
- " ", 1], //Technical reference
- [cols[2] + desc_x, rows[0] + det_y, DIM_HORZ,
- "D. Smiley ", 1], //Creator
- [cols[3] + desc_x, rows[0] + det_y, DIM_HORZ,
- " ", 1], //Approval person
- [cols[0] + desc_x + 10, rows[2] + det_y, DIM_HORZ,
- "My OpenSCAD Project", 1],
- [cols[2] + desc_x, rows[1] + det_y, DIM_HORZ,
- " ", 1], //Document type
- [cols[3] + desc_x, rows[1] + det_y, DIM_HORZ,
- "First issue", 1], //Document status
- [cols[2] + desc_x, rows[2] + det_y, DIM_HORZ,
- "Sample Part", 1], //Title
- [cols[3] + desc_x, rows[2] + det_y, DIM_HORZ,
- "123", 1], //Identification number
- [cols[3] + desc_x, rows[3] + det_y, DIM_HORZ,
- " ", 1], //Rev
- [cols[4] + desc_x, rows[3] + det_y, DIM_HORZ,
- "2013-3-31", 1], //Date of issue
- [cols[5] + desc_x, rows[3] + det_y, DIM_HORZ,
- "1/100", 1] //Sheet
- ];
- titleblock(lines, descs, details);
- }
- module sample_revisionblock(revisions) {
- DIM_FONTSCALE = DIM_LINE_WIDTH * .7;
- // revision block headings
- row_height = 15;
- revision_width = 100;
- desc_x = 2;
- desc_y = -10;
- desc_size = 1;
- cols = [0, 20, 60, revision_width];
- rows = [0, -row_height, -row_height * 2];
- // draw
- lines = [
- // horizontal lines
- [cols[0], rows[0], DIM_HORZ, revision_width, 1],
- [cols[0], rows[1], DIM_HORZ, revision_width, 1],
- [cols[0], rows[2], DIM_HORZ, revision_width, 1],
- // vertical lines
- [cols[0], rows[0], DIM_VERT, row_height * 2, 1],
- [cols[1], rows[0], DIM_VERT, row_height, 1],
- [cols[2], rows[0], DIM_VERT, row_height, 1],
- [cols[3], rows[0], DIM_VERT, row_height * 2, 1],
- ];
- descs = [
- [cols[0] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Rev.", desc_size],
- [cols[1] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Date", desc_size],
- [cols[2] + desc_x, rows[0] + desc_y, DIM_HORZ,
- "Initials", desc_size],
- [cols[1] + desc_x, rows[1] + desc_y, DIM_HORZ,
- "Revisions", desc_size],
- ];
- details = [];
- num_revisions = len(revisions);
- translate([-(revision_width + 40) * DIM_LINE_WIDTH,
- row_height * 2 * DIM_LINE_WIDTH, 0])
- union() {
- titleblock(lines, descs, details);
- // now for the start of actual revisions
- // do this piecemeal -- draw the vertical first
- for (col = cols) {
- translate([col * DIM_LINE_WIDTH, 0, 0])
- rotate([0, 0, 90])
- line(num_revisions * row_height * DIM_LINE_WIDTH);
- }
- for (row = [0: len(revisions)]) {
- translate([0, row * row_height * DIM_LINE_WIDTH, 0])
- line(revision_width * DIM_LINE_WIDTH);
- for (col = [0:2]) {
- translate([(cols[col] + desc_x) * DIM_LINE_WIDTH,
- ((row + 1) * row_height + desc_y) * DIM_LINE_WIDTH, 0])
- scale([DIM_FONTSCALE, DIM_FONTSCALE, DIM_FONTSCALE])
- drawtext(revisions[row][col]);
- }
- }
- }
- }
- module sample_titleblock2() {
- row_height = 20;
- cols = [-.5, 100, 154, 270];
- title_width = cols[3];
- rows = [0, -row_height, -row_height * 2, -row_height * 3, -row_height * 4,
- -row_height * 5, -row_height * 6, -row_height * 7
- ];
- // spacing tweaks to fit into the blocks
- desc_x = 2; // column offset for start of small text
- desc_y = -5; // row offset for start of small text
- det_x = 15; // col offset for start of detail text
- det_y = -15; // row offset for start of detail text
- desc_size = .75; // relative size of description text
- lines = [
- // horizontal lines
- [-.5, 0, DIM_HORZ, title_width, 1],
- [cols[2], rows[1], DIM_HORZ, cols[3] - cols[2] - .5, 1],
- [cols[0], rows[2], DIM_HORZ, cols[1] - cols[0] - .5, 1],
- [cols[0], rows[3], DIM_HORZ, cols[3] - .5, 1],
- [cols[0], rows[4], DIM_HORZ, cols[2] - .5, 1],
- [cols[0], rows[5], DIM_HORZ, cols[3] - .5, 1],
- [cols[0], rows[6], DIM_HORZ, cols[2] - .5, 1],
- [cols[0], rows[7], DIM_HORZ, cols[2] - .5, 1],
- [cols[0], rows[7], DIM_HORZ, title_width, 1],
- // vertical lines
- [cols[0], rows[0], DIM_VERT, -rows[7], 1],
- [cols[1], rows[0], DIM_VERT, -rows[7], 1],
- [cols[2], rows[0], DIM_VERT, -rows[7], 1],
- [cols[3], rows[0], DIM_VERT, -rows[7], 1],
- ];
- part_desc = ["Material", "Finish", "Weight", "Part No."];
- doc_desc = ["Drawing Number",
- "Created by",
- "Reviewed by",
- "Date of issue"
- ];
- // aspects of the part
- part_details = [
- "My Sample Part", // title
- "Stainless Steel", // material
- " ", // finish
- "2.5", // weight
- "123", // part no
- ];
- // aspects documenting the creation of the part
- doc_details = [
- "33-2", // Drawing No.
- "D. Smiley", // Created by
- " ", // Reviewd by
- "2013-3-31", // Date
- ];
- // the organization making the part
- org_details = [
- "My logo",
- "Canny Machines",
- "Org Address, phone"
- ];
- descs = [
- // part description
- [cols[0] + desc_x, rows[2] + desc_y, DIM_HORZ, part_desc[0], desc_size],
- [cols[0] + desc_x, rows[3] + desc_y, DIM_HORZ, part_desc[1], desc_size],
- [cols[0] + desc_x, rows[4] + desc_y, DIM_HORZ, part_desc[2], desc_size],
- [cols[0] + desc_x, rows[5] + desc_y, DIM_HORZ, part_desc[3], desc_size],
- // documentation description
- [cols[1] + desc_x, rows[3] + desc_y, DIM_HORZ, doc_desc[0], desc_size],
- [cols[1] + desc_x, rows[4] + desc_y, DIM_HORZ, doc_desc[1], desc_size],
- [cols[1] + desc_x, rows[5] + desc_y, DIM_HORZ, doc_desc[2], desc_size],
- [cols[1] + desc_x, rows[6] + desc_y, DIM_HORZ, doc_desc[3], desc_size],
- ];
- details = [
- [cols[0] + desc_x, rows[0] + det_y, DIM_HORZ, part_details[0], 1.5],
- [cols[0] + desc_x, rows[2] + det_y, DIM_HORZ, part_details[1], 1],
- [cols[0] + desc_x, rows[3] + det_y, DIM_HORZ, part_details[2], 1],
- [cols[0] + desc_x, rows[4] + det_y, DIM_HORZ, part_details[3], 1],
- [cols[0] + desc_x, rows[5] + det_y, DIM_HORZ, part_details[4], 1],
- [cols[1] + desc_x * 2, rows[3] + det_y, DIM_HORZ, doc_details[0], 1],
- [cols[1] + desc_x * 2, rows[4] + det_y, DIM_HORZ, doc_details[1], 1],
- [cols[1] + desc_x * 2, rows[5] + det_y, DIM_HORZ, doc_details[2], 1],
- [cols[1] + desc_x * 2, rows[6] + det_y, DIM_HORZ, doc_details[3], 1],
- // Organization Details
- [cols[1] + desc_x, rows[1] + det_y, DIM_HORZ, org_details[0], 1.5],
- [cols[2] + desc_x, rows[0] + det_y, DIM_HORZ, org_details[1], 1.5],
- [cols[2] + desc_x, rows[1] + det_y, DIM_HORZ, org_details[2], 1],
- ];
- titleblock(lines, descs, details);
- revisions = [
- ["1a", "2013-4-1", "ds"],
- ["1b", "2013-4-2", "ds"],
- ["2a", "2013-4-3", "ds"],
- ["3a", "2013-4-5", "ds"],
- ["4a", "2013-4-15", "ds"],
- ];
- rotate([0, 0, 90])
- sample_revisionblock(revisions);
- }
- module sample_lines(){
- // sample lines
- union() {
- line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- translate([0, -0.25, 0])
- line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, left_arrow=true,
- right_arrow=false);
- translate([0, -0.5, 0])
- line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=true);
- translate([0, -0.75, 0])
- line(length=2, width=DIM_LINE_WIDTH, height=DIM_HEIGHT, left_arrow=true,
- right_arrow=true);
- }
- }
- module sample_dimensions() {
- /* shows all possibilities
- DIM_CENTER = 0;
- DIM_LEFT = 1;
- DIM_RIGHT = 2;
- DIM_OUTSIDE = 3;
- */
- length = 2.5;
- // The following two lines are vertical lines that bracket the dimensions
- // left arrow
- translate([0, -1.75, 0])
- rotate([0, 0, 90])
- line(length=length, width=DIM_LINE_WIDTH, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- // right arrow
- translate([length, -1.75, 0])
- rotate([0, 0, 90])
- line(length=length, width=DIM_LINE_WIDTH, height=DIM_HEIGHT,
- left_arrow=false, right_arrow=false);
- // The following runs through all the dimension types
- for (i = [0:4]) {
- translate([0, -.5 * i, 0])
- dimensions(length=length, line_width=DIM_LINE_WIDTH, loc=i);
- }
- }
- module sample_leaderlines() {
- radius = .25;
- for (i = [0:6]) {
- leader_line(angle=i * 15, radius=.25, angle_length=(i * .25),
- horz_line_length=.5, direction=DIM_RIGHT,
- line_width=DIM_LINE_WIDTH,
- text=str("leader line angle: ", i * 15 + 90),
- do_circle=false
- );
- }
- for (i = [1:7]) {
- leader_line(angle=i * 20 + 90, radius=.25,
- angle_length=.75,
- horz_line_length=.5, direction=DIM_LEFT,
- line_width=DIM_LINE_WIDTH,
- text=str("leader line angle: ", i * 20 + 90));
- }
- for (i = [1:4]) {
- leader_line(angle=-i * 20, radius=.25, angle_length=1.5,
- horz_line_length=.25, direction=DIM_RIGHT,
- line_width=DIM_LINE_WIDTH,
- text=str(i),
- do_circle=true
- );
- }
- }
- module sample_circlecenter() {
- radius = .25;
- difference() {
- cube([1, 1, 1], center=true);
- cylinder(h=1.1, r=radius, center=true, $fn=100);
- }
- color("Black")
- translate([0, 0, .51])
- circle_center(radius=radius, size=DIM_HOLE_CENTER,
- line_width=DIM_LINE_WIDTH);
- }
- // uncomment these to sample
- // sample_lines();
- //
- // translate([-5.5, 0, 0])
- // sample_dimensions();
- //
- // translate([4, 0, 0])
- // sample_circlecenter();
- //
- // translate([-2, 3, 0])
- // sample_leaderlines();
- //
- // translate([3, 4, 0])
- // sample_titleblock1();
- //
- // translate([0, -2, 0])
- // sample_titleblock2();
|