Skip to content
Snippets Groups Projects
add_mesh_sove.py 10.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • '''bl_info = {
        "name": "Sove",
        "author": "SayPRODUCTIONS",
        "version": (1, 0),
    
        "blender": (2, 59, 0),
    
        "location": "View3D > Add > Mesh > Say3D",
        "description": "Sove Framema",
        "warning": "",
        "wiki_url": "",
        "tracker_url": "",
        "category": "Add Mesh"}
    
    import bpy
    from bpy.props import *
    from bpy_extras.object_utils import object_data_add
    from mathutils import Vector
    import operator
    from math import pi, sin, cos, sqrt, atan
    
    def MSVE():
        if 'Sove' not in bpy.data.materials:
            mtl=bpy.data.materials.new('Sove')
            mtl.diffuse_color     = (0.44,0.52,0.64)
    
            mtl.diffuse_shader    = 'LAMBERT'
            mtl.diffuse_intensity = 1.0
    
        else:
            mtl=bpy.data.materials['Sove']
        return mtl
    def Prs(self,v1,v2,v3,v4,v5,v6,v7,v8,v9,fg,fh,fd,
            f0,f1,f2,f3,f4,f5,f6,f7,f8,f9):
        self.gen=v1;self.knr=v2;self.yuk=v3
        self.alt=v4;self.ust=v5;self.sdr=v6
        self.pdr=v7;self.dh =v8;self.dr =v9
        self.fg =fg;self.fh =fh;self.fd =fd
        self.f0 =f0;self.f1 =f1;self.f2 =f2;self.f3=f3;self.f4=f4
        self.f5 =f5;self.f6 =f6;self.f7 =f7;self.f8=f8;self.f9=f9
    def add_object(self, context):
        fc=[];vr=[]
        mx =self.gen/200;my =self.yuk/100;k1=self.knr/100;dh=self.dh/100;fd=self.fd/100;fh=self.fh/100
        alt=self.alt/100;ust=my-self.ust/100;drn=-self.sdr/100;pdr=self.pdr/100
        vr.append([-mx-k1,  0,  0]);vr.append([ mx+k1,  0,  0]);vr.append([ mx+k1,  0, my]);vr.append([-mx-k1,  0, my])
        vr.append([-mx,   pdr,alt]);vr.append([ mx,   pdr,alt]);vr.append([ mx,   pdr,ust]);vr.append([-mx,   pdr,ust])
        vr.append([-mx-k1,drn,  0]);vr.append([ mx+k1,drn,  0]);vr.append([ mx+k1,drn, my]);vr.append([-mx-k1,drn, my])
        vr.append([-mx,   drn,alt]);vr.append([ mx,   drn,alt]);vr.append([ mx,   drn,ust]);vr.append([-mx,   drn,ust])
        fc.append([ 8, 0, 1, 9]);fc.append([ 8, 9,13,12])
        fc.append([12,13, 5, 4]);fc.append([11,10, 2, 3])
        if self.fg==0:
            fc.append([ 0, 8,11, 3]);fc.append([ 8,12,15,11]);fc.append([12, 4, 7,15])
            fc.append([ 5,13,14, 6]);fc.append([13, 9,10,14]);fc.append([ 9, 1, 2,10])
        else:
            fc.append([11, 3,16,17]);fc.append([15,11,17,18]);fc.append([ 7,15,18,24])
            fc.append([25,19,14, 6]);fc.append([19,20,10,14]);fc.append([20,21, 2,10])
            ou=self.fg*12
            fc.append([4,7,12+ou,24+ou]);fc.append([6,5,25+ou,13+ou])
        z=my
        for i in range(self.fg):
            if i==0:z-=self.f0/100
            if i==1:z-=self.f1/100
            if i==2:z-=self.f2/100
            if i==3:z-=self.f3/100
            if i==4:z-=self.f4/100
            if i==5:z-=self.f5/100
            if i==6:z-=self.f6/100
            if i==7:z-=self.f7/100
            if i==8:z-=self.f8/100
            if i==9:z-=self.f9/100
            vr.append([   -mx-k1,     0,z]);vr.append([   -mx-k1,   drn,z]);vr.append([     -mx,   drn,z])
            vr.append([       mx,   drn,z]);vr.append([    mx+k1,   drn,z]);vr.append([   mx+k1,     0,z])
            vr.append([-mx-k1+fd,     0,z]);vr.append([-mx-k1+fd,drn+fd,z]);vr.append([     -mx,drn+fd,z])
            vr.append([       mx,drn+fd,z]);vr.append([ mx+k1-fd,drn+fd,z]);vr.append([mx+k1-fd,     0,z])
            z-=fh
            vr.append([   -mx-k1,     0,z]);vr.append([   -mx-k1,   drn,z]);vr.append([     -mx,   drn,z])
            vr.append([       mx,   drn,z]);vr.append([    mx+k1,   drn,z]);vr.append([   mx+k1,     0,z])
            vr.append([-mx-k1+fd,     0,z]);vr.append([-mx-k1+fd,drn+fd,z]);vr.append([     -mx,drn+fd,z])
            vr.append([       mx,drn+fd,z]);vr.append([ mx+k1-fd,drn+fd,z]);vr.append([mx+k1-fd,     0,z])
            n=len(vr)
            fc.append([n- 1,n- 2,n- 8,n- 7]);fc.append([n- 3,n- 9,n- 8,n- 2]);fc.append([n- 2,n- 1,n-13,n-14])
            fc.append([n- 3,n- 2,n-14,n-15]);fc.append([n-15,n-14,n-20,n-21]);fc.append([n-14,n-13,n-19,n-20])
            fc.append([n- 4,n- 5,n-11,n-10]);fc.append([n- 5,n- 6,n-12,n-11]);fc.append([n- 5,n- 4,n-16,n-17])
            fc.append([n- 6,n- 5,n-17,n-18]);fc.append([n-24,n-18,n-17,n-23]);fc.append([n-23,n-17,n-16,n-22])
            if self.fg>1:
                if self.fg%2==0:
                    if i < self.fg/2:fc.append([7,n-16,n-4]);fc.append([6,n-3,n-15])
                    if i+1<self.fg/2:fc.append([7,n- 4,n+8]);fc.append([6,n+9,n- 3])
                    if i+1>self.fg/2:fc.append([4,n-16,n-4]);fc.append([5,n-3,n-15])
                    if i+1>self.fg/2 and i+1<self.fg:fc.append([4,n-4,n+8]);fc.append([5,n+9,n-3])
                else:
                    if i<self.fg//2:
                        fc.append([7,n-16,n-4]);fc.append([6,n-3,n-15])
                        fc.append([7,n- 4,n+8]);fc.append([6,n+9,n- 3])
                    if i > self.fg//2:fc.append([4,n-16,n-4]);fc.append([5,n-3,n-15])
                    if i+1>self.fg//2 and i+1<self.fg:fc.append([4,n- 4,n+8]);fc.append([5,n+9,n-3])
            if i<self.fg-1 and self.fg>1:
                fc.append([n- 7,n- 8,n+4,n+5]);fc.append([n- 8,n- 9,n+3,n+4]);fc.append([n-9,n- 3,n+9,n+3])
                fc.append([n-10,n-11,n+1,n+2]);fc.append([n-11,n-12, n ,n+1]);fc.append([n-4,n-10,n+2,n+8])
            if i==self.fg-1:
                fc.append([0, 8,n-11,n-12]);fc.append([ 8,12,n-10,n-11]);fc.append([12,4,n-4,n-10])
                fc.append([5,13,n- 9,n- 3]);fc.append([13, 9,n- 8,n- 9]);fc.append([ 9,1,n-7,n- 8])
        SM=[]
        #Duz----------------
        if self.dr==False:
            fc.append([14,10,11,15]);fc.append([6,14,15,7])
        #Yuvarlak-----------
    
            if dh>mx:dh=mx;self.dh=mx*100
            vr[ 6][2]-=dh;vr[ 7][2]-=dh
            vr[14][2]-=dh;vr[15][2]-=dh
            O=mx/dh
            H1=sqrt(mx**2+dh**2)/2
            H2=H1*O
            R=sqrt(H1**2+H2**2)
            M=ust-R
            A=pi-atan(O)*2
            for a in range(1,24):
                p=(a*A/12)+(pi*1.5)-A
                vr.append([cos(p)*R,pdr,M-sin(p)*R])
                vr.append([cos(p)*R,drn,M-sin(p)*R])
                n=len(vr)
                if a==1:
                    fc.append([n-1,15,7,n-2])
                    SM.append(len(fc))
                    fc.append([15,n-1,11])
                elif a<23:
                    fc.append([n-1,n-3,n-4,n-2])
                    SM.append(len(fc))
                    if a<13:   fc.append([n-3,n-1,11])
                    elif a==13:fc.append([n-3,n-1,10,11])
                    else:      fc.append([n-3,n-1,10])
                elif a==23:
                    fc.append([n-1,n-3,n-4,n-2])
                    SM.append(len(fc))
                    fc.append([n-3,n-1,10])
                    fc.append([14,n-1,n-2,6])
                    SM.append(len(fc))
                    fc.append([n-1,14,10])
    #OBJE -----------------------------------------------------------
        mesh = bpy.data.meshes.new(name='Sove')
        bpy.data.objects.new('Sove', mesh)
        mesh.from_pydata(vr,[],fc)
     #   for i in SM:
     #       mesh.faces[i-1].shade_smooth()
        mesh.materials.append(MSVE())
        mesh.update(calc_edges=True)
        object_data_add(context, mesh, operator=None)
        if bpy.context.mode != 'EDIT_MESH':
            bpy.ops.object.editmode_toggle()
            bpy.ops.object.editmode_toggle()
    #----------------------------------------------------------------
    class OBJECT_OT_add_object(bpy.types.Operator):
        bl_idname = "mesh.add_say3d_sove"
        bl_label = "Sove"
        bl_description = "Sove Frame"
        bl_options = {'REGISTER', 'UNDO'}
    
        prs = EnumProperty(items = (("1","PENCERE 200",""),
                                    ("2","PENCERE 180",""),
                                    ("3","PENCERE 160","")),
                                    name="",description="")
        son=prs
        gen=IntProperty(name='Width', min=1,max= 400,default=200,description='Width')
        knr=IntProperty(name='Thickness', min=1,max= 100,default= 15,description='Thickness')
        yuk=IntProperty(name='Elevation',min=1,max=3000,default=590,description='Elevation')
        alt=IntProperty(name='Old Spacing',      min=1,max= 300,default= 44,description='Old Spacing')
        ust=IntProperty(name='Top margin',      min=1,max= 300,default= 33,description='Top margin')
        sdr=IntProperty(name='Jamb', min=1,max= 100,default= 15,description='jamb Depth')
        pdr=IntProperty(name='Wall Thickness',    min=0,max= 100,default= 20,description='Wall Thickness')
        dh =IntProperty(name='',         min=1,max= 200,default= 30,description='Height')
        dr=BoolProperty(name='Rounded', default=True,  description='Rounded')
    
        fg =IntProperty(name='Gap',min=0,max=10,default=1,description='Gap')
        fh =IntProperty(name='',    min=1,max=10,default=3,description='Height')
        fd =IntProperty(name='',    min=1,max=10,default=2,description='Depth')
    
        f0 =IntProperty(name='Interval',min=1,max=3000,default=90,description='Interval')
        f1 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f2 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f3 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f4 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f5 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f6 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f7 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f8 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        f9 =IntProperty(name='Interval',min=1,max=3000,default=30,description='Interval')
        #--------------------------------------------------------------
        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,'knr')
            row=box.row();row.prop(self,'alt');row.prop(self,'ust')
            row=box.row();row.prop(self,'sdr');row.prop(self,'pdr')
            row=box.row();row.prop(self, 'dr');row.prop(self, 'dh')
            box=layout.box()
            box.prop(self,'fg')
            row=box.row();row.prop(self, 'fh');row.prop(self, 'fd')
            for i in range(self.fg):
                box.prop(self,'f'+str(i))
    
        def execute(self, context):
            if self.son!=self.prs:
                if self.prs=='1':Prs(self,200,15,590,44,33,15,20,30,True,1,2,3,90,30,30,30,30,30,30,30,30,30)
                if self.prs=='2':Prs(self,180,15,590,44,33,15,20,30,True,1,2,3,90,30,30,30,30,30,30,30,30,30)
                if self.prs=='3':Prs(self,160,15,590,44,33,15,20,30,True,1,2,3,90,30,30,30,30,30,30,30,30,30)
                self.son=self.prs
            add_object(self, context)
            return {'FINISHED'}