-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuilder.wls
executable file
·55 lines (47 loc) · 1.27 KB
/
builder.wls
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
#!/usr/bin/env wolframscript
x[{u_,v_}] = ToExpression[$ScriptCommandLine[[2]]]
U = ToExpression[$ScriptCommandLine[[3]]]
V = ToExpression[$ScriptCommandLine[[4]]]
div = ToExpression[$ScriptCommandLine[[5]]]
uSplit = Subdivide[U[[1]], U[[2]], div]
vSplit = Subdivide[V[[1]], V[[2]], div]
indices = Subdivide[1, (div+1)^2, (div+1)^2 - 1]
split = Tuples[{uSplit, vSplit}]
unitnormal[x_][u_, v_] =
Module[
{U, V, xu, xv},
xu = D[x[{U, V}], U];
xv = D[x[{U, V}], V];
Nx = Cross[xu, xv] /. {U -> u, V -> v};
Simplify[ Nx / Norm[Nx] ]
]
xN[{u_,v_}] = unitnormal[x][u,v]
pLine[prefix_, {a_,b_,c_}] :=
Print[
prefix,
ToString[ DecimalForm[a] ],
" ",
ToString[ DecimalForm[b] ],
" ",
ToString[ DecimalForm[c] ]
]
vertexLine[{a_,b_,c_}] := pLine["v ", {a,b,c}]
vertexNormalLine[{a_,b_,c_}] := pLine["vn ", {a,b,c}]
(* change? *)
Print["mtllib solids.mtl"]
output := x /@ split //N
vertexLine /@ output
output := xN /@ split //N
vertexNormalLine /@ output
n := div + 1
For[ i=1, i<n, i++,
For[ j=1, j<n, j++,
x := j + n (i-1);
Print["f ",
x,"//",x," ",
x+n,"//",x+n," ",
x+n+1,"//",x+n+1," ",
x+1,"//",x+1," "
]
]
]