1 # SPDX-License-Identifier: GPL-2.0-or-later
3 # ----------------------------------------------------------
4 # Main panel for windows
5 # Author: Antonio Vazquez (antonioya)
7 # This code is base on the windows generator add-on created by SayProduction
8 # and has been adapted to continuous editing and cycles materials
10 # ----------------------------------------------------------
11 # noinspection PyUnresolvedReferences
13 from math
import cos
, sin
, radians
, sqrt
, pi
14 from mathutils
import Vector
15 from bpy
.types
import Operator
, PropertyGroup
, Object
, Panel
16 from bpy
.props
import StringProperty
, FloatProperty
, BoolProperty
, IntProperty
, FloatVectorProperty
, \
17 CollectionProperty
, EnumProperty
18 from .achm_tools
import *
21 def fitil(vr
, fc
, px
, pz
, x
, y
, z
, zz
, xx
):
23 vr
.extend([[px
[x
] + xx
, -z
+ zz
, pz
[y
] + xx
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
] + xx
+ k3
],
24 [px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
] + xx
, z
+ zz
, pz
[y
] + xx
]])
25 vr
.extend([[px
[x
] + xx
, -z
+ zz
, pz
[y
+ 1] - xx
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
26 [px
[x
] + xx
+ k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
] + xx
, z
+ zz
, pz
[y
+ 1] - xx
]])
27 vr
.extend([[px
[x
+ 1] - xx
, -z
+ zz
, pz
[y
+ 1] - xx
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
28 [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
+ 1] - xx
, z
+ zz
, pz
[y
+ 1] - xx
]])
29 vr
.extend([[px
[x
+ 1] - xx
, -z
+ zz
, pz
[y
] + xx
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
] + xx
+ k3
],
30 [px
[x
+ 1] - xx
- k3
, z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
+ 1] - xx
, z
+ zz
, pz
[y
] + xx
]])
32 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]])
33 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]])
34 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]])
35 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]])
37 vr
.extend([[px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
] + xx
+ k3
], [px
[x
] + xx
+ k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
],
38 [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
+ 1] - xx
- k3
], [px
[x
+ 1] - xx
- k3
, -z
+ zz
, pz
[y
] + xx
+ k3
]])
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 fc
.extend([[n
+ 1, n
+ 0, n
+ 3, n
+ 2], [n
+ 4, n
+ 5, n
+ 6, n
+ 7]])
44 def kapak(vr
, fc
, px
, pz
, x
, y
, z
, zz
):
47 [[px
[x
], -z
+ zz
, pz
[y
]], [px
[x
] + k2
, -z
+ zz
, pz
[y
] + k2
], [px
[x
] + k2
, z
+ zz
, pz
[y
] + k2
],
48 [px
[x
], z
+ zz
, pz
[y
]]])
49 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
],
50 [px
[x
], z
+ zz
, pz
[y
+ 1]]])
52 [[px
[x
+ 1], -z
+ zz
, pz
[y
+ 1]], [px
[x
+ 1] - k2
, -z
+ zz
, pz
[y
+ 1] - k2
],
53 [px
[x
+ 1] - k2
, z
+ zz
, pz
[y
+ 1] - k2
],
54 [px
[x
+ 1], z
+ zz
, pz
[y
+ 1]]])
55 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
],
56 [px
[x
+ 1], z
+ zz
, pz
[y
]]])
58 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],
59 [n
- 13, n
- 16, n
- 12, n
- 9]])
60 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],
61 [n
- 9, n
- 12, n
- 8, n
- 5]])
62 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],
63 [n
- 5, n
- 8, n
- 4, n
- 1]])
64 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],
65 [n
- 1, n
- 4, n
- 16, n
- 13]])
68 # -----------------------------------------
69 # Set default values for each window type
70 # -----------------------------------------
178 # ------------------------------------------------------------------
179 # Define operator class to create window panels
180 # ------------------------------------------------------------------
181 class ARCHIMESH_PT_Win(Operator
):
182 bl_idname
= "mesh.archimesh_winpanel"
183 bl_label
= "Panel Window"
184 bl_description
= "Generate editable flat windows"
186 bl_options
= {'REGISTER', 'UNDO'}
188 # -----------------------------------------------------
189 # Draw (create UI interface)
190 # -----------------------------------------------------
191 # noinspection PyUnusedLocal
192 def draw(self
, context
):
195 row
.label(text
="Use Properties panel (N) to define parms", icon
='INFO')
197 # -----------------------------------------------------
199 # -----------------------------------------------------
200 # noinspection PyUnusedLocal
201 def execute(self
, context
):
202 if bpy
.context
.mode
== "OBJECT":
206 self
.report({'WARNING'}, "Archimesh: Option only valid in Object mode")
210 # ------------------------------------------------------------------------------
212 # ------------------------------------------------------------------------------
214 # deselect all objects
215 for o
in bpy
.data
.objects
:
218 window_mesh
= bpy
.data
.meshes
.new("Window")
219 window_object
= bpy
.data
.objects
.new("Window", window_mesh
)
221 # Link object to scene
222 bpy
.context
.collection
.objects
.link(window_object
)
223 window_object
.WindowPanelGenerator
.add()
224 window_object
.location
= bpy
.context
.scene
.cursor
.location
227 do_mesh(window_object
, window_mesh
)
230 for o
in bpy
.data
.objects
:
231 if o
.select_get() is True and o
.name
!= window_object
.name
:
234 # Select, and activate object
235 window_object
.select_set(True)
236 bpy
.context
.view_layer
.objects
.active
= window_object
238 do_ctrl_box(window_object
)
240 window_object
.select_set(True)
241 bpy
.context
.view_layer
.objects
.active
= window_object
244 # ------------------------------------------------------------------------------
245 # Update mesh of the window
246 # ------------------------------------------------------------------------------
247 # noinspection PyUnusedLocal
248 def update_window(self
, context
):
249 # When update, the active object is the main object.
250 o
= bpy
.context
.active_object
252 oldname
= o
.data
.name
253 # Now deselect that object to not delete it.
255 # # and create a new mesh for the object:
256 # tmp_mesh = bpy.data.meshes.new("temp")
257 # deselect all objects
258 for obj
in bpy
.data
.objects
:
259 obj
.select_set(False)
260 # ---------------------------------
261 # Clear Parent objects (autohole)
262 # ---------------------------------
264 if myparent
is not None:
265 ploc
= myparent
.location
268 if myparent
is not None:
271 # remove_children(parent)
272 for child
in myparent
.children
:
273 # noinspection PyBroadException
276 child
.hide_viewport
= False # must be visible to avoid bug
277 child
.hide_render
= False # must be visible to avoid bug
279 child
.select_set(True)
280 bpy
.ops
.object.delete()
281 bpy
.data
.meshes
.remove(old
)
285 myparent
.select_set(True)
286 bpy
.ops
.object.delete()
288 # Finally create all that again
289 tmp_mesh
= bpy
.data
.meshes
.new("temp")
290 do_mesh(o
, tmp_mesh
, True)
292 # Remove data (mesh of active object),
293 if oldmesh
.users
== 0:
294 bpy
.data
.meshes
.remove(oldmesh
)
296 oldmesh
.name
= "invalid"
298 tmp_mesh
.name
= oldname
300 for ob
in bpy
.data
.objects
:
301 if ob
.select_get() is True and ob
.name
!= o
.name
:
303 # and select, and activate, the object.
305 bpy
.context
.view_layer
.objects
.active
= o
311 bpy
.context
.view_layer
.objects
.active
= o
314 # ------------------------------------------------------------------------------
316 # For object, it only shapes mesh
317 # ------------------------------------------------------------------------------
318 # noinspection PyUnusedLocal
319 def do_mesh(myobject
, tmp_mesh
, update
=False):
320 # noinspection PyBroadException
322 op
= myobject
.WindowPanelGenerator
[0]
323 # Create only mesh, because the object was created before.
324 r
= generate_window_object(op
, tmp_mesh
)
329 remove_doubles(myobject
)
330 set_normals(myobject
)
334 totx
= myobject
.dimensions
.x
335 op
.glpoint_a
= (-totx
/ 2, 0, 0)
336 top_a
, top_b
, top_c
= get_high_points(myobject
, totx
, op
.UST
)
337 op
.glpoint_b
= (-totx
/ 2, 0, top_a
)
338 op
.glpoint_c
= (totx
/ 2, 0, top_b
)
339 op
.glpoint_d
= (0, 0, top_c
)
342 myobject
.lock_location
= (True, True, True)
343 myobject
.lock_rotation
= (True, True, True)
349 # ------------------------------------------------------------------------------
352 # ------------------------------------------------------------------------------
353 # noinspection PyUnusedLocal
354 def do_ctrl_box(myobject
):
355 op
= myobject
.WindowPanelGenerator
[0]
356 # -------------------------
357 # Create empty and parent
358 # -------------------------
359 bpy
.ops
.object.empty_add(type='PLAIN_AXES')
360 myempty
= bpy
.data
.objects
[bpy
.context
.active_object
.name
]
361 myempty
.location
= myobject
.location
363 myempty
.name
= "Window_Group"
364 parentobject(myempty
, myobject
)
365 myobject
["archimesh.hole_enable"] = True
367 myempty
.rotation_euler
.z
= radians(op
.r
)
368 # Create control box to open wall holes
369 myctrl
= create_ctrl_box(myobject
, "CTRL_Hole")
371 # Add custom property to detect Controller
372 myctrl
["archimesh.ctrl_hole"] = True
375 myctrl
.parent
= myempty
376 myctrl
.location
.x
= 0
377 myctrl
.location
.y
= 0
378 myctrl
.location
.z
= 0
379 myctrl
.display_type
= 'WIRE'
380 myctrl
.hide_viewport
= False
381 myctrl
.hide_render
= True
382 if bpy
.context
.scene
.render
.engine
in {'CYCLES', 'BLENDER_EEVEE'}:
383 myctrl
.visible_camera
= False
384 myctrl
.visible_diffuse
= False
385 myctrl
.visible_glossy
= False
386 myctrl
.visible_transmission
= False
387 myctrl
.visible_shadow
= False
389 mat
= create_transparent_material("hidden_material", False)
390 set_material(myctrl
, mat
)
393 # ------------------------------------------------------------------------------
394 # Update the parameters using a default value
395 # ------------------------------------------------------------------------------
396 # noinspection PyUnusedLocal
397 def update_using_default(self
, context
):
399 myobject
= o
.WindowPanelGenerator
[0]
400 if myobject
.son
!= myobject
.prs
:
401 set_defaults(myobject
)
402 myobject
.son
= myobject
.prs
405 # ------------------------------------------------------------------------------
406 # Generate window object
407 # ------------------------------------------------------------------------------
408 def generate_window_object(op
, mymesh
):
411 # noinspection PyBroadException
413 rst
, ft1
, cam
, mer
, sm
= generate_vertex_data(op
, myvertex
, mfaces
)
417 mymesh
.from_pydata(myvertex
, [], mfaces
)
418 # Uncomment for debug
419 # mymesh.validate(verbose=True)
422 mymesh
.materials
.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
424 mymesh
.materials
.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
426 mymesh
.materials
.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
428 mymesh
.materials
.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
430 mymesh
.materials
.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
432 mymesh
.materials
.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
434 mymesh
.materials
.append(create_glass_material("Glass", False))
436 mymesh
.materials
.append(create_diffuse_material("Marble", False, 0.9, 0.8, 0.7, 0.9, 0.8, 0.7))
438 p
= len(mymesh
.polygons
)
441 mymesh
.polygons
[i
].material_index
= 1
444 mymesh
.polygons
[i
].material_index
= 2
447 mymesh
.polygons
[i
].material_index
= 3
450 mymesh
.polygons
[i
].use_smooth
= 1
452 mymesh
.update(calc_edges
=True)
459 # -----------------------------------------
460 # Generate vertex and faces data
461 # -----------------------------------------
462 def generate_vertex_data(op
, myvertex
, myfaces
):
463 # noinspection PyBroadException
477 xlist
= [0, round(u
, 2)]
480 xlist
.append(round(u
, 2))
482 xlist
.append(round(u
, 2))
485 xlist
.append(round(u
, 2))
487 xlist
.append(round(u
, 2))
490 xlist
.append(round(u
, 2))
492 xlist
.append(round(u
, 2))
495 xlist
.append(round(u
, 2))
497 xlist
.append(round(u
, 2))
500 xlist
.append(round(u
, 2))
502 xlist
.append(round(u
, 2))
505 xlist
.append(round(u
, 2))
507 xlist
.append(round(u
, 2))
510 xlist
.append(round(u
, 2))
512 xlist
.append(round(u
, 2))
515 xlist
.append(round(u
, 2))
517 xlist
.append(round(u
, 2))
519 xlist
[-1] = xlist
[-2] + k1
522 zlist
= [0, round(u
, 2)]
525 zlist
.append(round(u
, 2))
527 zlist
.append(round(u
, 2))
530 zlist
.append(round(u
, 2))
532 zlist
.append(round(u
, 2))
535 zlist
.append(round(u
, 2))
537 zlist
.append(round(u
, 2))
540 zlist
.append(round(u
, 2))
542 zlist
.append(round(u
, 2))
545 zlist
.append(round(u
, 2))
547 zlist
.append(round(u
, 2))
548 zlist
[-1] = zlist
[-2] + k1
551 for i
in range(0, len(xlist
)):
553 kx
= [[op
.k00
, op
.k10
, op
.k20
, op
.k30
, op
.k40
],
554 [op
.k01
, op
.k11
, op
.k21
, op
.k31
, op
.k41
],
555 [op
.k02
, op
.k12
, op
.k22
, op
.k32
, op
.k42
],
556 [op
.k03
, op
.k13
, op
.k23
, op
.k33
, op
.k43
],
557 [op
.k04
, op
.k14
, op
.k24
, op
.k34
, op
.k44
],
558 [op
.k05
, op
.k15
, op
.k25
, op
.k35
, op
.k45
],
559 [op
.k06
, op
.k16
, op
.k26
, op
.k36
, op
.k46
],
560 [op
.k07
, op
.k17
, op
.k27
, op
.k37
, op
.k47
]]
565 # -------------------------
567 # -------------------------
568 myvertex
.extend([[xlist
[0], -k1
/ 2, zlist
[0]], [xlist
[0], k1
/ 2, zlist
[0]]])
569 for x
in range(1, len(xlist
) - 1):
570 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[1]], [xlist
[x
], k1
/ 2, zlist
[1]]])
571 myvertex
.extend([[xlist
[-1], -k1
/ 2, zlist
[0]], [xlist
[-1], k1
/ 2, zlist
[0]]])
572 for z
in range(2, len(zlist
) - 2, 2):
573 for x
in range(0, len(xlist
)):
574 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
]], [xlist
[x
], k1
/ 2, zlist
[z
]]])
575 for x
in range(0, len(xlist
)):
576 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
+ 1]], [xlist
[x
], k1
/ 2, zlist
[z
+ 1]]])
578 myvertex
.extend([[xlist
[0], -k1
/ 2, zlist
[z
+ 1]], [xlist
[0], k1
/ 2, zlist
[z
+ 1]]])
580 ust
= [len(myvertex
) - 2, len(myvertex
) - 1]
581 for x
in range(1, len(xlist
) - 1):
582 myvertex
.extend([[xlist
[x
], -k1
/ 2, zlist
[z
]], [xlist
[x
], k1
/ 2, zlist
[z
]]])
583 alt
.extend([len(myvertex
) - 2, len(myvertex
) - 1])
584 myvertex
.extend([[xlist
[-1], -k1
/ 2, zlist
[z
+ 1]], [xlist
[-1], k1
/ 2, zlist
[z
+ 1]]])
585 son
= [len(myvertex
) - 2, len(myvertex
) - 1]
586 # -------------------------
588 # -------------------------
589 myfaces
.append([0, 1, 3 + mx
* 4, 2 + mx
* 4])
592 for i
in range(0, mx
* 4, 4):
593 myfaces
.append([i
+ 3, i
+ 2, i
+ 4, i
+ 5])
594 fb
.extend([i
+ 2, i
+ 4])
595 fr
.extend([i
+ 3, i
+ 5])
596 fr
.append(3 + mx
* 4)
597 fb
.append(2 + mx
* 4)
599 myfaces
.extend([fb
, fr
])
603 for z
in range(0, (my
- 1) * y
* 2, y
* 2):
604 myfaces
.extend([[z
+ y
+ 1, z
+ y
, z
+ y
+ 4 + mx
* 4, z
+ y
+ 5 + mx
* 4],
605 [z
+ y
+ v
, z
+ y
+ v
+ 1, z
+ y
+ v
+ 5 + mx
* 4, z
+ y
+ v
+ 4 + mx
* 4]])
606 for i
in range(0, mx
* 4 + 2, 2):
607 myfaces
.extend([[z
+ i
+ y
+ 0, z
+ i
+ y
+ 2, z
+ i
+ y
+ v
+ 4, z
+ i
+ y
+ v
+ 2],
608 [z
+ i
+ y
+ 3, z
+ i
+ y
+ 1, z
+ i
+ y
+ v
+ 3, z
+ i
+ y
+ v
+ 5]])
609 for i
in range(0, mx
* 4 - 3, 4):
610 myfaces
.extend([[z
+ i
+ y
+ 2, z
+ i
+ y
+ 3, z
+ i
+ y
+ 5, z
+ i
+ y
+ 4],
611 [z
+ i
+ y
+ v
+ 5, z
+ i
+ y
+ v
+ 4, z
+ i
+ y
+ v
+ 6,
614 for y
in range(0, my
):
615 z
= y
* (mx
* 4 + 4) * 2
616 for i
in range(0, mx
* 4 + 2, 4):
617 myfaces
.extend([[z
+ i
+ 1, z
+ i
+ 0, z
+ i
+ v
+ 2, z
+ i
+ v
+ 3],
618 [z
+ i
+ 3, z
+ i
+ 1, z
+ i
+ v
+ 3, z
+ i
+ v
+ 5],
619 [z
+ i
+ 2, z
+ i
+ 3, z
+ i
+ v
+ 5, z
+ i
+ v
+ 4],
620 [z
+ i
+ 0, z
+ i
+ 2, z
+ i
+ v
+ 4, z
+ i
+ v
+ 2]])
626 for y
in range(0, y1
):
627 for x
in range(0, mx
):
629 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
630 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
632 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
634 cam
.extend([m
- 1, m
- 2])
635 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])
636 # -----------------------------------------------------
637 if op
.UST
== '1': # Duz
638 myfaces
.append([ust
[1], ust
[0], son
[0], son
[1]])
639 for i
in range(0, mx
* 4, 4):
640 myfaces
.append([alt
[i
], alt
[i
+ 1], alt
[i
+ 3], alt
[i
+ 2]])
643 for i
in range(0, len(alt
) - 1, 2):
645 ar
.append(alt
[i
+ 1])
651 elif op
.UST
== '2': # Arch
666 h
= sqrt(u
** 2 + h1
** 2) / 2
668 c
= sqrt(h
** 2 + e
** 2)
675 t1
= sqrt(c
** 2 - u
** 2) + zlist
[-1] - c
679 myvertex
[ust
[0]][2] = t1
680 myvertex
[ust
[1]][2] = t1
681 myvertex
[son
[0]][2] = t1
682 myvertex
[son
[1]][2] = t1
684 myvertex
[i
][2] = sqrt(r
** 2 - myvertex
[i
][0] ** 2) + z
688 for i
in range(0, res
):
692 myvertex
.append([x
, -k1
/ 2, sin(a
) * c
+ z
])
693 on
.append(len(myvertex
) - 1)
696 on
.extend([ust
[0], alt
[0]])
700 for i
in range(0, len(alt
) - 2, 4):
701 x1
= myvertex
[alt
[i
+ 0]][0]
702 x2
= myvertex
[alt
[i
+ 2]][0]
703 on
.append(alt
[i
+ 0])
704 ar
.append(alt
[i
+ 1])
707 for j
in range(0, res
):
711 myvertex
.extend([[x
, -k1
/ 2, sin(a
) * r
+ z
], [x
, k1
/ 2, sin(a
) * r
+ z
]])
712 on
.append(len(myvertex
) - 2)
713 ar
.append(len(myvertex
) - 1)
714 t1
.append(len(myvertex
) - 2)
715 t2
.append(len(myvertex
) - 1)
716 on
.append(alt
[i
+ 2])
717 ar
.append(alt
[i
+ 3])
718 t1
.append(alt
[i
+ 2])
719 t2
.append(alt
[i
+ 3])
724 for i
in range(0, res
):
728 myvertex
.append([x
, k1
/ 2, sin(a
) * c
+ z
])
729 ar
.append(len(myvertex
) - 1)
730 u2
.append(len(myvertex
) - 1)
734 myfaces
.extend([on
, ar
])
735 for i
in range(0, len(u1
) - 1):
736 myfaces
.append([u1
[i
+ 1], u1
[i
], u2
[i
], u2
[i
+ 1]])
737 sm
.append(len(myfaces
) - 1)
738 for a
in range(0, mx
):
739 for i
in range(0, len(d1
[a
]) - 1):
740 myfaces
.append([d1
[a
][i
+ 1], d1
[a
][i
], d2
[a
][i
], d2
[a
][i
+ 1]])
741 sm
.append(len(myfaces
) - 1)
743 for x
in range(0, mx
):
745 fr
= (k1
+ k2
) * 0.5 - 0.01
750 x1
= xlist
[x
* 2 + 1]
751 x2
= xlist
[x
* 2 + 2]
752 myvertex
.extend([[x2
, fr
- k2
/ 2, z
+ 1], [x2
- k2
, fr
- k2
/ 2, z
+ 1],
753 [x2
- k2
, fr
+ k2
/ 2, z
+ 1],
754 [x2
, fr
+ k2
/ 2, z
+ 1]])
755 myvertex
.extend([[x2
, fr
- k2
/ 2, zlist
[-3]], [x2
- k2
, fr
- k2
/ 2, zlist
[-3] + k2
],
756 [x2
- k2
, fr
+ k2
/ 2,
758 [x2
, fr
+ k2
/ 2, zlist
[-3]]])
759 myvertex
.extend([[x1
, fr
- k2
/ 2, zlist
[-3]], [x1
+ k2
, fr
- k2
/ 2, zlist
[-3] + k2
],
760 [x1
+ k2
, fr
+ k2
/ 2,
762 [x1
, fr
+ k2
/ 2, zlist
[-3]]])
763 myvertex
.extend([[x1
, fr
- k2
/ 2, z
+ 1], [x1
+ k2
, fr
- k2
/ 2, z
+ 1],
764 [x1
+ k2
, fr
+ k2
/ 2, z
+ 1],
765 [x1
, fr
+ k2
/ 2, z
+ 1]])
768 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
769 [n
- 14, n
- 13, n
- 9, n
- 10], [n
- 13, n
- 16, n
- 12, n
- 9]])
771 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6],
772 [n
- 9, n
- 12, n
- 8, n
- 5]])
774 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2],
775 [n
- 5, n
- 8, n
- 4, n
- 1]])
776 alt
= [n
- 16, n
- 15, n
- 14, n
- 13, n
- 4, n
- 3, n
- 2, n
- 1]
777 myvertex
[alt
[0]][2] = sqrt(r
** 2 - myvertex
[alt
[0]][0] ** 2) + z
778 myvertex
[alt
[1]][2] = sqrt(k
** 2 - myvertex
[alt
[1]][0] ** 2) + z
779 myvertex
[alt
[2]][2] = sqrt(k
** 2 - myvertex
[alt
[2]][0] ** 2) + z
780 myvertex
[alt
[3]][2] = sqrt(r
** 2 - myvertex
[alt
[3]][0] ** 2) + z
781 myvertex
[alt
[4]][2] = sqrt(r
** 2 - myvertex
[alt
[4]][0] ** 2) + z
782 myvertex
[alt
[5]][2] = sqrt(k
** 2 - myvertex
[alt
[5]][0] ** 2) + z
783 myvertex
[alt
[6]][2] = sqrt(k
** 2 - myvertex
[alt
[6]][0] ** 2) + z
784 myvertex
[alt
[7]][2] = sqrt(r
** 2 - myvertex
[alt
[7]][0] ** 2) + z
790 for i
in range(0, res
):
795 myvertex
.extend([[y1
, fr
- k2
/ 2, sin(a
) * r
+ z
], [y1
, fr
+ k2
/ 2,
797 t1
.append(len(myvertex
) - 2)
798 t2
.append(len(myvertex
) - 1)
799 if x1
+ k2
< y2
< x2
- k2
:
800 myvertex
.extend([[y2
, fr
- k2
/ 2, sin(a
) * k
+ z
], [y2
, fr
+ k2
/ 2,
802 d1
.append(len(myvertex
) - 2)
803 d2
.append(len(myvertex
) - 1)
804 on
= [alt
[1], alt
[0]]
806 on
.extend([alt
[4], alt
[5]])
808 ar
= [alt
[2], alt
[3]]
810 ar
.extend([alt
[7], alt
[6]])
814 if d1
== [] and t1
== []:
815 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]], [alt
[7], alt
[4], alt
[0], alt
[
820 elif d1
== [] and t1
!= []:
821 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]], [alt
[7], alt
[4], t1
[-1], t2
[-1]],
822 [alt
[0], alt
[3], t2
[0], t1
[0]]])
825 [m
- 1, m
- 2, m
- 3])
826 elif d1
!= [] and t1
== []:
827 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]],
828 [alt
[7], alt
[4], alt
[0], alt
[3]]])
831 [m
- 1, m
- 2, m
- 3])
833 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]],
834 [alt
[7], alt
[4], t1
[-1], t2
[-1]], [alt
[0], alt
[3], t2
[0], t1
[0]]])
837 [m
- 1, m
- 2, m
- 3, m
- 4])
839 for i
in range(0, len(d1
) - 1):
840 myfaces
.append([d1
[i
+ 1], d1
[i
], d2
[i
], d2
[i
+ 1]])
841 sm
.append(len(myfaces
) - 1)
842 for i
in range(0, len(t1
) - 1):
843 myfaces
.append([t1
[i
+ 1], t1
[i
], t2
[i
], t2
[i
+ 1]])
844 sm
.append(len(myfaces
) - 1)
853 x1
= xlist
[x
* 2 + 1] + ek
854 x2
= xlist
[x
* 2 + 2] - ek
855 myvertex
.extend([[x2
, fr
- k3
, z
+ 1], [x2
- k3
* 2, fr
- k3
, z
+ 1], [x2
- k3
* 2, fr
+ k3
, z
+ 1],
856 [x2
, fr
+ k3
, z
+ 1]])
857 myvertex
.extend([[x2
, fr
- k3
, zlist
[-3] + ek
], [x2
- k3
* 2, fr
- k3
, zlist
[-3] + ek
+ k3
* 2],
858 [x2
- k3
* 2, fr
+ k3
, zlist
[-3] + ek
+ k3
* 2], [x2
, fr
+ k3
, zlist
[-3] + ek
]])
859 myvertex
.extend([[x1
, fr
- k3
, zlist
[-3] + ek
], [x1
+ k3
* 2, fr
- k3
, zlist
[-3] + ek
+ k3
* 2],
860 [x1
+ k3
* 2, fr
+ k3
, zlist
[-3] + ek
+ k3
* 2], [x1
, fr
+ k3
, zlist
[-3] + ek
]])
861 myvertex
.extend([[x1
, fr
- k3
, z
+ 1], [x1
+ k3
* 2, fr
- k3
, z
+ 1], [x1
+ k3
* 2, fr
+ k3
, z
+ 1],
862 [x1
, fr
+ k3
, z
+ 1]])
865 [[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11], [n
- 14, n
- 13, n
- 9,
868 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5, n
- 6]])
869 myfaces
.extend([[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1,
872 ftl
.extend([m
- 1, m
- 2, m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9])
873 alt
= [n
- 16, n
- 15, n
- 14, n
- 13, n
- 4, n
- 3, n
- 2, n
- 1]
874 myvertex
[alt
[0]][2] = sqrt(r
** 2 - myvertex
[alt
[0]][0] ** 2) + z
875 myvertex
[alt
[1]][2] = sqrt(k
** 2 - myvertex
[alt
[1]][0] ** 2) + z
876 myvertex
[alt
[2]][2] = sqrt(k
** 2 - myvertex
[alt
[2]][0] ** 2) + z
877 myvertex
[alt
[3]][2] = sqrt(r
** 2 - myvertex
[alt
[3]][0] ** 2) + z
878 myvertex
[alt
[4]][2] = sqrt(r
** 2 - myvertex
[alt
[4]][0] ** 2) + z
879 myvertex
[alt
[5]][2] = sqrt(k
** 2 - myvertex
[alt
[5]][0] ** 2) + z
880 myvertex
[alt
[6]][2] = sqrt(k
** 2 - myvertex
[alt
[6]][0] ** 2) + z
881 myvertex
[alt
[7]][2] = sqrt(r
** 2 - myvertex
[alt
[7]][0] ** 2) + z
886 for i
in range(0, res
):
891 myvertex
.extend([[y1
, fr
- k3
, sin(a
) * r
+ z
], [y1
, fr
+ k3
, sin(a
) * r
+ z
]])
892 t1
.append(len(myvertex
) - 2)
893 t2
.append(len(myvertex
) - 1)
894 ftl
.extend([len(myfaces
) - 1, len(myfaces
) - 2])
895 if x1
+ k3
* 2 < y2
< x2
- k3
* 2:
896 myvertex
.extend([[y2
, fr
- k3
, sin(a
) * k
+ z
], [y2
, fr
+ k3
, sin(a
) * k
+ z
]])
897 d1
.append(len(myvertex
) - 2)
898 d2
.append(len(myvertex
) - 1)
899 ftl
.extend([len(myfaces
) - 1, len(myfaces
) - 2])
900 on
= [alt
[1], alt
[0]]
902 on
.extend([alt
[4], alt
[5]])
904 ar
= [alt
[2], alt
[3]]
906 ar
.extend([alt
[7], alt
[6]])
911 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], alt
[2], alt
[1]]])
913 ftl
.extend([m
- 1, m
- 2, m
- 3])
916 myfaces
.extend([on
, ar
, [alt
[5], alt
[6], d2
[0], d1
[0]], [alt
[2], alt
[1], d1
[-1], d2
[-1]]])
918 ftl
.extend([m
- 1, m
- 2, m
- 3, m
- 4])
919 sm
.extend([m
- 1, m
- 2])
921 for i
in range(0, len(d1
) - 1):
922 myfaces
.append([d1
[i
+ 1], d1
[i
], d2
[i
], d2
[i
+ 1]])
923 ftl
.append(len(myfaces
) - 1)
924 sm
.append(len(myfaces
) - 1)
926 x1
= xlist
[x
* 2 + 1] + ek
+ k3
* 2
927 x2
= xlist
[x
* 2 + 2] - ek
- k3
* 2
930 for i
in range(0, res
):
934 myvertex
.extend([[y1
, fr
- 0.005, sin(a
) * k
+ z
], [y1
, fr
+ 0.005, sin(a
) * k
+ z
]])
939 [[x1
, fr
- 0.005, sqrt(k
** 2 - x1
** 2) + z
], [x1
, fr
+ 0.005,
940 sqrt(k
** 2 - x1
** 2) + z
]])
941 myvertex
.extend([[x1
, fr
- 0.005, zlist
[-3] + ek
+ k3
* 2], [x1
, fr
+ 0.005, zlist
[-3] + ek
+ k3
* 2]])
942 myvertex
.extend([[x2
, fr
- 0.005, zlist
[-3] + ek
+ k3
* 2], [x2
, fr
+ 0.005, zlist
[-3] + ek
+ k3
* 2]])
944 [[x2
, fr
- 0.005, sqrt(k
** 2 - x2
** 2) + z
], [x2
, fr
+ 0.005,
945 sqrt(k
** 2 - x2
** 2) + z
]])
947 on
.extend([n
- 1, n
- 3, n
- 5, n
- 7])
948 ar
.extend([n
- 2, n
- 4, n
- 6, n
- 8])
953 cam
.extend([m
- 1, m
- 2])
955 elif op
.UST
== '3': # Egri
957 h1
= (op
.VL1
/ 200) / u
961 h1
= sin(op
.VL4
* pi
/ 180) / cos(op
.VL4
* pi
/ 180)
962 z
= sqrt(k1
** 2 + (k1
* h1
) ** 2)
963 k
= sqrt(k2
** 2 + (k2
* h1
) ** 2)
964 f
= sqrt(k3
** 2 + (k3
* h1
) ** 2) * 2
965 myvertex
[ust
[0]][2] = zlist
[-1] + myvertex
[ust
[0]][0] * h1
966 myvertex
[ust
[1]][2] = zlist
[-1] + myvertex
[ust
[1]][0] * h1
968 myvertex
[i
][2] = zlist
[-1] + myvertex
[i
][0] * h1
- z
969 myvertex
[son
[0]][2] = zlist
[-1] + myvertex
[son
[0]][0] * h1
970 myvertex
[son
[1]][2] = zlist
[-1] + myvertex
[son
[1]][0] * h1
971 myfaces
.append([ust
[1], ust
[0], son
[0], son
[1]])
972 for i
in range(0, mx
* 4, 4):
973 myfaces
.append([alt
[i
], alt
[i
+ 1], alt
[i
+ 3], alt
[i
+ 2]])
976 for i
in range(0, len(alt
) - 1, 2):
978 ar
.append(alt
[i
+ 1])
985 for x
in range(0, mx
):
987 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
989 myvertex
[n
- 5][2] = zlist
[-1] + myvertex
[n
- 5][0] * h1
- z
990 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
991 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
992 myvertex
[n
- 8][2] = zlist
[-1] + myvertex
[n
- 8][0] * h1
- z
993 myvertex
[n
- 9][2] = zlist
[-1] + myvertex
[n
- 9][0] * h1
- z
994 myvertex
[n
- 10][2] = zlist
[-1] + myvertex
[n
- 10][0] * h1
- z
- k
995 myvertex
[n
- 11][2] = zlist
[-1] + myvertex
[n
- 11][0] * h1
- z
- k
996 myvertex
[n
- 12][2] = zlist
[-1] + myvertex
[n
- 12][0] * h1
- z
997 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
999 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- k
- f
1000 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- k
- f
1001 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
- f
1002 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
- f
1003 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
- k
1004 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- k
- f
1005 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- k
- f
1006 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
- k
1007 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
- k
1008 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- k
- f
1009 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- k
- f
1010 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
- k
1012 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1014 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- f
1015 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- f
1016 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- f
1017 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- f
1018 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
1019 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- f
1020 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- f
1021 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
1022 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
1023 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- f
1024 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- f
1025 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
1027 cam
.extend([m
- 1, m
- 2])
1028 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])
1029 elif op
.UST
== '4': # Ucgen
1031 h1
= (op
.VL1
/ 100) / u
1035 h1
= sin(op
.VL4
* pi
/ 180) / cos(op
.VL4
* pi
/ 180)
1036 z
= sqrt(k1
** 2 + (k1
* h1
) ** 2)
1037 k
= sqrt(k2
** 2 + (k2
* h1
) ** 2)
1038 f
= sqrt(k3
** 2 + (k3
* h1
) ** 2) * 2
1039 myvertex
[ust
[0]][2] = zlist
[-1] + myvertex
[ust
[0]][0] * h1
1040 myvertex
[ust
[1]][2] = zlist
[-1] + myvertex
[ust
[1]][0] * h1
1042 myvertex
[i
][2] = zlist
[-1] - abs(myvertex
[i
][0]) * h1
- z
1043 myvertex
[son
[0]][2] = zlist
[-1] - myvertex
[son
[0]][0] * h1
1044 myvertex
[son
[1]][2] = zlist
[-1] - myvertex
[son
[1]][0] * h1
1045 myvertex
.extend([[0, -k1
/ 2, zlist
[-1]], [0, k1
/ 2, zlist
[-1]]])
1048 for j
in range(2, len(alt
) - 2, 4):
1049 if myvertex
[alt
[j
]][0] < 0 < myvertex
[alt
[j
+ 2]][0]:
1053 myfaces
.extend([[ust
[1], ust
[0], n
- 2, n
- 1], [n
- 1, n
- 2, son
[0], son
[1]]])
1054 on
= [son
[0], n
- 2, ust
[0]]
1055 ar
= [son
[1], n
- 1, ust
[1]]
1058 myvertex
.extend([[0, -k1
/ 2, zlist
[-1] - z
], [0, k1
/ 2, zlist
[-1] - z
]])
1059 for j
in range(0, len(alt
) - 2, 4):
1060 if myvertex
[alt
[j
]][0] < 0 and myvertex
[alt
[j
+ 2]][0] < 0:
1061 myfaces
.append([alt
[j
], alt
[j
+ 1], alt
[j
+ 3], alt
[j
+ 2]])
1062 on
.extend([alt
[j
], alt
[j
+ 2]])
1063 ar
.extend([alt
[j
+ 1], alt
[j
+ 3]])
1064 elif myvertex
[alt
[j
]][0] > 0 and myvertex
[alt
[j
+ 2]][0] > 0:
1065 myfaces
.append([alt
[j
], alt
[j
+ 1], alt
[j
+ 3], alt
[j
+ 2]])
1066 on
.extend([alt
[j
], alt
[j
+ 2]])
1067 ar
.extend([alt
[j
+ 1], alt
[j
+ 3]])
1070 myfaces
.extend([[alt
[j
], alt
[j
+ 1], n
- 1, n
- 2], [n
- 2, n
- 1, alt
[j
+ 3], alt
[j
+ 2]]])
1071 on
.extend([alt
[j
+ 0], n
- 2, alt
[j
+ 2]])
1072 ar
.extend([alt
[j
+ 1], n
- 1, alt
[j
+ 3]])
1077 for x
in range(0, mx
):
1078 if myvertex
[alt
[x
* 4]][0] < 0 and myvertex
[alt
[x
* 4 + 2]][0] < 0:
1079 if kx
[x
][y
] is True:
1080 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
1082 myvertex
[n
- 5][2] = zlist
[-1] + myvertex
[n
- 5][0] * h1
- z
1083 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
1084 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
1085 myvertex
[n
- 8][2] = zlist
[-1] + myvertex
[n
- 8][0] * h1
- z
1086 myvertex
[n
- 9][2] = zlist
[-1] + myvertex
[n
- 9][0] * h1
- z
1087 myvertex
[n
- 10][2] = zlist
[-1] + myvertex
[n
- 10][0] * h1
- z
- k
1088 myvertex
[n
- 11][2] = zlist
[-1] + myvertex
[n
- 11][0] * h1
- z
- k
1089 myvertex
[n
- 12][2] = zlist
[-1] + myvertex
[n
- 12][0] * h1
- z
1090 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
1092 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- k
- f
1093 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- k
- f
1094 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- k
- f
1095 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- k
- f
1096 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
- k
1097 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- k
- f
1098 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- k
- f
1099 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
- k
1100 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
- k
1101 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- k
- f
1102 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- k
- f
1103 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
- k
1105 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1107 myvertex
[n
- 2][2] = zlist
[-1] + myvertex
[n
- 2][0] * h1
- z
- f
1108 myvertex
[n
- 3][2] = zlist
[-1] + myvertex
[n
- 3][0] * h1
- z
- f
1109 myvertex
[n
- 6][2] = zlist
[-1] + myvertex
[n
- 6][0] * h1
- z
- f
1110 myvertex
[n
- 7][2] = zlist
[-1] + myvertex
[n
- 7][0] * h1
- z
- f
1111 myvertex
[n
- 13][2] = zlist
[-1] + myvertex
[n
- 13][0] * h1
- z
1112 myvertex
[n
- 14][2] = zlist
[-1] + myvertex
[n
- 14][0] * h1
- z
- f
1113 myvertex
[n
- 15][2] = zlist
[-1] + myvertex
[n
- 15][0] * h1
- z
- f
1114 myvertex
[n
- 16][2] = zlist
[-1] + myvertex
[n
- 16][0] * h1
- z
1115 myvertex
[n
- 17][2] = zlist
[-1] + myvertex
[n
- 17][0] * h1
- z
1116 myvertex
[n
- 18][2] = zlist
[-1] + myvertex
[n
- 18][0] * h1
- z
- f
1117 myvertex
[n
- 19][2] = zlist
[-1] + myvertex
[n
- 19][0] * h1
- z
- f
1118 myvertex
[n
- 20][2] = zlist
[-1] + myvertex
[n
- 20][0] * h1
- z
1120 cam
.extend([m
- 1, m
- 2])
1121 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11,
1122 m
- 12, m
- 13, m
- 14])
1123 elif myvertex
[alt
[x
* 4]][0] > 0 and myvertex
[alt
[x
* 4 + 2]][0] > 0:
1124 if kx
[x
][y
] is True:
1125 kapak(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k2
/ 2, (k1
+ k2
) * 0.5 - 0.01)
1127 myvertex
[n
- 5][2] = zlist
[-1] - myvertex
[n
- 5][0] * h1
- z
1128 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- k
1129 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- k
1130 myvertex
[n
- 8][2] = zlist
[-1] - myvertex
[n
- 8][0] * h1
- z
1131 myvertex
[n
- 9][2] = zlist
[-1] - myvertex
[n
- 9][0] * h1
- z
1132 myvertex
[n
- 10][2] = zlist
[-1] - myvertex
[n
- 10][0] * h1
- z
- k
1133 myvertex
[n
- 11][2] = zlist
[-1] - myvertex
[n
- 11][0] * h1
- z
- k
1134 myvertex
[n
- 12][2] = zlist
[-1] - myvertex
[n
- 12][0] * h1
- z
1135 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, (k1
+ k2
) * 0.5 - 0.01, k2
)
1137 myvertex
[n
- 2][2] = zlist
[-1] - myvertex
[n
- 2][0] * h1
- z
- k
- f
1138 myvertex
[n
- 3][2] = zlist
[-1] - myvertex
[n
- 3][0] * h1
- z
- k
- f
1139 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- k
- f
1140 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- k
- f
1141 myvertex
[n
- 13][2] = zlist
[-1] - myvertex
[n
- 13][0] * h1
- z
- k
1142 myvertex
[n
- 14][2] = zlist
[-1] - myvertex
[n
- 14][0] * h1
- z
- k
- f
1143 myvertex
[n
- 15][2] = zlist
[-1] - myvertex
[n
- 15][0] * h1
- z
- k
- f
1144 myvertex
[n
- 16][2] = zlist
[-1] - myvertex
[n
- 16][0] * h1
- z
- k
1145 myvertex
[n
- 17][2] = zlist
[-1] - myvertex
[n
- 17][0] * h1
- z
- k
1146 myvertex
[n
- 18][2] = zlist
[-1] - myvertex
[n
- 18][0] * h1
- z
- k
- f
1147 myvertex
[n
- 19][2] = zlist
[-1] - myvertex
[n
- 19][0] * h1
- z
- k
- f
1148 myvertex
[n
- 20][2] = zlist
[-1] - myvertex
[n
- 20][0] * h1
- z
- k
1150 fitil(myvertex
, myfaces
, xlist
, zlist
, x
* 2 + 1, y
* 2 + 1, k3
, 0, 0)
1152 myvertex
[n
- 2][2] = zlist
[-1] - myvertex
[n
- 2][0] * h1
- z
- f
1153 myvertex
[n
- 3][2] = zlist
[-1] - myvertex
[n
- 3][0] * h1
- z
- f
1154 myvertex
[n
- 6][2] = zlist
[-1] - myvertex
[n
- 6][0] * h1
- z
- f
1155 myvertex
[n
- 7][2] = zlist
[-1] - myvertex
[n
- 7][0] * h1
- z
- f
1156 myvertex
[n
- 13][2] = zlist
[-1] - myvertex
[n
- 13][0] * h1
- z
1157 myvertex
[n
- 14][2] = zlist
[-1] - myvertex
[n
- 14][0] * h1
- z
- f
1158 myvertex
[n
- 15][2] = zlist
[-1] - myvertex
[n
- 15][0] * h1
- z
- f
1159 myvertex
[n
- 16][2] = zlist
[-1] - myvertex
[n
- 16][0] * h1
- z
1160 myvertex
[n
- 17][2] = zlist
[-1] - myvertex
[n
- 17][0] * h1
- z
1161 myvertex
[n
- 18][2] = zlist
[-1] - myvertex
[n
- 18][0] * h1
- z
- f
1162 myvertex
[n
- 19][2] = zlist
[-1] - myvertex
[n
- 19][0] * h1
- z
- f
1163 myvertex
[n
- 20][2] = zlist
[-1] - myvertex
[n
- 20][0] * h1
- z
1165 cam
.extend([m
- 1, m
- 2])
1166 ftl
.extend([m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10,
1167 m
- 11, m
- 12, m
- 13, m
- 14])
1170 if kx
[x
][y
] is True:
1171 zz
= (k1
+ k2
) * 0.5 - 0.01
1172 xx
= xlist
[x
* 2 + 1]
1173 myvertex
.extend([[xx
, -k2
/ 2 + zz
, zlist
[-3]], [xx
+ k2
, -k2
/ 2 + zz
, zlist
[-3] + k2
],
1174 [xx
+ k2
, k2
/ 2 + zz
, zlist
[-3] + k2
], [xx
, k2
/ 2 + zz
, zlist
[-3]]])
1176 [[xx
, -k2
/ 2 + zz
, zlist
[-1] + xx
* h1
- z
], [xx
+ k2
, -k2
/ 2 + zz
,
1177 zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1178 [xx
+ k2
, k2
/ 2 + zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1179 [xx
, k2
/ 2 + zz
, zlist
[-1] + xx
* h1
- z
]])
1180 myvertex
.extend([[0, -k2
/ 2 + zz
, zlist
[-1] - z
], [0, -k2
/ 2 + zz
, zlist
[-1] - z
- k
],
1181 [0, k2
/ 2 + zz
, zlist
[-1] - z
- k
], [0, k2
/ 2 + zz
, zlist
[-1] - z
]])
1182 xx
= xlist
[x
* 2 + 2]
1184 [[xx
, -k2
/ 2 + zz
, zlist
[-1] - xx
* h1
- z
], [xx
- k2
, -k2
/ 2 + zz
,
1185 zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1186 [xx
- k2
, k2
/ 2 + zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1187 [xx
, k2
/ 2 + zz
, zlist
[-1] - xx
* h1
- z
]])
1188 myvertex
.extend([[xx
, -k2
/ 2 + zz
, zlist
[-3]], [xx
- k2
, -k2
/ 2 + zz
, zlist
[-3] + k2
],
1189 [xx
- k2
, k2
/ 2 + zz
, zlist
[-3] + k2
], [xx
, k2
/ 2 + zz
, zlist
[-3]]])
1191 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1192 [n
- 18, n
- 17, n
- 13, n
- 14], [n
- 17, n
- 20, n
- 16, n
- 13]])
1193 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1194 [n
- 14, n
- 13, n
- 9, n
- 10], [n
- 13, n
- 16, n
- 12, n
- 9]])
1196 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9,
1198 [n
- 9, n
- 12, n
- 8, n
- 5]])
1200 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2],
1201 [n
- 5, n
- 8, n
- 4, n
- 1]])
1203 [[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1204 [n
- 2, n
- 1, n
- 17, n
- 18],
1205 [n
- 1, n
- 4, n
- 20, n
- 17]])
1206 xx
= xlist
[x
* 2 + 1]
1207 myvertex
.extend([[xx
+ k2
, -k3
+ zz
, zlist
[-3] + k2
], [xx
+ k4
+ k2
, -k3
+ zz
,
1208 zlist
[-3] + k2
+ k4
],
1209 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
+ k2
, k3
+ zz
,
1211 myvertex
.extend([[xx
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
],
1212 [xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1213 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1214 [xx
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
) * h1
- z
- k
]])
1215 myvertex
.extend([[0, -k3
+ zz
, zlist
[-1] - k
- z
], [0, -k3
+ zz
, zlist
[-1] - k
- z
- f
],
1216 [0, k3
+ zz
, zlist
[-1] - k
- z
- f
], [0, k3
+ zz
, zlist
[-1] - k
- z
]])
1217 xx
= xlist
[x
* 2 + 2]
1218 myvertex
.extend([[xx
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
],
1219 [xx
- k4
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1220 [xx
- k4
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1221 [xx
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
) * h1
- z
- k
]])
1222 myvertex
.extend([[xx
- k2
, -k3
+ zz
, zlist
[-3] + k2
],
1223 [xx
- k4
- k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
],
1224 [xx
- k4
- k2
, k3
+ zz
, zlist
[-3] + k2
+ k4
],
1225 [xx
- k2
, k3
+ zz
, zlist
[-3] + k2
]])
1227 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1228 [n
- 18, n
- 17, n
- 13, n
- 14]])
1229 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1230 [n
- 14, n
- 13, n
- 9, n
- 10]])
1232 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10,
1233 n
- 9, n
- 5, n
- 6]])
1235 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2]])
1236 myfaces
.extend([[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1237 [n
- 2, n
- 1, n
- 17, n
- 18]])
1238 xx
= xlist
[x
* 2 + 1]
1240 [[xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-3] +
1242 myvertex
.extend([[xx
+ k4
+ k2
, -k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
],
1243 [xx
+ k4
+ k2
, k3
+ zz
, zlist
[-1] + (xx
+ k2
+ k4
) * h1
- z
- k
- f
]])
1244 myvertex
.extend([[0, -k3
+ zz
, zlist
[-1] - k
- z
- f
], [0, k3
+ zz
, zlist
[-1] - k
- z
- f
]])
1245 xx
= xlist
[x
* 2 + 2]
1246 myvertex
.extend([[xx
- k4
- k2
, -k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
],
1247 [xx
- k4
- k2
, k3
+ zz
, zlist
[-1] - (xx
- k2
- k4
) * h1
- z
- k
- f
]])
1249 [[xx
- k4
- k2
, -k3
+ zz
, zlist
[-3] + k2
+ k4
], [xx
- k4
- k2
, k3
+ zz
, zlist
[-3] +
1251 myfaces
.extend([[n
+ 8, n
+ 6, n
+ 4, n
+ 2, n
+ 0], [n
+ 1, n
+ 3, n
+ 5, n
+ 7, n
+ 9]])
1253 xx
= xlist
[x
* 2 + 1]
1255 [[xx
, -k3
, zlist
[-3]], [xx
+ k4
, -k3
, zlist
[-3] + k4
], [xx
+ k4
, k3
, zlist
[-3] + k4
],
1256 [xx
, k3
, zlist
[-3]]])
1258 [[xx
, -k3
, zlist
[-1] + xx
* h1
- z
], [xx
+ k4
, -k3
, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
],
1259 [xx
+ k4
, k3
, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
], [xx
, k3
, zlist
[-1] + xx
* h1
- z
]])
1261 [[0, -k3
, zlist
[-1] - z
], [0, -k3
, zlist
[-1] - z
- f
], [0, k3
, zlist
[-1] - z
- f
],
1262 [0, k3
, zlist
[-1] - z
]])
1263 xx
= xlist
[x
* 2 + 2]
1265 [[xx
, -k3
, zlist
[-1] - xx
* h1
- z
], [xx
- k4
, -k3
, zlist
[-1] - (xx
- k4
) * h1
- z
- f
],
1266 [xx
- k4
, k3
, zlist
[-1] - (xx
- k4
) * h1
- z
- f
], [xx
, k3
, zlist
[-1] - xx
* h1
- z
]])
1268 [[xx
, -k3
, zlist
[-3]], [xx
- k4
, -k3
, zlist
[-3] + k4
], [xx
- k4
, k3
, zlist
[-3] + k4
],
1269 [xx
, k3
, zlist
[-3]]])
1271 myfaces
.extend([[n
- 20, n
- 19, n
- 15, n
- 16], [n
- 19, n
- 18, n
- 14, n
- 15],
1272 [n
- 18, n
- 17, n
- 13, n
- 14]])
1273 myfaces
.extend([[n
- 16, n
- 15, n
- 11, n
- 12], [n
- 15, n
- 14, n
- 10, n
- 11],
1274 [n
- 14, n
- 13, n
- 9, n
- 10]])
1276 [[n
- 12, n
- 11, n
- 7, n
- 8], [n
- 11, n
- 10, n
- 6, n
- 7], [n
- 10, n
- 9, n
- 5,
1279 [[n
- 8, n
- 7, n
- 3, n
- 4], [n
- 7, n
- 6, n
- 2, n
- 3], [n
- 6, n
- 5, n
- 1, n
- 2]])
1280 myfaces
.extend([[n
- 4, n
- 3, n
- 19, n
- 20], [n
- 3, n
- 2, n
- 18, n
- 19],
1281 [n
- 2, n
- 1, n
- 17, n
- 18]])
1282 xx
= xlist
[x
* 2 + 1]
1283 myvertex
.extend([[xx
+ k4
, -0.005, zlist
[-3] + k4
], [xx
+ k4
, 0.005, zlist
[-3] + k4
]])
1284 myvertex
.extend([[xx
+ k4
, -0.005, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
],
1285 [xx
+ k4
, 0.005, zlist
[-1] + (xx
+ k4
) * h1
- z
- f
]])
1286 myvertex
.extend([[0, -0.005, zlist
[-1] - z
- f
], [0, 0.005, zlist
[-1] - z
- f
]])
1287 xx
= xlist
[x
* 2 + 2]
1288 myvertex
.extend([[xx
- k4
, -0.005, zlist
[-1] - (xx
- k4
) * h1
- z
- f
],
1289 [xx
- k4
, 0.005, zlist
[-1] - (xx
- k4
) * h1
- z
- f
]])
1290 myvertex
.extend([[xx
- k4
, -0.005, zlist
[-3] + k4
], [xx
- k4
, 0.005, zlist
[-3] + k4
]])
1291 myfaces
.extend([[n
+ 8, n
+ 6, n
+ 4, n
+ 2, n
+ 0], [n
+ 1, n
+ 3, n
+ 5, n
+ 7, n
+ 9]])
1293 cam
.extend([m
- 1, m
- 2])
1295 [m
- 3, m
- 4, m
- 5, m
- 6, m
- 7, m
- 8, m
- 9, m
- 10, m
- 11, m
- 12, m
- 13,
1302 mdv
= (op
.mr3
/ 200) + mrg
1303 msv
= -(mdv
+ (op
.mr4
/ 100))
1304 myvertex
.extend([[-u
, mdv
, 0], [u
, mdv
, 0], [-u
, msv
, 0], [u
, msv
, 0], [-u
, mdv
, mrh
], [u
, mdv
, mrh
],
1308 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],
1309 [n
- 2, n
- 1, n
- 5, n
- 6], [n
- 4, n
- 2, n
- 6, n
- 8], [n
- 5, n
- 1, n
- 3, n
- 7]])
1311 mer
.extend([n
- 1, n
- 2, n
- 3, n
- 4, n
- 5, n
- 6])
1313 return True, ftl
, cam
, mer
, sm
1315 return False, None, None, None, None
1318 # ------------------------------------
1319 # Get highest points of the panel
1320 # ------------------------------------
1321 def get_high_points(selobject
, width
, tip
):
1322 obverts
= selobject
.data
.vertices
1327 # --------------------------
1328 # Recover all vertex
1329 # --------------------------
1330 for vertex
in obverts
:
1331 if vertex
.co
[0] == -width
/ 2:
1332 if vertex
.co
[2] >= top_a
:
1333 top_a
= vertex
.co
[2]
1334 if vertex
.co
[0] == width
/ 2:
1335 if vertex
.co
[2] >= top_b
:
1336 top_b
= vertex
.co
[2]
1339 if vertex
.co
[2] >= top_c
:
1340 top_c
= vertex
.co
[2]
1342 if vertex
.co
[0] == 0 and vertex
.co
[2] >= top_c
:
1343 top_c
= vertex
.co
[2]
1345 return top_a
, top_b
, top_c
1348 # ---------------------------------------------------------
1350 # ---------------------------------------------------------
1353 def __init__(self
, x
, y
):
1358 # ---------------------------------------------------------
1359 # Get angle between two vectors
1360 # ---------------------------------------------------------
1361 def get_angle(p1
, p2
):
1362 v1
= Vector((p1
[0], 0.0, p1
[1]))
1363 v2
= Vector((p2
[0], 0.0, p2
[1]))
1369 # ---------------------------------------------------------
1370 # Get center of circle base on 3 points
1376 # x, y: center position
1379 # ---------------------------------------------------------
1380 def get_circle_center(a
, b
, c
):
1382 # line between a and b: s1 + k * d1
1383 s1
= Cpoint((a
.x
+ b
.x
) / 2.0, (a
.y
+ b
.y
) / 2.0)
1384 d1
= Cpoint(b
.y
- a
.y
, a
.x
- b
.x
)
1385 # line between a and c: s2 + k * d2
1386 s2
= Cpoint((a
.x
+ c
.x
) / 2.0, (a
.y
+ c
.y
) / 2.0)
1387 d2
= Cpoint(c
.y
- a
.y
, a
.x
- c
.x
)
1388 # intersection of both lines:
1389 l
= d1
.x
* (s2
.y
- s1
.y
) - d1
.y
* (s2
.x
- s1
.x
)
1390 l
/= d2
.x
* d1
.y
- d2
.y
* d1
.x
1391 center
= Cpoint(s2
.x
+ l
* d2
.x
, s2
.y
+ l
* d2
.y
)
1394 radio
= sqrt(dx
* dx
+ dy
* dy
)
1397 v1
= (a
.x
- center
.x
, a
.y
- center
.y
)
1398 v2
= (b
.x
- center
.x
, b
.y
- center
.y
)
1399 ang
= get_angle(v1
, v2
)
1400 return center
, radio
, ang
1401 except ZeroDivisionError:
1402 return Cpoint(0, 0), 1, 1
1405 # -----------------------------------------
1409 # mp: limit z in med point
1413 # -----------------------------------------
1414 def get_limits(myobject
):
1415 verts
= myobject
.data
.vertices
1443 if v
.co
[2] > lt
and v
.co
[0] == lb
:
1445 if v
.co
[2] > rt
and v
.co
[0] == rb
:
1448 return lb
, lt
, rb
, rt
, mp
, lo
, my
, top
1451 # ------------------------------------------
1452 # Create control box for panels
1454 # ------------------------------------------
1455 def create_ctrl_box(parentobj
, objname
):
1460 op
= o
.WindowPanelGenerator
[0]
1462 lb
, lt
, rb
, rt
, mp
, lo
, my
, top
= get_limits(o
)
1464 # -----------------------------
1465 # Flat, Triangle and inclined
1466 # -----------------------------
1467 if op
.UST
== "1" or op
.UST
== "3" or op
.UST
== "4":
1469 myvertex
.extend([(lb
, ypos
, lo
), (lb
, ypos
, lt
), (rb
, ypos
, rt
), (rb
, ypos
, lo
)])
1470 myvertex
.extend([(lb
, -ypos
, lo
), (lb
, -ypos
, lt
), (rb
, -ypos
, rt
), (rb
, -ypos
, lo
)])
1471 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)])
1473 myvertex
.extend([(lb
, ypos
, lo
), (lb
, ypos
, lt
), (0, ypos
, mp
), (rb
, ypos
, rt
), (rb
, ypos
, lo
)])
1474 myvertex
.extend([(lb
, -ypos
, lo
), (lb
, -ypos
, lt
), (0, -ypos
, mp
), (rb
, -ypos
, rt
), (rb
, -ypos
, lo
)])
1475 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),
1477 # -----------------------------
1479 # -----------------------------
1481 center
, r
, ang
= get_circle_center(Cpoint(lb
, lt
), Cpoint(0, top
), Cpoint(rb
, rt
))
1487 arc
= ((pi
/ 2) + ang
) - ((pi
/ 2) - ang
)
1491 myvertex
.extend([(lb
, ypos
, lt
), (lb
, -ypos
, lt
)])
1492 for x
in range(0, sg
):
1493 myvertex
.extend([(r
* cos(a
), ypos
, r
* sin(a
) + cz
),
1494 (r
* cos(a
), -ypos
, r
* sin(a
) + cz
)])
1498 myvertex
.extend([(rb
, ypos
, rt
), (rb
, -ypos
, rt
)])
1502 for x
in range(0, nf
- 2, 2):
1503 myfaces
.extend([(v
, v
+ 1, v
+ 3, v
+ 2)])
1507 myvertex
.extend([(lb
, ypos
, lo
), (lb
, -ypos
, lo
)])
1508 myvertex
.extend([(rb
, ypos
, lo
), (rb
, -ypos
, lo
)])
1511 myfaces
.extend([(0, nf2
- 4, nf2
- 3, 1)])
1512 myfaces
.extend([(nf
- 2, nf
- 1, nf2
- 1, nf2
- 2)])
1515 myfaces
.extend([(nf2
- 4, nf2
- 2, nf2
- 1, nf2
- 3)])
1517 # --------------------------
1519 # --------------------------
1520 myfaces
= check_mesh_errors(myvertex
, myfaces
)
1521 mymesh
= bpy
.data
.meshes
.new(objname
)
1522 myobj
= bpy
.data
.objects
.new(objname
, mymesh
)
1524 myobj
.location
= bpy
.context
.scene
.cursor
.location
1525 bpy
.context
.collection
.objects
.link(myobj
)
1527 mymesh
.from_pydata(myvertex
, [], myfaces
)
1528 mymesh
.update(calc_edges
=True)
1533 # ------------------------------------------------------------------
1534 # Define property group class to create or modify
1535 # ------------------------------------------------------------------
1536 class GeneralPanelProperties(PropertyGroup
):
1539 ('1', "WINDOW 250X200", ""),
1540 ('2', "WINDOW 200X200", ""),
1541 ('3', "WINDOW 180X200", ""),
1542 ('4', "WINDOW 180X160", ""),
1543 ('5', "WINDOW 160X160", ""),
1544 ('6', "WINDOW 50X50", ""),
1545 ('7', "DOOR 80X250", ""),
1546 ('8', "DOOR 80X230", ""),
1549 description
='Predefined types',
1550 update
=update_using_default
,
1554 ('1', "WINDOW 250X200", ""),
1555 ('2', "WINDOW 200X200", ""),
1556 ('3', "WINDOW 180X200", ""),
1557 ('4', "WINDOW 180X160", ""),
1558 ('5', "WINDOW 160X160", ""),
1559 ('6', "WINDOW 50X50", ""),
1560 ('7', "DOOR 80X250", ""),
1561 ('8', "DOOR 80X230", ""),
1564 description
='Predefined types',
1565 update
=update_using_default
,
1568 name
='H Count', min=1, max=8, default
=3,
1569 description
='Horizontal Panes',
1570 update
=update_window
,
1573 name
='V Count', min=1, max=5, default
=1,
1574 description
='Vertical Panes',
1575 update
=update_window
,
1578 name
='Outer Frame', min=2, max=50, default
=5,
1579 description
='Outside Frame Thickness',
1580 update
=update_window
,
1583 name
='Risers', min=2, max=50, default
=5,
1584 description
='Risers Width',
1585 update
=update_window
,
1588 name
='Inner Frame', min=1, max=20, default
=2,
1589 description
='Inside Frame Thickness',
1590 update
=update_window
,
1593 mr
: BoolProperty(name
='Sill', default
=True, description
='Window Sill', update
=update_window
)
1594 mr1
: IntProperty(name
='', min=1, max=20, default
=4, description
='Height', update
=update_window
)
1595 mr2
: IntProperty(name
='', min=0, max=20, default
=4, description
='First Depth', update
=update_window
)
1596 mr3
: IntProperty(name
='', min=1, max=50, default
=20, description
='Second Depth', update
=update_window
)
1597 mr4
: IntProperty(name
='', min=0, max=50, default
=0, description
='Extrusion for Jamb',
1598 update
=update_window
)
1604 ('3', "Plastic", ""),
1608 description
='Material to use',
1609 update
=update_window
,
1615 ('3', "Plastic", ""),
1619 description
='Material to use',
1620 update
=update_window
,
1625 min=0, max=360, default
=0, precision
=1,
1626 description
='Panel rotation',
1627 update
=update_window
,
1634 ('3', "Inclined", ""),
1635 ('4', "Triangle", ""),
1637 name
="Top", default
='1',
1638 description
='Type of window upper section',
1639 update
=update_window
,
1643 ('1', "Difference", ""),
1644 ('2', "Radius", ""),
1648 update
=update_window
,
1652 ('1', "Difference", ""),
1653 ('2', "Incline %", ""),
1654 ('3', "Incline Angle", ""),
1657 default
='1', update
=update_window
,
1660 VL1
: IntProperty(name
='', min=-10000, max=10000, default
=30, update
=update_window
) # Fark
1661 VL2
: IntProperty(name
='', min=1, max=10000, default
=30, update
=update_window
) # Cap
1662 VL3
: IntProperty(name
='', min=-100, max=100, default
=30, update
=update_window
) # Egim %
1663 VL4
: IntProperty(name
='', min=-45, max=45, default
=30, update
=update_window
) # Egim Aci
1665 res
: IntProperty(name
='Resolution', min=2, max=360, default
=36, update
=update_window
) # Res
1667 gnx0
: IntProperty(name
='', min=1, max=300, default
=60, description
='1st Window Width',
1668 update
=update_window
)
1669 gnx1
: IntProperty(name
='', min=1, max=300, default
=110, description
='2nd Window Width',
1670 update
=update_window
)
1671 gnx2
: IntProperty(name
='', min=1, max=300, default
=60, description
='3rd Window Width',
1672 update
=update_window
)
1673 gnx3
: IntProperty(name
='', min=1, max=300, default
=60, description
='4th Window Width',
1674 update
=update_window
)
1675 gnx4
: IntProperty(name
='', min=1, max=300, default
=60, description
='5th Window Width',
1676 update
=update_window
)
1677 gnx5
: IntProperty(name
='', min=1, max=300, default
=60, description
='6th Window Width',
1678 update
=update_window
)
1679 gnx6
: IntProperty(name
='', min=1, max=300, default
=60, description
='7th Window Width',
1680 update
=update_window
)
1681 gnx7
: IntProperty(name
='', min=1, max=300, default
=60, description
='8th Window Width',
1682 update
=update_window
)
1684 gny0
: IntProperty(name
='', min=1, max=300, default
=190, description
='1st Row Height',
1685 update
=update_window
)
1686 gny1
: IntProperty(name
='', min=1, max=300, default
=45, description
='2nd Row Height',
1687 update
=update_window
)
1688 gny2
: IntProperty(name
='', min=1, max=300, default
=45, description
='3rd Row Height',
1689 update
=update_window
)
1690 gny3
: IntProperty(name
='', min=1, max=300, default
=45, description
='4th Row Height',
1691 update
=update_window
)
1692 gny4
: IntProperty(name
='', min=1, max=300, default
=45, description
='5th Row Height',
1693 update
=update_window
)
1695 k00
: BoolProperty(name
='', default
=True, update
=update_window
)
1696 k01
: BoolProperty(name
='', default
=False, update
=update_window
)
1697 k02
: BoolProperty(name
='', default
=True, update
=update_window
)
1698 k03
: BoolProperty(name
='', default
=False, update
=update_window
)
1699 k04
: BoolProperty(name
='', default
=False, update
=update_window
)
1700 k05
: BoolProperty(name
='', default
=False, update
=update_window
)
1701 k06
: BoolProperty(name
='', default
=False, update
=update_window
)
1702 k07
: BoolProperty(name
='', default
=False, update
=update_window
)
1704 k10
: BoolProperty(name
='', default
=False, update
=update_window
)
1705 k11
: BoolProperty(name
='', default
=False, update
=update_window
)
1706 k12
: BoolProperty(name
='', default
=False, update
=update_window
)
1707 k13
: BoolProperty(name
='', default
=False, update
=update_window
)
1708 k14
: BoolProperty(name
='', default
=False, update
=update_window
)
1709 k15
: BoolProperty(name
='', default
=False, update
=update_window
)
1710 k16
: BoolProperty(name
='', default
=False, update
=update_window
)
1711 k17
: BoolProperty(name
='', default
=False, update
=update_window
)
1713 k20
: BoolProperty(name
='', default
=False, update
=update_window
)
1714 k21
: BoolProperty(name
='', default
=False, update
=update_window
)
1715 k22
: BoolProperty(name
='', default
=False, update
=update_window
)
1716 k23
: BoolProperty(name
='', default
=False, update
=update_window
)
1717 k24
: BoolProperty(name
='', default
=False, update
=update_window
)
1718 k25
: BoolProperty(name
='', default
=False, update
=update_window
)
1719 k26
: BoolProperty(name
='', default
=False, update
=update_window
)
1720 k27
: BoolProperty(name
='', default
=False, update
=update_window
)
1722 k30
: BoolProperty(name
='', default
=False, update
=update_window
)
1723 k31
: BoolProperty(name
='', default
=False, update
=update_window
)
1724 k32
: BoolProperty(name
='', default
=False, update
=update_window
)
1725 k33
: BoolProperty(name
='', default
=False, update
=update_window
)
1726 k34
: BoolProperty(name
='', default
=False, update
=update_window
)
1727 k35
: BoolProperty(name
='', default
=False, update
=update_window
)
1728 k36
: BoolProperty(name
='', default
=False, update
=update_window
)
1729 k37
: BoolProperty(name
='', default
=False, update
=update_window
)
1731 k40
: BoolProperty(name
='', default
=False, update
=update_window
)
1732 k41
: BoolProperty(name
='', default
=False, update
=update_window
)
1733 k42
: BoolProperty(name
='', default
=False, update
=update_window
)
1734 k43
: BoolProperty(name
='', default
=False, update
=update_window
)
1735 k44
: BoolProperty(name
='', default
=False, update
=update_window
)
1736 k45
: BoolProperty(name
='', default
=False, update
=update_window
)
1737 k46
: BoolProperty(name
='', default
=False, update
=update_window
)
1738 k47
: BoolProperty(name
='', default
=False, update
=update_window
)
1739 # opengl internal data
1740 glpoint_a
: FloatVectorProperty(
1742 description
="Hidden property for opengl",
1745 glpoint_b
: FloatVectorProperty(
1747 description
="Hidden property for opengl",
1750 glpoint_c
: FloatVectorProperty(
1752 description
="Hidden property for opengl",
1755 glpoint_d
: FloatVectorProperty(
1757 description
="Hidden property for opengl",
1762 bpy
.utils
.register_class(GeneralPanelProperties
)
1763 Object
.WindowPanelGenerator
= CollectionProperty(type=GeneralPanelProperties
)
1766 # ------------------------------------------------------------------
1767 # Define panel class to modify myobjects.
1768 # ------------------------------------------------------------------
1769 class ARCHIMESH_PT_WindowEdit(Panel
):
1770 bl_idname
= "ARCHIMESH_PT_window_edit"
1771 bl_label
= "Window Panel"
1772 bl_space_type
= 'VIEW_3D'
1773 bl_region_type
= 'UI'
1774 bl_category
= 'Create'
1776 # -----------------------------------------------------
1778 # -----------------------------------------------------
1780 def poll(cls
, context
):
1784 if 'WindowPanelGenerator' not in o
:
1789 # -----------------------------------------------------
1790 # Draw (create UI interface)
1791 # -----------------------------------------------------
1792 def draw(self
, context
):
1794 # If the selected object didn't be created with the group 'WindowPanelGenerator', this panel is not created.
1795 # noinspection PyBroadException
1797 if 'WindowPanelGenerator' not in o
:
1802 layout
= self
.layout
1803 if bpy
.context
.mode
== 'EDIT_MESH':
1804 layout
.label(text
='Warning: Operator does not work in edit mode.', icon
='ERROR')
1806 myobject
= o
.WindowPanelGenerator
[0]
1807 layout
.prop(myobject
, 'prs')
1809 box
.prop(myobject
, 'gen')
1810 box
.prop(myobject
, 'yuk')
1811 box
.prop(myobject
, 'kl1')
1812 box
.prop(myobject
, 'kl2')
1813 box
.prop(myobject
, 'fk')
1814 box
.prop(myobject
, 'r') # rotation
1816 box
.prop(myobject
, 'mr')
1817 if myobject
.mr
is True:
1819 row
.prop(myobject
, 'mr1')
1820 row
.prop(myobject
, 'mr2')
1822 row
.prop(myobject
, 'mr3')
1823 row
.prop(myobject
, 'mr4')
1825 row
.label(text
='Frame')
1826 row
.label(text
='Inner Frame')
1828 row
.prop(myobject
, 'mt1')
1829 row
.prop(myobject
, 'mt2')
1831 box
.prop(myobject
, 'UST')
1832 if myobject
.UST
== '2':
1834 row
.prop(myobject
, 'DT2')
1835 if myobject
.DT2
== '1':
1836 row
.prop(myobject
, 'VL1')
1837 elif myobject
.DT2
== '2':
1838 row
.prop(myobject
, 'VL2')
1839 box
.prop(myobject
, 'res')
1840 elif myobject
.UST
== '3':
1842 row
.prop(myobject
, 'DT3')
1843 if myobject
.DT3
== '1':
1844 row
.prop(myobject
, 'VL1')
1845 elif myobject
.DT3
== '2':
1846 row
.prop(myobject
, 'VL3')
1847 elif myobject
.DT3
== '3':
1848 row
.prop(myobject
, 'VL4')
1849 elif myobject
.UST
== '4':
1851 row
.prop(myobject
, 'DT3')
1852 if myobject
.DT3
== '1':
1853 row
.prop(myobject
, 'VL1')
1854 elif myobject
.DT3
== '2':
1855 row
.prop(myobject
, 'VL3')
1856 elif myobject
.DT3
== '3':
1857 row
.prop(myobject
, 'VL4')
1859 for i
in range(0, myobject
.gen
):
1860 row
.prop(myobject
, 'gnx' + str(i
))
1861 for j
in range(0, myobject
.yuk
):
1863 row
.prop(myobject
, 'gny' + str(myobject
.yuk
- j
- 1))
1864 for i
in range(0, myobject
.gen
):
1865 row
.prop(myobject
, 'k' + str(myobject
.yuk
- j
- 1) + str(i
))