chiark / gitweb /
Makefile, funcs.scad: helpful file
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2014 18:17:50 +0000 (18:17 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Feb 2014 18:17:50 +0000 (18:17 +0000)
.gitignore
Makefile
funcs.scad.cpp [new file with mode: 0644]

index b6c47e6..67460ba 100644 (file)
@@ -6,3 +6,4 @@ light-bracket.stl
 *,*.auto.scad
 .*.d
 *.tmp
+funcs.scad
index a5e5278..6a4b9c5 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -11,6 +11,11 @@ CONFIG=$(PLAY)/slic3r-config.ini
 USING_AUTOS ?= filamentspool xeno-drivebay-bracket dungeonquest-cone anke-gps-bracket cable-hole-trunking-cover anglepoise-neck crossbar-computer-led-mount
 AUTO_TOPLEVELS := $(foreach m,$(USING_AUTOS),$(shell $(PLAY)/toplevel-find $m))
 
+AUTO_INCS = funcs.scad
+
+default:       autoincs scads
+
+autoincs:      $(AUTO_INCS)
 scads:         $(addsuffix .auto.scad, $(AUTO_TOPLEVELS))
 stls:          $(addsuffix .auto.stl, $(AUTO_TOPLEVELS))
 
@@ -19,11 +24,9 @@ stls:                $(addsuffix .auto.stl, $(AUTO_TOPLEVELS))
 %.auto.stls:
        $(MAKE) $(addsuffix .auto.stl, $(shell $(PLAY)/toplevel-find $*))
 
-default:
-
 -include .*.d
 
-%.stl:         %.scad
+%.stl:         %.scad $(AUTO_INCS)
                openscad -d .$@.d.tmp -o $*.tmp.stl $<
                @rm -f $@
                @sed -e 's/\.tmp\.stl:/.stl:/' <.$@.d.tmp >.$@.d
@@ -45,7 +48,7 @@ default:
 %.gcode:       manual-gcode-generator %.m-g
                $(PLAY)/$^ >$@.tmp && mv -f $@.tmp $@
 
-dovecliptest.stl: doveclip.scad
+dovecliptest.stl: doveclip.scad $(AUTO_INCS)
 
 %.auto.scad: $(PLAY)/toplevel-make Makefile $(PLAY)/toplevel-find
                @echo ' write $@'
@@ -55,4 +58,4 @@ dovecliptest.stl: doveclip.scad
 .PRECIOUS:     %.stl %.gcode
 
 clean:
-               rm -f *~ *.stl *.auto.scad *.gcode .*.d
+               rm -f *~ *.stl *.auto.scad *.gcode .*.d $(AUTO_INCS)
diff --git a/funcs.scad.cpp b/funcs.scad.cpp
new file mode 100644 (file)
index 0000000..0d589ac
--- /dev/null
@@ -0,0 +1,20 @@
+// -*- C -*-
+
+function dist(a,b) =
+#define dsq(i) (a[i]-b[i])*(a[i]-b[i])
+              sqrt(dsq(0) + dsq(1));
+#undef dsq
+
+function circle_point(c, r, alpha) = [ c[0] + r * cos(alpha),
+                                      c[1] + r * sin(alpha) ];
+
+function tangent_intersect(a,c,r) =
+#define d     (dist(a,c))
+#define alpha (atan2(a[1]-c[1],a[0]-c[0]))
+#define gamma (asin(r / d))
+#define beta  (alpha + 90 - gamma)
+              circle_point(c, r, beta);
+#undef d
+#undef alpha
+#undef gamma
+#undef beta