-
Brendon Murphy authored
Signed-off-by:
Brendon Murphy <meta.androcto1@gmail.com>
Brendon Murphy authoredSigned-off-by:
Brendon Murphy <meta.androcto1@gmail.com>
add_mesh_sove.py 10.18 KiB
'''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-----------
else:
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'}