'''bl_info = {
    "name": "Window Generator 2",
    "author": "SayPRODUCTIONS",
    "version": (2, 0),
    "blender": (2, 63, 0),
    "location": "View3D > Add > Mesh > Say3D",
    "description": "Window Generator 2",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "category": "Add Mesh"}
	'''
import bpy
from bpy.props import *
from math import pi, sin, cos, sqrt, radians
def MAT(AD,R,G,B):
    if AD not in bpy.data.materials:
        mtl=bpy.data.materials.new(AD)
        mtl.diffuse_color     = ([R,G,B])
        mtl.diffuse_shader    = 'LAMBERT'
        mtl.diffuse_intensity = 1.0
    else:
        mtl=bpy.data.materials[AD]
    return mtl
def Fitil(vr,fc,X,Z,x,y,z,zz,xx):
    k3=z*2
    vr.extend([[X[x  ]+xx,-z+zz,Z[y  ]+xx],[X[x  ]+xx+k3,-z+zz,Z[y  ]+xx+k3],[X[x  ]+xx+k3,z+zz,Z[y  ]+xx+k3],[X[x  ]+xx,z+zz,Z[y  ]+xx]])
    vr.extend([[X[x  ]+xx,-z+zz,Z[y+1]-xx],[X[x  ]+xx+k3,-z+zz,Z[y+1]-xx-k3],[X[x  ]+xx+k3,z+zz,Z[y+1]-xx-k3],[X[x  ]+xx,z+zz,Z[y+1]-xx]])
    vr.extend([[X[x+1]-xx,-z+zz,Z[y+1]-xx],[X[x+1]-xx-k3,-z+zz,Z[y+1]-xx-k3],[X[x+1]-xx-k3,z+zz,Z[y+1]-xx-k3],[X[x+1]-xx,z+zz,Z[y+1]-xx]])
    vr.extend([[X[x+1]-xx,-z+zz,Z[y  ]+xx],[X[x+1]-xx-k3,-z+zz,Z[y  ]+xx+k3],[X[x+1]-xx-k3,z+zz,Z[y  ]+xx+k3],[X[x+1]-xx,z+zz,Z[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([[X[x]+xx+k3,-z+zz,Z[y]+xx+k3],[X[x]+xx+k3,-z+zz,Z[y+1]-xx-k3],[X[x+1]-xx-k3,-z+zz,Z[y+1]-xx-k3],[X[x+1]-xx-k3,-z+zz,Z[y]+xx+k3]])
    vr.extend([[X[x]+xx+k3, z+zz,Z[y]+xx+k3],[X[x]+xx+k3, z+zz,Z[y+1]-xx-k3],[X[x+1]-xx-k3, z+zz,Z[y+1]-xx-k3],[X[x+1]-xx-k3, z+zz,Z[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,X,Z,x,y,z,zz):
    k2=z*2
    vr.extend([[X[x  ],-z+zz,Z[y  ]],[X[x  ]+k2,-z+zz,Z[y  ]+k2],[X[x  ]+k2,z+zz,Z[y  ]+k2],[X[x  ],z+zz,Z[y  ]]])
    vr.extend([[X[x  ],-z+zz,Z[y+1]],[X[x  ]+k2,-z+zz,Z[y+1]-k2],[X[x  ]+k2,z+zz,Z[y+1]-k2],[X[x  ],z+zz,Z[y+1]]])
    vr.extend([[X[x+1],-z+zz,Z[y+1]],[X[x+1]-k2,-z+zz,Z[y+1]-k2],[X[x+1]-k2,z+zz,Z[y+1]-k2],[X[x+1],z+zz,Z[y+1]]])
    vr.extend([[X[x+1],-z+zz,Z[y  ]],[X[x+1]-k2,-z+zz,Z[y  ]+k2],[X[x+1]-k2,z+zz,Z[y  ]+k2],[X[x+1],z+zz,Z[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]])
def Prs(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
def add_object(self, context):
    fc=[];vr=[];kx=[]
    mx=self.gen;my=self.yuk;k1=self.kl1/100;y=my*4+4;k2=self.kl2/100;k3=self.fk/200;fr=(k1+k2)*0.5-0.01
    RES=self.RES

    u=self.kl1/100;X=[0,round(u,2)]
    if mx> 0:u+=self.gnx0 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 1:u+=self.gnx1 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 2:u+=self.gnx2 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 3:u+=self.gnx3 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 4:u+=self.gnx4 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 5:u+=self.gnx5 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 6:u+=self.gnx6 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    if mx> 7:u+=self.gnx7 /100;X.append(round(u,2));u+=k2;X.append(round(u,2))
    X[-1]=X[-2]+k1

    u=self.kl1/100;Z=[0,round(u,2)]
    if my> 0:u+=self.gny0 /100;Z.append(round(u,2));u+=k2;Z.append(round(u,2))
    if my> 1:u+=self.gny1 /100;Z.append(round(u,2));u+=k2;Z.append(round(u,2))
    if my> 2:u+=self.gny2 /100;Z.append(round(u,2));u+=k2;Z.append(round(u,2))
    if my> 3:u+=self.gny3 /100;Z.append(round(u,2));u+=k2;Z.append(round(u,2))
    if my> 4:u+=self.gny4 /100;Z.append(round(u,2));u+=k2;Z.append(round(u,2))
    Z[-1]=Z[-2]+k1

    u = X[-1]/2
    for i in range(0,len(X)):X[i]-=u
    kx=[[self.k00,self.k10,self.k20,self.k30,self.k40],
        [self.k01,self.k11,self.k21,self.k31,self.k41],
        [self.k02,self.k12,self.k22,self.k32,self.k42],
        [self.k03,self.k13,self.k23,self.k33,self.k43],
        [self.k04,self.k14,self.k24,self.k34,self.k44],
        [self.k05,self.k15,self.k25,self.k35,self.k45],
        [self.k06,self.k16,self.k26,self.k36,self.k46],
        [self.k07,self.k17,self.k27,self.k37,self.k47]]
    cam=[];mer=[];ftl=[];SM=[]
#VERTICES ------------------------
    vr.extend([[X[0],-k1/2,Z[0]],[X[0],k1/2,Z[0]]])
    for x in range(1,len(X)-1):vr.extend([[X[x],-k1/2,Z[1]],[X[x], k1/2,Z[1]]])
    vr.extend([[X[-1],-k1/2,Z[0]],[X[-1], k1/2,Z[0]]])
    for z in range(2,len(Z)-2,2):
        for x in range(0,len(X)):vr.extend([[X[x],-k1/2,Z[z]],[X[x], k1/2,Z[z]]])
        for x in range(0,len(X)):vr.extend([[X[x],-k1/2,Z[z+1]],[X[x], k1/2,Z[z+1]]])
    z=len(Z)-2
    vr.extend([[X[0],-k1/2,Z[z+1]],[X[0], k1/2,Z[z+1]]])
    ALT=[];UST=[len(vr)-2,len(vr)-1]
    for x in range(1,len(X)-1):
        vr.extend([[X[x],-k1/2,Z[z]],[X[x], k1/2,Z[z]]])
        ALT.extend([len(vr)-2,len(vr)-1])
    vr.extend([[X[-1],-k1/2,Z[z+1]],[X[-1],k1/2,Z[z+1]]])
    SON=[len(vr)-2,len(vr)-1]
#FACES ---------------------------
    fc.append([0,1,3+mx*4,2+mx*4])
    FB=[0];FR=[1]
    for i in range(0,mx*4,4):
        fc.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()
    fc.extend([FB,FR])
    #Yatay
    Y=(mx*4+4);V=mx*4+2
    for z in range(0,(my-1)*Y*2,Y*2):
        fc.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):fc.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):fc.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):fc.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 self.UST=='1':y1=my
    else:            y1=my-1
    for y in range(0,y1):
        for x in range(0,mx):
            if  kx[x][y]==True:
                Kapak(vr,fc,X,Z,x*2+1,y*2+1,k2/2,(k1+k2)*0.5-0.01)
                Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,(k1+k2)*0.5-0.01,k2)
            else:
                Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,0,0)
            m=len(fc);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  self.UST=='1':#Duz
        fc.append([UST[1],UST[0],SON[0],SON[1]])
        for i in range(0,mx*4,4):
            fc.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])
        fc.append(ON)
        AR.append(SON[1])
        AR.reverse();fc.append(AR)
    elif self.UST=='2':#Yay
        if   self.DT2=='1':
            H=self.VL1/100
            if   H<0.01:H=  0.01;self.VL1=1
            elif H >= u:H=u-0.01;self.VL1=H*100
            h=sqrt(u**2+H**2)/2
            e=h*(u/H)
            C=sqrt(h**2+e**2)
            T1=Z[-1]-H
        elif self.DT2=='2':
            C=self.VL2/100
            if  C<u+0.01:
                C=u+0.01
                self.VL2=C*100
            T1=sqrt(C**2-u**2)+Z[-1]-C
        R=C-k1;F=R-k3*2
        K=R-k2;E=K-k3*2
        z=Z[-1]-C

        vr[UST[0]][2]=T1;vr[UST[1]][2]=T1
        vr[SON[0]][2]=T1;vr[SON[1]][2]=T1
        for i in ALT:vr[i][2]=sqrt(R**2-vr[i][0]**2)+z

        ON=[SON[0]];U1=[]
        for i in range(0,RES):
            A=i*pi/RES;x=cos(A)*C
            if  x>-u and x<u:
                vr.append([x,-k1/2,sin(A)*C+z]);ON.append(len(vr)-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=vr[ALT[i+0]][0]; x2=vr[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*pi/RES;x=-cos(A)*R
                if  x1<x and x<x2:
                    vr.extend([[x,-k1/2,sin(A)*R+z],[x,k1/2,sin(A)*R+z]])
                    ON.append(len(vr)-2);AR.append(len(vr)-1)
                    T1.append(len(vr)-2);T2.append(len(vr)-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*pi/RES;x=cos(A)*C
            if  x>-u and x<u:
                vr.append([x,k1/2,sin(A)*C+z])
                AR.append(len(vr)-1);U2.append(len(vr)-1)
        AR.append(UST[1])
        U2.append(UST[1])
        AR.reverse()
        fc.extend([ON,AR])
        for i in range(0,len(U1)-1):fc.append([U1[i+1],U1[i],U2[i],U2[i+1]]);SM.append(len(fc)-1)
        for A in range(0,mx):
            for i in range(0,len(D1[A])-1):
                fc.append([D1[A][i+1],D1[A][i],D2[A][i],D2[A][i+1]]);SM.append(len(fc)-1)
        y=my-1
        for x in range(0,mx):
            if  kx[x][y]==True:
                fr=(k1+k2)*0.5-0.01;ek=k2
                R=C-k1;K=R-k2

                x1=X[x*2+1];x2=X[x*2+2]
                vr.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  ]])
                vr.extend([[x2,fr-k2/2,Z[-3]],[x2-k2,fr-k2/2,Z[-3]+k2],[x2-k2,fr+k2/2,Z[-3]+k2],[x2,fr+k2/2,Z[-3]]])
                vr.extend([[x1,fr-k2/2,Z[-3]],[x1+k2,fr-k2/2,Z[-3]+k2],[x1+k2,fr+k2/2,Z[-3]+k2],[x1,fr+k2/2,Z[-3]]])
                vr.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(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]])
                ALT=[n-16,n-15,n-14,n-13,n-4,n-3,n-2,n-1]
                vr[ALT[0]][2]=sqrt(R**2-vr[ALT[0]][0]**2)+z;vr[ALT[1]][2]=sqrt(K**2-vr[ALT[1]][0]**2)+z
                vr[ALT[2]][2]=sqrt(K**2-vr[ALT[2]][0]**2)+z;vr[ALT[3]][2]=sqrt(R**2-vr[ALT[3]][0]**2)+z
                vr[ALT[4]][2]=sqrt(R**2-vr[ALT[4]][0]**2)+z;vr[ALT[5]][2]=sqrt(K**2-vr[ALT[5]][0]**2)+z
                vr[ALT[6]][2]=sqrt(K**2-vr[ALT[6]][0]**2)+z;vr[ALT[7]][2]=sqrt(R**2-vr[ALT[7]][0]**2)+z

                D1=[];D2=[];T1=[];T2=[]
                for i in range(0,RES):
                    A =i*pi/RES;y1=cos(A)*R;y2=-cos(A)*K
                    if x1   <y1 and y1<x2:   vr.extend([[y1,fr-k2/2,sin(A)*R+z],[y1,fr+k2/2,sin(A)*R+z]]);T1.append(len(vr)-2);T2.append(len(vr)-1)
                    if x1+k2<y2 and y2<x2-k2:vr.extend([[y2,fr-k2/2,sin(A)*K+z],[y2,fr+k2/2,sin(A)*K+z]]);D1.append(len(vr)-2);D2.append(len(vr)-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==[]:fc.extend([ON,AR,[ALT[5],ALT[6],ALT[2],ALT[1]],[ALT[7],ALT[4],ALT[0],ALT[3]]]);                                                        m=len(fc);SM.extend([m-1,m-2])
                elif D1==[] and T1!=[]:fc.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(fc);SM.extend([m-1,m-2,m-3])
                elif D1!=[] and T1==[]:fc.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(fc);SM.extend([m-1,m-2,m-3])
                else:                  fc.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(fc);SM.extend([m-1,m-2,m-3,m-4])

                for i in range(0,len(D1)-1):fc.append([D1[i+1],D1[i],D2[i],D2[i+1]]);SM.append(len(fc)-1)
                for i in range(0,len(T1)-1):fc.append([T1[i+1],T1[i],T2[i],T2[i+1]]);SM.append(len(fc)-1)
                R=C-k1-k2;K=R-k3*2
            else:
                fr=0;ek=0
                R=C-k1;K=R-k3*2
            #Fitil
            x1=X[x*2+1]+ek;x2=X[x*2+2]-ek
            vr.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     ]])
            vr.extend([[x2,fr-k3,Z[-3]+ek],[x2-k3*2,fr-k3,Z[-3]+ek+k3*2],[x2-k3*2,fr+k3,Z[-3]+ek+k3*2],[x2,fr+k3,Z[-3]+ek]])
            vr.extend([[x1,fr-k3,Z[-3]+ek],[x1+k3*2,fr-k3,Z[-3]+ek+k3*2],[x1+k3*2,fr+k3,Z[-3]+ek+k3*2],[x1,fr+k3,Z[-3]+ek]])
            vr.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(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]])
            m=len(fc);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]
            vr[ALT[0]][2]=sqrt(R**2-vr[ALT[0]][0]**2)+z;vr[ALT[1]][2]=sqrt(K**2-vr[ALT[1]][0]**2)+z
            vr[ALT[2]][2]=sqrt(K**2-vr[ALT[2]][0]**2)+z;vr[ALT[3]][2]=sqrt(R**2-vr[ALT[3]][0]**2)+z
            vr[ALT[4]][2]=sqrt(R**2-vr[ALT[4]][0]**2)+z;vr[ALT[5]][2]=sqrt(K**2-vr[ALT[5]][0]**2)+z
            vr[ALT[6]][2]=sqrt(K**2-vr[ALT[6]][0]**2)+z;vr[ALT[7]][2]=sqrt(R**2-vr[ALT[7]][0]**2)+z
            D1=[];D2=[];T1=[];T2=[]
            for i in range(0,RES):
                A =i*pi/RES;y1=cos(A)*R;y2=-cos(A)*K
                if x1     <y1 and y1<x2:     vr.extend([[y1,fr-k3,sin(A)*R+z],[y1,fr+k3,sin(A)*R+z]]);T1.append(len(vr)-2);T2.append(len(vr)-1);ftl.extend([len(fc)-1,len(fc)-2])
                if x1+k3*2<y2 and y2<x2-k3*2:vr.extend([[y2,fr-k3,sin(A)*K+z],[y2,fr+k3,sin(A)*K+z]]);D1.append(len(vr)-2);D2.append(len(vr)-1);ftl.extend([len(fc)-1,len(fc)-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  D1==[]:fc.extend([ON,AR,[ALT[5],ALT[6],ALT[2],ALT[1]]]);                            m=len(fc);ftl.extend([m-1,m-2,m-3    ]);SM.extend([m-1    ])
            else:      fc.extend([ON,AR,[ALT[5],ALT[6],D2[0],D1[0]],[ALT[2],ALT[1],D1[-1],D2[-1]]]);m=len(fc);ftl.extend([m-1,m-2,m-3,m-4]);SM.extend([m-1,m-2])

            for i in range(0,len(D1)-1):fc.append([D1[i+1],D1[i],D2[i],D2[i+1]]);ftl.append(len(fc)-1);SM.append(len(fc)-1)
            #Cam
            x1=X[x*2+1]+ek+k3*2;x2=X[x*2+2]-ek-k3*2
            ON=[];AR=[]
            for i in range(0,RES):
                A= i*pi/RES;y1=-cos(A)*K
                if  x1<y1 and y1<x2:
                    vr.extend([[y1,fr-0.005,sin(A)*K+z],[y1,fr+0.005,sin(A)*K+z]])
                    n=len(vr);ON.append(n-1);AR.append(n-2)
            vr.extend([[x1,fr-0.005,sqrt(K**2-x1**2)+z],[x1,fr+0.005,sqrt(K**2-x1**2)+z]])
            vr.extend([[x1,fr-0.005,Z[-3]+ek+k3*2     ],[x1,fr+0.005,Z[-3]+ek+k3*2     ]])
            vr.extend([[x2,fr-0.005,Z[-3]+ek+k3*2     ],[x2,fr+0.005,Z[-3]+ek+k3*2     ]])
            vr.extend([[x2,fr-0.005,sqrt(K**2-x2**2)+z],[x2,fr+0.005,sqrt(K**2-x2**2)+z]])
            n=len(vr);ON.extend([n-1,n-3,n-5,n-7]);AR.extend([n-2,n-4,n-6,n-8])
            fc.append(ON);AR.reverse();fc.append(AR)
            m=len(fc);cam.extend([m-1,m-2])

    elif self.UST=='3':#Egri
        if   self.DT3=='1':H=(self.VL1/200)/u
        elif self.DT3=='2':H=self.VL3/100
        elif self.DT3=='3':H=sin(self.VL4*pi/180)/cos(self.VL4*pi/180)
        z=sqrt(k1**2+(k1*H)**2)
        k=sqrt(k2**2+(k2*H)**2)
        f=sqrt(k3**2+(k3*H)**2)*2
        vr[UST[0]][2]=Z[-1]+vr[UST[0]][0]*H
        vr[UST[1]][2]=Z[-1]+vr[UST[1]][0]*H
        for i in ALT:
            vr[i][2] =Z[-1]+vr[i][0]*H-z
        vr[SON[0]][2]=Z[-1]+vr[SON[0]][0]*H
        vr[SON[1]][2]=Z[-1]+vr[SON[1]][0]*H
        fc.append([UST[1],UST[0], SON[0],SON[1] ])
        for i in range(0,mx*4,4):
            fc.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])
        fc.append(ON)
        AR.append(SON[1])
        AR.reverse();fc.append(AR)
        y=my-1
        for x in range(0,mx):
            if  kx[x][y]==True:
                Kapak(vr,fc,X,Z,x*2+1,y*2+1,k2/2,(k1+k2)*0.5-0.01)
                n=len(vr)
                vr[n- 5][2]=Z[-1]+vr[n- 5][0]*H-z
                vr[n- 6][2]=Z[-1]+vr[n- 6][0]*H-z-k
                vr[n- 7][2]=Z[-1]+vr[n- 7][0]*H-z-k
                vr[n- 8][2]=Z[-1]+vr[n- 8][0]*H-z
                vr[n- 9][2]=Z[-1]+vr[n- 9][0]*H-z
                vr[n-10][2]=Z[-1]+vr[n-10][0]*H-z-k
                vr[n-11][2]=Z[-1]+vr[n-11][0]*H-z-k
                vr[n-12][2]=Z[-1]+vr[n-12][0]*H-z
                Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,(k1+k2)*0.5-0.01,k2)
                n=len(vr)
                vr[n- 2][2]=Z[-1]+vr[n- 2][0]*H-z-k-f
                vr[n- 3][2]=Z[-1]+vr[n- 3][0]*H-z-k-f
                vr[n- 6][2]=Z[-1]+vr[n- 6][0]*H-z-k-f
                vr[n- 7][2]=Z[-1]+vr[n- 7][0]*H-z-k-f
                vr[n-13][2]=Z[-1]+vr[n-13][0]*H-z-k
                vr[n-14][2]=Z[-1]+vr[n-14][0]*H-z-k-f
                vr[n-15][2]=Z[-1]+vr[n-15][0]*H-z-k-f
                vr[n-16][2]=Z[-1]+vr[n-16][0]*H-z-k
                vr[n-17][2]=Z[-1]+vr[n-17][0]*H-z-k
                vr[n-18][2]=Z[-1]+vr[n-18][0]*H-z-k-f
                vr[n-19][2]=Z[-1]+vr[n-19][0]*H-z-k-f
                vr[n-20][2]=Z[-1]+vr[n-20][0]*H-z-k
            else:
                Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,0,0)
                n=len(vr)
                vr[n-2][2]=Z[-1]+vr[n-2][0]*H-z-f
                vr[n-3][2]=Z[-1]+vr[n-3][0]*H-z-f
                vr[n-6][2]=Z[-1]+vr[n-6][0]*H-z-f
                vr[n-7][2]=Z[-1]+vr[n-7][0]*H-z-f
                vr[n-13][2]=Z[-1]+vr[n-13][0]*H-z
                vr[n-14][2]=Z[-1]+vr[n-14][0]*H-z-f
                vr[n-15][2]=Z[-1]+vr[n-15][0]*H-z-f
                vr[n-16][2]=Z[-1]+vr[n-16][0]*H-z
                vr[n-17][2]=Z[-1]+vr[n-17][0]*H-z
                vr[n-18][2]=Z[-1]+vr[n-18][0]*H-z-f
                vr[n-19][2]=Z[-1]+vr[n-19][0]*H-z-f
                vr[n-20][2]=Z[-1]+vr[n-20][0]*H-z
            m=len(fc);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 self.UST=='4':#Ucgen
        if   self.DT3=='1':H=(self.VL1/100)/u
        elif self.DT3=='2':H=self.VL3/100
        elif self.DT3=='3':H=sin(self.VL4*pi/180)/cos(self.VL4*pi/180)
        z=sqrt(k1**2+(k1*H)**2)
        k=sqrt(k2**2+(k2*H)**2)
        f=sqrt(k3**2+(k3*H)**2)*2
        vr[UST[0]][2]=Z[-1]+vr[UST[0]][0]*H
        vr[UST[1]][2]=Z[-1]+vr[UST[1]][0]*H
        for i in ALT:
            vr[i][2] =Z[-1]-abs(vr[i][0])*H-z
        vr[SON[0]][2]=Z[-1]-vr[SON[0]][0]*H
        vr[SON[1]][2]=Z[-1]-vr[SON[1]][0]*H
        vr.extend([[0,-k1/2,Z[-1]],[0, k1/2,Z[-1]]])

        x = 0
        for j in range(2,len(ALT)-2,4):
            if vr[ALT[j]][0]<0 and 0<vr[ALT[j+2]][0]:x=1

        n=len(vr)
        fc.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:vr.extend([[0,-k1/2,Z[-1]-z],[0,k1/2,Z[-1]-z]])
        for j in range(0,len(ALT)-2,4):
            if  vr[ALT[j]][0]<0 and vr[ALT[j+2]][0]<0:
                fc.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 vr[ALT[j]][0]>0 and vr[ALT[j+2]][0]>0:
                fc.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(vr)
                fc.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]])
        fc.append(ON);AR.reverse();fc.append(AR)
        y=my-1
        for x in range(0,mx):
            if  vr[ALT[x*4]][0]<0 and vr[ALT[x*4+2]][0]<0:
                if  kx[x][y]==True:
                    Kapak(vr,fc,X,Z,x*2+1,y*2+1,k2/2,(k1+k2)*0.5-0.01)
                    n=len(vr)
                    vr[n- 5][2]=Z[-1]+vr[n- 5][0]*H-z
                    vr[n- 6][2]=Z[-1]+vr[n- 6][0]*H-z-k
                    vr[n- 7][2]=Z[-1]+vr[n- 7][0]*H-z-k
                    vr[n- 8][2]=Z[-1]+vr[n- 8][0]*H-z
                    vr[n- 9][2]=Z[-1]+vr[n- 9][0]*H-z
                    vr[n-10][2]=Z[-1]+vr[n-10][0]*H-z-k
                    vr[n-11][2]=Z[-1]+vr[n-11][0]*H-z-k
                    vr[n-12][2]=Z[-1]+vr[n-12][0]*H-z
                    Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,(k1+k2)*0.5-0.01,k2)
                    n=len(vr)
                    vr[n- 2][2]=Z[-1]+vr[n- 2][0]*H-z-k-f
                    vr[n- 3][2]=Z[-1]+vr[n- 3][0]*H-z-k-f
                    vr[n- 6][2]=Z[-1]+vr[n- 6][0]*H-z-k-f
                    vr[n- 7][2]=Z[-1]+vr[n- 7][0]*H-z-k-f
                    vr[n-13][2]=Z[-1]+vr[n-13][0]*H-z-k
                    vr[n-14][2]=Z[-1]+vr[n-14][0]*H-z-k-f
                    vr[n-15][2]=Z[-1]+vr[n-15][0]*H-z-k-f
                    vr[n-16][2]=Z[-1]+vr[n-16][0]*H-z-k
                    vr[n-17][2]=Z[-1]+vr[n-17][0]*H-z-k
                    vr[n-18][2]=Z[-1]+vr[n-18][0]*H-z-k-f
                    vr[n-19][2]=Z[-1]+vr[n-19][0]*H-z-k-f
                    vr[n-20][2]=Z[-1]+vr[n-20][0]*H-z-k
                else:
                    Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,0,0)
                    n=len(vr)
                    vr[n-2][2]=Z[-1]+vr[n-2][0]*H-z-f
                    vr[n-3][2]=Z[-1]+vr[n-3][0]*H-z-f
                    vr[n-6][2]=Z[-1]+vr[n-6][0]*H-z-f
                    vr[n-7][2]=Z[-1]+vr[n-7][0]*H-z-f
                    vr[n-13][2]=Z[-1]+vr[n-13][0]*H-z
                    vr[n-14][2]=Z[-1]+vr[n-14][0]*H-z-f
                    vr[n-15][2]=Z[-1]+vr[n-15][0]*H-z-f
                    vr[n-16][2]=Z[-1]+vr[n-16][0]*H-z
                    vr[n-17][2]=Z[-1]+vr[n-17][0]*H-z
                    vr[n-18][2]=Z[-1]+vr[n-18][0]*H-z-f
                    vr[n-19][2]=Z[-1]+vr[n-19][0]*H-z-f
                    vr[n-20][2]=Z[-1]+vr[n-20][0]*H-z
                m=len(fc);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 vr[ALT[x*4]][0]>0 and vr[ALT[x*4+2]][0]>0:
                if  kx[x][y]==True:
                    Kapak(vr,fc,X,Z,x*2+1,y*2+1,k2/2,(k1+k2)*0.5-0.01)
                    n=len(vr)
                    vr[n- 5][2]=Z[-1]-vr[n- 5][0]*H-z
                    vr[n- 6][2]=Z[-1]-vr[n- 6][0]*H-z-k
                    vr[n- 7][2]=Z[-1]-vr[n- 7][0]*H-z-k
                    vr[n- 8][2]=Z[-1]-vr[n- 8][0]*H-z
                    vr[n- 9][2]=Z[-1]-vr[n- 9][0]*H-z
                    vr[n-10][2]=Z[-1]-vr[n-10][0]*H-z-k
                    vr[n-11][2]=Z[-1]-vr[n-11][0]*H-z-k
                    vr[n-12][2]=Z[-1]-vr[n-12][0]*H-z
                    Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,(k1+k2)*0.5-0.01,k2)
                    n=len(vr)
                    vr[n- 2][2]=Z[-1]-vr[n- 2][0]*H-z-k-f
                    vr[n- 3][2]=Z[-1]-vr[n- 3][0]*H-z-k-f
                    vr[n- 6][2]=Z[-1]-vr[n- 6][0]*H-z-k-f
                    vr[n- 7][2]=Z[-1]-vr[n- 7][0]*H-z-k-f
                    vr[n-13][2]=Z[-1]-vr[n-13][0]*H-z-k
                    vr[n-14][2]=Z[-1]-vr[n-14][0]*H-z-k-f
                    vr[n-15][2]=Z[-1]-vr[n-15][0]*H-z-k-f
                    vr[n-16][2]=Z[-1]-vr[n-16][0]*H-z-k
                    vr[n-17][2]=Z[-1]-vr[n-17][0]*H-z-k
                    vr[n-18][2]=Z[-1]-vr[n-18][0]*H-z-k-f
                    vr[n-19][2]=Z[-1]-vr[n-19][0]*H-z-k-f
                    vr[n-20][2]=Z[-1]-vr[n-20][0]*H-z-k
                else:
                    Fitil(vr,fc,X,Z,x*2+1,y*2+1,k3,0,0)
                    n=len(vr)
                    vr[n-2][2]=Z[-1]-vr[n-2][0]*H-z-f
                    vr[n-3][2]=Z[-1]-vr[n-3][0]*H-z-f
                    vr[n-6][2]=Z[-1]-vr[n-6][0]*H-z-f
                    vr[n-7][2]=Z[-1]-vr[n-7][0]*H-z-f
                    vr[n-13][2]=Z[-1]-vr[n-13][0]*H-z
                    vr[n-14][2]=Z[-1]-vr[n-14][0]*H-z-f
                    vr[n-15][2]=Z[-1]-vr[n-15][0]*H-z-f
                    vr[n-16][2]=Z[-1]-vr[n-16][0]*H-z
                    vr[n-17][2]=Z[-1]-vr[n-17][0]*H-z
                    vr[n-18][2]=Z[-1]-vr[n-18][0]*H-z-f
                    vr[n-19][2]=Z[-1]-vr[n-19][0]*H-z-f
                    vr[n-20][2]=Z[-1]-vr[n-20][0]*H-z
                m=len(fc);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]==True:
                    zz=(k1+k2)*0.5-0.01
                    xx=X[x*2+1]
                    vr.extend([[xx,-k2/2+zz,Z[-3]       ],[xx+k2,-k2/2+zz,Z[-3]    +k2       ],[xx+k2,k2/2+zz,Z[-3]    +k2       ],[xx,k2/2+zz,Z[-3]       ]])
                    vr.extend([[xx,-k2/2+zz,Z[-1]+xx*H-z],[xx+k2,-k2/2+zz,Z[-1]+(xx+k2)*H-z-k],[xx+k2,k2/2+zz,Z[-1]+(xx+k2)*H-z-k],[xx,k2/2+zz,Z[-1]+xx*H-z]])
                    vr.extend([[ 0,-k2/2+zz,Z[-1]     -z],[    0,-k2/2+zz,Z[-1]          -z-k],[    0,k2/2+zz,Z[-1]          -z-k],[ 0,k2/2+zz,Z[-1]     -z]])
                    xx=X[x*2+2]
                    vr.extend([[xx,-k2/2+zz,Z[-1]-xx*H-z],[xx-k2,-k2/2+zz,Z[-1]-(xx-k2)*H-z-k],[xx-k2,k2/2+zz,Z[-1]-(xx-k2)*H-z-k],[xx,k2/2+zz,Z[-1]-xx*H-z]])
                    vr.extend([[xx,-k2/2+zz,Z[-3]       ],[xx-k2,-k2/2+zz,Z[-3]    +k2       ],[xx-k2,k2/2+zz,Z[-3]    +k2       ],[xx,k2/2+zz,Z[-3]       ]])
                    n=len(vr)
                    fc.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]])
                    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-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=X[x*2+1]
                    vr.extend([[xx   +k2,-k3+zz,Z[-3]    +k2            ],[xx+k4+k2,-k3+zz,Z[-3]    +k2+k4         ],[xx+k4+k2, k3+zz,Z[-3]    +k2+k4         ],[xx   +k2, k3+zz,Z[-3]    +k2            ]])
                    vr.extend([[xx   +k2,-k3+zz,Z[-1]+(xx+k2   )*H-z-k  ],[xx+k4+k2,-k3+zz,Z[-1]+(xx+k2+k4)*H-z-k-f],[xx+k4+k2, k3+zz,Z[-1]+(xx+k2+k4)*H-z-k-f],[xx   +k2, k3+zz,Z[-1]+(xx+k2   )*H-z-k  ]])
                    vr.extend([[    0,-k3+zz,Z[-1]-k     -z],[       0,-k3+zz,Z[-1]-k             -z-f],[       0,k3+zz,Z[-1]-k          -z-f],[    0,k3+zz,Z[-1]-k     -z]])
                    xx=X[x*2+2]
                    vr.extend([[xx   -k2,-k3+zz,Z[-1]-(xx-k2   )*H-z-k  ],[xx-k4-k2,-k3+zz,Z[-1]-(xx-k2-k4)*H-z-k-f],[xx-k4-k2, k3+zz,Z[-1]-(xx-k2-k4)*H-z-k-f],[xx   -k2, k3+zz,Z[-1]-(xx-k2   )*H-z-k  ]])
                    vr.extend([[xx   -k2,-k3+zz,Z[-3]    +k2            ],[xx-k4-k2,-k3+zz,Z[-3]    +k2+k4         ],[xx-k4-k2, k3+zz,Z[-3]    +k2+k4         ],[xx   -k2, k3+zz,Z[-3]    +k2            ]])
                    n=len(vr)
                    fc.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]])
                    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-19,n-20],[n- 3,n- 2,n-18,n-19],[n- 2,n- 1,n-17,n-18]])
                    xx=X[x*2+1]
                    vr.extend([[xx+k4+k2,-k3+zz,Z[-3]    +k2+k4         ],[xx+k4+k2, k3+zz,Z[-3]    +k2+k4         ]])
                    vr.extend([[xx+k4+k2,-k3+zz,Z[-1]+(xx+k2+k4)*H-z-k-f],[xx+k4+k2, k3+zz,Z[-1]+(xx+k2+k4)*H-z-k-f]])
                    vr.extend([[       0,-k3+zz,Z[-1]-k             -z-f],[       0,k3+zz,Z[-1]-k          -z-f]])
                    xx=X[x*2+2]
                    vr.extend([[xx-k4-k2,-k3+zz,Z[-1]-(xx-k2-k4)*H-z-k-f],[xx-k4-k2, k3+zz,Z[-1]-(xx-k2-k4)*H-z-k-f]])
                    vr.extend([[xx-k4-k2,-k3+zz,Z[-3]    +k2+k4         ],[xx-k4-k2, k3+zz,Z[-3]    +k2+k4         ]])
                    fc.extend([[n+8,n+6,n+4,n+2,n+0],[n+1,n+3,n+5,n+7,n+9]])
                else:
                    xx=X[x*2+1]
                    vr.extend([[xx,-k3,Z[-3]       ],[xx+k4,-k3,Z[-3]    +k4       ],[xx+k4,k3,Z[-3]    +k4       ],[xx,k3,Z[-3]       ]])
                    vr.extend([[xx,-k3,Z[-1]+xx*H-z],[xx+k4,-k3,Z[-1]+(xx+k4)*H-z-f],[xx+k4,k3,Z[-1]+(xx+k4)*H-z-f],[xx,k3,Z[-1]+xx*H-z]])
                    vr.extend([[ 0,-k3,Z[-1]     -z],[    0,-k3,Z[-1]          -z-f],[    0,k3,Z[-1]          -z-f],[ 0,k3,Z[-1]     -z]])
                    xx=X[x*2+2]
                    vr.extend([[xx,-k3,Z[-1]-xx*H-z],[xx-k4,-k3,Z[-1]-(xx-k4)*H-z-f],[xx-k4,k3,Z[-1]-(xx-k4)*H-z-f],[xx,k3,Z[-1]-xx*H-z]])
                    vr.extend([[xx,-k3,Z[-3]       ],[xx-k4,-k3,Z[-3]    +k4       ],[xx-k4,k3,Z[-3]    +k4       ],[xx,k3,Z[-3]       ]])
                    n=len(vr)
                    fc.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]])
                    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-19,n-20],[n- 3,n- 2,n-18,n-19],[n- 2,n- 1,n-17,n-18]])
                    xx=X[x*2+1]
                    vr.extend([[xx+k4,-0.005,Z[-3]    +k4       ],[xx+k4,0.005,Z[-3]    +k4       ]])
                    vr.extend([[xx+k4,-0.005,Z[-1]+(xx+k4)*H-z-f],[xx+k4,0.005,Z[-1]+(xx+k4)*H-z-f]])
                    vr.extend([[    0,-0.005,Z[-1]          -z-f],[    0,0.005,Z[-1]          -z-f]])
                    xx=X[x*2+2]
                    vr.extend([[xx-k4,-0.005,Z[-1]-(xx-k4)*H-z-f],[xx-k4,0.005,Z[-1]-(xx-k4)*H-z-f]])
                    vr.extend([[xx-k4,-0.005,Z[-3]    +k4       ],[xx-k4,0.005,Z[-3]    +k4       ]])
                    fc.extend([[n+8,n+6,n+4,n+2,n+0],[n+1,n+3,n+5,n+7,n+9]])
                m=len(fc);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  self.mr==True:
        mrh=-self.mr1/100;mrg= self.mr2/100
        mdv=(self.mr3/200)+mrg;msv=-(mdv+(self.mr4/100))
        vr.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(vr);fc.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(fc);mer.extend([n-1,n-2,n-3,n-4,n-5,n-6])
#OBJE -----------------------------------------------------------
    mesh = bpy.data.meshes.new(name='Window')
    mesh.from_pydata(vr,[],fc)
    if   self.mt1=='1':mesh.materials.append(MAT('PVC',    1.0,1.0,1.0))
    elif self.mt1=='2':mesh.materials.append(MAT('Wood',   0.3,0.2,0.1))
    elif self.mt1=='3':mesh.materials.append(MAT('Plastic',0.0,0.0,0.0))

    if   self.mt2=='1':mesh.materials.append(MAT('PVC',    1.0,1.0,1.0))
    elif self.mt2=='2':mesh.materials.append(MAT('Wood',   0.3,0.2,0.1))
    elif self.mt2=='3':mesh.materials.append(MAT('Plastic',0.0,0.0,0.0))

    mesh.materials.append(MAT('Glass',0.5,0.8,1.0))
    if self.mr==True:mesh.materials.append(MAT('Marble', 0.9,0.8,0.7))

    for i in ftl:
        mesh.polygons[i].material_index=1
    for i in cam:
        mesh.polygons[i].material_index=2
    for i in mer:
        mesh.polygons[i].material_index=3
    for i in SM:
        mesh.polygons[i].use_smooth = 1
    mesh.update(calc_edges=True)
    from bpy_extras import object_utils
    object_utils.object_data_add(context, mesh, operator=None)
    return mesh.name
    if  bpy.context.mode!='EDIT_MESH':
        bpy.ops.object.editmode_toggle()
        bpy.ops.object.editmode_toggle()
#----------------------------------------------------------------
class PENCERE(bpy.types.Operator):
    bl_idname = "mesh.add_say3d_pencere2"
    bl_label = "Window"
    bl_description = "Window Generator"
    bl_options = {'REGISTER', 'UNDO'}
    prs = 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="")
    son=prs
    gen=IntProperty(name='H Count',     min=1,max= 8, default= 3, description='Horizontal Panes')
    yuk=IntProperty(name='V Count',     min=1,max= 5, default= 1, description='Vertical Panes')
    kl1=IntProperty(name='Outer Frame', min=2,max=50, default= 5, description='Outside Frame Thickness')
    kl2=IntProperty(name='Risers',      min=2,max=50, default= 5, description='Risers Width')
    fk =IntProperty(name='Inner Frame', min=1,max=20, default= 2, description='Inside Frame Thickness')

    mr=BoolProperty(name='Sill', default=True,description='Window Sill')
    mr1=IntProperty(name='',min=1, max=20, default= 4, description='Height')
    mr2=IntProperty(name='',min=0, max=20, default= 4, description='First Depth')
    mr3=IntProperty(name='',min=1, max=50, default=20, description='Second Depth')
    mr4=IntProperty(name='',min=0, max=50, default= 0, description='Extrusion for Jamb')

    mt1=EnumProperty(items =(('1',"PVC",""),('2',"WOOD",""),('3',"Plastic","")),name="",default='1')
    mt2=EnumProperty(items =(('1',"PVC",""),('2',"WOOD",""),('3',"Plastic","")),name="",default='3')

    UST=EnumProperty(items =(('1',"Flat",""),('2',"Arch",  ""),('3',"Inclined", ""),('4',"Triangle","")),name="Top",default='1')
    DT2=EnumProperty(items =(('1',"Difference",""),('2',"Radius",   "")),                         name="",default='1')
    DT3=EnumProperty(items =(('1',"Difference",""),('2',"Incline %",""),('3',"Incline Angle","")),name="",default='1')

    VL1=IntProperty( name='',min=-10000,max=10000,default=30)#Fark
    VL2=IntProperty( name='',min=     1,max=10000,default=30)#Cap
    VL3=IntProperty( name='',min=  -100,max=  100,default=30)#Egim %
    VL4=IntProperty( name='',min=   -45,max=   45,default=30)#Egim Aci

    RES=IntProperty(name='Resolution pi/',min=2,max=360,default=36)#Res

    gnx0=IntProperty(name='',min=1,max=300,default= 60,description='1st Window Width')
    gnx1=IntProperty(name='',min=1,max=300,default=110,description='2nd Window Width')
    gnx2=IntProperty(name='',min=1,max=300,default= 60,description='3rd Window Width')
    gnx3=IntProperty(name='',min=1,max=300,default= 60,description='4th Window Width')
    gnx4=IntProperty(name='',min=1,max=300,default= 60,description='5th Window Width')
    gnx5=IntProperty(name='',min=1,max=300,default= 60,description='6th Window Width')
    gnx6=IntProperty(name='',min=1,max=300,default= 60,description='7th Window Width')
    gnx7=IntProperty(name='',min=1,max=300,default= 60,description='8th Window Width')

    gny0=IntProperty(name='',min=1,max=300,default=190,description='1st Row Height')
    gny1=IntProperty(name='',min=1,max=300,default= 45,description='2nd Row Height')
    gny2=IntProperty(name='',min=1,max=300,default= 45,description='3rd Row Height')
    gny3=IntProperty(name='',min=1,max=300,default= 45,description='4th Row Height')
    gny4=IntProperty(name='',min=1,max=300,default= 45,description='5th Row Height')

    k00=BoolProperty(name='',default=True); k01=BoolProperty(name='',default=False)
    k02=BoolProperty(name='',default=True); k03=BoolProperty(name='',default=False)
    k04=BoolProperty(name='',default=False);k05=BoolProperty(name='',default=False)
    k06=BoolProperty(name='',default=False);k07=BoolProperty(name='',default=False)

    k10=BoolProperty(name='',default=False);k11=BoolProperty(name='',default=False)
    k12=BoolProperty(name='',default=False);k13=BoolProperty(name='',default=False)
    k14=BoolProperty(name='',default=False);k15=BoolProperty(name='',default=False)
    k16=BoolProperty(name='',default=False);k17=BoolProperty(name='',default=False)

    k20=BoolProperty(name='',default=False);k21=BoolProperty(name='',default=False)
    k22=BoolProperty(name='',default=False);k23=BoolProperty(name='',default=False)
    k24=BoolProperty(name='',default=False);k25=BoolProperty(name='',default=False)
    k26=BoolProperty(name='',default=False);k27=BoolProperty(name='',default=False)

    k30=BoolProperty(name='',default=False);k31=BoolProperty(name='',default=False)
    k32=BoolProperty(name='',default=False);k33=BoolProperty(name='',default=False)
    k34=BoolProperty(name='',default=False);k35=BoolProperty(name='',default=False)
    k36=BoolProperty(name='',default=False);k37=BoolProperty(name='',default=False)

    k40=BoolProperty(name='',default=False);k41=BoolProperty(name='',default=False)
    k42=BoolProperty(name='',default=False);k43=BoolProperty(name='',default=False)
    k44=BoolProperty(name='',default=False);k45=BoolProperty(name='',default=False)
    k46=BoolProperty(name='',default=False);k47=BoolProperty(name='',default=False)
    rotationPropX=IntProperty(name='',min=0,max=360,default= 0,description='Window Rotation X')
    rotationPropY=IntProperty(name='',min=0,max=360,default= 0,description='Window Rotation Y')
    rotationPropZ=IntProperty(name='',min=0,max=360,default= 0,description='Window Rotation Z')
    locationPropX=FloatProperty(name='',min=-10000,max=10000,default= 0,description='Window Location X')
    locationPropY=FloatProperty(name='',min=-10000,max=10000,default= 0,description='Window Location Y')
    locationPropZ=FloatProperty(name='',min=-10000,max=10000,default= 0,description='Window Location Z')
    #--------------------------------------------------------------
    def draw(self, context):
        layout = self.layout
        layout.prop(self,'prs')
        box=layout.box()
        box.prop(self,'gen');box.prop(self,'yuk')
        box.prop(self,'kl1');box.prop(self,'kl2')
        box.prop(self, 'fk')

        box.prop(self,'mr')
        if  self.mr==True:
            row=box.row();row.prop(self,'mr1');row.prop(self,'mr2')
            row=box.row();row.prop(self,'mr3');row.prop(self,'mr4')
        row =layout.row();row.label('Frame');row.label('Inner Frame')
        row =layout.row();row.prop(self,'mt1');row.prop(self,'mt2')

        box.prop(self,'UST')
        if   self.UST=='2':
            row= box.row();    row.prop(self,'DT2')
            if   self.DT2=='1':row.prop(self,'VL1')
            elif self.DT2=='2':row.prop(self,'VL2')
            box.prop(self,'RES')
        elif self.UST=='3':
            row= box.row();    row.prop(self,'DT3')
            if   self.DT3=='1':row.prop(self,'VL1')
            elif self.DT3=='2':row.prop(self,'VL3')
            elif self.DT3=='3':row.prop(self,'VL4')
        elif self.UST=='4':
            row= box.row();    row.prop(self,'DT3')
            if   self.DT3=='1':row.prop(self,'VL1')
            elif self.DT3=='2':row.prop(self,'VL3')
            elif self.DT3=='3':row.prop(self,'VL4')
        row =layout.row()
        for i in range(0,self.gen):
            row.prop(self,'gnx'+str(i))
        for j in range(0,self.yuk):
            row=layout.row()
            row.prop(self,'gny'+str(self.yuk-j-1))
            for i in range(0,self.gen):
                row.prop(self,'k'+str(self.yuk-j-1)+str(i))
        row =layout.row()
        box.row();row.label('X');row.label('Y');row.label('Z')
        row =layout.row()
        row.label("Rotation")
        row =layout.row()
        box.row();row.prop(self,'rotationPropX');row.prop(self,'rotationPropY');row.prop(self,'rotationPropZ')
        row =layout.row()
        row.label("Location")
        row =layout.row()
        box.row();row.prop(self,'locationPropX');row.prop(self,'locationPropY');row.prop(self,'locationPropZ')

    def execute(self, context):
        if self.son!=self.prs:
            Prs(self)
            self.son=self.prs
        name = add_object(self,context)
        bpy.data.objects[name].rotation_euler[0] = radians(self.rotationPropX)
        bpy.data.objects[name].rotation_euler[1] = radians(self.rotationPropY)
        bpy.data.objects[name].rotation_euler[2] = radians(self.rotationPropZ)
        bpy.data.objects[name].location[0] = bpy.context.scene.cursor_location[0] + self.locationPropX
        bpy.data.objects[name].location[1] = bpy.context.scene.cursor_location[1] + self.locationPropY
        bpy.data.objects[name].location[2] = bpy.context.scene.cursor_location[2] + self.locationPropZ
        return {'FINISHED'}