Loading

MakerBot Print is our newest print-prepration software, which supports native CAD files and STL assemblies,
allows you to interact with all your printers via the Cloud, and many other exciting new features.

Download Now

Setup script now available for omdl (design library).

library omdl openscad_library setup

Please Login to Comment

omdl design library

There is now a script to setup omdl (http://www.thingiverse.com/thing:1934498 ). To try it out open a BASH shell and type:

$ mkdir tmp && cd tmp
$ wget https://git.io/setup-omdl.bash 
$ chmod +x setup-omdl.bash

$ ./setup-omdl.bash --cache --branch-list tags1 --yes --install
$ firefox cache/local/share/OpenSCAD/docs/html/index.html

Tested on Ubuntu and CYGWIN... would love to get it working on others systems if there is interest. Enjoy!

omdl - An OpenSCAD Mechanical Design Library
by rasarmg

I'm an OpenSCAD novice so please forgive my ignorance if I'm missing anything.

I've looked at the thing description as well as the doc and the github readme, and I still don't understand what problem this solves. It somehow feels to me like this is a Big Thing, but the only phrase hinting at its use is that it offers "design primitives", which is, at least to me, too abstract to really understand what is meant in context. All other information seems to be really meta, e.g. what you used to generate the documentation, what variables types there are, how to setup, etc.

I also see that the thing doesn't seem to have any comments with questions, so maybe I'm not the only one not getting it. Could you maybe add some example script snippets there/the doc/the github readme, demonstrating the kinds of problems that are becoming easier by using what your library offers?

As for what problem it solves, the answer is none in particular... Its is a general library. Here is a list of globals from the most recent version (v0.6.1). Mundane routines to help solve other design problems...

- a -

  • aeps
  • align_l()
  • align_ll()
  • all_defined()
  • all_equal()
  • all_len()
  • all_lists()
  • all_numbers()
  • all_scalars()
  • all_strings()
  • almost_equal()
  • angle_ll()
  • angle_lll()
  • any_equal()
  • any_undefined()
  • are_coplanar_lll()

- b -

  • base_coordinates
  • base_unit_angle
  • base_unit_length
  • bitwise_and()
  • bitwise_i2s()
  • bitwise_i2v()
  • bitwise_imi()
  • bitwise_is_equal()
  • bitwise_lsh()
  • bitwise_not()
  • bitwise_or()
  • bitwise_rsh()
  • bitwise_s2i()
  • bitwise_v2i()
  • bitwise_xor()

- c -

  • circular_index()
  • ciselect()
  • cmvselect()
  • compare()
  • cone()
  • consts()
  • convert_angle()
  • convert_coordinate()
  • convert_length()
  • coordinates_cpc()
  • coordinates_csc()
  • coordinates_name()
  • coordinates_pc()
  • coordinates_positive_angles
  • coordinates_sc()
  • count()
  • cross_ll()
  • cuboid()

- d -

  • defined_or()
  • delete()
  • dimension_2to3_v()
  • distance_pp()
  • dot_ll()
  • dround()
  • dtc_polyhedra_anti_prisms
  • dtc_polyhedra_archimedean
  • dtc_polyhedra_archimedean_duals
  • dtc_polyhedra_cupolas
  • dtc_polyhedra_dipyramids
  • dtc_polyhedra_johnson
  • dtc_polyhedra_platonic
  • dtc_polyhedra_polyhedra_all
  • dtc_polyhedra_prisms
  • dtc_polyhedra_pyramids
  • dtc_polyhedra_trapezohedron
  • dtr_polyhedra_anti_prisms
  • dtr_polyhedra_archimedean
  • dtr_polyhedra_archimedean_duals
  • dtr_polyhedra_cupolas
  • dtr_polyhedra_dipyramids
  • dtr_polyhedra_johnson
  • dtr_polyhedra_platonic
  • dtr_polyhedra_polyhedra_all
  • dtr_polyhedra_prisms
  • dtr_polyhedra_pyramids
  • dtr_polyhedra_trapezohedron

- e -

  • eappend()
  • edefined_or()
  • edge_add_r()
  • edge_profile_r()
  • eellipse()
  • eellipse_c()
  • eellipse_cs()
  • eellipse_s()
  • ellipse()
  • ellipse_c()
  • ellipse_cs()
  • ellipse_s()
  • ellipsoid()
  • ellipsoid_s()
  • empty_lst
  • empty_str
  • engon()
  • erectangle()
  • erectangle_c()
  • erhombus()
  • eselect()
  • estar2d()
  • etriangle_aas()
  • etriangle_asa()
  • etriangle_lp()
  • etriangle_ls()
  • etriangle_ls_c()
  • etriangle_ppp()
  • etriangle_sa()
  • etriangle_sas()
  • etriangle_ss()
  • etriangle_sss()
  • exists()

- f -

  • find()
  • first()

- g -

  • get_index()
  • get_line2origin()
  • get_line_dim()
  • get_line_ip()
  • get_line_tp()
  • get_map_i()
  • get_map_kl()
  • get_map_size()
  • get_map_v()
  • get_map_vl()
  • get_pnorm2nv()
  • get_table_c()
  • get_table_ci()
  • get_table_cidl()
  • get_table_copy()
  • get_table_crl()
  • get_table_r()
  • get_table_ri()
  • get_table_ridl()
  • get_table_size()
  • get_table_sum()
  • get_table_v()
  • grid_repeat()

- h -

  • hist()

- i -

  • insert()
  • is_between()
  • is_boolean()
  • is_decimal()
  • is_defined()
  • is_empty()
  • is_even()
  • is_inf()
  • is_integer()
  • is_iterable()
  • is_left_ppp()
  • is_list()
  • is_nan()
  • is_number()
  • is_odd()
  • is_range()
  • is_scalar()
  • is_string()

- l -

  • last()
  • limit()
  • linear_extrude_pp2pf()
  • linear_extrude_uls()
  • log_debug()
  • log_echo()
  • log_error()
  • log_info()
  • log_warn()
  • lstr()
  • lstr_html()

- m -

  • map_check()
  • map_dump()
  • map_exists()
  • mean()
  • multmatrix_lp()

- n -

  • n_almost_equal()
  • nfirst()
  • ngon()
  • nhead()
  • nlast()
  • not_defined()
  • nssequence()
  • ntail()
  • number_max
  • number_min

- o -

  • orient_ll()
  • origin2d
  • origin3d

- p -

  • pad()
  • phi
  • pi
  • pmerge()
  • polygon2d_area()
  • polygon2d_centroid()
  • polygon2d_is_convex()
  • polygon2d_is_cw()
  • polygon2d_is_pip_as()
  • polygon2d_is_pip_wn()
  • polygon2d_perimeter()
  • polygon2d_winding()
  • polygon3d_area()
  • polyhedron_area()
  • polyhedron_centroid_tf()
  • polyhedron_volume_tf()
  • polytope_bbox()
  • polytope_bbox_pf()
  • polytope_edge_af()
  • polytope_edge_angles()
  • polytope_edge_lengths()
  • polytope_edge_n()
  • polytope_face_angles()
  • polytope_face_m()
  • polytope_face_mn()
  • polytope_face_n()
  • polytope_face_vcounts()
  • polytope_faces2edges()
  • polytope_faces_are_regular()
  • polytope_frame()
  • polytope_limits()
  • polytope_line()
  • polytope_number()
  • polytope_plane()
  • polytope_triangulate_ft()
  • polytope_vertex_af()
  • polytope_vertex_av()
  • polytope_vertex_n()
  • pyramid_q()
  • pyramid_t()

- q -

  • qsort()
  • qsort2()

- r -

  • radial_repeat()
  • rectangle()
  • rectangle_c()
  • resize_lp()
  • resolution_fa()
  • resolution_facets()
  • resolution_facetsv()
  • resolution_fn()
  • resolution_fs()
  • resolution_info()
  • resolution_reduced()
  • reverse()
  • rhombus()
  • rotate_extrude_tr()
  • rotate_extrude_tre()
  • rotate_lp()
  • rpolygon_area()
  • rpolygon_lp()
  • rpolygon_perimeter()
  • rselect()

- s -

  • scale_lp()
  • second()
  • smerge()
  • sround()
  • stack()
  • star2d()
  • star3d()
  • strip()
  • striple_lll()
  • sum()

- t -

  • table_check()
  • table_dump()
  • table_exists()
  • tau
  • third()
  • torus_ep()
  • torus_rp()
  • torus_tp()
  • translate_lp()
  • triangle_aas()
  • triangle_area_lp()
  • triangle_area_ppp()
  • triangle_asa()
  • triangle_centroid_lp()
  • triangle_centroid_ppp()
  • triangle_incenter_lp()
  • triangle_incenter_ppp()
  • triangle_inradius_lp()
  • triangle_inradius_ppp()
  • triangle_is_cw_lp()
  • triangle_is_cw_ppp()
  • triangle_is_pit_lp()
  • triangle_is_pit_ppp()
  • triangle_lp()
  • triangle_lp2ls()
  • triangle_ls()
  • triangle_ls2lp()
  • triangle_ls_c()
  • triangle_ppp()
  • triangle_ppp2ls()
  • triangle_sa()
  • triangle_sas()
  • triangle_ss()
  • triangle_sss()
  • triangle_sss2lp()

- u -

  • unique()
  • unit_angle_name()
  • unit_l()
  • unit_length_name()

- v -

  • validate()

- x -

  • x_axis2d_ul
  • x_axis2d_uv
  • x_axis3d_ul
  • x_axis3d_uv
  • x_axis_ci
  • xy_plane_on
  • xy_plane_os

- y -

  • y_axis2d_ul
  • y_axis2d_uv
  • y_axis3d_ul
  • y_axis3d_uv
  • y_axis_ci
  • yz_plane_on
  • yz_plane_os

- z -

  • z_axis3d_ul
  • z_axis3d_uv
  • z_axis_ci
  • zero2d
  • zero3d
  • zx_plane_on
  • zx_plane_os
Comments deleted.

Thank you for your thoughtful comment.

I am no OpenSCAD expert.... I started using it a couple of years ago and was lured, like many, by the possibility of designing physical things using language and open source software freely available to all.

However, I find myself wanting higher-level constructs. For example, wouldn't it be nice to have selection of configurable gearboxes, airfoil wings, project enclosure boxes, knobs, switch mounts, rail members, etc. that could be easily used in a design with documentation that describe how to use them?

The omdl library is about providing parameterized constructs that can be reused across OpenSCAD designs with documentation on how to use them.

For example consider:

include <omdl-v0.6.1/shapes/shapes3d.scad>;
torus_rp( size=[40,20], core=[35,20], r=40, l=[90,60], co=[0,2.5], vr=4, vrm=15, center=true );

This module implements a configurable mechanical form with lots of parameters (see torus_rp, resulting shape attached). I have started a small collection constructs organized in the documentation under modules. There is also a database of useful polyhedra and functions to manipulate them, for example.

Most of the effort thus far has been in basic building blocks, but the more interesting part for me will come with the addition of design database specs, parts, and assemblies.

Example script snippets are indeed warranted!

When setup-omdl.bash is run, as described above, the latest version of the library and its documentation will be installed on your Ubuntu (or CYGWIN) system. Multiple releases coexists without issue.