jerboapy 0.2rc332__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- jerboapy/__init__.py +31 -0
- jerboapy/jerboapy_bin.cp311-win_amd64.pyd +0 -0
- jerboapy/jerboapy_bin.cp312-win_amd64.pyd +0 -0
- jerboapy/jerboapy_bin.cp313-win_amd64.pyd +0 -0
- jerboapy-0.2rc332.dist-info/METADATA +58 -0
- jerboapy-0.2rc332.dist-info/RECORD +15 -0
- jerboapy-0.2rc332.dist-info/WHEEL +5 -0
- jerboapy-0.2rc332.dist-info/licenses/LICENSE +165 -0
- jerboapy-0.2rc332.dist-info/top_level.txt +2 -0
- jerboapy_ext/Color4.py +175 -0
- jerboapy_ext/Point3.py +231 -0
- jerboapy_ext/__init__.py +7 -0
- jerboapy_ext/render.py +222 -0
- jerboapy_ext/rules.py +603 -0
- jerboapy_ext/utils.py +214 -0
jerboapy_ext/rules.py
ADDED
|
@@ -0,0 +1,603 @@
|
|
|
1
|
+
from jerboapy import *
|
|
2
|
+
|
|
3
|
+
from .utils import *
|
|
4
|
+
from .Point3 import Point3
|
|
5
|
+
from .Color4 import Color4
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
def rule_duplication_Duplicate():
|
|
10
|
+
def fun_n1_pos(context):
|
|
11
|
+
return context.gmap[context.leftdart].ebd123["pos"]
|
|
12
|
+
def fun_n1_color(context):
|
|
13
|
+
return context.gmap[context.leftdart].ebd01["color"]
|
|
14
|
+
def fun_n1_orient(context):
|
|
15
|
+
return context.gmap[context.leftdart].ebd["orient"]
|
|
16
|
+
def fun_n1_normal(context):
|
|
17
|
+
return context.gmap[context.leftdart].ebd01["normal"]
|
|
18
|
+
|
|
19
|
+
expr_n1_pos = Expr3DEbd123("pos",fun_n1_pos)
|
|
20
|
+
expr_n1_color = Expr3DEbd01("color",fun_n1_color)
|
|
21
|
+
expr_n1_orient = Expr3DEbdDart("orient",fun_n1_orient)
|
|
22
|
+
expr_n1_normal = Expr3DEbd01("normal",fun_n1_normal)
|
|
23
|
+
rule = Rule3D("Duplicate","duplication")
|
|
24
|
+
# motif gauche
|
|
25
|
+
ln0 = rule.make_leftnode("n0", [0,1,2,3], True)
|
|
26
|
+
# motif droit
|
|
27
|
+
rn0 = rule.make_rightnode("n0", [0,1,2,3])
|
|
28
|
+
rn1 = rule.make_rightnode("n1", [0,1,2,3],[expr_n1_pos,expr_n1_color,expr_n1_orient,expr_n1_normal])
|
|
29
|
+
rule.compile()
|
|
30
|
+
return rule
|
|
31
|
+
|
|
32
|
+
def rule_creat_CreatSquare():
|
|
33
|
+
def fun_n0_pos(context):
|
|
34
|
+
return Point3(0,0,0)
|
|
35
|
+
def fun_n0_color(context):
|
|
36
|
+
return Color4.randomColor()
|
|
37
|
+
def fun_n0_orient(context):
|
|
38
|
+
return True
|
|
39
|
+
def fun_n0_normal(context):
|
|
40
|
+
return Point3(0,1,0)
|
|
41
|
+
def fun_n1_pos(context):
|
|
42
|
+
return Point3(1,0,0)
|
|
43
|
+
def fun_n1_orient(context):
|
|
44
|
+
return False
|
|
45
|
+
def fun_n2_orient(context):
|
|
46
|
+
return True
|
|
47
|
+
def fun_n3_pos(context):
|
|
48
|
+
return Point3(1,0,1)
|
|
49
|
+
def fun_n3_orient(context):
|
|
50
|
+
return False
|
|
51
|
+
def fun_n4_orient(context):
|
|
52
|
+
return True
|
|
53
|
+
def fun_n5_pos(context):
|
|
54
|
+
return Point3(0,0,1)
|
|
55
|
+
def fun_n5_orient(context):
|
|
56
|
+
return False
|
|
57
|
+
def fun_n6_orient(context):
|
|
58
|
+
return True
|
|
59
|
+
def fun_n7_orient(context):
|
|
60
|
+
return False
|
|
61
|
+
expr_n0_pos = Expr3DEbd123("pos",fun_n0_pos)
|
|
62
|
+
expr_n0_color = Expr3DEbd01("color",fun_n0_color)
|
|
63
|
+
expr_n0_orient = Expr3DEbdDart("orient",fun_n0_orient)
|
|
64
|
+
expr_n0_normal = Expr3DEbd01("normal",fun_n0_normal)
|
|
65
|
+
expr_n1_pos = Expr3DEbd123("pos",fun_n1_pos)
|
|
66
|
+
expr_n1_orient = Expr3DEbdDart("orient",fun_n1_orient)
|
|
67
|
+
expr_n2_orient = Expr3DEbdDart("orient",fun_n2_orient)
|
|
68
|
+
expr_n3_pos = Expr3DEbd123("pos",fun_n3_pos)
|
|
69
|
+
expr_n3_orient = Expr3DEbdDart("orient",fun_n3_orient)
|
|
70
|
+
expr_n4_orient = Expr3DEbdDart("orient",fun_n4_orient)
|
|
71
|
+
expr_n5_pos = Expr3DEbd123("pos",fun_n5_pos)
|
|
72
|
+
expr_n5_orient = Expr3DEbdDart("orient",fun_n5_orient)
|
|
73
|
+
expr_n6_orient = Expr3DEbdDart("orient",fun_n6_orient)
|
|
74
|
+
expr_n7_orient = Expr3DEbdDart("orient",fun_n7_orient)
|
|
75
|
+
rule = Rule3D("CreatSquare","creat")
|
|
76
|
+
# motif gauche
|
|
77
|
+
# motif droit
|
|
78
|
+
rn0 = rule.make_rightnode("n0", [],[expr_n0_pos,expr_n0_color,expr_n0_orient,expr_n0_normal])
|
|
79
|
+
rn1 = rule.make_rightnode("n1", [],[expr_n1_pos,expr_n1_orient,expr_n0_normal,expr_n0_color])
|
|
80
|
+
rn2 = rule.make_rightnode("n2", [],[expr_n2_orient,expr_n1_pos,expr_n0_normal,expr_n0_color])
|
|
81
|
+
rn3 = rule.make_rightnode("n3", [],[expr_n3_pos,expr_n3_orient,expr_n0_normal,expr_n0_color])
|
|
82
|
+
rn4 = rule.make_rightnode("n4", [],[expr_n4_orient,expr_n3_pos,expr_n0_normal,expr_n0_color])
|
|
83
|
+
rn5 = rule.make_rightnode("n5", [],[expr_n5_pos,expr_n5_orient,expr_n0_normal,expr_n0_color])
|
|
84
|
+
rn6 = rule.make_rightnode("n6", [],[expr_n6_orient,expr_n5_pos,expr_n0_normal,expr_n0_color])
|
|
85
|
+
rn7 = rule.make_rightnode("n7", [],[expr_n7_orient,expr_n0_pos,expr_n0_normal,expr_n0_color])
|
|
86
|
+
rule.linkRightNodes(0,rn0,rn1)
|
|
87
|
+
rule.linkRightNodes(1,rn1,rn2)
|
|
88
|
+
rule.linkRightNodes(0,rn2,rn3)
|
|
89
|
+
rule.linkRightNodes(1,rn3,rn4)
|
|
90
|
+
rule.linkRightNodes(0,rn4,rn5)
|
|
91
|
+
rule.linkRightNodes(1,rn5,rn6)
|
|
92
|
+
rule.linkRightNodes(0,rn6,rn7)
|
|
93
|
+
rule.linkRightNodes(1,rn7,rn0)
|
|
94
|
+
rule.linkRightNodes(2,rn0,rn0)
|
|
95
|
+
rule.linkRightNodes(3,rn0,rn0)
|
|
96
|
+
rule.linkRightNodes(2,rn1,rn1)
|
|
97
|
+
rule.linkRightNodes(3,rn1,rn1)
|
|
98
|
+
rule.linkRightNodes(2,rn2,rn2)
|
|
99
|
+
rule.linkRightNodes(3,rn2,rn2)
|
|
100
|
+
rule.linkRightNodes(2,rn3,rn3)
|
|
101
|
+
rule.linkRightNodes(3,rn3,rn3)
|
|
102
|
+
rule.linkRightNodes(2,rn4,rn4)
|
|
103
|
+
rule.linkRightNodes(3,rn4,rn4)
|
|
104
|
+
rule.linkRightNodes(2,rn5,rn5)
|
|
105
|
+
rule.linkRightNodes(3,rn5,rn5)
|
|
106
|
+
rule.linkRightNodes(2,rn6,rn6)
|
|
107
|
+
rule.linkRightNodes(3,rn6,rn6)
|
|
108
|
+
rule.linkRightNodes(2,rn7,rn7)
|
|
109
|
+
rule.linkRightNodes(3,rn7,rn7)
|
|
110
|
+
rule.compile()
|
|
111
|
+
return rule
|
|
112
|
+
|
|
113
|
+
def rule_sew_SewA0():
|
|
114
|
+
rule = Rule3D("SewA0","sew")
|
|
115
|
+
# motif gauche
|
|
116
|
+
ln0 = rule.make_leftnode("n0", [2,3], True)
|
|
117
|
+
ln1 = rule.make_leftnode("n1", [2,3], True)
|
|
118
|
+
# motif droit
|
|
119
|
+
rn0 = rule.make_rightnode("n0", [2,3])
|
|
120
|
+
rn1 = rule.make_rightnode("n1", [2,3])
|
|
121
|
+
rule.linkRightNodes(0,rn0,rn1)
|
|
122
|
+
rule.compile()
|
|
123
|
+
return rule
|
|
124
|
+
|
|
125
|
+
def rule_sew_SewA1():
|
|
126
|
+
rule = Rule3D("SewA1","sew")
|
|
127
|
+
# motif gauche
|
|
128
|
+
ln0 = rule.make_leftnode("n0", [3], True)
|
|
129
|
+
ln1 = rule.make_leftnode("n1", [3], True)
|
|
130
|
+
rule.linkLeftNodes(1,ln0,ln0)
|
|
131
|
+
rule.linkLeftNodes(1,ln1,ln1)
|
|
132
|
+
# motif droit
|
|
133
|
+
rn0 = rule.make_rightnode("n0", [3])
|
|
134
|
+
rn1 = rule.make_rightnode("n1", [3])
|
|
135
|
+
rule.linkRightNodes(1,rn0,rn1)
|
|
136
|
+
rule.compile()
|
|
137
|
+
return rule
|
|
138
|
+
|
|
139
|
+
def rule_sew_SewA2():
|
|
140
|
+
rule = Rule3D("SewA2","sew")
|
|
141
|
+
# motif gauche
|
|
142
|
+
ln0 = rule.make_leftnode("n0", [0], True)
|
|
143
|
+
ln1 = rule.make_leftnode("n1", [0], True)
|
|
144
|
+
rule.linkLeftNodes(2,ln0,ln0)
|
|
145
|
+
rule.linkLeftNodes(2,ln1,ln1)
|
|
146
|
+
# motif droit
|
|
147
|
+
rn0 = rule.make_rightnode("n0", [0])
|
|
148
|
+
rn1 = rule.make_rightnode("n1", [0])
|
|
149
|
+
rule.linkRightNodes(2,rn0,rn1)
|
|
150
|
+
rule.compile()
|
|
151
|
+
return rule
|
|
152
|
+
|
|
153
|
+
def rule_sew_SewA3():
|
|
154
|
+
rule = Rule3D("SewA3","sew")
|
|
155
|
+
# motif gauche
|
|
156
|
+
ln0 = rule.make_leftnode("n0", [0,1], True)
|
|
157
|
+
ln1 = rule.make_leftnode("n1", [0,1], True)
|
|
158
|
+
rule.linkLeftNodes(3,ln0,ln0)
|
|
159
|
+
rule.linkLeftNodes(3,ln1,ln1)
|
|
160
|
+
# motif droit
|
|
161
|
+
rn0 = rule.make_rightnode("n0", [0,1])
|
|
162
|
+
rn1 = rule.make_rightnode("n1", [0,1])
|
|
163
|
+
rule.linkRightNodes(3,rn0,rn1)
|
|
164
|
+
rule.compile()
|
|
165
|
+
return rule
|
|
166
|
+
|
|
167
|
+
def rule_sew_UnSewA0():
|
|
168
|
+
rule = Rule3D("UnSewA0","sew")
|
|
169
|
+
# motif gauche
|
|
170
|
+
ln0 = rule.make_leftnode("n0", [2,3], True)
|
|
171
|
+
ln1 = rule.make_leftnode("n1", [2,3])
|
|
172
|
+
rule.linkLeftNodes(0,ln0,ln1)
|
|
173
|
+
# motif droit
|
|
174
|
+
rn0 = rule.make_rightnode("n0", [2,3])
|
|
175
|
+
rn1 = rule.make_rightnode("n1", [2,3])
|
|
176
|
+
rule.linkRightNodes(0,rn1,rn1)
|
|
177
|
+
rule.linkRightNodes(0,rn0,rn0)
|
|
178
|
+
rule.compile()
|
|
179
|
+
return rule
|
|
180
|
+
|
|
181
|
+
def rule_sew_UnSewA1():
|
|
182
|
+
rule = Rule3D("UnSewA1","sew")
|
|
183
|
+
# motif gauche
|
|
184
|
+
ln0 = rule.make_leftnode("n0", [3], True)
|
|
185
|
+
ln1 = rule.make_leftnode("n1", [3])
|
|
186
|
+
rule.linkLeftNodes(1,ln0,ln1)
|
|
187
|
+
# motif droit
|
|
188
|
+
rn0 = rule.make_rightnode("n0", [3])
|
|
189
|
+
rn1 = rule.make_rightnode("n1", [3])
|
|
190
|
+
rule.linkRightNodes(1,rn0,rn0)
|
|
191
|
+
rule.linkRightNodes(1,rn1,rn1)
|
|
192
|
+
rule.compile()
|
|
193
|
+
return rule
|
|
194
|
+
|
|
195
|
+
def rule_sew_UnSewA2():
|
|
196
|
+
rule = Rule3D("UnSewA2","sew")
|
|
197
|
+
# motif gauche
|
|
198
|
+
ln0 = rule.make_leftnode("n0", [0], True)
|
|
199
|
+
ln1 = rule.make_leftnode("n1", [0])
|
|
200
|
+
rule.linkLeftNodes(2,ln0,ln1)
|
|
201
|
+
# motif droit
|
|
202
|
+
rn0 = rule.make_rightnode("n0", [0])
|
|
203
|
+
rn1 = rule.make_rightnode("n1", [0])
|
|
204
|
+
rule.linkRightNodes(2,rn0,rn0)
|
|
205
|
+
rule.linkRightNodes(2,rn1,rn1)
|
|
206
|
+
rule.compile()
|
|
207
|
+
return rule
|
|
208
|
+
|
|
209
|
+
def rule_sew_UnSewA3():
|
|
210
|
+
rule = Rule3D("UnSewA3","sew")
|
|
211
|
+
# motif gauche
|
|
212
|
+
ln0 = rule.make_leftnode("n0", [0,1], True)
|
|
213
|
+
ln1 = rule.make_leftnode("n1", [0,1])
|
|
214
|
+
rule.linkLeftNodes(3,ln0,ln1)
|
|
215
|
+
# motif droit
|
|
216
|
+
rn0 = rule.make_rightnode("n0", [0,1])
|
|
217
|
+
rn1 = rule.make_rightnode("n1", [0,1])
|
|
218
|
+
rule.linkRightNodes(3,rn1,rn1)
|
|
219
|
+
rule.linkRightNodes(3,rn0,rn0)
|
|
220
|
+
rule.compile()
|
|
221
|
+
return rule
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
def rule_subdivision_DooSabin3D():
|
|
227
|
+
def fun_n0_pos(context):
|
|
228
|
+
points = collect123([0,1,2], context.gmap, context.leftdart, "pos", Point3(0,0,0))
|
|
229
|
+
centerFace = Point3.middle(points)
|
|
230
|
+
res = Point3.middle(centerFace, context.gmap[context.leftdart].ebd123["pos"])
|
|
231
|
+
return res
|
|
232
|
+
def fun_n1_color(context):
|
|
233
|
+
return Color4.randomColor()
|
|
234
|
+
def fun_n1_orient(context):
|
|
235
|
+
return not context.gmap[context.leftdart].ebd["orient"]
|
|
236
|
+
def fun_n2_orient(context):
|
|
237
|
+
return context.gmap[context.leftdart].ebd["orient"]
|
|
238
|
+
def fun_n2_normal(context):
|
|
239
|
+
vec = Point3()
|
|
240
|
+
vec.add(context.gmap[context.leftdart].ebd01["normal"])
|
|
241
|
+
voisin = context.gmap[context.leftdart].alpha(2)
|
|
242
|
+
vec.add(context.gmap[voisin].ebd01["normal"])
|
|
243
|
+
vec.normalize()
|
|
244
|
+
return vec
|
|
245
|
+
def fun_n3_color(context):
|
|
246
|
+
return Color4.randomColor()
|
|
247
|
+
def fun_n3_orient(context):
|
|
248
|
+
return not context.gmap[context.leftdart].ebd["orient"]
|
|
249
|
+
def fun_n3_normal(context):
|
|
250
|
+
normals = collect01([1,2,3], context.gmap, context.leftdart, "normal", Point3(0,0,0))
|
|
251
|
+
resnorm = Point3.sum(normals)
|
|
252
|
+
resnorm.normalize()
|
|
253
|
+
return resnorm
|
|
254
|
+
expr_n0_pos = Expr3DEbd123("pos",fun_n0_pos)
|
|
255
|
+
expr_n1_color = Expr3DEbd01("color",fun_n1_color)
|
|
256
|
+
expr_n1_orient = Expr3DEbdDart("orient",fun_n1_orient)
|
|
257
|
+
expr_n2_orient = Expr3DEbdDart("orient",fun_n2_orient)
|
|
258
|
+
expr_n2_normal = Expr3DEbd01("normal",fun_n2_normal)
|
|
259
|
+
expr_n3_color = Expr3DEbd01("color",fun_n3_color)
|
|
260
|
+
expr_n3_orient = Expr3DEbdDart("orient",fun_n3_orient)
|
|
261
|
+
expr_n3_normal = Expr3DEbd01("normal",fun_n3_normal)
|
|
262
|
+
rule = Rule3D("DooSabin3D","subdivision")
|
|
263
|
+
# motif gauche
|
|
264
|
+
ln0 = rule.make_leftnode("n0", [0,1,2,3], True)
|
|
265
|
+
# motif droit
|
|
266
|
+
rn0 = rule.make_rightnode("n0", [0,1,-1,3],[expr_n0_pos])
|
|
267
|
+
rn1 = rule.make_rightnode("n1", [0,-1,-1,-1],[expr_n1_color,expr_n1_orient,expr_n0_pos,expr_n2_normal])
|
|
268
|
+
rn2 = rule.make_rightnode("n2", [-1,-1,0,-1],[expr_n2_orient,expr_n2_normal,expr_n0_pos,expr_n1_color])
|
|
269
|
+
rn3 = rule.make_rightnode("n3", [-1,1,0,-1],[expr_n3_color,expr_n3_orient,expr_n3_normal,expr_n0_pos])
|
|
270
|
+
rule.linkRightNodes(2,rn0,rn1)
|
|
271
|
+
rule.linkRightNodes(1,rn1,rn2)
|
|
272
|
+
rule.linkRightNodes(2,rn2,rn3)
|
|
273
|
+
rule.linkRightNodes(3,rn1,rn1)
|
|
274
|
+
rule.linkRightNodes(3,rn2,rn2)
|
|
275
|
+
rule.linkRightNodes(3,rn3,rn3)
|
|
276
|
+
rule.compile()
|
|
277
|
+
return rule
|
|
278
|
+
|
|
279
|
+
def rule_subdivision_Menger3D_casse():
|
|
280
|
+
def fun_n1_orient(context):
|
|
281
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
282
|
+
def fun_n1_pos(context):
|
|
283
|
+
print(">>> fun_n1_pos ", context.leftdart)
|
|
284
|
+
voisin = context.leftdart.alpha(0)
|
|
285
|
+
return Point3.linear(context.leftdart.ebd123["pos"], voisin.ebd123["pos"], 1.0/3.0)
|
|
286
|
+
def fun_n2_orient(context):
|
|
287
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
288
|
+
def fun_n3_orient(context):
|
|
289
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
290
|
+
def fun_n4_orient(context):
|
|
291
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
292
|
+
def fun_n4_normal(context):
|
|
293
|
+
voisin = context.gmap.path(context.leftdart, [1,2])
|
|
294
|
+
resnorm = context.gmap[voisin].ebd.get("normal", Point3(0,0,1))
|
|
295
|
+
resnorm.scale(-1.0)
|
|
296
|
+
return resnorm
|
|
297
|
+
def fun_n5_orient(context):
|
|
298
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
299
|
+
def fun_n5_normal(context):
|
|
300
|
+
voisin = context.gmap.path(context.leftdart, [1,2])
|
|
301
|
+
resnorm = context.gmap[voisin].ebd.get("normal", Point3(0,0,1))
|
|
302
|
+
return resnorm
|
|
303
|
+
|
|
304
|
+
def fun_n6_orient(context):
|
|
305
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
306
|
+
def fun_n6_normal(context):
|
|
307
|
+
return context.gmap[context.leftdart].ebd01["normal"]
|
|
308
|
+
def fun_n7_orient(context):
|
|
309
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
310
|
+
def fun_n7_pos(context):
|
|
311
|
+
n0a0 = context.gmap[context.leftdart].alpha(0)
|
|
312
|
+
a = context.gmap[n0a0].ebd123["pos"].sub(context.gmap[context.leftdart].ebd123["pos"])
|
|
313
|
+
n0a1a0 = context.gmap.path(context.leftdart, [1,0])
|
|
314
|
+
b = context.gmap[n0a1a0].ebd123["pos"].sub(context.gmap[context.leftdart].ebd123["pos"])
|
|
315
|
+
a.add(b)
|
|
316
|
+
a.scale(1.0/3.0)
|
|
317
|
+
a.add(context.gmap[context.leftdart].ebd123["pos"])
|
|
318
|
+
return a
|
|
319
|
+
def fun_n8_orient(context):
|
|
320
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
321
|
+
def fun_n9_orient(context):
|
|
322
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
323
|
+
def fun_n10_orient(context):
|
|
324
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
325
|
+
def fun_n11_orient(context):
|
|
326
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
327
|
+
def fun_n12_orient(context):
|
|
328
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
329
|
+
def fun_n12_normal(context):
|
|
330
|
+
n0a2 = context.gmap[context.leftdart].alpha(2)
|
|
331
|
+
# print(">>> n0a2 : ", n0a2)
|
|
332
|
+
resnorm = context.gmap[n0a2].ebd01["normal"]
|
|
333
|
+
# print(">>> resnorm : ", resnorm)
|
|
334
|
+
# resnorm.scale(-1.0) # ENCORE UN PROBLEME PAS COMPRIS
|
|
335
|
+
return resnorm
|
|
336
|
+
def fun_n13_orient(context):
|
|
337
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
338
|
+
def fun_n14_orient(context):
|
|
339
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
340
|
+
def fun_n15_orient(context):
|
|
341
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
342
|
+
def fun_n16_orient(context):
|
|
343
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
344
|
+
def fun_n17_orient(context):
|
|
345
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
346
|
+
def fun_n18_orient(context):
|
|
347
|
+
return context.gmap[context.leftdart].ebd.get("orient", True)
|
|
348
|
+
def fun_n19_orient(context):
|
|
349
|
+
return not context.gmap[context.leftdart].ebd.get("orient", True)
|
|
350
|
+
def fun_n19_pos(context):
|
|
351
|
+
n0a0 = context.gmap[context.leftdart].alpha(0)
|
|
352
|
+
n0a1a0 = context.gmap.path(context.leftdart, [1,0])
|
|
353
|
+
n0a2a1a0 = context.gmap.path(context.leftdart, [2,1,0])
|
|
354
|
+
a = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a0].ebd123["pos"])
|
|
355
|
+
b = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a1a0].ebd123["pos"])
|
|
356
|
+
c = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a2a1a0].ebd123["pos"])
|
|
357
|
+
a.add(b)
|
|
358
|
+
a.add(c)
|
|
359
|
+
a.scale(1.0/3.0)
|
|
360
|
+
a.add(context.gmap[context.leftdart].ebd123["pos"])
|
|
361
|
+
|
|
362
|
+
return a
|
|
363
|
+
|
|
364
|
+
expr_n1_orient = Expr3DEbdDart("orient",fun_n1_orient)
|
|
365
|
+
expr_n1_pos = Expr3DEbd123("pos",fun_n1_pos)
|
|
366
|
+
expr_n2_orient = Expr3DEbdDart("orient",fun_n2_orient)
|
|
367
|
+
expr_n3_orient = Expr3DEbdDart("orient",fun_n3_orient)
|
|
368
|
+
expr_n4_orient = Expr3DEbdDart("orient",fun_n4_orient)
|
|
369
|
+
expr_n4_normal = Expr3DEbd01("normal",fun_n4_normal)
|
|
370
|
+
expr_n5_orient = Expr3DEbdDart("orient",fun_n5_orient)
|
|
371
|
+
expr_n5_normal = Expr3DEbd01("normal",fun_n5_normal)
|
|
372
|
+
expr_n6_orient = Expr3DEbdDart("orient",fun_n6_orient)
|
|
373
|
+
expr_n6_normal = Expr3DEbd01("normal",fun_n6_normal)
|
|
374
|
+
expr_n7_orient = Expr3DEbdDart("orient",fun_n7_orient)
|
|
375
|
+
expr_n7_pos = Expr3DEbd123("pos",fun_n7_pos)
|
|
376
|
+
expr_n8_orient = Expr3DEbdDart("orient",fun_n8_orient)
|
|
377
|
+
expr_n9_orient = Expr3DEbdDart("orient",fun_n9_orient)
|
|
378
|
+
expr_n10_orient = Expr3DEbdDart("orient",fun_n10_orient)
|
|
379
|
+
expr_n11_orient = Expr3DEbdDart("orient",fun_n11_orient)
|
|
380
|
+
expr_n12_orient = Expr3DEbdDart("orient",fun_n12_orient)
|
|
381
|
+
expr_n12_normal = Expr3DEbd01("normal",fun_n12_normal)
|
|
382
|
+
expr_n13_orient = Expr3DEbdDart("orient",fun_n13_orient)
|
|
383
|
+
expr_n14_orient = Expr3DEbdDart("orient",fun_n14_orient)
|
|
384
|
+
expr_n15_orient = Expr3DEbdDart("orient",fun_n15_orient)
|
|
385
|
+
expr_n16_orient = Expr3DEbdDart("orient",fun_n16_orient)
|
|
386
|
+
expr_n17_orient = Expr3DEbdDart("orient",fun_n17_orient)
|
|
387
|
+
expr_n18_orient = Expr3DEbdDart("orient",fun_n18_orient)
|
|
388
|
+
expr_n19_orient = Expr3DEbdDart("orient",fun_n19_orient)
|
|
389
|
+
expr_n19_pos = Expr3DEbd123("pos",fun_n19_pos)
|
|
390
|
+
rule = Rule3D("Menger3D","subdivision")
|
|
391
|
+
# motif gauche
|
|
392
|
+
ln0 = rule.make_leftnode("n0", [0,1,2,3], True)
|
|
393
|
+
# motif droit
|
|
394
|
+
rn0 = rule.make_rightnode("n0", [-1,1,2,3])
|
|
395
|
+
rn1 = rule.make_rightnode("n1", [-1,-1,2,3],[expr_n1_orient,expr_n1_pos])
|
|
396
|
+
rn2 = rule.make_rightnode("n2", [0,-1,2,3],[expr_n2_orient,expr_n1_pos,expr_n6_normal])
|
|
397
|
+
rn3 = rule.make_rightnode("n3", [-1,-1,-1,3],[expr_n3_orient,expr_n1_pos])
|
|
398
|
+
rn4 = rule.make_rightnode("n4", [-1,-1,1,-1],[expr_n4_orient,expr_n4_normal,expr_n1_pos])
|
|
399
|
+
rn5 = rule.make_rightnode("n5", [-1,-1,1,-1],[expr_n5_orient,expr_n5_normal,expr_n1_pos])
|
|
400
|
+
rn6 = rule.make_rightnode("n6", [-1,-1,-1,3],[expr_n6_orient,expr_n6_normal,expr_n1_pos])
|
|
401
|
+
rn7 = rule.make_rightnode("n7", [-1,1,-1,3],[expr_n7_orient,expr_n7_pos])
|
|
402
|
+
rn8 = rule.make_rightnode("n8", [-1,-1,-1,-1],[expr_n8_orient,expr_n7_pos,expr_n4_normal])
|
|
403
|
+
rn9 = rule.make_rightnode("n9", [-1,-1,-1,-1],[expr_n9_orient,expr_n7_pos,expr_n5_normal])
|
|
404
|
+
rn10 = rule.make_rightnode("n10", [-1,-1,-1,3],[expr_n10_orient,expr_n7_pos,expr_n6_normal])
|
|
405
|
+
rn11 = rule.make_rightnode("n11", [0,-1,-1,3],[expr_n11_orient,expr_n7_pos,expr_n6_normal])
|
|
406
|
+
rn12 = rule.make_rightnode("n12", [0,-1,-1,-1],[expr_n12_orient,expr_n12_normal,expr_n7_pos])
|
|
407
|
+
rn13 = rule.make_rightnode("n13", [-1,2,-1,-1],[expr_n13_orient,expr_n7_pos,expr_n4_normal])
|
|
408
|
+
rn14 = rule.make_rightnode("n14", [-1,-1,-1,-1],[expr_n14_orient,expr_n7_pos,expr_n5_normal])
|
|
409
|
+
rn15 = rule.make_rightnode("n15", [-1,-1,-1,-1],[expr_n15_orient,expr_n7_pos,expr_n12_normal])
|
|
410
|
+
rn16 = rule.make_rightnode("n16", [-1,2,1,-1],[expr_n16_orient,expr_n19_pos,expr_n4_normal])
|
|
411
|
+
rn17 = rule.make_rightnode("n17", [-1,-1,1,-1],[expr_n17_orient,expr_n19_pos,expr_n5_normal])
|
|
412
|
+
rn18 = rule.make_rightnode("n18", [-1,-1,-1,-1],[expr_n18_orient,expr_n19_pos,expr_n12_normal])
|
|
413
|
+
rn19 = rule.make_rightnode("n19", [0,-1,2,-1],[expr_n19_orient,expr_n19_pos,expr_n12_normal])
|
|
414
|
+
rule.linkRightNodes(0,rn0,rn1)
|
|
415
|
+
rule.linkRightNodes(1,rn1,rn3)
|
|
416
|
+
rule.linkRightNodes(0,rn3,rn7)
|
|
417
|
+
rule.linkRightNodes(2,rn3,rn4)
|
|
418
|
+
rule.linkRightNodes(2,rn7,rn8)
|
|
419
|
+
rule.linkRightNodes(0,rn4,rn8)
|
|
420
|
+
rule.linkRightNodes(0,rn5,rn9)
|
|
421
|
+
rule.linkRightNodes(0,rn6,rn10)
|
|
422
|
+
rule.linkRightNodes(1,rn8,rn13)
|
|
423
|
+
rule.linkRightNodes(1,rn9,rn14)
|
|
424
|
+
rule.linkRightNodes(1,rn2,rn6)
|
|
425
|
+
rule.linkRightNodes(2,rn6,rn5)
|
|
426
|
+
rule.linkRightNodes(1,rn10,rn11)
|
|
427
|
+
rule.linkRightNodes(2,rn11,rn12)
|
|
428
|
+
rule.linkRightNodes(0,rn15,rn18)
|
|
429
|
+
rule.linkRightNodes(0,rn14,rn17)
|
|
430
|
+
rule.linkRightNodes(0,rn13,rn16)
|
|
431
|
+
rule.linkRightNodes(1,rn15,rn12)
|
|
432
|
+
rule.linkRightNodes(2,rn14,rn15)
|
|
433
|
+
rule.linkRightNodes(2,rn17,rn18)
|
|
434
|
+
rule.linkRightNodes(3,rn14,rn13)
|
|
435
|
+
rule.linkRightNodes(3,rn17,rn16)
|
|
436
|
+
rule.linkRightNodes(3,rn8,rn9)
|
|
437
|
+
rule.linkRightNodes(3,rn5,rn4)
|
|
438
|
+
rule.linkRightNodes(2,rn9,rn10)
|
|
439
|
+
rule.linkRightNodes(1,rn18,rn19)
|
|
440
|
+
rule.linkRightNodes(3,rn19,rn19)
|
|
441
|
+
rule.linkRightNodes(3,rn18,rn18)
|
|
442
|
+
rule.linkRightNodes(3,rn15,rn15)
|
|
443
|
+
rule.linkRightNodes(3,rn12,rn12)
|
|
444
|
+
rule.compile()
|
|
445
|
+
return rule
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
def rule_subdivision_Menger3D():
|
|
449
|
+
def fun_nX_color(context):
|
|
450
|
+
return context.leftdart.ebd01.get("color", Color4.GRAY)
|
|
451
|
+
def fun_n1_pos(context):
|
|
452
|
+
voisin = context.gmap[context.leftdart].alpha(0)
|
|
453
|
+
return Point3.linear(context.gmap[context.leftdart].ebd123["pos"], context.gmap[voisin].ebd123["pos"], 1.0/3.0)
|
|
454
|
+
def fun_n7_pos(context):
|
|
455
|
+
n0a0 = context.gmap[context.leftdart].alpha(0)
|
|
456
|
+
a = context.gmap[n0a0].ebd123["pos"].sub(context.gmap[context.leftdart].ebd123["pos"])
|
|
457
|
+
n0a1a0 = context.gmap.path(context.leftdart, [1,0])
|
|
458
|
+
b = context.gmap[n0a1a0].ebd123["pos"].sub(context.gmap[context.leftdart].ebd123["pos"])
|
|
459
|
+
a = a.add(b)
|
|
460
|
+
a = a.scale(1.0/3.0)
|
|
461
|
+
a = a.add(context.gmap[context.leftdart].ebd123["pos"])
|
|
462
|
+
return a
|
|
463
|
+
def fun_n19_pos(context):
|
|
464
|
+
n0a0 = context.gmap[context.leftdart].alpha(0)
|
|
465
|
+
n0a1a0 = context.gmap.path(context.leftdart, [1,0])
|
|
466
|
+
n0a2a1a0 = context.gmap.path(context.leftdart, [2,1,0])
|
|
467
|
+
a = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a0].ebd123["pos"])
|
|
468
|
+
b = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a1a0].ebd123["pos"])
|
|
469
|
+
c = Point3(context.gmap[context.leftdart].ebd123["pos"], context.gmap[n0a2a1a0].ebd123["pos"])
|
|
470
|
+
a = a.add(b)
|
|
471
|
+
a = a.add(c)
|
|
472
|
+
a = a.scale(1.0/3.0)
|
|
473
|
+
a = a.add(context.gmap[context.leftdart].ebd123["pos"])
|
|
474
|
+
|
|
475
|
+
return a
|
|
476
|
+
|
|
477
|
+
expr_n1_pos = Expr3DEbd123("pos",fun_n1_pos)
|
|
478
|
+
expr_n7_pos = Expr3DEbd123("pos",fun_n7_pos)
|
|
479
|
+
expr_n19_pos = Expr3DEbd123("pos",fun_n19_pos)
|
|
480
|
+
expr_nX_color = Expr3DEbd01("color",fun_nX_color)
|
|
481
|
+
|
|
482
|
+
rule = Rule3D("Menger3D","subdivision")
|
|
483
|
+
# motif gauche
|
|
484
|
+
ln0 = rule.make_leftnode("n0", [0,1,2,3], True)
|
|
485
|
+
# motif droit
|
|
486
|
+
rn0 = rule.make_rightnode("n0", [-1,1,2,3])
|
|
487
|
+
rn1 = rule.make_rightnode("n1", [-1,-1,2,3],[expr_n1_pos,expr_nX_color])
|
|
488
|
+
rn2 = rule.make_rightnode("n2", [0,-1,2,3],[expr_n1_pos,expr_nX_color])
|
|
489
|
+
rn3 = rule.make_rightnode("n3", [-1,-1,-1,3],[expr_n1_pos,expr_nX_color])
|
|
490
|
+
rn4 = rule.make_rightnode("n4", [-1,-1,1,-1],[expr_n1_pos,expr_nX_color])
|
|
491
|
+
rn5 = rule.make_rightnode("n5", [-1,-1,1,-1],[expr_n1_pos,expr_nX_color])
|
|
492
|
+
rn6 = rule.make_rightnode("n6", [-1,-1,-1,3],[expr_n1_pos,expr_nX_color])
|
|
493
|
+
rn7 = rule.make_rightnode("n7", [-1,1,-1,3],[expr_n7_pos,expr_nX_color])
|
|
494
|
+
rn8 = rule.make_rightnode("n8", [-1,-1,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
495
|
+
rn9 = rule.make_rightnode("n9", [-1,-1,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
496
|
+
rn10 = rule.make_rightnode("n10", [-1,-1,-1,3],[expr_n7_pos,expr_nX_color])
|
|
497
|
+
rn11 = rule.make_rightnode("n11", [0,-1,-1,3],[expr_n7_pos,expr_nX_color])
|
|
498
|
+
rn12 = rule.make_rightnode("n12", [0,-1,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
499
|
+
rn13 = rule.make_rightnode("n13", [-1,2,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
500
|
+
rn14 = rule.make_rightnode("n14", [-1,-1,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
501
|
+
rn15 = rule.make_rightnode("n15", [-1,-1,-1,-1],[expr_n7_pos,expr_nX_color])
|
|
502
|
+
rn16 = rule.make_rightnode("n16", [-1,2,1,-1],[expr_n19_pos,expr_nX_color])
|
|
503
|
+
rn17 = rule.make_rightnode("n17", [-1,-1,1,-1],[expr_n19_pos,expr_nX_color])
|
|
504
|
+
rn18 = rule.make_rightnode("n18", [-1,-1,-1,-1],[expr_n19_pos,expr_nX_color])
|
|
505
|
+
rn19 = rule.make_rightnode("n19", [0,-1,2,-1],[expr_n19_pos,expr_nX_color])
|
|
506
|
+
rule.linkRightNodes(0,rn0,rn1)
|
|
507
|
+
rule.linkRightNodes(1,rn1,rn3)
|
|
508
|
+
rule.linkRightNodes(0,rn3,rn7)
|
|
509
|
+
rule.linkRightNodes(2,rn3,rn4)
|
|
510
|
+
rule.linkRightNodes(2,rn7,rn8)
|
|
511
|
+
rule.linkRightNodes(0,rn4,rn8)
|
|
512
|
+
rule.linkRightNodes(0,rn5,rn9)
|
|
513
|
+
rule.linkRightNodes(0,rn6,rn10)
|
|
514
|
+
rule.linkRightNodes(1,rn8,rn13)
|
|
515
|
+
rule.linkRightNodes(1,rn9,rn14)
|
|
516
|
+
rule.linkRightNodes(1,rn2,rn6)
|
|
517
|
+
rule.linkRightNodes(2,rn6,rn5)
|
|
518
|
+
rule.linkRightNodes(1,rn10,rn11)
|
|
519
|
+
rule.linkRightNodes(2,rn11,rn12)
|
|
520
|
+
rule.linkRightNodes(0,rn15,rn18)
|
|
521
|
+
rule.linkRightNodes(0,rn14,rn17)
|
|
522
|
+
rule.linkRightNodes(0,rn13,rn16)
|
|
523
|
+
rule.linkRightNodes(1,rn15,rn12)
|
|
524
|
+
rule.linkRightNodes(2,rn14,rn15)
|
|
525
|
+
rule.linkRightNodes(2,rn17,rn18)
|
|
526
|
+
rule.linkRightNodes(3,rn14,rn13)
|
|
527
|
+
rule.linkRightNodes(3,rn17,rn16)
|
|
528
|
+
rule.linkRightNodes(3,rn8,rn9)
|
|
529
|
+
rule.linkRightNodes(3,rn5,rn4)
|
|
530
|
+
rule.linkRightNodes(2,rn9,rn10)
|
|
531
|
+
rule.linkRightNodes(1,rn18,rn19)
|
|
532
|
+
rule.linkRightNodes(3,rn19,rn19)
|
|
533
|
+
rule.linkRightNodes(3,rn18,rn18)
|
|
534
|
+
rule.linkRightNodes(3,rn15,rn15)
|
|
535
|
+
rule.linkRightNodes(3,rn12,rn12)
|
|
536
|
+
rule.compile()
|
|
537
|
+
return rule
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
def rule_extrude_ExtrudeFace():
|
|
541
|
+
def fun_n0_normal(context):
|
|
542
|
+
n = context.leftdart.ebd01["normal"].copy()
|
|
543
|
+
n.scale(-1)
|
|
544
|
+
return n
|
|
545
|
+
def fun_n1_orient(context):
|
|
546
|
+
return not context.leftdart.ebd["orient"]
|
|
547
|
+
def fun_n1_normal(context):
|
|
548
|
+
d = context.leftdart
|
|
549
|
+
if(not d.ebd['orient']):
|
|
550
|
+
d = d.alpha(0)
|
|
551
|
+
e = d.a(0).ebd123["pos"] - d.ebd123["pos"]
|
|
552
|
+
e.normalize()
|
|
553
|
+
return context.leftdart.ebd01["normal"].cross(e)
|
|
554
|
+
def fun_n2_orient(context):
|
|
555
|
+
return context.leftdart.ebd["orient"]
|
|
556
|
+
def fun_n3_orient(context):
|
|
557
|
+
return not context.leftdart.ebd["orient"]
|
|
558
|
+
def fun_n4_orient(context):
|
|
559
|
+
return context.leftdart.ebd["orient"]
|
|
560
|
+
def fun_n5_orient(context):
|
|
561
|
+
return not context.leftdart.ebd["orient"]
|
|
562
|
+
def fun_n5_normal(context):
|
|
563
|
+
return context.leftdart.ebd01["normal"]
|
|
564
|
+
def fun_n5_pos(context):
|
|
565
|
+
# print(f">>> fun_n5_pos leftdart={context.leftdart} rightdart={context.rightdart} pos={context.leftdart.ebd123['pos']} normal={context.leftdart.ebd01['normal']}")
|
|
566
|
+
pos = context.leftdart.ebd123["pos"]
|
|
567
|
+
normal = context.leftdart.ebd01["normal"]
|
|
568
|
+
return pos + normal
|
|
569
|
+
def fun_n0_pos(context):
|
|
570
|
+
return context.leftdart.ebd123["pos"]
|
|
571
|
+
expr_n0_normal = Expr3DEbd01("normal",fun_n0_normal)
|
|
572
|
+
expr_n1_orient = Expr3DEbdDart("orient",fun_n1_orient)
|
|
573
|
+
expr_n1_normal = Expr3DEbd01("normal",fun_n1_normal)
|
|
574
|
+
expr_n2_orient = Expr3DEbdDart("orient",fun_n2_orient)
|
|
575
|
+
expr_n3_orient = Expr3DEbdDart("orient",fun_n3_orient)
|
|
576
|
+
expr_n4_orient = Expr3DEbdDart("orient",fun_n4_orient)
|
|
577
|
+
expr_n5_orient = Expr3DEbdDart("orient",fun_n5_orient)
|
|
578
|
+
expr_n5_normal = Expr3DEbd01("normal",fun_n5_normal)
|
|
579
|
+
expr_n5_pos = Expr3DEbd123("pos",fun_n5_pos)
|
|
580
|
+
expr_n0_pos = Expr3DEbd123("pos",fun_n0_pos)
|
|
581
|
+
rule = Rule3D("SolExtrudeFace","solution")
|
|
582
|
+
# motif gauche
|
|
583
|
+
ln0 = rule.make_leftnode("n0", [0,1], True)
|
|
584
|
+
rule.linkLeftNodes(2,ln0,ln0)
|
|
585
|
+
# motif droit
|
|
586
|
+
rn0 = rule.make_rightnode("n0", [0,1],[expr_n0_normal])
|
|
587
|
+
rn1 = rule.make_rightnode("n1", [0,-1],[expr_n1_orient,expr_n1_normal, expr_n0_pos])
|
|
588
|
+
rn2 = rule.make_rightnode("n2", [-1,2],[expr_n2_orient,expr_n1_normal, expr_n0_pos])
|
|
589
|
+
rn3 = rule.make_rightnode("n3", [-1,2],[expr_n3_orient,expr_n5_pos,expr_n1_normal])
|
|
590
|
+
rn4 = rule.make_rightnode("n4", [0,-1],[expr_n4_orient,expr_n5_pos,expr_n1_normal])
|
|
591
|
+
rn5 = rule.make_rightnode("n5", [0,1],[expr_n5_orient,expr_n5_normal,expr_n5_pos])
|
|
592
|
+
rule.linkRightNodes(2,rn0,rn1)
|
|
593
|
+
rule.linkRightNodes(1,rn1,rn2)
|
|
594
|
+
rule.linkRightNodes(0,rn2,rn3)
|
|
595
|
+
rule.linkRightNodes(1,rn3,rn4)
|
|
596
|
+
rule.linkRightNodes(3,rn4,rn4)
|
|
597
|
+
rule.linkRightNodes(3,rn3,rn3)
|
|
598
|
+
rule.linkRightNodes(3,rn2,rn2)
|
|
599
|
+
rule.linkRightNodes(3,rn1,rn1)
|
|
600
|
+
rule.linkRightNodes(2,rn4,rn5)
|
|
601
|
+
rule.linkRightNodes(3,rn5,rn5)
|
|
602
|
+
rule.compile()
|
|
603
|
+
return rule
|