Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormeta-androcto <meta.androcto1@gmail.com>2016-08-03 03:10:18 +0300
committermeta-androcto <meta.androcto1@gmail.com>2016-08-03 03:10:18 +0300
commit5cd9040c995effc4c6bf233e820f741cbaf083ca (patch)
tree52571f0ec0726b6ea067db4a2eba14e939188f27 /archimesh/achm_window_panel.py
parent867ce6317b64a342ed0658702bed687fd3d087d7 (diff)
move archimesh to release re: T37230
Diffstat (limited to 'archimesh/achm_window_panel.py')
-rw-r--r--archimesh/achm_window_panel.py1867
1 files changed, 1867 insertions, 0 deletions
diff --git a/archimesh/achm_window_panel.py b/archimesh/achm_window_panel.py
new file mode 100644
index 00000000..c3c6862b
--- /dev/null
+++ b/archimesh/achm_window_panel.py
@@ -0,0 +1,1867 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# ----------------------------------------------------------
+# Main panel for windows
+# Author: Antonio Vazquez (antonioya)
+#
+# This code is base on the windows generator add-on created by SayProduction
+# and has been adapted to continuous editing and cycles materials
+#
+# ----------------------------------------------------------
+# noinspection PyUnresolvedReferences
+import bpy
+import math
+# noinspection PyUnresolvedReferences
+import mathutils
+from achm_tools import *
+
+
+def fitil(vr, fc, px, pz, x, y, z, zz, xx):
+ k3 = z * 2
+ vr.extend([[px[x] + xx, -z + zz, pz[y] + xx], [px[x] + xx + k3, -z + zz, pz[y] + xx + k3],
+ [px[x] + xx + k3, z + zz, pz[y] + xx + k3], [px[x] + xx, z + zz, pz[y] + xx]])
+ vr.extend([[px[x] + xx, -z + zz, pz[y + 1] - xx], [px[x] + xx + k3, -z + zz, pz[y + 1] - xx - k3],
+ [px[x] + xx + k3, z + zz, pz[y + 1] - xx - k3], [px[x] + xx, z + zz, pz[y + 1] - xx]])
+ vr.extend([[px[x + 1] - xx, -z + zz, pz[y + 1] - xx], [px[x + 1] - xx - k3, -z + zz, pz[y + 1] - xx - k3],
+ [px[x + 1] - xx - k3, z + zz, pz[y + 1] - xx - k3], [px[x + 1] - xx, z + zz, pz[y + 1] - xx]])
+ vr.extend([[px[x + 1] - xx, -z + zz, pz[y] + xx], [px[x + 1] - xx - k3, -z + zz, pz[y] + xx + k3],
+ [px[x + 1] - xx - k3, z + zz, pz[y] + xx + k3], [px[x + 1] - xx, z + zz, pz[y] + xx]])
+ n = len(vr)
+ 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]])
+ 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]])
+ 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]])
+ 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]])
+ z = 0.005
+ vr.extend([[px[x] + xx + k3, -z + zz, pz[y] + xx + k3], [px[x] + xx + k3, -z + zz, pz[y + 1] - xx - k3],
+ [px[x + 1] - xx - k3, -z + zz, pz[y + 1] - xx - k3], [px[x + 1] - xx - k3, -z + zz, pz[y] + xx + k3]])
+ vr.extend([[px[x] + xx + k3, z + zz, pz[y] + xx + k3], [px[x] + xx + k3, z + zz, pz[y + 1] - xx - k3],
+ [px[x + 1] - xx - k3, z + zz, pz[y + 1] - xx - k3], [px[x + 1] - xx - k3, z + zz, pz[y] + xx + k3]])
+ fc.extend([[n + 1, n + 0, n + 3, n + 2], [n + 4, n + 5, n + 6, n + 7]])
+
+
+def kapak(vr, fc, px, pz, x, y, z, zz):
+ k2 = z * 2
+ vr.extend(
+ [[px[x], -z + zz, pz[y]], [px[x] + k2, -z + zz, pz[y] + k2], [px[x] + k2, z + zz, pz[y] + k2],
+ [px[x], z + zz, pz[y]]])
+ 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],
+ [px[x], z + zz, pz[y + 1]]])
+ vr.extend(
+ [[px[x + 1], -z + zz, pz[y + 1]], [px[x + 1] - k2, -z + zz, pz[y + 1] - k2],
+ [px[x + 1] - k2, z + zz, pz[y + 1] - k2],
+ [px[x + 1], z + zz, pz[y + 1]]])
+ 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],
+ [px[x + 1], z + zz, pz[y]]])
+ n = len(vr)
+ 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],
+ [n - 13, n - 16, n - 12, n - 9]])
+ 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],
+ [n - 9, n - 12, n - 8, n - 5]])
+ 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],
+ [n - 5, n - 8, n - 4, n - 1]])
+ 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],
+ [n - 1, n - 4, n - 16, n - 13]])
+
+
+# -----------------------------------------
+# Set default values for each window type
+# -----------------------------------------
+def set_defaults(s):
+ if s.prs == '1':
+ s.gen = 3
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 190
+ s.mr = True
+ s.gnx0 = 60
+ s.gnx1 = 110
+ s.gnx2 = 60
+ s.k00 = True
+ s.k01 = False
+ s.k02 = True
+ if s.prs == '2':
+ s.gen = 3
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 190
+ s.mr = True
+ s.gnx0 = 60
+ s.gnx1 = 60
+ s.gnx2 = 60
+ s.k00 = True
+ s.k01 = False
+ s.k02 = True
+ if s.prs == '3':
+ s.gen = 3
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 190
+ s.mr = True
+ s.gnx0 = 55
+ s.gnx1 = 50
+ s.gnx2 = 55
+ s.k00 = True
+ s.k01 = False
+ s.k02 = True
+ if s.prs == '4':
+ s.gen = 3
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 150
+ s.mr = True
+ s.gnx0 = 55
+ s.gnx1 = 50
+ s.gnx2 = 55
+ s.k00 = True
+ s.k01 = False
+ s.k02 = True
+ if s.prs == '5':
+ s.gen = 3
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 150
+ s.mr = True
+ s.gnx0 = 50
+ s.gnx1 = 40
+ s.gnx2 = 50
+ s.k00 = True
+ s.k01 = False
+ s.k02 = True
+ if s.prs == '6':
+ s.gen = 1
+ s.yuk = 1
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 40
+ s.mr = True
+ s.gnx0 = 40
+ s.k00 = False
+ if s.prs == '7':
+ s.gen = 1
+ s.yuk = 2
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 195
+ s.gny1 = 40
+ s.gnx0 = 70
+ s.k00 = True
+ s.k10 = False
+ s.mr = False
+ if s.prs == '8':
+ s.gen = 1
+ s.yuk = 2
+ s.kl1 = 5
+ s.kl2 = 5
+ s.fk = 2
+ s.gny0 = 180
+ s.gny1 = 35
+ s.gnx0 = 70
+ s.k00 = True
+ s.k10 = False
+ s.mr = False
+
+
+# ------------------------------------------------------------------
+# Define operator class to create window panels
+# ------------------------------------------------------------------
+class AchmWinPanel(bpy.types.Operator):
+ bl_idname = "mesh.archimesh_winpanel"
+ bl_label = "Panel Window"
+ bl_description = "Generate editable flat windows"
+ bl_category = 'Archimesh'
+ bl_options = {'REGISTER', 'UNDO'}
+
+ # -----------------------------------------------------
+ # Draw (create UI interface)
+ # -----------------------------------------------------
+ # noinspection PyUnusedLocal
+ def draw(self, context):
+ layout = self.layout
+ row = layout.row()
+ row.label("Use Properties panel (N) to define parms", icon='INFO')
+
+ # -----------------------------------------------------
+ # Execute
+ # -----------------------------------------------------
+ # noinspection PyUnusedLocal
+ def execute(self, context):
+ if bpy.context.mode == "OBJECT":
+ create_window()
+ return {'FINISHED'}
+ else:
+ self.report({'WARNING'}, "Archimesh: Option only valid in Object mode")
+ return {'CANCELLED'}
+
+
+# ------------------------------------------------------------------------------
+# Create the window
+# ------------------------------------------------------------------------------
+def create_window():
+ # deselect all objects
+ for o in bpy.data.objects:
+ o.select = False
+ # Create main object
+ window_mesh = bpy.data.meshes.new("Window")
+ window_object = bpy.data.objects.new("Window", window_mesh)
+
+ # Link object to scene
+ bpy.context.scene.objects.link(window_object)
+ window_object.WindowPanelGenerator.add()
+ window_object.location = bpy.context.scene.cursor_location
+
+ # Shape the mesh.
+ do_mesh(window_object, window_mesh)
+
+ # deactivate others
+ for o in bpy.data.objects:
+ if o.select is True and o.name != window_object.name:
+ o.select = False
+
+ # Select, and activate object
+ window_object.select = True
+ bpy.context.scene.objects.active = window_object
+
+ do_ctrl_box(window_object)
+ # Reselect
+ window_object.select = True
+ bpy.context.scene.objects.active = window_object
+
+
+# ------------------------------------------------------------------------------
+# Update mesh of the window
+# ------------------------------------------------------------------------------
+# noinspection PyUnusedLocal
+def update_window(self, context):
+ # When update, the active object is the main object.
+ o = bpy.context.active_object
+ oldmesh = o.data
+ oldname = o.data.name
+ # Now deselect that object to not delete it.
+ o.select = False
+ # # and create a new mesh for the object:
+ # tmp_mesh = bpy.data.meshes.new("temp")
+ # deselect all objects
+ for obj in bpy.data.objects:
+ obj.select = False
+ # ---------------------------------
+ # Clear Parent objects (autohole)
+ # ---------------------------------
+ myparent = o.parent
+ if myparent is not None:
+ ploc = myparent.location
+ else:
+ ploc = o.location
+ if myparent is not None:
+ o.parent = None
+ o.location = ploc
+ # remove_children(parent)
+ for child in myparent.children:
+ # noinspection PyBroadException
+ try:
+ # clear child data
+ child.hide = False # must be visible to avoid bug
+ child.hide_render = False # must be visible to avoid bug
+ old = child.data
+ child.select = True
+ bpy.ops.object.delete()
+ bpy.data.meshes.remove(old)
+ except:
+ pass
+
+ myparent.select = True
+ bpy.ops.object.delete()
+
+ # Finally create all that again
+ tmp_mesh = bpy.data.meshes.new("temp")
+ do_mesh(o, tmp_mesh, True)
+ o.data = tmp_mesh
+ # Remove data (mesh of active object),
+ if oldmesh.users == 0:
+ bpy.data.meshes.remove(oldmesh)
+ else:
+ oldmesh.name = "invalid"
+
+ tmp_mesh.name = oldname
+ # deactivate others
+ for ob in bpy.data.objects:
+ if ob.select is True and ob.name != o.name:
+ ob.select = False
+ # and select, and activate, the object.
+ o.select = True
+ bpy.context.scene.objects.active = o
+
+ do_ctrl_box(o)
+
+ # Reselect
+ o.select = True
+ bpy.context.scene.objects.active = o
+
+
+# ------------------------------------------------------------------------------
+# Generate object
+# For object, it only shapes mesh
+# ------------------------------------------------------------------------------
+# noinspection PyUnusedLocal
+def do_mesh(myobject, tmp_mesh, update=False):
+ # noinspection PyBroadException
+ try:
+ op = myobject.WindowPanelGenerator[0]
+ # Create only mesh, because the object was created before.
+ r = generate_window_object(op, tmp_mesh)
+ if r is False:
+ return False
+
+ # refine unit
+ remove_doubles(myobject)
+ set_normals(myobject)
+
+ # saves OpenGL data
+ # sum width
+ totx = myobject.dimensions.x
+ op.glpoint_a = (-totx / 2, 0, 0)
+ top_a, top_b, top_c = get_high_points(myobject, totx, op.UST)
+ op.glpoint_b = (-totx / 2, 0, top_a)
+ op.glpoint_c = (totx / 2, 0, top_b)
+ op.glpoint_d = (0, 0, top_c)
+
+ # Lock
+ myobject.lock_location = (True, True, True)
+ myobject.lock_rotation = (True, True, True)
+ return True
+ except:
+ return False
+
+
+# ------------------------------------------------------------------------------
+# Generate ctrl box
+#
+# ------------------------------------------------------------------------------
+# noinspection PyUnusedLocal
+def do_ctrl_box(myobject):
+ op = myobject.WindowPanelGenerator[0]
+ # -------------------------
+ # Create empty and parent
+ # -------------------------
+ bpy.ops.object.empty_add(type='PLAIN_AXES')
+ myempty = bpy.data.objects[bpy.context.active_object.name]
+ myempty.location = myobject.location
+
+ myempty.name = "Window_Group"
+ parentobject(myempty, myobject)
+ myobject["archimesh.hole_enable"] = True
+ # Rotate Empty
+ myempty.rotation_euler.z = math.radians(op.r)
+ # Create control box to open wall holes
+ myctrl = create_ctrl_box(myobject, "CTRL_Hole")
+
+ # Add custom property to detect Controller
+ myctrl["archimesh.ctrl_hole"] = True
+
+ set_normals(myctrl)
+ myctrl.parent = myempty
+ myctrl.location.x = 0
+ myctrl.location.y = 0
+ myctrl.location.z = 0
+ myctrl.draw_type = 'WIRE'
+ myctrl.hide = False
+ myctrl.hide_render = True
+ myctrl.cycles_visibility.camera = False
+ myctrl.cycles_visibility.diffuse = False
+ myctrl.cycles_visibility.glossy = False
+ myctrl.cycles_visibility.transmission = False
+ myctrl.cycles_visibility.scatter = False
+ myctrl.cycles_visibility.shadow = False
+
+ mat = create_transparent_material("hidden_material", False)
+ set_material(myctrl, mat)
+
+
+# ------------------------------------------------------------------------------
+# Update the parameters using a default value
+# ------------------------------------------------------------------------------
+# noinspection PyUnusedLocal
+def update_using_default(self, context):
+ o = context.object
+ myobject = o.WindowPanelGenerator[0]
+ if myobject.son != myobject.prs:
+ set_defaults(myobject)
+ myobject.son = myobject.prs
+
+
+# ------------------------------------------------------------------------------
+# Generate window object
+# ------------------------------------------------------------------------------
+def generate_window_object(op, mymesh):
+ myvertex = []
+ mfaces = []
+ # noinspection PyBroadException
+ try:
+ rst, ft1, cam, mer, sm = generate_vertex_data(op, myvertex, mfaces)
+ if rst is not True:
+ return False
+
+ mymesh.from_pydata(myvertex, [], mfaces)
+ # Uncomment for debug
+ # mymesh.validate(verbose=True)
+ # Assign materials
+ if op.mt1 == '1':
+ mymesh.materials.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
+ elif op.mt1 == '2':
+ mymesh.materials.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
+ elif op.mt1 == '3':
+ mymesh.materials.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
+ if op.mt2 == '1':
+ mymesh.materials.append(create_diffuse_material("PVC", False, 1, 1, 1, 1, 1, 1))
+ elif op.mt2 == '2':
+ mymesh.materials.append(create_diffuse_material("Wood", False, 0.3, 0.2, 0.1, 0.3, 0.2, 0.1))
+ elif op.mt2 == '3':
+ mymesh.materials.append(create_diffuse_material("Plastic", False, 0, 0, 0, 0, 0, 0))
+
+ mymesh.materials.append(create_glass_material("Glass", False))
+ if op.mr is True:
+ mymesh.materials.append(create_diffuse_material("Marble", False, 0.9, 0.8, 0.7, 0.9, 0.8, 0.7))
+
+ p = len(mymesh.polygons)
+ for i in ft1:
+ if -1 < i < p:
+ mymesh.polygons[i].material_index = 1
+ for i in cam:
+ if -1 < i < p:
+ mymesh.polygons[i].material_index = 2
+ for i in mer:
+ if -1 < i < p:
+ mymesh.polygons[i].material_index = 3
+ for i in sm:
+ if -1 < i < p:
+ mymesh.polygons[i].use_smooth = 1
+
+ mymesh.update(calc_edges=True)
+
+ return True
+ except:
+ return False
+
+
+# -----------------------------------------
+# Generate vertex and faces data
+# -----------------------------------------
+def generate_vertex_data(op, myvertex, myfaces):
+ # noinspection PyBroadException
+ try:
+ h1 = 0
+ c = 0
+ t1 = 0
+
+ mx = op.gen
+ my = op.yuk
+ k1 = op.kl1 / 100
+ k2 = op.kl2 / 100
+ k3 = op.fk / 200
+ res = op.res
+
+ u = op.kl1 / 100
+ xlist = [0, round(u, 2)]
+ if mx > 0:
+ u += op.gnx0 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 1:
+ u += op.gnx1 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 2:
+ u += op.gnx2 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 3:
+ u += op.gnx3 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 4:
+ u += op.gnx4 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 5:
+ u += op.gnx5 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 6:
+ u += op.gnx6 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+ if mx > 7:
+ u += op.gnx7 / 100
+ xlist.append(round(u, 2))
+ u += k2
+ xlist.append(round(u, 2))
+
+ xlist[-1] = xlist[-2] + k1
+
+ u = op.kl1 / 100
+ zlist = [0, round(u, 2)]
+ if my > 0:
+ u += op.gny0 / 100
+ zlist.append(round(u, 2))
+ u += k2
+ zlist.append(round(u, 2))
+ if my > 1:
+ u += op.gny1 / 100
+ zlist.append(round(u, 2))
+ u += k2
+ zlist.append(round(u, 2))
+ if my > 2:
+ u += op.gny2 / 100
+ zlist.append(round(u, 2))
+ u += k2
+ zlist.append(round(u, 2))
+ if my > 3:
+ u += op.gny3 / 100
+ zlist.append(round(u, 2))
+ u += k2
+ zlist.append(round(u, 2))
+ if my > 4:
+ u += op.gny4 / 100
+ zlist.append(round(u, 2))
+ u += k2
+ zlist.append(round(u, 2))
+ zlist[-1] = zlist[-2] + k1
+
+ u = xlist[-1] / 2
+ for i in range(0, len(xlist)):
+ xlist[i] -= u
+ kx = [[op.k00, op.k10, op.k20, op.k30, op.k40],
+ [op.k01, op.k11, op.k21, op.k31, op.k41],
+ [op.k02, op.k12, op.k22, op.k32, op.k42],
+ [op.k03, op.k13, op.k23, op.k33, op.k43],
+ [op.k04, op.k14, op.k24, op.k34, op.k44],
+ [op.k05, op.k15, op.k25, op.k35, op.k45],
+ [op.k06, op.k16, op.k26, op.k36, op.k46],
+ [op.k07, op.k17, op.k27, op.k37, op.k47]]
+ cam = []
+ mer = []
+ ftl = []
+ sm = []
+ # -------------------------
+ # VERTICES
+ # -------------------------
+ myvertex.extend([[xlist[0], -k1 / 2, zlist[0]], [xlist[0], k1 / 2, zlist[0]]])
+ for x in range(1, len(xlist) - 1):
+ myvertex.extend([[xlist[x], -k1 / 2, zlist[1]], [xlist[x], k1 / 2, zlist[1]]])
+ myvertex.extend([[xlist[-1], -k1 / 2, zlist[0]], [xlist[-1], k1 / 2, zlist[0]]])
+ for z in range(2, len(zlist) - 2, 2):
+ for x in range(0, len(xlist)):
+ myvertex.extend([[xlist[x], -k1 / 2, zlist[z]], [xlist[x], k1 / 2, zlist[z]]])
+ for x in range(0, len(xlist)):
+ myvertex.extend([[xlist[x], -k1 / 2, zlist[z + 1]], [xlist[x], k1 / 2, zlist[z + 1]]])
+ z = len(zlist) - 2
+ myvertex.extend([[xlist[0], -k1 / 2, zlist[z + 1]], [xlist[0], k1 / 2, zlist[z + 1]]])
+ alt = []
+ ust = [len(myvertex) - 2, len(myvertex) - 1]
+ for x in range(1, len(xlist) - 1):
+ myvertex.extend([[xlist[x], -k1 / 2, zlist[z]], [xlist[x], k1 / 2, zlist[z]]])
+ alt.extend([len(myvertex) - 2, len(myvertex) - 1])
+ myvertex.extend([[xlist[-1], -k1 / 2, zlist[z + 1]], [xlist[-1], k1 / 2, zlist[z + 1]]])
+ son = [len(myvertex) - 2, len(myvertex) - 1]
+ # -------------------------
+ # FACES
+ # -------------------------
+ myfaces.append([0, 1, 3 + mx * 4, 2 + mx * 4])
+ fb = [0]
+ fr = [1]
+ for i in range(0, mx * 4, 4):
+ myfaces.append([i + 3, i + 2, i + 4, i + 5])
+ fb.extend([i + 2, i + 4])
+ fr.extend([i + 3, i + 5])
+ fr.append(3 + mx * 4)
+ fb.append(2 + mx * 4)
+ fb.reverse()
+ myfaces.extend([fb, fr])
+ # Yatay
+ y = (mx * 4 + 4)
+ v = mx * 4 + 2
+ for z in range(0, (my - 1) * y * 2, y * 2):
+ myfaces.extend([[z + y + 1, z + y, z + y + 4 + mx * 4, z + y + 5 + mx * 4],
+ [z + y + v, z + y + v + 1, z + y + v + 5 + mx * 4, z + y + v + 4 + mx * 4]])
+ for i in range(0, mx * 4 + 2, 2):
+ myfaces.extend([[z + i + y + 0, z + i + y + 2, z + i + y + v + 4, z + i + y + v + 2],
+ [z + i + y + 3, z + i + y + 1, z + i + y + v + 3, z + i + y + v + 5]])
+ for i in range(0, mx * 4 - 3, 4):
+ myfaces.extend([[z + i + y + 2, z + i + y + 3, z + i + y + 5, z + i + y + 4],
+ [z + i + y + v + 5, z + i + y + v + 4, z + i + y + v + 6,
+ z + i + y + v + 7]])
+ # Dikey
+ for y in range(0, my):
+ z = y * (mx * 4 + 4) * 2
+ for i in range(0, mx * 4 + 2, 4):
+ myfaces.extend([[z + i + 1, z + i + 0, z + i + v + 2, z + i + v + 3],
+ [z + i + 3, z + i + 1, z + i + v + 3, z + i + v + 5],
+ [z + i + 2, z + i + 3, z + i + v + 5, z + i + v + 4],
+ [z + i + 0, z + i + 2, z + i + v + 4, z + i + v + 2]])
+ # Fitil
+ if op.UST == '1':
+ y1 = my
+ else:
+ y1 = my - 1
+ for y in range(0, y1):
+ for x in range(0, mx):
+ if kx[x][y] is True:
+ kapak(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k2 / 2, (k1 + k2) * 0.5 - 0.01)
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, (k1 + k2) * 0.5 - 0.01, k2)
+ else:
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, 0, 0)
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+ 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])
+ # -----------------------------------------------------
+ if op.UST == '1': # Duz
+ myfaces.append([ust[1], ust[0], son[0], son[1]])
+ for i in range(0, mx * 4, 4):
+ myfaces.append([alt[i], alt[i + 1], alt[i + 3], alt[i + 2]])
+ on = [ust[0]]
+ ar = [ust[1]]
+ for i in range(0, len(alt) - 1, 2):
+ on.append(alt[i])
+ ar.append(alt[i + 1])
+ on.append(son[0])
+ myfaces.append(on)
+ ar.append(son[1])
+ ar.reverse()
+ myfaces.append(ar)
+ elif op.UST == '2': # Arch
+ if op.DT2 == '1':
+ h1 = op.VL1 / 100
+ if op.VL1 < 6:
+ h1 = 6 / 100
+
+ if h1 < 0.01:
+ h1 = 0.01
+ # op.VL1 = 1
+ elif h1 >= u:
+ h1 = u - 0.01
+ # op.VL1 = h1 * 100
+ if h1 < 0.07:
+ h1 = 0.07
+
+ h = math.sqrt(u ** 2 + h1 ** 2) / 2
+ e = h * (u / h1)
+ c = math.sqrt(h ** 2 + e ** 2)
+ t1 = zlist[-1] - h1
+ elif op.DT2 == '2':
+ c = op.VL2 / 100
+ if c < u + 0.01:
+ c = u + 0.01
+ # op.VL2 = c * 100
+ t1 = math.sqrt(c ** 2 - u ** 2) + zlist[-1] - c
+ r = c - k1
+ z = zlist[-1] - c
+
+ myvertex[ust[0]][2] = t1
+ myvertex[ust[1]][2] = t1
+ myvertex[son[0]][2] = t1
+ myvertex[son[1]][2] = t1
+ for i in alt:
+ myvertex[i][2] = math.sqrt(r ** 2 - myvertex[i][0] ** 2) + z
+
+ on = [son[0]]
+ u1 = []
+ for i in range(0, res):
+ a = i * math.pi / res
+ x = math.cos(a) * c
+ if -u < x < u:
+ myvertex.append([x, -k1 / 2, math.sin(a) * c + z])
+ on.append(len(myvertex) - 1)
+ u1.extend(on)
+ u1.append(ust[0])
+ on.extend([ust[0], alt[0]])
+ ar = []
+ d1 = []
+ d2 = []
+ for i in range(0, len(alt) - 2, 4):
+ x1 = myvertex[alt[i + 0]][0]
+ x2 = myvertex[alt[i + 2]][0]
+ on.append(alt[i + 0])
+ ar.append(alt[i + 1])
+ t1 = [alt[i + 0]]
+ t2 = [alt[i + 1]]
+ for j in range(0, res):
+ a = j * math.pi / res
+ x = -math.cos(a) * r
+ if x1 < x < x2:
+ myvertex.extend([[x, -k1 / 2, math.sin(a) * r + z], [x, k1 / 2, math.sin(a) * r + z]])
+ on.append(len(myvertex) - 2)
+ ar.append(len(myvertex) - 1)
+ t1.append(len(myvertex) - 2)
+ t2.append(len(myvertex) - 1)
+ on.append(alt[i + 2])
+ ar.append(alt[i + 3])
+ t1.append(alt[i + 2])
+ t2.append(alt[i + 3])
+ d1.append(t1)
+ d2.append(t2)
+ ar.append(son[1])
+ u2 = [son[1]]
+ for i in range(0, res):
+ a = i * math.pi / res
+ x = math.cos(a) * c
+ if -u < x < u:
+ myvertex.append([x, k1 / 2, math.sin(a) * c + z])
+ ar.append(len(myvertex) - 1)
+ u2.append(len(myvertex) - 1)
+ ar.append(ust[1])
+ u2.append(ust[1])
+ ar.reverse()
+ myfaces.extend([on, ar])
+ for i in range(0, len(u1) - 1):
+ myfaces.append([u1[i + 1], u1[i], u2[i], u2[i + 1]])
+ sm.append(len(myfaces) - 1)
+ for a in range(0, mx):
+ for i in range(0, len(d1[a]) - 1):
+ myfaces.append([d1[a][i + 1], d1[a][i], d2[a][i], d2[a][i + 1]])
+ sm.append(len(myfaces) - 1)
+ y = my - 1
+ for x in range(0, mx):
+ if kx[x][y] is True:
+ fr = (k1 + k2) * 0.5 - 0.01
+ ek = k2
+ r = c - k1
+ k = r - k2
+
+ x1 = xlist[x * 2 + 1]
+ x2 = xlist[x * 2 + 2]
+ myvertex.extend([[x2, fr - k2 / 2, z + 1], [x2 - k2, fr - k2 / 2, z + 1],
+ [x2 - k2, fr + k2 / 2, z + 1],
+ [x2, fr + k2 / 2, z + 1]])
+ myvertex.extend([[x2, fr - k2 / 2, zlist[-3]], [x2 - k2, fr - k2 / 2, zlist[-3] + k2],
+ [x2 - k2, fr + k2 / 2,
+ zlist[-3] + k2],
+ [x2, fr + k2 / 2, zlist[-3]]])
+ myvertex.extend([[x1, fr - k2 / 2, zlist[-3]], [x1 + k2, fr - k2 / 2, zlist[-3] + k2],
+ [x1 + k2, fr + k2 / 2,
+ zlist[-3] + k2],
+ [x1, fr + k2 / 2, zlist[-3]]])
+ myvertex.extend([[x1, fr - k2 / 2, z + 1], [x1 + k2, fr - k2 / 2, z + 1],
+ [x1 + k2, fr + k2 / 2, z + 1],
+ [x1, fr + k2 / 2, z + 1]])
+
+ n = len(myvertex)
+ myfaces.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], [n - 13, n - 16, n - 12, n - 9]])
+ myfaces.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],
+ [n - 9, n - 12, n - 8, n - 5]])
+ myfaces.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],
+ [n - 5, n - 8, n - 4, n - 1]])
+ alt = [n - 16, n - 15, n - 14, n - 13, n - 4, n - 3, n - 2, n - 1]
+ myvertex[alt[0]][2] = math.sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
+ myvertex[alt[1]][2] = math.sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
+ myvertex[alt[2]][2] = math.sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
+ myvertex[alt[3]][2] = math.sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
+ myvertex[alt[4]][2] = math.sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
+ myvertex[alt[5]][2] = math.sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
+ myvertex[alt[6]][2] = math.sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
+ myvertex[alt[7]][2] = math.sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
+
+ d1 = []
+ d2 = []
+ t1 = []
+ t2 = []
+ for i in range(0, res):
+ a = i * math.pi / res
+ y1 = math.cos(a) * r
+ y2 = -math.cos(a) * k
+ if x1 < y1 < x2:
+ myvertex.extend([[y1, fr - k2 / 2, math.sin(a) * r + z], [y1, fr + k2 / 2,
+ math.sin(a) * r + z]])
+ t1.append(len(myvertex) - 2)
+ t2.append(len(myvertex) - 1)
+ if x1 + k2 < y2 < x2 - k2:
+ myvertex.extend([[y2, fr - k2 / 2, math.sin(a) * k + z], [y2, fr + k2 / 2,
+ math.sin(a) * k + z]])
+ d1.append(len(myvertex) - 2)
+ d2.append(len(myvertex) - 1)
+ on = [alt[1], alt[0]]
+ on.extend(t1)
+ on.extend([alt[4], alt[5]])
+ on.extend(d1)
+ ar = [alt[2], alt[3]]
+ ar.extend(t2)
+ ar.extend([alt[7], alt[6]])
+ ar.extend(d2)
+ ar.reverse()
+
+ if d1 == [] and t1 == []:
+ myfaces.extend([on, ar, [alt[5], alt[6], alt[2], alt[1]], [alt[7], alt[4], alt[0], alt[
+ 3]]])
+ m = len(myfaces)
+ sm.extend(
+ [m - 1, m - 2])
+ elif d1 == [] and t1 != []:
+ myfaces.extend([on, ar, [alt[5], alt[6], alt[2], alt[1]], [alt[7], alt[4], t1[-1], t2[-1]],
+ [alt[0], alt[3], t2[0], t1[0]]])
+ m = len(myfaces)
+ sm.extend(
+ [m - 1, m - 2, m - 3])
+ elif d1 != [] and t1 == []:
+ myfaces.extend([on, ar, [alt[5], alt[6], d2[0], d1[0]], [alt[2], alt[1], d1[-1], d2[-1]],
+ [alt[7], alt[4], alt[0], alt[3]]])
+ m = len(myfaces)
+ sm.extend(
+ [m - 1, m - 2, m - 3])
+ else:
+ myfaces.extend([on, ar, [alt[5], alt[6], d2[0], d1[0]], [alt[2], alt[1], d1[-1], d2[-1]],
+ [alt[7], alt[4], t1[-1], t2[-1]], [alt[0], alt[3], t2[0], t1[0]]])
+ m = len(myfaces)
+ sm.extend(
+ [m - 1, m - 2, m - 3, m - 4])
+
+ for i in range(0, len(d1) - 1):
+ myfaces.append([d1[i + 1], d1[i], d2[i], d2[i + 1]])
+ sm.append(len(myfaces) - 1)
+ for i in range(0, len(t1) - 1):
+ myfaces.append([t1[i + 1], t1[i], t2[i], t2[i + 1]])
+ sm.append(len(myfaces) - 1)
+ r = c - k1 - k2
+ k = r - k3 * 2
+ else:
+ fr = 0
+ ek = 0
+ r = c - k1
+ k = r - k3 * 2
+ # Fitil
+ x1 = xlist[x * 2 + 1] + ek
+ x2 = xlist[x * 2 + 2] - ek
+ myvertex.extend([[x2, fr - k3, z + 1], [x2 - k3 * 2, fr - k3, z + 1], [x2 - k3 * 2, fr + k3, z + 1],
+ [x2, fr + k3, z + 1]])
+ myvertex.extend([[x2, fr - k3, zlist[-3] + ek], [x2 - k3 * 2, fr - k3, zlist[-3] + ek + k3 * 2],
+ [x2 - k3 * 2, fr + k3, zlist[-3] + ek + k3 * 2], [x2, fr + k3, zlist[-3] + ek]])
+ myvertex.extend([[x1, fr - k3, zlist[-3] + ek], [x1 + k3 * 2, fr - k3, zlist[-3] + ek + k3 * 2],
+ [x1 + k3 * 2, fr + k3, zlist[-3] + ek + k3 * 2], [x1, fr + k3, zlist[-3] + ek]])
+ myvertex.extend([[x1, fr - k3, z + 1], [x1 + k3 * 2, fr - k3, z + 1], [x1 + k3 * 2, fr + k3, z + 1],
+ [x1, fr + k3, z + 1]])
+ n = len(myvertex)
+ myfaces.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]])
+ myfaces.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]])
+ myfaces.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]])
+ m = len(myfaces)
+ ftl.extend([m - 1, m - 2, m - 3, m - 4, m - 5, m - 6, m - 7, m - 8, m - 9])
+ alt = [n - 16, n - 15, n - 14, n - 13, n - 4, n - 3, n - 2, n - 1]
+ myvertex[alt[0]][2] = math.sqrt(r ** 2 - myvertex[alt[0]][0] ** 2) + z
+ myvertex[alt[1]][2] = math.sqrt(k ** 2 - myvertex[alt[1]][0] ** 2) + z
+ myvertex[alt[2]][2] = math.sqrt(k ** 2 - myvertex[alt[2]][0] ** 2) + z
+ myvertex[alt[3]][2] = math.sqrt(r ** 2 - myvertex[alt[3]][0] ** 2) + z
+ myvertex[alt[4]][2] = math.sqrt(r ** 2 - myvertex[alt[4]][0] ** 2) + z
+ myvertex[alt[5]][2] = math.sqrt(k ** 2 - myvertex[alt[5]][0] ** 2) + z
+ myvertex[alt[6]][2] = math.sqrt(k ** 2 - myvertex[alt[6]][0] ** 2) + z
+ myvertex[alt[7]][2] = math.sqrt(r ** 2 - myvertex[alt[7]][0] ** 2) + z
+ d1 = []
+ d2 = []
+ t1 = []
+ t2 = []
+ for i in range(0, res):
+ a = i * math.pi / res
+ y1 = math.cos(a) * r
+ y2 = -math.cos(a) * k
+ if x1 < y1 < x2:
+ myvertex.extend([[y1, fr - k3, math.sin(a) * r + z], [y1, fr + k3, math.sin(a) * r + z]])
+ t1.append(len(myvertex) - 2)
+ t2.append(len(myvertex) - 1)
+ ftl.extend([len(myfaces) - 1, len(myfaces) - 2])
+ if x1 + k3 * 2 < y2 < x2 - k3 * 2:
+ myvertex.extend([[y2, fr - k3, math.sin(a) * k + z], [y2, fr + k3, math.sin(a) * k + z]])
+ d1.append(len(myvertex) - 2)
+ d2.append(len(myvertex) - 1)
+ ftl.extend([len(myfaces) - 1, len(myfaces) - 2])
+ on = [alt[1], alt[0]]
+ on.extend(t1)
+ on.extend([alt[4], alt[5]])
+ on.extend(d1)
+ ar = [alt[2], alt[3]]
+ ar.extend(t2)
+ ar.extend([alt[7], alt[6]])
+ ar.extend(d2)
+ ar.reverse()
+
+ if not d1:
+ myfaces.extend([on, ar, [alt[5], alt[6], alt[2], alt[1]]])
+ m = len(myfaces)
+ ftl.extend([m - 1, m - 2, m - 3])
+ sm.extend([m - 1])
+ else:
+ myfaces.extend([on, ar, [alt[5], alt[6], d2[0], d1[0]], [alt[2], alt[1], d1[-1], d2[-1]]])
+ m = len(myfaces)
+ ftl.extend([m - 1, m - 2, m - 3, m - 4])
+ sm.extend([m - 1, m - 2])
+
+ for i in range(0, len(d1) - 1):
+ myfaces.append([d1[i + 1], d1[i], d2[i], d2[i + 1]])
+ ftl.append(len(myfaces) - 1)
+ sm.append(len(myfaces) - 1)
+ # Cam
+ x1 = xlist[x * 2 + 1] + ek + k3 * 2
+ x2 = xlist[x * 2 + 2] - ek - k3 * 2
+ on = []
+ ar = []
+ for i in range(0, res):
+ a = i * math.pi / res
+ y1 = -math.cos(a) * k
+ if x1 < y1 < x2:
+ myvertex.extend([[y1, fr - 0.005, math.sin(a) * k + z], [y1, fr + 0.005, math.sin(a) * k + z]])
+ n = len(myvertex)
+ on.append(n - 1)
+ ar.append(n - 2)
+ myvertex.extend(
+ [[x1, fr - 0.005, math.sqrt(k ** 2 - x1 ** 2) + z], [x1, fr + 0.005,
+ math.sqrt(k ** 2 - x1 ** 2) + z]])
+ myvertex.extend([[x1, fr - 0.005, zlist[-3] + ek + k3 * 2], [x1, fr + 0.005, zlist[-3] + ek + k3 * 2]])
+ myvertex.extend([[x2, fr - 0.005, zlist[-3] + ek + k3 * 2], [x2, fr + 0.005, zlist[-3] + ek + k3 * 2]])
+ myvertex.extend(
+ [[x2, fr - 0.005, math.sqrt(k ** 2 - x2 ** 2) + z], [x2, fr + 0.005,
+ math.sqrt(k ** 2 - x2 ** 2) + z]])
+ n = len(myvertex)
+ on.extend([n - 1, n - 3, n - 5, n - 7])
+ ar.extend([n - 2, n - 4, n - 6, n - 8])
+ myfaces.append(on)
+ ar.reverse()
+ myfaces.append(ar)
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+
+ elif op.UST == '3': # Egri
+ if op.DT3 == '1':
+ h1 = (op.VL1 / 200) / u
+ elif op.DT3 == '2':
+ h1 = op.VL3 / 100
+ elif op.DT3 == '3':
+ h1 = math.sin(op.VL4 * math.pi / 180) / math.cos(op.VL4 * math.pi / 180)
+ z = math.sqrt(k1 ** 2 + (k1 * h1) ** 2)
+ k = math.sqrt(k2 ** 2 + (k2 * h1) ** 2)
+ f = math.sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
+ myvertex[ust[0]][2] = zlist[-1] + myvertex[ust[0]][0] * h1
+ myvertex[ust[1]][2] = zlist[-1] + myvertex[ust[1]][0] * h1
+ for i in alt:
+ myvertex[i][2] = zlist[-1] + myvertex[i][0] * h1 - z
+ myvertex[son[0]][2] = zlist[-1] + myvertex[son[0]][0] * h1
+ myvertex[son[1]][2] = zlist[-1] + myvertex[son[1]][0] * h1
+ myfaces.append([ust[1], ust[0], son[0], son[1]])
+ for i in range(0, mx * 4, 4):
+ myfaces.append([alt[i], alt[i + 1], alt[i + 3], alt[i + 2]])
+ on = [ust[0]]
+ ar = [ust[1]]
+ for i in range(0, len(alt) - 1, 2):
+ on.append(alt[i])
+ ar.append(alt[i + 1])
+ on.append(son[0])
+ myfaces.append(on)
+ ar.append(son[1])
+ ar.reverse()
+ myfaces.append(ar)
+ y = my - 1
+ for x in range(0, mx):
+ if kx[x][y] is True:
+ kapak(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k2 / 2, (k1 + k2) * 0.5 - 0.01)
+ n = len(myvertex)
+ myvertex[n - 5][2] = zlist[-1] + myvertex[n - 5][0] * h1 - z
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - k
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - k
+ myvertex[n - 8][2] = zlist[-1] + myvertex[n - 8][0] * h1 - z
+ myvertex[n - 9][2] = zlist[-1] + myvertex[n - 9][0] * h1 - z
+ myvertex[n - 10][2] = zlist[-1] + myvertex[n - 10][0] * h1 - z - k
+ myvertex[n - 11][2] = zlist[-1] + myvertex[n - 11][0] * h1 - z - k
+ myvertex[n - 12][2] = zlist[-1] + myvertex[n - 12][0] * h1 - z
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, (k1 + k2) * 0.5 - 0.01, k2)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] + myvertex[n - 2][0] * h1 - z - k - f
+ myvertex[n - 3][2] = zlist[-1] + myvertex[n - 3][0] * h1 - z - k - f
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - k - f
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - k - f
+ myvertex[n - 13][2] = zlist[-1] + myvertex[n - 13][0] * h1 - z - k
+ myvertex[n - 14][2] = zlist[-1] + myvertex[n - 14][0] * h1 - z - k - f
+ myvertex[n - 15][2] = zlist[-1] + myvertex[n - 15][0] * h1 - z - k - f
+ myvertex[n - 16][2] = zlist[-1] + myvertex[n - 16][0] * h1 - z - k
+ myvertex[n - 17][2] = zlist[-1] + myvertex[n - 17][0] * h1 - z - k
+ myvertex[n - 18][2] = zlist[-1] + myvertex[n - 18][0] * h1 - z - k - f
+ myvertex[n - 19][2] = zlist[-1] + myvertex[n - 19][0] * h1 - z - k - f
+ myvertex[n - 20][2] = zlist[-1] + myvertex[n - 20][0] * h1 - z - k
+ else:
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, 0, 0)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] + myvertex[n - 2][0] * h1 - z - f
+ myvertex[n - 3][2] = zlist[-1] + myvertex[n - 3][0] * h1 - z - f
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - f
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - f
+ myvertex[n - 13][2] = zlist[-1] + myvertex[n - 13][0] * h1 - z
+ myvertex[n - 14][2] = zlist[-1] + myvertex[n - 14][0] * h1 - z - f
+ myvertex[n - 15][2] = zlist[-1] + myvertex[n - 15][0] * h1 - z - f
+ myvertex[n - 16][2] = zlist[-1] + myvertex[n - 16][0] * h1 - z
+ myvertex[n - 17][2] = zlist[-1] + myvertex[n - 17][0] * h1 - z
+ myvertex[n - 18][2] = zlist[-1] + myvertex[n - 18][0] * h1 - z - f
+ myvertex[n - 19][2] = zlist[-1] + myvertex[n - 19][0] * h1 - z - f
+ myvertex[n - 20][2] = zlist[-1] + myvertex[n - 20][0] * h1 - z
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+ 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])
+ elif op.UST == '4': # Ucgen
+ if op.DT3 == '1':
+ h1 = (op.VL1 / 100) / u
+ elif op.DT3 == '2':
+ h1 = op.VL3 / 100
+ elif op.DT3 == '3':
+ h1 = math.sin(op.VL4 * math.pi / 180) / math.cos(op.VL4 * math.pi / 180)
+ z = math.sqrt(k1 ** 2 + (k1 * h1) ** 2)
+ k = math.sqrt(k2 ** 2 + (k2 * h1) ** 2)
+ f = math.sqrt(k3 ** 2 + (k3 * h1) ** 2) * 2
+ myvertex[ust[0]][2] = zlist[-1] + myvertex[ust[0]][0] * h1
+ myvertex[ust[1]][2] = zlist[-1] + myvertex[ust[1]][0] * h1
+ for i in alt:
+ myvertex[i][2] = zlist[-1] - abs(myvertex[i][0]) * h1 - z
+ myvertex[son[0]][2] = zlist[-1] - myvertex[son[0]][0] * h1
+ myvertex[son[1]][2] = zlist[-1] - myvertex[son[1]][0] * h1
+ myvertex.extend([[0, -k1 / 2, zlist[-1]], [0, k1 / 2, zlist[-1]]])
+
+ x = 0
+ for j in range(2, len(alt) - 2, 4):
+ if myvertex[alt[j]][0] < 0 < myvertex[alt[j + 2]][0]:
+ x = 1
+
+ n = len(myvertex)
+ myfaces.extend([[ust[1], ust[0], n - 2, n - 1], [n - 1, n - 2, son[0], son[1]]])
+ on = [son[0], n - 2, ust[0]]
+ ar = [son[1], n - 1, ust[1]]
+
+ if x == 0:
+ myvertex.extend([[0, -k1 / 2, zlist[-1] - z], [0, k1 / 2, zlist[-1] - z]])
+ for j in range(0, len(alt) - 2, 4):
+ if myvertex[alt[j]][0] < 0 and myvertex[alt[j + 2]][0] < 0:
+ myfaces.append([alt[j], alt[j + 1], alt[j + 3], alt[j + 2]])
+ on.extend([alt[j], alt[j + 2]])
+ ar.extend([alt[j + 1], alt[j + 3]])
+ elif myvertex[alt[j]][0] > 0 and myvertex[alt[j + 2]][0] > 0:
+ myfaces.append([alt[j], alt[j + 1], alt[j + 3], alt[j + 2]])
+ on.extend([alt[j], alt[j + 2]])
+ ar.extend([alt[j + 1], alt[j + 3]])
+ else:
+ n = len(myvertex)
+ myfaces.extend([[alt[j], alt[j + 1], n - 1, n - 2], [n - 2, n - 1, alt[j + 3], alt[j + 2]]])
+ on.extend([alt[j + 0], n - 2, alt[j + 2]])
+ ar.extend([alt[j + 1], n - 1, alt[j + 3]])
+ myfaces.append(on)
+ ar.reverse()
+ myfaces.append(ar)
+ y = my - 1
+ for x in range(0, mx):
+ if myvertex[alt[x * 4]][0] < 0 and myvertex[alt[x * 4 + 2]][0] < 0:
+ if kx[x][y] is True:
+ kapak(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k2 / 2, (k1 + k2) * 0.5 - 0.01)
+ n = len(myvertex)
+ myvertex[n - 5][2] = zlist[-1] + myvertex[n - 5][0] * h1 - z
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - k
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - k
+ myvertex[n - 8][2] = zlist[-1] + myvertex[n - 8][0] * h1 - z
+ myvertex[n - 9][2] = zlist[-1] + myvertex[n - 9][0] * h1 - z
+ myvertex[n - 10][2] = zlist[-1] + myvertex[n - 10][0] * h1 - z - k
+ myvertex[n - 11][2] = zlist[-1] + myvertex[n - 11][0] * h1 - z - k
+ myvertex[n - 12][2] = zlist[-1] + myvertex[n - 12][0] * h1 - z
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, (k1 + k2) * 0.5 - 0.01, k2)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] + myvertex[n - 2][0] * h1 - z - k - f
+ myvertex[n - 3][2] = zlist[-1] + myvertex[n - 3][0] * h1 - z - k - f
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - k - f
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - k - f
+ myvertex[n - 13][2] = zlist[-1] + myvertex[n - 13][0] * h1 - z - k
+ myvertex[n - 14][2] = zlist[-1] + myvertex[n - 14][0] * h1 - z - k - f
+ myvertex[n - 15][2] = zlist[-1] + myvertex[n - 15][0] * h1 - z - k - f
+ myvertex[n - 16][2] = zlist[-1] + myvertex[n - 16][0] * h1 - z - k
+ myvertex[n - 17][2] = zlist[-1] + myvertex[n - 17][0] * h1 - z - k
+ myvertex[n - 18][2] = zlist[-1] + myvertex[n - 18][0] * h1 - z - k - f
+ myvertex[n - 19][2] = zlist[-1] + myvertex[n - 19][0] * h1 - z - k - f
+ myvertex[n - 20][2] = zlist[-1] + myvertex[n - 20][0] * h1 - z - k
+ else:
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, 0, 0)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] + myvertex[n - 2][0] * h1 - z - f
+ myvertex[n - 3][2] = zlist[-1] + myvertex[n - 3][0] * h1 - z - f
+ myvertex[n - 6][2] = zlist[-1] + myvertex[n - 6][0] * h1 - z - f
+ myvertex[n - 7][2] = zlist[-1] + myvertex[n - 7][0] * h1 - z - f
+ myvertex[n - 13][2] = zlist[-1] + myvertex[n - 13][0] * h1 - z
+ myvertex[n - 14][2] = zlist[-1] + myvertex[n - 14][0] * h1 - z - f
+ myvertex[n - 15][2] = zlist[-1] + myvertex[n - 15][0] * h1 - z - f
+ myvertex[n - 16][2] = zlist[-1] + myvertex[n - 16][0] * h1 - z
+ myvertex[n - 17][2] = zlist[-1] + myvertex[n - 17][0] * h1 - z
+ myvertex[n - 18][2] = zlist[-1] + myvertex[n - 18][0] * h1 - z - f
+ myvertex[n - 19][2] = zlist[-1] + myvertex[n - 19][0] * h1 - z - f
+ myvertex[n - 20][2] = zlist[-1] + myvertex[n - 20][0] * h1 - z
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+ 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])
+ elif myvertex[alt[x * 4]][0] > 0 and myvertex[alt[x * 4 + 2]][0] > 0:
+ if kx[x][y] is True:
+ kapak(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k2 / 2, (k1 + k2) * 0.5 - 0.01)
+ n = len(myvertex)
+ myvertex[n - 5][2] = zlist[-1] - myvertex[n - 5][0] * h1 - z
+ myvertex[n - 6][2] = zlist[-1] - myvertex[n - 6][0] * h1 - z - k
+ myvertex[n - 7][2] = zlist[-1] - myvertex[n - 7][0] * h1 - z - k
+ myvertex[n - 8][2] = zlist[-1] - myvertex[n - 8][0] * h1 - z
+ myvertex[n - 9][2] = zlist[-1] - myvertex[n - 9][0] * h1 - z
+ myvertex[n - 10][2] = zlist[-1] - myvertex[n - 10][0] * h1 - z - k
+ myvertex[n - 11][2] = zlist[-1] - myvertex[n - 11][0] * h1 - z - k
+ myvertex[n - 12][2] = zlist[-1] - myvertex[n - 12][0] * h1 - z
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, (k1 + k2) * 0.5 - 0.01, k2)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] - myvertex[n - 2][0] * h1 - z - k - f
+ myvertex[n - 3][2] = zlist[-1] - myvertex[n - 3][0] * h1 - z - k - f
+ myvertex[n - 6][2] = zlist[-1] - myvertex[n - 6][0] * h1 - z - k - f
+ myvertex[n - 7][2] = zlist[-1] - myvertex[n - 7][0] * h1 - z - k - f
+ myvertex[n - 13][2] = zlist[-1] - myvertex[n - 13][0] * h1 - z - k
+ myvertex[n - 14][2] = zlist[-1] - myvertex[n - 14][0] * h1 - z - k - f
+ myvertex[n - 15][2] = zlist[-1] - myvertex[n - 15][0] * h1 - z - k - f
+ myvertex[n - 16][2] = zlist[-1] - myvertex[n - 16][0] * h1 - z - k
+ myvertex[n - 17][2] = zlist[-1] - myvertex[n - 17][0] * h1 - z - k
+ myvertex[n - 18][2] = zlist[-1] - myvertex[n - 18][0] * h1 - z - k - f
+ myvertex[n - 19][2] = zlist[-1] - myvertex[n - 19][0] * h1 - z - k - f
+ myvertex[n - 20][2] = zlist[-1] - myvertex[n - 20][0] * h1 - z - k
+ else:
+ fitil(myvertex, myfaces, xlist, zlist, x * 2 + 1, y * 2 + 1, k3, 0, 0)
+ n = len(myvertex)
+ myvertex[n - 2][2] = zlist[-1] - myvertex[n - 2][0] * h1 - z - f
+ myvertex[n - 3][2] = zlist[-1] - myvertex[n - 3][0] * h1 - z - f
+ myvertex[n - 6][2] = zlist[-1] - myvertex[n - 6][0] * h1 - z - f
+ myvertex[n - 7][2] = zlist[-1] - myvertex[n - 7][0] * h1 - z - f
+ myvertex[n - 13][2] = zlist[-1] - myvertex[n - 13][0] * h1 - z
+ myvertex[n - 14][2] = zlist[-1] - myvertex[n - 14][0] * h1 - z - f
+ myvertex[n - 15][2] = zlist[-1] - myvertex[n - 15][0] * h1 - z - f
+ myvertex[n - 16][2] = zlist[-1] - myvertex[n - 16][0] * h1 - z
+ myvertex[n - 17][2] = zlist[-1] - myvertex[n - 17][0] * h1 - z
+ myvertex[n - 18][2] = zlist[-1] - myvertex[n - 18][0] * h1 - z - f
+ myvertex[n - 19][2] = zlist[-1] - myvertex[n - 19][0] * h1 - z - f
+ myvertex[n - 20][2] = zlist[-1] - myvertex[n - 20][0] * h1 - z
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+ 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])
+ else:
+ k4 = k3 * 2
+ if kx[x][y] is True:
+ zz = (k1 + k2) * 0.5 - 0.01
+ xx = xlist[x * 2 + 1]
+ myvertex.extend([[xx, -k2 / 2 + zz, zlist[-3]], [xx + k2, -k2 / 2 + zz, zlist[-3] + k2],
+ [xx + k2, k2 / 2 + zz, zlist[-3] + k2], [xx, k2 / 2 + zz, zlist[-3]]])
+ myvertex.extend(
+ [[xx, -k2 / 2 + zz, zlist[-1] + xx * h1 - z], [xx + k2, -k2 / 2 + zz,
+ zlist[-1] + (xx + k2) * h1 - z - k],
+ [xx + k2, k2 / 2 + zz, zlist[-1] + (xx + k2) * h1 - z - k],
+ [xx, k2 / 2 + zz, zlist[-1] + xx * h1 - z]])
+ myvertex.extend([[0, -k2 / 2 + zz, zlist[-1] - z], [0, -k2 / 2 + zz, zlist[-1] - z - k],
+ [0, k2 / 2 + zz, zlist[-1] - z - k], [0, k2 / 2 + zz, zlist[-1] - z]])
+ xx = xlist[x * 2 + 2]
+ myvertex.extend(
+ [[xx, -k2 / 2 + zz, zlist[-1] - xx * h1 - z], [xx - k2, -k2 / 2 + zz,
+ zlist[-1] - (xx - k2) * h1 - z - k],
+ [xx - k2, k2 / 2 + zz, zlist[-1] - (xx - k2) * h1 - z - k],
+ [xx, k2 / 2 + zz, zlist[-1] - xx * h1 - z]])
+ myvertex.extend([[xx, -k2 / 2 + zz, zlist[-3]], [xx - k2, -k2 / 2 + zz, zlist[-3] + k2],
+ [xx - k2, k2 / 2 + zz, zlist[-3] + k2], [xx, k2 / 2 + zz, zlist[-3]]])
+ n = len(myvertex)
+ myfaces.extend([[n - 20, n - 19, n - 15, n - 16], [n - 19, n - 18, n - 14, n - 15],
+ [n - 18, n - 17, n - 13, n - 14], [n - 17, n - 20, n - 16, n - 13]])
+ myfaces.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], [n - 13, n - 16, n - 12, n - 9]])
+ myfaces.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],
+ [n - 9, n - 12, n - 8, n - 5]])
+ myfaces.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],
+ [n - 5, n - 8, n - 4, n - 1]])
+ myfaces.extend(
+ [[n - 4, n - 3, n - 19, n - 20], [n - 3, n - 2, n - 18, n - 19],
+ [n - 2, n - 1, n - 17, n - 18],
+ [n - 1, n - 4, n - 20, n - 17]])
+ xx = xlist[x * 2 + 1]
+ myvertex.extend([[xx + k2, -k3 + zz, zlist[-3] + k2], [xx + k4 + k2, -k3 + zz,
+ zlist[-3] + k2 + k4],
+ [xx + k4 + k2, k3 + zz, zlist[-3] + k2 + k4], [xx + k2, k3 + zz,
+ zlist[-3] + k2]])
+ myvertex.extend([[xx + k2, -k3 + zz, zlist[-1] + (xx + k2) * h1 - z - k],
+ [xx + k4 + k2, -k3 + zz, zlist[-1] + (xx + k2 + k4) * h1 - z - k - f],
+ [xx + k4 + k2, k3 + zz, zlist[-1] + (xx + k2 + k4) * h1 - z - k - f],
+ [xx + k2, k3 + zz, zlist[-1] + (xx + k2) * h1 - z - k]])
+ myvertex.extend([[0, -k3 + zz, zlist[-1] - k - z], [0, -k3 + zz, zlist[-1] - k - z - f],
+ [0, k3 + zz, zlist[-1] - k - z - f], [0, k3 + zz, zlist[-1] - k - z]])
+ xx = xlist[x * 2 + 2]
+ myvertex.extend([[xx - k2, -k3 + zz, zlist[-1] - (xx - k2) * h1 - z - k],
+ [xx - k4 - k2, -k3 + zz, zlist[-1] - (xx - k2 - k4) * h1 - z - k - f],
+ [xx - k4 - k2, k3 + zz, zlist[-1] - (xx - k2 - k4) * h1 - z - k - f],
+ [xx - k2, k3 + zz, zlist[-1] - (xx - k2) * h1 - z - k]])
+ myvertex.extend([[xx - k2, -k3 + zz, zlist[-3] + k2],
+ [xx - k4 - k2, -k3 + zz, zlist[-3] + k2 + k4],
+ [xx - k4 - k2, k3 + zz, zlist[-3] + k2 + k4],
+ [xx - k2, k3 + zz, zlist[-3] + k2]])
+ n = len(myvertex)
+ myfaces.extend([[n - 20, n - 19, n - 15, n - 16], [n - 19, n - 18, n - 14, n - 15],
+ [n - 18, n - 17, n - 13, n - 14]])
+ myfaces.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]])
+ myfaces.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]])
+ myfaces.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]])
+ myfaces.extend([[n - 4, n - 3, n - 19, n - 20], [n - 3, n - 2, n - 18, n - 19],
+ [n - 2, n - 1, n - 17, n - 18]])
+ xx = xlist[x * 2 + 1]
+ myvertex.extend(
+ [[xx + k4 + k2, -k3 + zz, zlist[-3] + k2 + k4], [xx + k4 + k2, k3 + zz, zlist[-3] +
+ k2 + k4]])
+ myvertex.extend([[xx + k4 + k2, -k3 + zz, zlist[-1] + (xx + k2 + k4) * h1 - z - k - f],
+ [xx + k4 + k2, k3 + zz, zlist[-1] + (xx + k2 + k4) * h1 - z - k - f]])
+ myvertex.extend([[0, -k3 + zz, zlist[-1] - k - z - f], [0, k3 + zz, zlist[-1] - k - z - f]])
+ xx = xlist[x * 2 + 2]
+ myvertex.extend([[xx - k4 - k2, -k3 + zz, zlist[-1] - (xx - k2 - k4) * h1 - z - k - f],
+ [xx - k4 - k2, k3 + zz, zlist[-1] - (xx - k2 - k4) * h1 - z - k - f]])
+ myvertex.extend(
+ [[xx - k4 - k2, -k3 + zz, zlist[-3] + k2 + k4], [xx - k4 - k2, k3 + zz, zlist[-3] +
+ k2 + k4]])
+ myfaces.extend([[n + 8, n + 6, n + 4, n + 2, n + 0], [n + 1, n + 3, n + 5, n + 7, n + 9]])
+ else:
+ xx = xlist[x * 2 + 1]
+ myvertex.extend(
+ [[xx, -k3, zlist[-3]], [xx + k4, -k3, zlist[-3] + k4], [xx + k4, k3, zlist[-3] + k4],
+ [xx, k3, zlist[-3]]])
+ myvertex.extend(
+ [[xx, -k3, zlist[-1] + xx * h1 - z], [xx + k4, -k3, zlist[-1] + (xx + k4) * h1 - z - f],
+ [xx + k4, k3, zlist[-1] + (xx + k4) * h1 - z - f], [xx, k3, zlist[-1] + xx * h1 - z]])
+ myvertex.extend(
+ [[0, -k3, zlist[-1] - z], [0, -k3, zlist[-1] - z - f], [0, k3, zlist[-1] - z - f],
+ [0, k3, zlist[-1] - z]])
+ xx = xlist[x * 2 + 2]
+ myvertex.extend(
+ [[xx, -k3, zlist[-1] - xx * h1 - z], [xx - k4, -k3, zlist[-1] - (xx - k4) * h1 - z - f],
+ [xx - k4, k3, zlist[-1] - (xx - k4) * h1 - z - f], [xx, k3, zlist[-1] - xx * h1 - z]])
+ myvertex.extend(
+ [[xx, -k3, zlist[-3]], [xx - k4, -k3, zlist[-3] + k4], [xx - k4, k3, zlist[-3] + k4],
+ [xx, k3, zlist[-3]]])
+ n = len(myvertex)
+ myfaces.extend([[n - 20, n - 19, n - 15, n - 16], [n - 19, n - 18, n - 14, n - 15],
+ [n - 18, n - 17, n - 13, n - 14]])
+ myfaces.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]])
+ myfaces.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]])
+ myfaces.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]])
+ myfaces.extend([[n - 4, n - 3, n - 19, n - 20], [n - 3, n - 2, n - 18, n - 19],
+ [n - 2, n - 1, n - 17, n - 18]])
+ xx = xlist[x * 2 + 1]
+ myvertex.extend([[xx + k4, -0.005, zlist[-3] + k4], [xx + k4, 0.005, zlist[-3] + k4]])
+ myvertex.extend([[xx + k4, -0.005, zlist[-1] + (xx + k4) * h1 - z - f],
+ [xx + k4, 0.005, zlist[-1] + (xx + k4) * h1 - z - f]])
+ myvertex.extend([[0, -0.005, zlist[-1] - z - f], [0, 0.005, zlist[-1] - z - f]])
+ xx = xlist[x * 2 + 2]
+ myvertex.extend([[xx - k4, -0.005, zlist[-1] - (xx - k4) * h1 - z - f],
+ [xx - k4, 0.005, zlist[-1] - (xx - k4) * h1 - z - f]])
+ myvertex.extend([[xx - k4, -0.005, zlist[-3] + k4], [xx - k4, 0.005, zlist[-3] + k4]])
+ myfaces.extend([[n + 8, n + 6, n + 4, n + 2, n + 0], [n + 1, n + 3, n + 5, n + 7, n + 9]])
+ m = len(myfaces)
+ cam.extend([m - 1, m - 2])
+ 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, m - 15,
+ m - 16, m - 17])
+ # Mermer
+ if op.mr is True:
+ mrh = -op.mr1 / 100
+ mrg = op.mr2 / 100
+ mdv = (op.mr3 / 200) + mrg
+ msv = -(mdv + (op.mr4 / 100))
+ myvertex.extend([[-u, mdv, 0], [u, mdv, 0], [-u, msv, 0], [u, msv, 0], [-u, mdv, mrh], [u, mdv, mrh],
+ [-u, msv, mrh],
+ [u, msv, mrh]])
+ n = len(myvertex)
+ 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],
+ [n - 2, n - 1, n - 5, n - 6], [n - 4, n - 2, n - 6, n - 8], [n - 5, n - 1, n - 3, n - 7]])
+ n = len(myfaces)
+ mer.extend([n - 1, n - 2, n - 3, n - 4, n - 5, n - 6])
+
+ return True, ftl, cam, mer, sm
+ except:
+ return False, None, None, None, None
+
+
+# ------------------------------------
+# Get highest points of the panel
+# ------------------------------------
+def get_high_points(selobject, width, tip):
+ obverts = selobject.data.vertices
+
+ top_a = 0
+ top_b = 0
+ top_c = 0
+ # --------------------------
+ # Recover all vertex
+ # --------------------------
+ for vertex in obverts:
+ if vertex.co[0] == -width / 2:
+ if vertex.co[2] >= top_a:
+ top_a = vertex.co[2]
+ if vertex.co[0] == width / 2:
+ if vertex.co[2] >= top_b:
+ top_b = vertex.co[2]
+ # top center
+ if tip == "2":
+ if vertex.co[2] >= top_c:
+ top_c = vertex.co[2]
+ else:
+ if vertex.co[0] == 0 and vertex.co[2] >= top_c:
+ top_c = vertex.co[2]
+
+ return top_a, top_b, top_c
+
+
+# ---------------------------------------------------------
+# Defines a point
+# ---------------------------------------------------------
+class Cpoint:
+
+ def __init__(self, x, y):
+ self.x = float(x)
+ self.y = float(y)
+
+
+# ---------------------------------------------------------
+# Get angle between two vectors
+# ---------------------------------------------------------
+def get_angle(p1, p2):
+ v1 = mathutils.Vector((p1[0], 0.0, p1[1]))
+ v2 = mathutils.Vector((p2[0], 0.0, p2[1]))
+
+ a = v1.angle(v2)
+ return a
+
+
+# ---------------------------------------------------------
+# Get center of circle base on 3 points
+#
+# Point a: (x,z)
+# Point b: (x,z)
+# Point c: (x,z)
+# Return:
+# x, y: center poistion
+# r: radio
+# ang: angle
+# ---------------------------------------------------------
+def get_circle_center(a, b, c):
+ try:
+ # line between a and b: s1 + k * d1
+ s1 = Cpoint((a.x + b.x) / 2.0, (a.y + b.y) / 2.0)
+ d1 = Cpoint(b.y - a.y, a.x - b.x)
+ # line between a and c: s2 + k * d2
+ s2 = Cpoint((a.x + c.x) / 2.0, (a.y + c.y) / 2.0)
+ d2 = Cpoint(c.y - a.y, a.x - c.x)
+ # intersection of both lines:
+ l = d1.x * (s2.y - s1.y) - d1.y * (s2.x - s1.x)
+ l /= d2.x * d1.y - d2.y * d1.x
+ center = Cpoint(s2.x + l * d2.x, s2.y + l * d2.y)
+ dx = center.x - a.x
+ dy = center.y - a.y
+ radio = math.sqrt(dx * dx + dy * dy)
+
+ # angle
+ v1 = (a.x - center.x, a.y - center.y)
+ v2 = (b.x - center.x, b.y - center.y)
+ ang = get_angle(v1, v2)
+ return center, radio, ang
+ except ZeroDivisionError:
+ return Cpoint(0, 0), 1, 1
+
+
+# -----------------------------------------
+# Get limits
+# lb, rb: limits x
+# lt, rt: limits z
+# mp: limit z in med point
+# lo: Z low limit
+# my: max y
+# top: top vertex
+# -----------------------------------------
+def get_limits(myobject):
+ verts = myobject.data.vertices
+
+ lb = 0
+ lt = 0
+ rb = 0
+ rt = 0
+ mp = 0
+ lo = 0
+ my = 0
+ top = 0
+ for v in verts:
+ if v.co[2] > top:
+ top = v.co[2]
+
+ if v.co[2] < lo:
+ lo = v.co[2]
+
+ if v.co[1] > my:
+ my = v.co[1]
+ if v.co[0] > rb:
+ rb = v.co[0]
+ if v.co[0] < lb:
+ lb = v.co[0]
+ if v.co[0] == 0:
+ if v.co[2] > mp:
+ mp = v.co[2]
+ # max sides
+ for v in verts:
+ if v.co[2] > lt and v.co[0] == lb:
+ lt = v.co[2]
+ if v.co[2] > rt and v.co[0] == rb:
+ rt = v.co[2]
+
+ return lb, lt, rb, rt, mp, lo, my, top
+
+
+# ------------------------------------------
+# Create control box for panels
+#
+# ------------------------------------------
+def create_ctrl_box(parentobj, objname):
+ myvertex = []
+ myfaces = []
+
+ o = parentobj
+ op = o.WindowPanelGenerator[0]
+
+ lb, lt, rb, rt, mp, lo, my, top = get_limits(o)
+ ypos = my * 1.8
+ # -----------------------------
+ # Flat, Triangle and inclined
+ # -----------------------------
+ if op.UST == "1" or op.UST == "3" or op.UST == "4":
+ if mp == 0:
+ myvertex.extend([(lb, ypos, lo), (lb, ypos, lt), (rb, ypos, rt), (rb, ypos, lo)])
+ myvertex.extend([(lb, -ypos, lo), (lb, -ypos, lt), (rb, -ypos, rt), (rb, -ypos, lo)])
+ 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)])
+ else:
+ myvertex.extend([(lb, ypos, lo), (lb, ypos, lt), (0, ypos, mp), (rb, ypos, rt), (rb, ypos, lo)])
+ myvertex.extend([(lb, -ypos, lo), (lb, -ypos, lt), (0, -ypos, mp), (rb, -ypos, rt), (rb, -ypos, lo)])
+ 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),
+ (0, 4, 9, 5)])
+ # -----------------------------
+ # Arch
+ # -----------------------------
+ if op.UST == "2":
+ center, r, ang = get_circle_center(Cpoint(lb, lt), Cpoint(0, top), Cpoint(rb, rt))
+
+ # cx = center.x
+ cz = center.y
+
+ sg = op.res
+ arc = ((math.pi / 2) + ang) - ((math.pi / 2) - ang)
+ step = arc / sg
+ a = (math.pi / 2) + ang
+
+ myvertex.extend([(lb, ypos, lt), (lb, -ypos, lt)])
+ for x in range(0, sg):
+ myvertex.extend([(r * math.cos(a), ypos, r * math.sin(a) + cz),
+ (r * math.cos(a), -ypos, r * math.sin(a) + cz)])
+ a -= step
+
+ # close sides
+ myvertex.extend([(rb, ypos, rt), (rb, -ypos, rt)])
+
+ v = 0
+ nf = len(myvertex)
+ for x in range(0, nf - 2, 2):
+ myfaces.extend([(v, v + 1, v + 3, v + 2)])
+ v += 2
+
+ nf = len(myvertex)
+ myvertex.extend([(lb, ypos, lo), (lb, -ypos, lo)])
+ myvertex.extend([(rb, ypos, lo), (rb, -ypos, lo)])
+
+ nf2 = len(myvertex)
+ myfaces.extend([(0, nf2 - 4, nf2 - 3, 1)])
+ myfaces.extend([(nf - 2, nf - 1, nf2 - 1, nf2 - 2)])
+
+ nf2 = len(myvertex)
+ myfaces.extend([(nf2 - 4, nf2 - 2, nf2 - 1, nf2 - 3)])
+
+ # --------------------------
+ # Create mesh
+ # --------------------------
+ myfaces = check_mesh_errors(myvertex, myfaces)
+ mymesh = bpy.data.meshes.new(objname)
+ myobj = bpy.data.objects.new(objname, mymesh)
+
+ myobj.location = bpy.context.scene.cursor_location
+ bpy.context.scene.objects.link(myobj)
+
+ mymesh.from_pydata(myvertex, [], myfaces)
+ mymesh.update(calc_edges=True)
+
+ return myobj
+
+
+# ------------------------------------------------------------------
+# Define property group class to create or modify
+# ------------------------------------------------------------------
+class GeneralPanelProperties(bpy.types.PropertyGroup):
+ prs = bpy.props.EnumProperty(
+ items=(
+ ('1', "WINDOW 250X200", ""),
+ ('2', "WINDOW 200X200", ""),
+ ('3', "WINDOW 180X200", ""),
+ ('4', "WINDOW 180X160", ""),
+ ('5', "WINDOW 160X160", ""),
+ ('6', "WINDOW 50X50", ""),
+ ('7', "DOOR 80X250", ""),
+ ('8', "DOOR 80X230", ""),
+ ),
+ name="",
+ description='Predefined types',
+ update=update_using_default,
+ )
+ son = prs
+ gen = bpy.props.IntProperty(
+ name='H Count', min=1, max=8, default=3,
+ description='Horizontal Panes',
+ update=update_window,
+ )
+ yuk = bpy.props.IntProperty(
+ name='V Count', min=1, max=5, default=1,
+ description='Vertical Panes',
+ update=update_window,
+ )
+ kl1 = bpy.props.IntProperty(
+ name='Outer Frame', min=2, max=50, default=5,
+ description='Outside Frame Thickness',
+ update=update_window,
+ )
+ kl2 = bpy.props.IntProperty(
+ name='Risers', min=2, max=50, default=5,
+ description='Risers Width',
+ update=update_window,
+ )
+ fk = bpy.props.IntProperty(
+ name='Inner Frame', min=1, max=20, default=2,
+ description='Inside Frame Thickness',
+ update=update_window,
+ )
+
+ mr = bpy.props.BoolProperty(name='Sill', default=True, description='Window Sill', update=update_window)
+ mr1 = bpy.props.IntProperty(name='', min=1, max=20, default=4, description='Height', update=update_window)
+ mr2 = bpy.props.IntProperty(name='', min=0, max=20, default=4, description='First Depth', update=update_window)
+ mr3 = bpy.props.IntProperty(name='', min=1, max=50, default=20, description='Second Depth', update=update_window)
+ mr4 = bpy.props.IntProperty(name='', min=0, max=50, default=0, description='Extrusion for Jamb',
+ update=update_window)
+
+ mt1 = bpy.props.EnumProperty(
+ items=(
+ ('1', "PVC", ""),
+ ('2', "WOOD", ""),
+ ('3', "Plastic", ""),
+ ),
+ name="",
+ default='1',
+ description='Material to use',
+ update=update_window,
+ )
+ mt2 = bpy.props.EnumProperty(
+ items=(
+ ('1', "PVC", ""),
+ ('2', "WOOD", ""),
+ ('3', "Plastic", ""),
+ ),
+ name="",
+ default='3',
+ description='Material to use',
+ update=update_window,
+ )
+
+ r = bpy.props.FloatProperty(
+ name='Rotation',
+ min=0, max=360, default=0, precision=1,
+ description='Panel rotation',
+ update=update_window,
+ )
+
+ UST = bpy.props.EnumProperty(
+ items=(
+ ('1', "Flat", ""),
+ ('2', "Arch", ""),
+ ('3', "Inclined", ""),
+ ('4', "Triangle", ""),
+ ),
+ name="Top", default='1',
+ description='Type of window upper section',
+ update=update_window,
+ )
+ DT2 = bpy.props.EnumProperty(
+ items=(
+ ('1', "Difference", ""),
+ ('2', "Radius", ""),
+ ),
+ name="",
+ default='1',
+ update=update_window,
+ )
+ DT3 = bpy.props.EnumProperty(
+ items=(
+ ('1', "Difference", ""),
+ ('2', "Incline %", ""),
+ ('3', "Incline Angle", ""),
+ ),
+ name="",
+ default='1', update=update_window,
+ )
+
+ VL1 = bpy.props.IntProperty(name='', min=-10000, max=10000, default=30, update=update_window) # Fark
+ VL2 = bpy.props.IntProperty(name='', min=1, max=10000, default=30, update=update_window) # Cap
+ VL3 = bpy.props.IntProperty(name='', min=-100, max=100, default=30, update=update_window) # Egim %
+ VL4 = bpy.props.IntProperty(name='', min=-45, max=45, default=30, update=update_window) # Egim Aci
+
+ res = bpy.props.IntProperty(name='Resolution', min=2, max=360, default=36, update=update_window) # Res
+
+ gnx0 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='1st Window Width',
+ update=update_window)
+ gnx1 = bpy.props.IntProperty(name='', min=1, max=300, default=110, description='2nd Window Width',
+ update=update_window)
+ gnx2 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='3rd Window Width',
+ update=update_window)
+ gnx3 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='4th Window Width',
+ update=update_window)
+ gnx4 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='5th Window Width',
+ update=update_window)
+ gnx5 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='6th Window Width',
+ update=update_window)
+ gnx6 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='7th Window Width',
+ update=update_window)
+ gnx7 = bpy.props.IntProperty(name='', min=1, max=300, default=60, description='8th Window Width',
+ update=update_window)
+
+ gny0 = bpy.props.IntProperty(name='', min=1, max=300, default=190, description='1st Row Height',
+ update=update_window)
+ gny1 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='2nd Row Height',
+ update=update_window)
+ gny2 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='3rd Row Height',
+ update=update_window)
+ gny3 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='4th Row Height',
+ update=update_window)
+ gny4 = bpy.props.IntProperty(name='', min=1, max=300, default=45, description='5th Row Height',
+ update=update_window)
+
+ k00 = bpy.props.BoolProperty(name='', default=True, update=update_window)
+ k01 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k02 = bpy.props.BoolProperty(name='', default=True, update=update_window)
+ k03 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k04 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k05 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k06 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k07 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+
+ k10 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k11 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k12 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k13 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k14 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k15 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k16 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k17 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+
+ k20 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k21 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k22 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k23 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k24 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k25 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k26 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k27 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+
+ k30 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k31 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k32 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k33 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k34 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k35 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k36 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k37 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+
+ k40 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k41 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k42 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k43 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k44 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k45 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k46 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ k47 = bpy.props.BoolProperty(name='', default=False, update=update_window)
+ # opengl internal data
+ glpoint_a = bpy.props.FloatVectorProperty(
+ name="glpointa",
+ description="Hidden property for opengl",
+ default=(0, 0, 0),
+ )
+ glpoint_b = bpy.props.FloatVectorProperty(
+ name="glpointb",
+ description="Hidden property for opengl",
+ default=(0, 0, 0),
+ )
+ glpoint_c = bpy.props.FloatVectorProperty(
+ name="glpointc",
+ description="Hidden property for opengl",
+ default=(0, 0, 0),
+ )
+ glpoint_d = bpy.props.FloatVectorProperty(
+ name="glpointc",
+ description="Hidden property for opengl",
+ default=(0, 0, 0),
+ )
+
+
+bpy.utils.register_class(GeneralPanelProperties)
+bpy.types.Object.WindowPanelGenerator = bpy.props.CollectionProperty(type=GeneralPanelProperties)
+
+
+# ------------------------------------------------------------------
+# Define panel class to modify myobjects.
+# ------------------------------------------------------------------
+class AchmWindowEditPanel(bpy.types.Panel):
+ bl_idname = "window.edit_panel2"
+ bl_label = "Window Panel"
+ bl_space_type = 'VIEW_3D'
+ bl_region_type = 'UI'
+ bl_category = 'Window'
+
+ # -----------------------------------------------------
+ # Verify if visible
+ # -----------------------------------------------------
+ @classmethod
+ def poll(cls, context):
+ o = context.object
+ if o is None:
+ return False
+ if 'WindowPanelGenerator' not in o:
+ return False
+ else:
+ return True
+
+ # -----------------------------------------------------
+ # Draw (create UI interface)
+ # -----------------------------------------------------
+ def draw(self, context):
+ o = context.object
+ # If the selected object didn't be created with the group 'WindowPanelGenerator', this panel is not created.
+ # noinspection PyBroadException
+ try:
+ if 'WindowPanelGenerator' not in o:
+ return
+ except:
+ return
+
+ layout = self.layout
+ if bpy.context.mode == 'EDIT_MESH':
+ layout.label('Warning: Operator does not work in edit mode.', icon='ERROR')
+ else:
+ myobject = o.WindowPanelGenerator[0]
+ layout.prop(myobject, 'prs')
+ box = layout.box()
+ box.prop(myobject, 'gen')
+ box.prop(myobject, 'yuk')
+ box.prop(myobject, 'kl1')
+ box.prop(myobject, 'kl2')
+ box.prop(myobject, 'fk')
+ box.prop(myobject, 'r') # rotation
+
+ box.prop(myobject, 'mr')
+ if myobject.mr is True:
+ row = box.row()
+ row.prop(myobject, 'mr1')
+ row.prop(myobject, 'mr2')
+ row = box.row()
+ row.prop(myobject, 'mr3')
+ row.prop(myobject, 'mr4')
+ row = layout.row()
+ row.label('Frame')
+ row.label('Inner Frame')
+ row = layout.row()
+ row.prop(myobject, 'mt1')
+ row.prop(myobject, 'mt2')
+
+ box.prop(myobject, 'UST')
+ if myobject.UST == '2':
+ row = box.row()
+ row.prop(myobject, 'DT2')
+ if myobject.DT2 == '1':
+ row.prop(myobject, 'VL1')
+ elif myobject.DT2 == '2':
+ row.prop(myobject, 'VL2')
+ box.prop(myobject, 'res')
+ elif myobject.UST == '3':
+ row = box.row()
+ row.prop(myobject, 'DT3')
+ if myobject.DT3 == '1':
+ row.prop(myobject, 'VL1')
+ elif myobject.DT3 == '2':
+ row.prop(myobject, 'VL3')
+ elif myobject.DT3 == '3':
+ row.prop(myobject, 'VL4')
+ elif myobject.UST == '4':
+ row = box.row()
+ row.prop(myobject, 'DT3')
+ if myobject.DT3 == '1':
+ row.prop(myobject, 'VL1')
+ elif myobject.DT3 == '2':
+ row.prop(myobject, 'VL3')
+ elif myobject.DT3 == '3':
+ row.prop(myobject, 'VL4')
+ row = layout.row()
+ for i in range(0, myobject.gen):
+ row.prop(myobject, 'gnx' + str(i))
+ for j in range(0, myobject.yuk):
+ row = layout.row()
+ row.prop(myobject, 'gny' + str(myobject.yuk - j - 1))
+ for i in range(0, myobject.gen):
+ row.prop(myobject, 'k' + str(myobject.yuk - j - 1) + str(i))