1 # SPDX-FileCopyrightText: 2016-2022 Blender Foundation
3 # SPDX-License-Identifier: GPL-2.0-or-later
5 # ----------------------------------------------------------
6 # Main panel for windows
7 # Author: Antonio Vazquez (antonioya)
9 # This code is base on the windows generator add-on created by SayProduction
10 # and has been adapted to continuous editing and cycles materials
12 # ----------------------------------------------------------
13 # noinspection PyUnresolvedReferences
15 from math
import cos
, sin
, radians
, sqrt
, pi
16 from mathutils
import Vector
17 from bpy
.types
import Operator
, PropertyGroup
, Object
, Panel
18 from bpy
.props
import StringProperty
, FloatProperty
, BoolProperty
, IntProperty
, FloatVectorProperty
, \
19 CollectionProperty
, EnumProperty
20 from .achm_tools
import *
23 def fitil(vr
, fc
, px
, pz
, x
, y
, z
, zz
, xx
):
25 vr
.extend([[px
[x
] + xx
, -z
+ zz
, pz
[y
] + xx
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
] + xx
+ k3
],
26 [px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
] + xx
, z
+ zz
, pz
[y
] + xx
]])
27 vr
.extend([[px
[x
] + xx
, -z
+ zz
, pz
[y
+ 1] - xx
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
28 [px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
] + xx
, z
+ zz
, pz
[y
+ 1] - xx
]])
29 vr
.extend([[px
[x
+ 1] - xx
, -z
+ zz
, pz
[y
+ 1] - xx
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
30 [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
+ 1] - xx
, z
+ zz
, pz
[y
+ 1] - xx
]])
31 vr
.extend([[px
[x
+ 1] - xx
, -z
+ zz
, pz
[y
] + xx
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
] + xx
+ k3
],
32 [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
+ 1] - xx
, z
+ zz
, pz
[y
] + xx
]])
34 fc
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11], [n
- 14, n
- 13, n
- 9, n
- 10]])
35 fc
.extend([[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6]])
36 fc
.extend([[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2]])
37 fc
.extend([[n
- 4, n
- 3, n
- 15, n
- 16], [n
- 3, n
- 2, n
- 14, n
- 15], [n
- 2, n
- 1, n
- 13, n
- 14]])
39 vr
.extend([[px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
40 [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
] + xx
+ k3
]])
41 vr
.extend([[px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
],
42 [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
] + xx
+ k3
]])
43 fc
.extend([[n
+ 1, n
+ 0, n
+ 3, n
+ 2], [n
+ 4, n
+ 5, n
+ 6, n
+ 7]])
46 def kapak(vr
, fc
, px
, pz
, x
, y
, z
, zz
):
49 [[px
[x
], -z
+ zz
, pz
[y
]], [px
[x
] + k2
, -z
+ zz
, pz
[y
] + k2
], [px
[x
] + k2
, z
+ zz
, pz
[y
] + k2
],
50 [px
[x
], z
+ zz
, pz
[y
]]])
51 vr
.extend([[px
[x
], -z
+ zz
, pz
[y
+ 1]], [px
[x
] + k2
, -z
+ zz
, pz
[y
+ 1] - k2
], [px
[x
] + k2
, z
+ zz
, pz
[y
+ 1] - k2
],
52 [px
[x
], z
+ zz
, pz
[y
+ 1]]])
54 [[px
[x
+ 1], -z
+ zz
, pz
[y
+ 1]], [px
[x
+ 1] - k2
, -z
+ zz
, pz
[y
+ 1] - k2
],
55 [px
[x
+ 1] - k2
, z
+ zz
, pz
[y
+ 1] - k2
],
56 [px
[x
+ 1], z
+ zz
, pz
[y
+ 1]]])
57 vr
.extend([[px
[x
+ 1], -z
+ zz
, pz
[y
]], [px
[x
+ 1] - k2
, -z
+ zz
, pz
[y
] + k2
], [px
[x
+ 1] - k2
, z
+ zz
, pz
[y
] + k2
],
58 [px
[x
+ 1], z
+ zz
, pz
[y
]]])
60 fc
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11], [n
- 14, n
- 13, n
- 9, n
- 10],
61 [n
- 13, n
- 16, n
- 12, n
- 9]])
62 fc
.extend([[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6],
63 [n
- 9, n
- 12, n
- 8, n
- 5]])
64 fc
.extend([[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2],
65 [n
- 5, n
- 8, n
- 4, n
- 1]])
66 fc
.extend([[n
- 4, n
- 3, n
- 15, n
- 16], [n
- 3, n
- 2, n
- 14, n
- 15], [n
- 2, n
- 1, n
- 13, n
- 14],
67 [n
- 1, n
- 4, n
- 16, n
- 13]])
70 # -----------------------------------------
71 # Set default values for each window type
72 # -----------------------------------------
180 # ------------------------------------------------------------------
181 # Define operator class to create window panels
182 # ------------------------------------------------------------------
183 class ARCHIMESH_PT_Win(Operator
):
184 bl_idname
= "mesh.archimesh_winpanel"
185 bl_label
= "Panel Window"
186 bl_description
= "Generate editable flat windows"
188 bl_options
= {'REGISTER', 'UNDO'}
190 # -----------------------------------------------------
191 # Draw (create UI interface)
192 # -----------------------------------------------------
193 # noinspection PyUnusedLocal
194 def draw(self
, context
):
197 row
.label(text
="Use Properties panel (N) to define parms", icon
='INFO')
199 # -----------------------------------------------------
201 # -----------------------------------------------------
202 # noinspection PyUnusedLocal
203 def execute(self
, context
):
204 if bpy
.context
.mode
== "OBJECT":
208 self
.report({'WARNING'}, "Archimesh: Option only valid in Object mode")
212 # ------------------------------------------------------------------------------
214 # ------------------------------------------------------------------------------
216 # deselect all objects
217 for o
in bpy
.data
.objects
:
220 window_mesh
= bpy
.data
.meshes
.new("Window")
221 window_object
= bpy
.data
.objects
.new("Window", window_mesh
)
223 # Link object to scene
224 bpy
.context
.collection
.objects
.link(window_object
)
225 window_object
.WindowPanelGenerator
.add()
226 window_object
.location
= bpy
.context
.scene
.cursor
.location
229 do_mesh(window_object
, window_mesh
)
232 for o
in bpy
.data
.objects
:
233 if o
.select_get() is True and o
.name
!= window_object
.name
:
236 # Select, and activate object
237 window_object
.select_set(True)
238 bpy
.context
.view_layer
.objects
.active
= window_object
240 do_ctrl_box(window_object
)
242 window_object
.select_set(True)
243 bpy
.context
.view_layer
.objects
.active
= window_object
246 # ------------------------------------------------------------------------------
247 # Update mesh of the window
248 # ------------------------------------------------------------------------------
249 # noinspection PyUnusedLocal
250 def update_window(self
, context
):
251 # When update, the active object is the main object.
252 o
= bpy
.context
.active_object
254 oldname
= o
.data
.name
255 # Now deselect that object to not delete it.
257 # # and create a new mesh for the object:
258 # tmp_mesh = bpy.data.meshes.new("temp")
259 # deselect all objects
260 for obj
in bpy
.data
.objects
:
261 obj
.select_set(False)
262 # ---------------------------------
263 # Clear Parent objects (autohole)
264 # ---------------------------------
266 if myparent
is not None:
267 ploc
= myparent
.location
270 if myparent
is not None:
273 # remove_children(parent)
274 for child
in myparent
.children
:
275 # noinspection PyBroadException
278 child
.hide_viewport
= False # must be visible to avoid bug
279 child
.hide_render
= False # must be visible to avoid bug
281 child
.select_set(True)
282 bpy
.ops
.object.delete()
283 bpy
.data
.meshes
.remove(old
)
287 myparent
.select_set(True)
288 bpy
.ops
.object.delete()
290 # Finally create all that again
291 tmp_mesh
= bpy
.data
.meshes
.new("temp")
292 do_mesh(o
, tmp_mesh
, True)
294 # Remove data (mesh of active object),
295 if oldmesh
.users
== 0:
296 bpy
.data
.meshes
.remove(oldmesh
)
298 oldmesh
.name
= "invalid"
300 tmp_mesh
.name
= oldname
302 for ob
in bpy
.data
.objects
:
303 if ob
.select_get() is True and ob
.name
!= o
.name
:
305 # and select, and activate, the object.
307 bpy
.context
.view_layer
.objects
.active
= o
313 bpy
.context
.view_layer
.objects
.active
= o
316 # ------------------------------------------------------------------------------
318 # For object, it only shapes mesh
319 # ------------------------------------------------------------------------------
320 # noinspection PyUnusedLocal
321 def do_mesh(myobject
, tmp_mesh
, update
=False):
322 # noinspection PyBroadException
324 op
= myobject
.WindowPanelGenerator
[0]
325 # Create only mesh, because the object was created before.
326 r
= generate_window_object(op
, tmp_mesh
)
331 remove_doubles(myobject
)
332 set_normals(myobject
)
336 totx
= myobject
.dimensions
.x
337 op
.glpoint_a
= (-totx
/ 2, 0, 0)
338 top_a
, top_b
, top_c
= get_high_points(myobject
, totx
, op
.UST
)
339 op
.glpoint_b
= (-totx
/ 2, 0, top_a
)
340 op
.glpoint_c
= (totx
/ 2, 0, top_b
)
341 op
.glpoint_d
= (0, 0, top_c
)
344 myobject
.lock_location
= (True, True, True)
345 myobject
.lock_rotation
= (True, True, True)
351 # ------------------------------------------------------------------------------
354 # ------------------------------------------------------------------------------
355 # noinspection PyUnusedLocal
356 def do_ctrl_box(myobject
):
357 op
= myobject
.WindowPanelGenerator
[0]
358 # -------------------------
359 # Create empty and parent
360 # -------------------------
361 bpy
.ops
.object.empty_add(type='PLAIN_AXES')
362 myempty
= bpy
.data
.objects
[bpy
.context
.active_object
.name
]
363 myempty
.location
= myobject
.location
365 myempty
.name
= "Window_Group"
366 parentobject(myempty
, myobject
)
367 myobject
["archimesh.hole_enable"] = True
369 myempty
.rotation_euler
.z
= radians(op
.r
)
370 # Create control box to open wall holes
371 myctrl
= create_ctrl_box(myobject
, "CTRL_Hole")
373 # Add custom property to detect Controller
374 myctrl
["archimesh.ctrl_hole"] = True
377 myctrl
.parent
= myempty
378 myctrl
.location
.x
= 0
379 myctrl
.location
.y
= 0
380 myctrl
.location
.z
= 0
381 myctrl
.display_type
= 'WIRE'
382 myctrl
.hide_viewport
= False
383 myctrl
.hide_render
= True
384 if bpy
.context
.scene
.render
.engine
in {'CYCLES', 'BLENDER_EEVEE'}:
385 myctrl
.visible_camera
= False
386 myctrl
.visible_diffuse
= False
387 myctrl
.visible_glossy
= False
388 myctrl
.visible_transmission
= False
389 myctrl
.visible_shadow
= False
391 mat
= create_transparent_material("hidden_material", False)
392 set_material(myctrl
, mat
)
395 # ------------------------------------------------------------------------------
396 # Update the parameters using a default value
397 # ------------------------------------------------------------------------------
398 # noinspection PyUnusedLocal
399 def update_using_default(self
, context
):
401 myobject
= o
.WindowPanelGenerator
[0]
402 if myobject
.son
!= myobject
.prs
:
403 set_defaults(myobject
)
404 myobject
.son
= myobject
.prs
407 # ------------------------------------------------------------------------------
408 # Generate window object
409 # ------------------------------------------------------------------------------
410 def generate_window_object(op
, mymesh
):
413 # noinspection PyBroadException
415 rst
, ft1
, cam
, mer
, sm
= generate_vertex_data(op
, myvertex
, mfaces
)
419 mymesh
.from_pydata(myvertex
, [], mfaces
)
420 # Uncomment for debug
421 # mymesh.validate(verbose=True)
424 mymesh
.materials
.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
426 mymesh
.materials
.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
428 mymesh
.materials
.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
430 mymesh
.materials
.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
432 mymesh
.materials
.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
434 mymesh
.materials
.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
436 mymesh
.materials
.append(create_glass_material("Glass", False))
438 mymesh
.materials
.append(create_diffuse_material("Marble", False, 0.9, 0.8, 0.7, 0.9, 0.8, 0.7))
440 p
= len(mymesh
.polygons
)
443 mymesh
.polygons
[i
].material_index
= 1
446 mymesh
.polygons
[i
].material_index
= 2
449 mymesh
.polygons
[i
].material_index
= 3
452 mymesh
.polygons
[i
].use_smooth
= 1
454 mymesh
.update(calc_edges
=True)
461 # -----------------------------------------
462 # Generate vertex and faces data
463 # -----------------------------------------
464 def generate_vertex_data(op
, myvertex
, myfaces
):
465 # noinspection PyBroadException
479 xlist
= [0, round(u
, 2)]
482 xlist
.append(round(u
, 2))
484 xlist
.append(round(u
, 2))
487 xlist
.append(round(u
, 2))
489 xlist
.append(round(u
, 2))
492 xlist
.append(round(u
, 2))
494 xlist
.append(round(u
, 2))
497 xlist
.append(round(u
, 2))
499 xlist
.append(round(u
, 2))
502 xlist
.append(round(u
, 2))
504 xlist
.append(round(u
, 2))
507 xlist
.append(round(u
, 2))
509 xlist
.append(round(u
, 2))
512 xlist
.append(round(u
, 2))
514 xlist
.append(round(u
, 2))
517 xlist
.append(round(u
, 2))
519 xlist
.append(round(u
, 2))
521 xlist
[-1] = xlist
[-2] + k1
524 zlist
= [0, round(u
, 2)]
527 zlist
.append(round(u
, 2))
529 zlist
.append(round(u
, 2))
532 zlist
.append(round(u
, 2))
534 zlist
.append(round(u
, 2))
537 zlist
.append(round(u
, 2))
539 zlist
.append(round(u
, 2))
542 zlist
.append(round(u
, 2))
544 zlist
.append(round(u
, 2))
547 zlist
.append(round(u
, 2))
549 zlist
.append(round(u
, 2))
550 zlist
[-1] = zlist
[-2] + k1
553 for i
in range(0, len(xlist
)):
555 kx
= [[op
.k00
, op
.k10
, op
.k20
, op
.k30
, op
.k40
],
556 [op
.k01
, op
.k11
, op
.k21
, op
.k31
, op
.k41
],
557 [op
.k02
, op
.k12
, op
.k22
, op
.k32
, op
.k42
],
558 [op
.k03
, op
.k13
, op
.k23
, op
.k33
, op
.k43
],
559 [op
.k04
, op
.k14
, op
.k24
, op
.k34
, op
.k44
],
560 [op
.k05
, op
.k15
, op
.k25
, op
.k35
, op
.k45
],
561 [op
.k06
, op
.k16
, op
.k26
, op
.k36
, op
.k46
],
562 [op
.k07
, op
.k17
, op
.k27
, op
.k37
, op
.k47
]]
567 # -------------------------
569 # -------------------------
570 myvertex
.extend([[xlist
[0], -k1
/ 2, zlist
[0]], [xlist
[0], k1
/ 2, zlist
[0]]])
571 for x
in range(1, len(xlist
) - 1):
572 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[1]], [xlist
[x
], k1
/ 2, zlist
[1]]])
573 myvertex
.extend([[xlist
[-1], -k1
/ 2, zlist
[0]], [xlist
[-1], k1
/ 2, zlist
[0]]])
574 for z
in range(2, len(zlist
) - 2, 2):
575 for x
in range(0, len(xlist
)):
576 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
]], [xlist
[x
], k1
/ 2, zlist
[z
]]])
577 for x
in range(0, len(xlist
)):
578 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
+ 1]], [xlist
[x
], k1
/ 2, zlist
[z
+ 1]]])
580 myvertex
.extend([[xlist
[0], -k1
/ 2, zlist
[z
+ 1]], [xlist
[0], k1
/ 2, zlist
[z
+ 1]]])
582 ust
= [len(myvertex
) - 2, len(myvertex
) - 1]
583 for x
in range(1, len(xlist
) - 1):
584 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
]], [xlist
[x
], k1
/ 2, zlist
[z
]]])
585 alt
.extend([len(myvertex
) - 2, len(myvertex
) - 1])
586 myvertex
.extend([[xlist
[-1], -k1
/ 2, zlist
[z
+ 1]], [xlist
[-1], k1
/ 2, zlist
[z
+ 1]]])
587 son
= [len(myvertex
) - 2, len(myvertex
) - 1]
588 # -------------------------
590 # -------------------------
591 myfaces
.append([0, 1, 3 + mx
* 4, 2 + mx
* 4])
594 for i
in range(0, mx
* 4, 4):
595 myfaces
.append([i
+ 3, i
+ 2, i
+ 4, i
+ 5])
596 fb
.extend([i
+ 2, i
+ 4])
597 fr
.extend([i
+ 3, i
+ 5])
598 fr
.append(3 + mx
* 4)
599 fb
.append(2 + mx
* 4)
601 myfaces
.extend([fb
, fr
])
605 for z
in range(0, (my
- 1) * y
* 2, y
* 2):
606 myfaces
.extend([[z
+ y
+ 1, z
+ y
, z
+ y
+ 4 + mx
* 4, z
+ y
+ 5 + mx
* 4],
607 [z
+ y
+ v
, z
+ y
+ v
+ 1, z
+ y
+ v
+ 5 + mx
* 4, z
+ y
+ v
+ 4 + mx
* 4]])
608 for i
in range(0, mx
* 4 + 2, 2):
609 myfaces
.extend([[z
+ i
+ y
+ 0, z
+ i
+ y
+ 2, z
+ i
+ y
+ v
+ 4, z
+ i
+ y
+ v
+ 2],
610 [z
+ i
+ y
+ 3, z
+ i
+ y
+ 1, z
+ i
+ y
+ v
+ 3, z
+ i
+ y
+ v
+ 5]])
611 for i
in range(0, mx
* 4 - 3, 4):
612 myfaces
.extend([[z
+ i
+ y
+ 2, z
+ i
+ y
+ 3, z
+ i
+ y
+ 5, z
+ i
+ y
+ 4],
613 [z
+ i
+ y
+ v
+ 5, z
+ i
+ y
+ v
+ 4, z
+ i
+ y
+ v
+ 6,
616 for y
in range(0, my
):
617 z
= y
* (mx
* 4 + 4) * 2
618 for i
in range(0, mx
* 4 + 2, 4):
619 myfaces
.extend([[z
+ i
+ 1, z
+ i
+ 0, z
+ i
+ v
+ 2, z
+ i
+ v
+ 3],
620 [z
+ i
+ 3, z
+ i
+ 1, z
+ i
+ v
+ 3, z
+ i
+ v
+ 5],
621 [z
+ i
+ 2, z
+ i
+ 3, z
+ i
+ v
+ 5, z
+ i
+ v
+ 4],
622 [z
+ i
+ 0, z
+ i
+ 2, z
+ i
+ v
+ 4, z
+ i
+ v
+ 2]])
628 for y
in range(0, y1
):
629 for x
in range(0, mx
):
631 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
632 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
634 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
636 cam
.extend([m
- 1, m
- 2])
637 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11, m
- 12, m
- 13, m
- 14])
638 # -----------------------------------------------------
639 if op
.UST
== '1': # Duz
640 myfaces
.append([ust
[1], ust
[0], son
[0], son
[1]])
641 for i
in range(0, mx
* 4, 4):
642 myfaces
.append([alt
[i
], alt
[i
+ 1], alt
[i
+ 3], alt
[i
+ 2]])
645 for i
in range(0, len(alt
) - 1, 2):
647 ar
.append(alt
[i
+ 1])
653 elif op
.UST
== '2': # Arch
668 h
= sqrt(u
** 2 + h1
** 2) / 2
670 c
= sqrt(h
** 2 + e
** 2)
677 t1
= sqrt(c
** 2 - u
** 2) + zlist
[-1] - c
681 myvertex
[ust
[0]][2] = t1
682 myvertex
[ust
[1]][2] = t1
683 myvertex
[son
[0]][2] = t1
684 myvertex
[son
[1]][2] = t1
686 myvertex
[i
][2] = sqrt(r
** 2 - myvertex
[i
][0] ** 2) + z
690 for i
in range(0, res
):
694 myvertex
.append([x
, -k1
/ 2, sin(a
) * c
+ z
])
695 on
.append(len(myvertex
) - 1)
698 on
.extend([ust
[0], alt
[0]])
702 for i
in range(0, len(alt
) - 2, 4):
703 x1
= myvertex
[alt
[i
+ 0]][0]
704 x2
= myvertex
[alt
[i
+ 2]][0]
705 on
.append(alt
[i
+ 0])
706 ar
.append(alt
[i
+ 1])
709 for j
in range(0, res
):
713 myvertex
.extend([[x
, -k1
/ 2, sin(a
) * r
+ z
], [x
, k1
/ 2, sin(a
) * r
+ z
]])
714 on
.append(len(myvertex
) - 2)
715 ar
.append(len(myvertex
) - 1)
716 t1
.append(len(myvertex
) - 2)
717 t2
.append(len(myvertex
) - 1)
718 on
.append(alt
[i
+ 2])
719 ar
.append(alt
[i
+ 3])
720 t1
.append(alt
[i
+ 2])
721 t2
.append(alt
[i
+ 3])
726 for i
in range(0, res
):
730 myvertex
.append([x
, k1
/ 2, sin(a
) * c
+ z
])
731 ar
.append(len(myvertex
) - 1)
732 u2
.append(len(myvertex
) - 1)
736 myfaces
.extend([on
, ar
])
737 for i
in range(0, len(u1
) - 1):
738 myfaces
.append([u1
[i
+ 1], u1
[i
], u2
[i
], u2
[i
+ 1]])
739 sm
.append(len(myfaces
) - 1)
740 for a
in range(0, mx
):
741 for i
in range(0, len(d1
[a
]) - 1):
742 myfaces
.append([d1
[a
][i
+ 1], d1
[a
][i
], d2
[a
][i
], d2
[a
][i
+ 1]])
743 sm
.append(len(myfaces
) - 1)
745 for x
in range(0, mx
):
747 fr
= (k1
+ k2
) * 0.5 - 0.01
752 x1
= xlist
[x
* 2 + 1]
753 x2
= xlist
[x
* 2 + 2]
754 myvertex
.extend([[x2
, fr
- k2
/ 2, z
+ 1], [x2
- k2
, fr
- k2
/ 2, z
+ 1],
755 [x2
- k2
, fr
+ k2
/ 2, z
+ 1],
756 [x2
, fr
+ k2
/ 2, z
+ 1]])
757 myvertex
.extend([[x2
, fr
- k2
/ 2, zlist
[-3]], [x2
- k2
, fr
- k2
/ 2, zlist
[-3] + k2
],
758 [x2
- k2
, fr
+ k2
/ 2,
760 [x2
, fr
+ k2
/ 2, zlist
[-3]]])
761 myvertex
.extend([[x1
, fr
- k2
/ 2, zlist
[-3]], [x1
+ k2
, fr
- k2
/ 2, zlist
[-3] + k2
],
762 [x1
+ k2
, fr
+ k2
/ 2,
764 [x1
, fr
+ k2
/ 2, zlist
[-3]]])
765 myvertex
.extend([[x1
, fr
- k2
/ 2, z
+ 1], [x1
+ k2
, fr
- k2
/ 2, z
+ 1],
766 [x1
+ k2
, fr
+ k2
/ 2, z
+ 1],
767 [x1
, fr
+ k2
/ 2, z
+ 1]])
770 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
771 [n
- 14, n
- 13, n
- 9, n
- 10], [n
- 13, n
- 16, n
- 12, n
- 9]])
773 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6],
774 [n
- 9, n
- 12, n
- 8, n
- 5]])
776 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2],
777 [n
- 5, n
- 8, n
- 4, n
- 1]])
778 alt
= [n
- 16, n
- 15, n
- 14, n
- 13, n
- 4, n
- 3, n
- 2, n
- 1]
779 myvertex
[alt
[0]][2] = sqrt(r
** 2 - myvertex
[alt
[0]][0] ** 2) + z
780 myvertex
[alt
[1]][2] = sqrt(k
** 2 - myvertex
[alt
[1]][0] ** 2) + z
781 myvertex
[alt
[2]][2] = sqrt(k
** 2 - myvertex
[alt
[2]][0] ** 2) + z
782 myvertex
[alt
[3]][2] = sqrt(r
** 2 - myvertex
[alt
[3]][0] ** 2) + z
783 myvertex
[alt
[4]][2] = sqrt(r
** 2 - myvertex
[alt
[4]][0] ** 2) + z
784 myvertex
[alt
[5]][2] = sqrt(k
** 2 - myvertex
[alt
[5]][0] ** 2) + z
785 myvertex
[alt
[6]][2] = sqrt(k
** 2 - myvertex
[alt
[6]][0] ** 2) + z
786 myvertex
[alt
[7]][2] = sqrt(r
** 2 - myvertex
[alt
[7]][0] ** 2) + z
792 for i
in range(0, res
):
797 myvertex
.extend([[y1
, fr
- k2
/ 2, sin(a
) * r
+ z
], [y1
, fr
+ k2
/ 2,
799 t1
.append(len(myvertex
) - 2)
800 t2
.append(len(myvertex
) - 1)
801 if x1
+ k2
< y2
< x2
- k2
:
802 myvertex
.extend([[y2
, fr
- k2
/ 2, sin(a
) * k
+ z
], [y2
, fr
+ k2
/ 2,
804 d1
.append(len(myvertex
) - 2)
805 d2
.append(len(myvertex
) - 1)
806 on
= [alt
[1], alt
[0]]
808 on
.extend([alt
[4], alt
[5]])
810 ar
= [alt
[2], alt
[3]]
812 ar
.extend([alt
[7], alt
[6]])
816 if d1
== [] and t1
== []:
817 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]], [alt
[7], alt
[4], alt
[0], alt
[
822 elif d1
== [] and t1
!= []:
823 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]], [alt
[7], alt
[4], t1
[-1], t2
[-1]],
824 [alt
[0], alt
[3], t2
[0], t1
[0]]])
827 [m
- 1, m
- 2, m
- 3])
828 elif d1
!= [] and t1
== []:
829 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]],
830 [alt
[7], alt
[4], alt
[0], alt
[3]]])
833 [m
- 1, m
- 2, m
- 3])
835 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]],
836 [alt
[7], alt
[4], t1
[-1], t2
[-1]], [alt
[0], alt
[3], t2
[0], t1
[0]]])
839 [m
- 1, m
- 2, m
- 3, m
- 4])
841 for i
in range(0, len(d1
) - 1):
842 myfaces
.append([d1
[i
+ 1], d1
[i
], d2
[i
], d2
[i
+ 1]])
843 sm
.append(len(myfaces
) - 1)
844 for i
in range(0, len(t1
) - 1):
845 myfaces
.append([t1
[i
+ 1], t1
[i
], t2
[i
], t2
[i
+ 1]])
846 sm
.append(len(myfaces
) - 1)
855 x1
= xlist
[x
* 2 + 1] + ek
856 x2
= xlist
[x
* 2 + 2] - ek
857 myvertex
.extend([[x2
, fr
- k3
, z
+ 1], [x2
- k3
* 2, fr
- k3
, z
+ 1], [x2
- k3
* 2, fr
+ k3
, z
+ 1],
858 [x2
, fr
+ k3
, z
+ 1]])
859 myvertex
.extend([[x2
, fr
- k3
, zlist
[-3] + ek
], [x2
- k3
* 2, fr
- k3
, zlist
[-3] + ek
+ k3
* 2],
860 [x2
- k3
* 2, fr
+ k3
, zlist
[-3] + ek
+ k3
* 2], [x2
, fr
+ k3
, zlist
[-3] + ek
]])
861 myvertex
.extend([[x1
, fr
- k3
, zlist
[-3] + ek
], [x1
+ k3
* 2, fr
- k3
, zlist
[-3] + ek
+ k3
* 2],
862 [x1
+ k3
* 2, fr
+ k3
, zlist
[-3] + ek
+ k3
* 2], [x1
, fr
+ k3
, zlist
[-3] + ek
]])
863 myvertex
.extend([[x1
, fr
- k3
, z
+ 1], [x1
+ k3
* 2, fr
- k3
, z
+ 1], [x1
+ k3
* 2, fr
+ k3
, z
+ 1],
864 [x1
, fr
+ k3
, z
+ 1]])
867 [[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11], [n
- 14, n
- 13, n
- 9,
870 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6]])
871 myfaces
.extend([[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1,
874 ftl
.extend([m
- 1, m
- 2, m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9])
875 alt
= [n
- 16, n
- 15, n
- 14, n
- 13, n
- 4, n
- 3, n
- 2, n
- 1]
876 myvertex
[alt
[0]][2] = sqrt(r
** 2 - myvertex
[alt
[0]][0] ** 2) + z
877 myvertex
[alt
[1]][2] = sqrt(k
** 2 - myvertex
[alt
[1]][0] ** 2) + z
878 myvertex
[alt
[2]][2] = sqrt(k
** 2 - myvertex
[alt
[2]][0] ** 2) + z
879 myvertex
[alt
[3]][2] = sqrt(r
** 2 - myvertex
[alt
[3]][0] ** 2) + z
880 myvertex
[alt
[4]][2] = sqrt(r
** 2 - myvertex
[alt
[4]][0] ** 2) + z
881 myvertex
[alt
[5]][2] = sqrt(k
** 2 - myvertex
[alt
[5]][0] ** 2) + z
882 myvertex
[alt
[6]][2] = sqrt(k
** 2 - myvertex
[alt
[6]][0] ** 2) + z
883 myvertex
[alt
[7]][2] = sqrt(r
** 2 - myvertex
[alt
[7]][0] ** 2) + z
888 for i
in range(0, res
):
893 myvertex
.extend([[y1
, fr
- k3
, sin(a
) * r
+ z
], [y1
, fr
+ k3
, sin(a
) * r
+ z
]])
894 t1
.append(len(myvertex
) - 2)
895 t2
.append(len(myvertex
) - 1)
896 ftl
.extend([len(myfaces
) - 1, len(myfaces
) - 2])
897 if x1
+ k3
* 2 < y2
< x2
- k3
* 2:
898 myvertex
.extend([[y2
, fr
- k3
, sin(a
) * k
+ z
], [y2
, fr
+ k3
, sin(a
) * k
+ z
]])
899 d1
.append(len(myvertex
) - 2)
900 d2
.append(len(myvertex
) - 1)
901 ftl
.extend([len(myfaces
) - 1, len(myfaces
) - 2])
902 on
= [alt
[1], alt
[0]]
904 on
.extend([alt
[4], alt
[5]])
906 ar
= [alt
[2], alt
[3]]
908 ar
.extend([alt
[7], alt
[6]])
913 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]]])
915 ftl
.extend([m
- 1, m
- 2, m
- 3])
918 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]]])
920 ftl
.extend([m
- 1, m
- 2, m
- 3, m
- 4])
921 sm
.extend([m
- 1, m
- 2])
923 for i
in range(0, len(d1
) - 1):
924 myfaces
.append([d1
[i
+ 1], d1
[i
], d2
[i
], d2
[i
+ 1]])
925 ftl
.append(len(myfaces
) - 1)
926 sm
.append(len(myfaces
) - 1)
928 x1
= xlist
[x
* 2 + 1] + ek
+ k3
* 2
929 x2
= xlist
[x
* 2 + 2] - ek
- k3
* 2
932 for i
in range(0, res
):
936 myvertex
.extend([[y1
, fr
- 0.005, sin(a
) * k
+ z
], [y1
, fr
+ 0.005, sin(a
) * k
+ z
]])
941 [[x1
, fr
- 0.005, sqrt(k
** 2 - x1
** 2) + z
], [x1
, fr
+ 0.005,
942 sqrt(k
** 2 - x1
** 2) + z
]])
943 myvertex
.extend([[x1
, fr
- 0.005, zlist
[-3] + ek
+ k3
* 2], [x1
, fr
+ 0.005, zlist
[-3] + ek
+ k3
* 2]])
944 myvertex
.extend([[x2
, fr
- 0.005, zlist
[-3] + ek
+ k3
* 2], [x2
, fr
+ 0.005, zlist
[-3] + ek
+ k3
* 2]])
946 [[x2
, fr
- 0.005, sqrt(k
** 2 - x2
** 2) + z
], [x2
, fr
+ 0.005,
947 sqrt(k
** 2 - x2
** 2) + z
]])
949 on
.extend([n
- 1, n
- 3, n
- 5, n
- 7])
950 ar
.extend([n
- 2, n
- 4, n
- 6, n
- 8])
955 cam
.extend([m
- 1, m
- 2])
957 elif op
.UST
== '3': # Egri
959 h1
= (op
.VL1
/ 200) / u
963 h1
= sin(op
.VL4
* pi
/ 180) / cos(op
.VL4
* pi
/ 180)
964 z
= sqrt(k1
** 2 + (k1
* h1
) ** 2)
965 k
= sqrt(k2
** 2 + (k2
* h1
) ** 2)
966 f
= sqrt(k3
** 2 + (k3
* h1
) ** 2) * 2
967 myvertex
[ust
[0]][2] = zlist
[-1] + myvertex
[ust
[0]][0] * h1
968 myvertex
[ust
[1]][2] = zlist
[-1] + myvertex
[ust
[1]][0] * h1
970 myvertex
[i
][2] = zlist
[-1] + myvertex
[i
][0] * h1
- z
971 myvertex
[son
[0]][2] = zlist
[-1] + myvertex
[son
[0]][0] * h1
972 myvertex
[son
[1]][2] = zlist
[-1] + myvertex
[son
[1]][0] * h1
973 myfaces
.append([ust
[1], ust
[0], son
[0], son
[1]])
974 for i
in range(0, mx
* 4, 4):
975 myfaces
.append([alt
[i
], alt
[i
+ 1], alt
[i
+ 3], alt
[i
+ 2]])
978 for i
in range(0, len(alt
) - 1, 2):
980 ar
.append(alt
[i
+ 1])
987 for x
in range(0, mx
):
989 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
991 myvertex
[n
- 5][2] = zlist
[-1] + myvertex
[n
- 5][0] * h1
- z
992 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
993 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
994 myvertex
[n
- 8][2] = zlist
[-1] + myvertex
[n
- 8][0] * h1
- z
995 myvertex
[n
- 9][2] = zlist
[-1] + myvertex
[n
- 9][0] * h1
- z
996 myvertex
[n
- 10][2] = zlist
[-1] + myvertex
[n
- 10][0] * h1
- z
- k
997 myvertex
[n
- 11][2] = zlist
[-1] + myvertex
[n
- 11][0] * h1
- z
- k
998 myvertex
[n
- 12][2] = zlist
[-1] + myvertex
[n
- 12][0] * h1
- z
999 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
1001 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- k
- f
1002 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- k
- f
1003 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
- f
1004 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
- f
1005 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
- k
1006 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- k
- f
1007 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- k
- f
1008 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
- k
1009 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
- k
1010 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- k
- f
1011 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- k
- f
1012 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
- k
1014 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1016 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- f
1017 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- f
1018 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- f
1019 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- f
1020 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
1021 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- f
1022 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- f
1023 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
1024 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
1025 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- f
1026 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- f
1027 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
1029 cam
.extend([m
- 1, m
- 2])
1030 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11, m
- 12, m
- 13, m
- 14])
1031 elif op
.UST
== '4': # Ucgen
1033 h1
= (op
.VL1
/ 100) / u
1037 h1
= sin(op
.VL4
* pi
/ 180) / cos(op
.VL4
* pi
/ 180)
1038 z
= sqrt(k1
** 2 + (k1
* h1
) ** 2)
1039 k
= sqrt(k2
** 2 + (k2
* h1
) ** 2)
1040 f
= sqrt(k3
** 2 + (k3
* h1
) ** 2) * 2
1041 myvertex
[ust
[0]][2] = zlist
[-1] + myvertex
[ust
[0]][0] * h1
1042 myvertex
[ust
[1]][2] = zlist
[-1] + myvertex
[ust
[1]][0] * h1
1044 myvertex
[i
][2] = zlist
[-1] - abs(myvertex
[i
][0]) * h1
- z
1045 myvertex
[son
[0]][2] = zlist
[-1] - myvertex
[son
[0]][0] * h1
1046 myvertex
[son
[1]][2] = zlist
[-1] - myvertex
[son
[1]][0] * h1
1047 myvertex
.extend([[0, -k1
/ 2, zlist
[-1]], [0, k1
/ 2, zlist
[-1]]])
1050 for j
in range(2, len(alt
) - 2, 4):
1051 if myvertex
[alt
[j
]][0] < 0 < myvertex
[alt
[j
+ 2]][0]:
1055 myfaces
.extend([[ust
[1], ust
[0], n
- 2, n
- 1], [n
- 1, n
- 2, son
[0], son
[1]]])
1056 on
= [son
[0], n
- 2, ust
[0]]
1057 ar
= [son
[1], n
- 1, ust
[1]]
1060 myvertex
.extend([[0, -k1
/ 2, zlist
[-1] - z
], [0, k1
/ 2, zlist
[-1] - z
]])
1061 for j
in range(0, len(alt
) - 2, 4):
1062 if myvertex
[alt
[j
]][0] < 0 and myvertex
[alt
[j
+ 2]][0] < 0:
1063 myfaces
.append([alt
[j
], alt
[j
+ 1], alt
[j
+ 3], alt
[j
+ 2]])
1064 on
.extend([alt
[j
], alt
[j
+ 2]])
1065 ar
.extend([alt
[j
+ 1], alt
[j
+ 3]])
1066 elif myvertex
[alt
[j
]][0] > 0 and myvertex
[alt
[j
+ 2]][0] > 0:
1067 myfaces
.append([alt
[j
], alt
[j
+ 1], alt
[j
+ 3], alt
[j
+ 2]])
1068 on
.extend([alt
[j
], alt
[j
+ 2]])
1069 ar
.extend([alt
[j
+ 1], alt
[j
+ 3]])
1072 myfaces
.extend([[alt
[j
], alt
[j
+ 1], n
- 1, n
- 2], [n
- 2, n
- 1, alt
[j
+ 3], alt
[j
+ 2]]])
1073 on
.extend([alt
[j
+ 0], n
- 2, alt
[j
+ 2]])
1074 ar
.extend([alt
[j
+ 1], n
- 1, alt
[j
+ 3]])
1079 for x
in range(0, mx
):
1080 if myvertex
[alt
[x
* 4]][0] < 0 and myvertex
[alt
[x
* 4 + 2]][0] < 0:
1081 if kx
[x
][y
] is True:
1082 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
1084 myvertex
[n
- 5][2] = zlist
[-1] + myvertex
[n
- 5][0] * h1
- z
1085 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
1086 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
1087 myvertex
[n
- 8][2] = zlist
[-1] + myvertex
[n
- 8][0] * h1
- z
1088 myvertex
[n
- 9][2] = zlist
[-1] + myvertex
[n
- 9][0] * h1
- z
1089 myvertex
[n
- 10][2] = zlist
[-1] + myvertex
[n
- 10][0] * h1
- z
- k
1090 myvertex
[n
- 11][2] = zlist
[-1] + myvertex
[n
- 11][0] * h1
- z
- k
1091 myvertex
[n
- 12][2] = zlist
[-1] + myvertex
[n
- 12][0] * h1
- z
1092 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
1094 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- k
- f
1095 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- k
- f
1096 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
- f
1097 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
- f
1098 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
- k
1099 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- k
- f
1100 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- k
- f
1101 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
- k
1102 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
- k
1103 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- k
- f
1104 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- k
- f
1105 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
- k
1107 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1109 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- f
1110 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- f
1111 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- f
1112 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- f
1113 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
1114 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- f
1115 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- f
1116 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
1117 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
1118 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- f
1119 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- f
1120 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
1122 cam
.extend([m
- 1, m
- 2])
1123 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11,
1124 m
- 12, m
- 13, m
- 14])
1125 elif myvertex
[alt
[x
* 4]][0] > 0 and myvertex
[alt
[x
* 4 + 2]][0] > 0:
1126 if kx
[x
][y
] is True:
1127 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
1129 myvertex
[n
- 5][2] = zlist
[-1] - myvertex
[n
- 5][0] * h1
- z
1130 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- k
1131 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- k
1132 myvertex
[n
- 8][2] = zlist
[-1] - myvertex
[n
- 8][0] * h1
- z
1133 myvertex
[n
- 9][2] = zlist
[-1] - myvertex
[n
- 9][0] * h1
- z
1134 myvertex
[n
- 10][2] = zlist
[-1] - myvertex
[n
- 10][0] * h1
- z
- k
1135 myvertex
[n
- 11][2] = zlist
[-1] - myvertex
[n
- 11][0] * h1
- z
- k
1136 myvertex
[n
- 12][2] = zlist
[-1] - myvertex
[n
- 12][0] * h1
- z
1137 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
1139 myvertex
[n
- 2][2] = zlist
[-1] - myvertex
[n
- 2][0] * h1
- z
- k
- f
1140 myvertex
[n
- 3][2] = zlist
[-1] - myvertex
[n
- 3][0] * h1
- z
- k
- f
1141 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- k
- f
1142 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- k
- f
1143 myvertex
[n
- 13][2] = zlist
[-1] - myvertex
[n
- 13][0] * h1
- z
- k
1144 myvertex
[n
- 14][2] = zlist
[-1] - myvertex
[n
- 14][0] * h1
- z
- k
- f
1145 myvertex
[n
- 15][2] = zlist
[-1] - myvertex
[n
- 15][0] * h1
- z
- k
- f
1146 myvertex
[n
- 16][2] = zlist
[-1] - myvertex
[n
- 16][0] * h1
- z
- k
1147 myvertex
[n
- 17][2] = zlist
[-1] - myvertex
[n
- 17][0] * h1
- z
- k
1148 myvertex
[n
- 18][2] = zlist
[-1] - myvertex
[n
- 18][0] * h1
- z
- k
- f
1149 myvertex
[n
- 19][2] = zlist
[-1] - myvertex
[n
- 19][0] * h1
- z
- k
- f
1150 myvertex
[n
- 20][2] = zlist
[-1] - myvertex
[n
- 20][0] * h1
- z
- k
1152 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1154 myvertex
[n
- 2][2] = zlist
[-1] - myvertex
[n
- 2][0] * h1
- z
- f
1155 myvertex
[n
- 3][2] = zlist
[-1] - myvertex
[n
- 3][0] * h1
- z
- f
1156 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- f
1157 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- f
1158 myvertex
[n
- 13][2] = zlist
[-1] - myvertex
[n
- 13][0] * h1
- z
1159 myvertex
[n
- 14][2] = zlist
[-1] - myvertex
[n
- 14][0] * h1
- z
- f
1160 myvertex
[n
- 15][2] = zlist
[-1] - myvertex
[n
- 15][0] * h1
- z
- f
1161 myvertex
[n
- 16][2] = zlist
[-1] - myvertex
[n
- 16][0] * h1
- z
1162 myvertex
[n
- 17][2] = zlist
[-1] - myvertex
[n
- 17][0] * h1
- z
1163 myvertex
[n
- 18][2] = zlist
[-1] - myvertex
[n
- 18][0] * h1
- z
- f
1164 myvertex
[n
- 19][2] = zlist
[-1] - myvertex
[n
- 19][0] * h1
- z
- f
1165 myvertex
[n
- 20][2] = zlist
[-1] - myvertex
[n
- 20][0] * h1
- z
1167 cam
.extend([m
- 1, m
- 2])
1168 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10,
1169 m
- 11, m
- 12, m
- 13, m
- 14])
1172 if kx
[x
][y
] is True:
1173 zz
= (k1
+ k2
) * 0.5 - 0.01
1174 xx
= xlist
[x
* 2 + 1]
1175 myvertex
.extend([[xx
, -k2
/ 2 + zz
, zlist
[-3]], [xx
+ k2
, -k2
/ 2 + zz
, zlist
[-3] + k2
],
1176 [xx
+ k2
, k2
/ 2 + zz
, zlist
[-3] + k2
], [xx
, k2
/ 2 + zz
, zlist
[-3]]])
1178 [[xx
, -k2
/ 2 + zz
, zlist
[-1] + xx
* h1
- z
], [xx
+ k2
, -k2
/ 2 + zz
,
1179 zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1180 [xx
+ k2
, k2
/ 2 + zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1181 [xx
, k2
/ 2 + zz
, zlist
[-1] + xx
* h1
- z
]])
1182 myvertex
.extend([[0, -k2
/ 2 + zz
, zlist
[-1] - z
], [0, -k2
/ 2 + zz
, zlist
[-1] - z
- k
],
1183 [0, k2
/ 2 + zz
, zlist
[-1] - z
- k
], [0, k2
/ 2 + zz
, zlist
[-1] - z
]])
1184 xx
= xlist
[x
* 2 + 2]
1186 [[xx
, -k2
/ 2 + zz
, zlist
[-1] - xx
* h1
- z
], [xx
- k2
, -k2
/ 2 + zz
,
1187 zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1188 [xx
- k2
, k2
/ 2 + zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1189 [xx
, k2
/ 2 + zz
, zlist
[-1] - xx
* h1
- z
]])
1190 myvertex
.extend([[xx
, -k2
/ 2 + zz
, zlist
[-3]], [xx
- k2
, -k2
/ 2 + zz
, zlist
[-3] + k2
],
1191 [xx
- k2
, k2
/ 2 + zz
, zlist
[-3] + k2
], [xx
, k2
/ 2 + zz
, zlist
[-3]]])
1193 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1194 [n
- 18, n
- 17, n
- 13, n
- 14], [n
- 17, n
- 20, n
- 16, n
- 13]])
1195 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1196 [n
- 14, n
- 13, n
- 9, n
- 10], [n
- 13, n
- 16, n
- 12, n
- 9]])
1198 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9,
1200 [n
- 9, n
- 12, n
- 8, n
- 5]])
1202 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2],
1203 [n
- 5, n
- 8, n
- 4, n
- 1]])
1205 [[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1206 [n
- 2, n
- 1, n
- 17, n
- 18],
1207 [n
- 1, n
- 4, n
- 20, n
- 17]])
1208 xx
= xlist
[x
* 2 + 1]
1209 myvertex
.extend([[xx
+ k2
, -k3
+ zz
, zlist
[-3] + k2
], [xx
+ k4
+ k2
, -k3
+ zz
,
1210 zlist
[-3] + k2
+ k4
],
1211 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
+ k2
, k3
+ zz
,
1213 myvertex
.extend([[xx
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1214 [xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1215 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1216 [xx
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
]])
1217 myvertex
.extend([[0, -k3
+ zz
, zlist
[-1] - k
- z
], [0, -k3
+ zz
, zlist
[-1] - k
- z
- f
],
1218 [0, k3
+ zz
, zlist
[-1] - k
- z
- f
], [0, k3
+ zz
, zlist
[-1] - k
- z
]])
1219 xx
= xlist
[x
* 2 + 2]
1220 myvertex
.extend([[xx
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1221 [xx
- k4
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1222 [xx
- k4
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1223 [xx
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
]])
1224 myvertex
.extend([[xx
- k2
, -k3
+ zz
, zlist
[-3] + k2
],
1225 [xx
- k4
- k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
],
1226 [xx
- k4
- k2
, k3
+ zz
, zlist
[-3] + k2
+ k4
],
1227 [xx
- k2
, k3
+ zz
, zlist
[-3] + k2
]])
1229 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1230 [n
- 18, n
- 17, n
- 13, n
- 14]])
1231 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1232 [n
- 14, n
- 13, n
- 9, n
- 10]])
1234 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10,
1235 n
- 9, n
- 5, n
- 6]])
1237 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2]])
1238 myfaces
.extend([[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1239 [n
- 2, n
- 1, n
- 17, n
- 18]])
1240 xx
= xlist
[x
* 2 + 1]
1242 [[xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-3] +
1244 myvertex
.extend([[xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1245 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
]])
1246 myvertex
.extend([[0, -k3
+ zz
, zlist
[-1] - k
- z
- f
], [0, k3
+ zz
, zlist
[-1] - k
- z
- f
]])
1247 xx
= xlist
[x
* 2 + 2]
1248 myvertex
.extend([[xx
- k4
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1249 [xx
- k4
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
]])
1251 [[xx
- k4
- k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
- k4
- k2
, k3
+ zz
, zlist
[-3] +
1253 myfaces
.extend([[n
+ 8, n
+ 6, n
+ 4, n
+ 2, n
+ 0], [n
+ 1, n
+ 3, n
+ 5, n
+ 7, n
+ 9]])
1255 xx
= xlist
[x
* 2 + 1]
1257 [[xx
, -k3
, zlist
[-3]], [xx
+ k4
, -k3
, zlist
[-3] + k4
], [xx
+ k4
, k3
, zlist
[-3] + k4
],
1258 [xx
, k3
, zlist
[-3]]])
1260 [[xx
, -k3
, zlist
[-1] + xx
* h1
- z
], [xx
+ k4
, -k3
, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
],
1261 [xx
+ k4
, k3
, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
], [xx
, k3
, zlist
[-1] + xx
* h1
- z
]])
1263 [[0, -k3
, zlist
[-1] - z
], [0, -k3
, zlist
[-1] - z
- f
], [0, k3
, zlist
[-1] - z
- f
],
1264 [0, k3
, zlist
[-1] - z
]])
1265 xx
= xlist
[x
* 2 + 2]
1267 [[xx
, -k3
, zlist
[-1] - xx
* h1
- z
], [xx
- k4
, -k3
, zlist
[-1] - (xx
- k4
) * h1
- z
- f
],
1268 [xx
- k4
, k3
, zlist
[-1] - (xx
- k4
) * h1
- z
- f
], [xx
, k3
, zlist
[-1] - xx
* h1
- z
]])
1270 [[xx
, -k3
, zlist
[-3]], [xx
- k4
, -k3
, zlist
[-3] + k4
], [xx
- k4
, k3
, zlist
[-3] + k4
],
1271 [xx
, k3
, zlist
[-3]]])
1273 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1274 [n
- 18, n
- 17, n
- 13, n
- 14]])
1275 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1276 [n
- 14, n
- 13, n
- 9, n
- 10]])
1278 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5,
1281 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2]])
1282 myfaces
.extend([[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1283 [n
- 2, n
- 1, n
- 17, n
- 18]])
1284 xx
= xlist
[x
* 2 + 1]
1285 myvertex
.extend([[xx
+ k4
, -0.005, zlist
[-3] + k4
], [xx
+ k4
, 0.005, zlist
[-3] + k4
]])
1286 myvertex
.extend([[xx
+ k4
, -0.005, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
],
1287 [xx
+ k4
, 0.005, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
]])
1288 myvertex
.extend([[0, -0.005, zlist
[-1] - z
- f
], [0, 0.005, zlist
[-1] - z
- f
]])
1289 xx
= xlist
[x
* 2 + 2]
1290 myvertex
.extend([[xx
- k4
, -0.005, zlist
[-1] - (xx
- k4
) * h1
- z
- f
],
1291 [xx
- k4
, 0.005, zlist
[-1] - (xx
- k4
) * h1
- z
- f
]])
1292 myvertex
.extend([[xx
- k4
, -0.005, zlist
[-3] + k4
], [xx
- k4
, 0.005, zlist
[-3] + k4
]])
1293 myfaces
.extend([[n
+ 8, n
+ 6, n
+ 4, n
+ 2, n
+ 0], [n
+ 1, n
+ 3, n
+ 5, n
+ 7, n
+ 9]])
1295 cam
.extend([m
- 1, m
- 2])
1297 [m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11, m
- 12, m
- 13,
1304 mdv
= (op
.mr3
/ 200) + mrg
1305 msv
= -(mdv
+ (op
.mr4
/ 100))
1306 myvertex
.extend([[-u
, mdv
, 0], [u
, mdv
, 0], [-u
, msv
, 0], [u
, msv
, 0], [-u
, mdv
, mrh
], [u
, mdv
, mrh
],
1310 myfaces
.extend([[n
- 1, n
- 2, n
- 4, n
- 3], [n
- 3, n
- 4, n
- 8, n
- 7], [n
- 6, n
- 5, n
- 7, n
- 8],
1311 [n
- 2, n
- 1, n
- 5, n
- 6], [n
- 4, n
- 2, n
- 6, n
- 8], [n
- 5, n
- 1, n
- 3, n
- 7]])
1313 mer
.extend([n
- 1, n
- 2, n
- 3, n
- 4, n
- 5, n
- 6])
1315 return True, ftl
, cam
, mer
, sm
1317 return False, None, None, None, None
1320 # ------------------------------------
1321 # Get highest points of the panel
1322 # ------------------------------------
1323 def get_high_points(selobject
, width
, tip
):
1324 obverts
= selobject
.data
.vertices
1329 # --------------------------
1330 # Recover all vertex
1331 # --------------------------
1332 for vertex
in obverts
:
1333 if vertex
.co
[0] == -width
/ 2:
1334 if vertex
.co
[2] >= top_a
:
1335 top_a
= vertex
.co
[2]
1336 if vertex
.co
[0] == width
/ 2:
1337 if vertex
.co
[2] >= top_b
:
1338 top_b
= vertex
.co
[2]
1341 if vertex
.co
[2] >= top_c
:
1342 top_c
= vertex
.co
[2]
1344 if vertex
.co
[0] == 0 and vertex
.co
[2] >= top_c
:
1345 top_c
= vertex
.co
[2]
1347 return top_a
, top_b
, top_c
1350 # ---------------------------------------------------------
1352 # ---------------------------------------------------------
1355 def __init__(self
, x
, y
):
1360 # ---------------------------------------------------------
1361 # Get angle between two vectors
1362 # ---------------------------------------------------------
1363 def get_angle(p1
, p2
):
1364 v1
= Vector((p1
[0], 0.0, p1
[1]))
1365 v2
= Vector((p2
[0], 0.0, p2
[1]))
1371 # ---------------------------------------------------------
1372 # Get center of circle base on 3 points
1378 # x, y: center position
1381 # ---------------------------------------------------------
1382 def get_circle_center(a
, b
, c
):
1384 # line between a and b: s1 + k * d1
1385 s1
= Cpoint((a
.x
+ b
.x
) / 2.0, (a
.y
+ b
.y
) / 2.0)
1386 d1
= Cpoint(b
.y
- a
.y
, a
.x
- b
.x
)
1387 # line between a and c: s2 + k * d2
1388 s2
= Cpoint((a
.x
+ c
.x
) / 2.0, (a
.y
+ c
.y
) / 2.0)
1389 d2
= Cpoint(c
.y
- a
.y
, a
.x
- c
.x
)
1390 # intersection of both lines:
1391 l
= d1
.x
* (s2
.y
- s1
.y
) - d1
.y
* (s2
.x
- s1
.x
)
1392 l
/= d2
.x
* d1
.y
- d2
.y
* d1
.x
1393 center
= Cpoint(s2
.x
+ l
* d2
.x
, s2
.y
+ l
* d2
.y
)
1396 radio
= sqrt(dx
* dx
+ dy
* dy
)
1399 v1
= (a
.x
- center
.x
, a
.y
- center
.y
)
1400 v2
= (b
.x
- center
.x
, b
.y
- center
.y
)
1401 ang
= get_angle(v1
, v2
)
1402 return center
, radio
, ang
1403 except ZeroDivisionError:
1404 return Cpoint(0, 0), 1, 1
1407 # -----------------------------------------
1411 # mp: limit z in med point
1415 # -----------------------------------------
1416 def get_limits(myobject
):
1417 verts
= myobject
.data
.vertices
1445 if v
.co
[2] > lt
and v
.co
[0] == lb
:
1447 if v
.co
[2] > rt
and v
.co
[0] == rb
:
1450 return lb
, lt
, rb
, rt
, mp
, lo
, my
, top
1453 # ------------------------------------------
1454 # Create control box for panels
1456 # ------------------------------------------
1457 def create_ctrl_box(parentobj
, objname
):
1462 op
= o
.WindowPanelGenerator
[0]
1464 lb
, lt
, rb
, rt
, mp
, lo
, my
, top
= get_limits(o
)
1466 # -----------------------------
1467 # Flat, Triangle and inclined
1468 # -----------------------------
1469 if op
.UST
== "1" or op
.UST
== "3" or op
.UST
== "4":
1471 myvertex
.extend([(lb
, ypos
, lo
), (lb
, ypos
, lt
), (rb
, ypos
, rt
), (rb
, ypos
, lo
)])
1472 myvertex
.extend([(lb
, -ypos
, lo
), (lb
, -ypos
, lt
), (rb
, -ypos
, rt
), (rb
, -ypos
, lo
)])
1473 myfaces
.extend([(0, 4, 5, 1), (3, 2, 6, 7), (0, 1, 2, 3), (4, 7, 6, 5), (1, 5, 6, 2), (0, 3, 7, 4)])
1475 myvertex
.extend([(lb
, ypos
, lo
), (lb
, ypos
, lt
), (0, ypos
, mp
), (rb
, ypos
, rt
), (rb
, ypos
, lo
)])
1476 myvertex
.extend([(lb
, -ypos
, lo
), (lb
, -ypos
, lt
), (0, -ypos
, mp
), (rb
, -ypos
, rt
), (rb
, -ypos
, lo
)])
1477 myfaces
.extend([(0, 5, 6, 1), (4, 3, 8, 9), (0, 1, 2, 3, 4), (9, 8, 7, 6, 5), (1, 6, 7, 2), (2, 7, 8, 3),
1479 # -----------------------------
1481 # -----------------------------
1483 center
, r
, ang
= get_circle_center(Cpoint(lb
, lt
), Cpoint(0, top
), Cpoint(rb
, rt
))
1489 arc
= ((pi
/ 2) + ang
) - ((pi
/ 2) - ang
)
1493 myvertex
.extend([(lb
, ypos
, lt
), (lb
, -ypos
, lt
)])
1494 for x
in range(0, sg
):
1495 myvertex
.extend([(r
* cos(a
), ypos
, r
* sin(a
) + cz
),
1496 (r
* cos(a
), -ypos
, r
* sin(a
) + cz
)])
1500 myvertex
.extend([(rb
, ypos
, rt
), (rb
, -ypos
, rt
)])
1504 for x
in range(0, nf
- 2, 2):
1505 myfaces
.extend([(v
, v
+ 1, v
+ 3, v
+ 2)])
1509 myvertex
.extend([(lb
, ypos
, lo
), (lb
, -ypos
, lo
)])
1510 myvertex
.extend([(rb
, ypos
, lo
), (rb
, -ypos
, lo
)])
1513 myfaces
.extend([(0, nf2
- 4, nf2
- 3, 1)])
1514 myfaces
.extend([(nf
- 2, nf
- 1, nf2
- 1, nf2
- 2)])
1517 myfaces
.extend([(nf2
- 4, nf2
- 2, nf2
- 1, nf2
- 3)])
1519 # --------------------------
1521 # --------------------------
1522 myfaces
= check_mesh_errors(myvertex
, myfaces
)
1523 mymesh
= bpy
.data
.meshes
.new(objname
)
1524 myobj
= bpy
.data
.objects
.new(objname
, mymesh
)
1526 myobj
.location
= bpy
.context
.scene
.cursor
.location
1527 bpy
.context
.collection
.objects
.link(myobj
)
1529 mymesh
.from_pydata(myvertex
, [], myfaces
)
1530 mymesh
.update(calc_edges
=True)
1535 # ------------------------------------------------------------------
1536 # Define property group class to create or modify
1537 # ------------------------------------------------------------------
1538 class GeneralPanelProperties(PropertyGroup
):
1541 ('1', "WINDOW 250X200", ""),
1542 ('2', "WINDOW 200X200", ""),
1543 ('3', "WINDOW 180X200", ""),
1544 ('4', "WINDOW 180X160", ""),
1545 ('5', "WINDOW 160X160", ""),
1546 ('6', "WINDOW 50X50", ""),
1547 ('7', "DOOR 80X250", ""),
1548 ('8', "DOOR 80X230", ""),
1551 description
='Predefined types',
1552 update
=update_using_default
,
1556 ('1', "WINDOW 250X200", ""),
1557 ('2', "WINDOW 200X200", ""),
1558 ('3', "WINDOW 180X200", ""),
1559 ('4', "WINDOW 180X160", ""),
1560 ('5', "WINDOW 160X160", ""),
1561 ('6', "WINDOW 50X50", ""),
1562 ('7', "DOOR 80X250", ""),
1563 ('8', "DOOR 80X230", ""),
1566 description
='Predefined types',
1567 update
=update_using_default
,
1570 name
='H Count', min=1, max=8, default
=3,
1571 description
='Horizontal Panes',
1572 update
=update_window
,
1575 name
='V Count', min=1, max=5, default
=1,
1576 description
='Vertical Panes',
1577 update
=update_window
,
1580 name
='Outer Frame', min=2, max=50, default
=5,
1581 description
='Outside Frame Thickness',
1582 update
=update_window
,
1585 name
='Risers', min=2, max=50, default
=5,
1586 description
='Risers Width',
1587 update
=update_window
,
1590 name
='Inner Frame', min=1, max=20, default
=2,
1591 description
='Inside Frame Thickness',
1592 update
=update_window
,
1595 mr
: BoolProperty(name
='Sill', default
=True, description
='Window Sill', update
=update_window
)
1596 mr1
: IntProperty(name
='', min=1, max=20, default
=4, description
='Height', update
=update_window
)
1597 mr2
: IntProperty(name
='', min=0, max=20, default
=4, description
='First Depth', update
=update_window
)
1598 mr3
: IntProperty(name
='', min=1, max=50, default
=20, description
='Second Depth', update
=update_window
)
1599 mr4
: IntProperty(name
='', min=0, max=50, default
=0, description
='Extrusion for Jamb',
1600 update
=update_window
)
1606 ('3', "Plastic", ""),
1610 description
='Material to use',
1611 update
=update_window
,
1617 ('3', "Plastic", ""),
1621 description
='Material to use',
1622 update
=update_window
,
1627 min=0, max=360, default
=0, precision
=1,
1628 description
='Panel rotation',
1629 update
=update_window
,
1636 ('3', "Inclined", ""),
1637 ('4', "Triangle", ""),
1639 name
="Top", default
='1',
1640 description
='Type of window upper section',
1641 update
=update_window
,
1645 ('1', "Difference", ""),
1646 ('2', "Radius", ""),
1650 update
=update_window
,
1654 ('1', "Difference", ""),
1655 ('2', "Incline %", ""),
1656 ('3', "Incline Angle", ""),
1659 default
='1', update
=update_window
,
1662 VL1
: IntProperty(name
='', min=-10000, max=10000, default
=30, update
=update_window
) # Fark
1663 VL2
: IntProperty(name
='', min=1, max=10000, default
=30, update
=update_window
) # Cap
1664 VL3
: IntProperty(name
='', min=-100, max=100, default
=30, update
=update_window
) # Egim %
1665 VL4
: IntProperty(name
='', min=-45, max=45, default
=30, update
=update_window
) # Egim Aci
1667 res
: IntProperty(name
='Resolution', min=2, max=360, default
=36, update
=update_window
) # Res
1669 gnx0
: IntProperty(name
='', min=1, max=300, default
=60, description
='1st Window Width',
1670 update
=update_window
)
1671 gnx1
: IntProperty(name
='', min=1, max=300, default
=110, description
='2nd Window Width',
1672 update
=update_window
)
1673 gnx2
: IntProperty(name
='', min=1, max=300, default
=60, description
='3rd Window Width',
1674 update
=update_window
)
1675 gnx3
: IntProperty(name
='', min=1, max=300, default
=60, description
='4th Window Width',
1676 update
=update_window
)
1677 gnx4
: IntProperty(name
='', min=1, max=300, default
=60, description
='5th Window Width',
1678 update
=update_window
)
1679 gnx5
: IntProperty(name
='', min=1, max=300, default
=60, description
='6th Window Width',
1680 update
=update_window
)
1681 gnx6
: IntProperty(name
='', min=1, max=300, default
=60, description
='7th Window Width',
1682 update
=update_window
)
1683 gnx7
: IntProperty(name
='', min=1, max=300, default
=60, description
='8th Window Width',
1684 update
=update_window
)
1686 gny0
: IntProperty(name
='', min=1, max=300, default
=190, description
='1st Row Height',
1687 update
=update_window
)
1688 gny1
: IntProperty(name
='', min=1, max=300, default
=45, description
='2nd Row Height',
1689 update
=update_window
)
1690 gny2
: IntProperty(name
='', min=1, max=300, default
=45, description
='3rd Row Height',
1691 update
=update_window
)
1692 gny3
: IntProperty(name
='', min=1, max=300, default
=45, description
='4th Row Height',
1693 update
=update_window
)
1694 gny4
: IntProperty(name
='', min=1, max=300, default
=45, description
='5th Row Height',
1695 update
=update_window
)
1697 k00
: BoolProperty(name
='', default
=True, update
=update_window
)
1698 k01
: BoolProperty(name
='', default
=False, update
=update_window
)
1699 k02
: BoolProperty(name
='', default
=True, update
=update_window
)
1700 k03
: BoolProperty(name
='', default
=False, update
=update_window
)
1701 k04
: BoolProperty(name
='', default
=False, update
=update_window
)
1702 k05
: BoolProperty(name
='', default
=False, update
=update_window
)
1703 k06
: BoolProperty(name
='', default
=False, update
=update_window
)
1704 k07
: BoolProperty(name
='', default
=False, update
=update_window
)
1706 k10
: BoolProperty(name
='', default
=False, update
=update_window
)
1707 k11
: BoolProperty(name
='', default
=False, update
=update_window
)
1708 k12
: BoolProperty(name
='', default
=False, update
=update_window
)
1709 k13
: BoolProperty(name
='', default
=False, update
=update_window
)
1710 k14
: BoolProperty(name
='', default
=False, update
=update_window
)
1711 k15
: BoolProperty(name
='', default
=False, update
=update_window
)
1712 k16
: BoolProperty(name
='', default
=False, update
=update_window
)
1713 k17
: BoolProperty(name
='', default
=False, update
=update_window
)
1715 k20
: BoolProperty(name
='', default
=False, update
=update_window
)
1716 k21
: BoolProperty(name
='', default
=False, update
=update_window
)
1717 k22
: BoolProperty(name
='', default
=False, update
=update_window
)
1718 k23
: BoolProperty(name
='', default
=False, update
=update_window
)
1719 k24
: BoolProperty(name
='', default
=False, update
=update_window
)
1720 k25
: BoolProperty(name
='', default
=False, update
=update_window
)
1721 k26
: BoolProperty(name
='', default
=False, update
=update_window
)
1722 k27
: BoolProperty(name
='', default
=False, update
=update_window
)
1724 k30
: BoolProperty(name
='', default
=False, update
=update_window
)
1725 k31
: BoolProperty(name
='', default
=False, update
=update_window
)
1726 k32
: BoolProperty(name
='', default
=False, update
=update_window
)
1727 k33
: BoolProperty(name
='', default
=False, update
=update_window
)
1728 k34
: BoolProperty(name
='', default
=False, update
=update_window
)
1729 k35
: BoolProperty(name
='', default
=False, update
=update_window
)
1730 k36
: BoolProperty(name
='', default
=False, update
=update_window
)
1731 k37
: BoolProperty(name
='', default
=False, update
=update_window
)
1733 k40
: BoolProperty(name
='', default
=False, update
=update_window
)
1734 k41
: BoolProperty(name
='', default
=False, update
=update_window
)
1735 k42
: BoolProperty(name
='', default
=False, update
=update_window
)
1736 k43
: BoolProperty(name
='', default
=False, update
=update_window
)
1737 k44
: BoolProperty(name
='', default
=False, update
=update_window
)
1738 k45
: BoolProperty(name
='', default
=False, update
=update_window
)
1739 k46
: BoolProperty(name
='', default
=False, update
=update_window
)
1740 k47
: BoolProperty(name
='', default
=False, update
=update_window
)
1741 # opengl internal data
1742 glpoint_a
: FloatVectorProperty(
1744 description
="Hidden property for opengl",
1747 glpoint_b
: FloatVectorProperty(
1749 description
="Hidden property for opengl",
1752 glpoint_c
: FloatVectorProperty(
1754 description
="Hidden property for opengl",
1757 glpoint_d
: FloatVectorProperty(
1759 description
="Hidden property for opengl",
1764 bpy
.utils
.register_class(GeneralPanelProperties
)
1765 Object
.WindowPanelGenerator
= CollectionProperty(type=GeneralPanelProperties
)
1768 # ------------------------------------------------------------------
1769 # Define panel class to modify myobjects.
1770 # ------------------------------------------------------------------
1771 class ARCHIMESH_PT_WindowEdit(Panel
):
1772 bl_idname
= "ARCHIMESH_PT_window_edit"
1773 bl_label
= "Window Panel"
1774 bl_space_type
= 'VIEW_3D'
1775 bl_region_type
= 'UI'
1776 bl_category
= 'Create'
1778 # -----------------------------------------------------
1780 # -----------------------------------------------------
1782 def poll(cls
, context
):
1786 if 'WindowPanelGenerator' not in o
:
1791 # -----------------------------------------------------
1792 # Draw (create UI interface)
1793 # -----------------------------------------------------
1794 def draw(self
, context
):
1796 # If the selected object didn't be created with the group 'WindowPanelGenerator', this panel is not created.
1797 # noinspection PyBroadException
1799 if 'WindowPanelGenerator' not in o
:
1804 layout
= self
.layout
1805 if bpy
.context
.mode
== 'EDIT_MESH':
1806 layout
.label(text
='Warning: Operator does not work in edit mode.', icon
='ERROR')
1808 myobject
= o
.WindowPanelGenerator
[0]
1809 layout
.prop(myobject
, 'prs')
1811 box
.prop(myobject
, 'gen')
1812 box
.prop(myobject
, 'yuk')
1813 box
.prop(myobject
, 'kl1')
1814 box
.prop(myobject
, 'kl2')
1815 box
.prop(myobject
, 'fk')
1816 box
.prop(myobject
, 'r') # rotation
1818 box
.prop(myobject
, 'mr')
1819 if myobject
.mr
is True:
1821 row
.prop(myobject
, 'mr1')
1822 row
.prop(myobject
, 'mr2')
1824 row
.prop(myobject
, 'mr3')
1825 row
.prop(myobject
, 'mr4')
1827 row
.label(text
='Frame')
1828 row
.label(text
='Inner Frame')
1830 row
.prop(myobject
, 'mt1')
1831 row
.prop(myobject
, 'mt2')
1833 box
.prop(myobject
, 'UST')
1834 if myobject
.UST
== '2':
1836 row
.prop(myobject
, 'DT2')
1837 if myobject
.DT2
== '1':
1838 row
.prop(myobject
, 'VL1')
1839 elif myobject
.DT2
== '2':
1840 row
.prop(myobject
, 'VL2')
1841 box
.prop(myobject
, 'res')
1842 elif myobject
.UST
== '3':
1844 row
.prop(myobject
, 'DT3')
1845 if myobject
.DT3
== '1':
1846 row
.prop(myobject
, 'VL1')
1847 elif myobject
.DT3
== '2':
1848 row
.prop(myobject
, 'VL3')
1849 elif myobject
.DT3
== '3':
1850 row
.prop(myobject
, 'VL4')
1851 elif myobject
.UST
== '4':
1853 row
.prop(myobject
, 'DT3')
1854 if myobject
.DT3
== '1':
1855 row
.prop(myobject
, 'VL1')
1856 elif myobject
.DT3
== '2':
1857 row
.prop(myobject
, 'VL3')
1858 elif myobject
.DT3
== '3':
1859 row
.prop(myobject
, 'VL4')
1861 for i
in range(0, myobject
.gen
):
1862 row
.prop(myobject
, 'gnx' + str(i
))
1863 for j
in range(0, myobject
.yuk
):
1865 row
.prop(myobject
, 'gny' + str(myobject
.yuk
- j
- 1))
1866 for i
in range(0, myobject
.gen
):
1867 row
.prop(myobject
, 'k' + str(myobject
.yuk
- j
- 1) + str(i
))