1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
(* ****** ****** *)
(*
** An example of
** ATS and OpenSCAD co-programming
*)
(* ****** ****** *)
//
#include
"share/atspre_staload.hats"
#include
"share/HATS\
/atspre_staload_libats_ML.hats"
//
(* ****** ****** *)
//
#staload
"libats/libc/SATS/math.sats"
#staload _ =
"libats/libc/DATS/math.dats"
//
(* ****** ****** *)
//
#include "./../mylibies.hats"
//
#staload $OpenSCAD // opening it!
#staload $OpenSCAD_meta // opening it!
//
#include "./../mylibies_link.hats"
//
(* ****** ****** *)
(*
//
// HX-2017-05-17:
// For testing externally
//
#include
"$PATSHOMELOCS\
/atscntrb-hx-openscad/mylibies.hats"
//
#staload $OpenSCAD // opening it!
#staload $OpenSCAD_meta // opening it!
//
#include
"$PATSHOMELOCS\
/atscntrb-hx-openscad/mylibies_link.hats"
//
*)
(* ****** ****** *)
val
tfm_red = scadtfm_color_name("red")
val
tfm_blue = scadtfm_color_rgba(0.0, 0.0, 1.0, 1.0)
(* ****** ****** *)
//
fun
ballrow
{n:pos}
(
ball: scadobj, n: int(n)
) : scadobj =
(
if n = 1
then ball
else
scadobj_union2
( ball
, scadobj_translate(2.0, 0.0, 0.0, ballrow(ball, n-1))
) (* scadobj_union2 *)
)
//
fun
ballrows
{m,n:pos}
(
ball: scadobj, m: int(m), n: int(n)
) : scadobj =
(
if m = 1
then ballrow(ball, n)
else
scadobj_union2
( ballrow(ball, n)
, scadobj_translate(0.0, 2.0, 0.0, ballrows(ball, m-1, n))
) (* scadobj_union2 *)
)
//
(* ****** ****** *)
fun
ballstack
{n:pos}
(
ball: scadobj, n: int(n)
) : scadobj = let
//
val tfm =
(if n % 2 = 0 then tfm_red else tfm_blue): scadtfm
// end of [val]
in
//
if n = 1
then
(
scadobj_tfmapp(tfm, ball)
) (* end of [then] *)
else let
val stack = ballstack(ball, n-1)
val bottom = scadobj_tfmapp(tfm, ballrows(ball, n, n))
in
scadobj_union2(scadobj_translate(1.0, 1.0, sqrt(2.0), stack), bottom)
end // end of [else]
//
end // end of [ballstack]
(* ****** ****** *)
//
implement
main0() = () where
{
//
#define N 5
//
val out = stdout_ref
//
val stack =
ballstack // testing extcode
(SCADOBJextcode("sphere(1.0)"), N)
val stack =
scadobj_translate(~1.0*N+1.0, ~1.0*N+1.0, 1.0, stack)
//
val () =
fprintln!
(out, "\
/*
The code is automatically
generated from [test03.dats]
*/\n\
")
val () =
fprintln!
(out, "$fa=0.1; $fs=0.1;\n")
//
val () =
scadobj_femit(out, 0(*nsp*), stack)
//
val () =
fprint! (out, "\n")
val () =
fprintln!
(out, "/* end of [test03_dats.scad] */")
//
} (* end of [main0] *)
(* ****** ****** *)
(* end of [test03.dats] *)
|