import bpyimport mathutilsdef make_mesh(name): me = bpy.data.meshes.new(name) ob = bpy.data.objects.new(name, me) bpy.context.scene.objects.link(ob) return obdef add_data(ob,verts,edges,faces): me = ob.data me.name = ob.name +' mesh' me.from_pydata(verts,edges,faces) me.update()def sierpinski(verts,edges,faces,level,v0,v1,v2): if level==0: last=len(verts) verts.extend([v0,v1,v2]) faces.append([last,last+1,last+2]) else: sierpinski(verts,edges,faces,level-1,v0,(v0+v1)/2,(v0+v2)/2) sierpinski(verts,edges,faces,level-1,v1,(v0+v1)/2,(v1+v2)/2) sierpinski(verts,edges,faces,level-1,v2,(v0+v2)/2,(v1+v2)/2) return def main(): v0=mathutils.Vector(( 0.0, 1.0, 0.0)) v1=mathutils.Vector((-0.9, -0.4, 0.0)) v2=mathutils.Vector(( 0.9, -0.4, 0.0)) verts=[] edges=[] faces=[] sierpinski(verts,edges,faces,5,v0,v1,v2) ob=make_mesh('Sierpinski') add_data(ob,verts,edges,faces) main()
import bpyimport mathutilsdef make_mesh(name): me = bpy.data.meshes.new(name) ob = bpy.data.objects.new(name, me) bpy.context.scene.objects.link(ob) return obdef add_data(ob,verts,edges,faces): me = ob.data me.name = ob.name +' mesh' me.from_pydata(verts,edges,faces) me.update()def sierpinski(verts,edges,faces,level,v0,v1,v2,v3): if level==0: last=len(verts) verts.extend([v0,v1,v2,v3]) faces.append([last,last+1,last+2]) faces.append([last,last+3,last+2]) faces.append([last,last+3,last+1]) faces.append([last+1,last+2,last+3]) else: sierpinski(verts,edges,faces,level-1,v0,(v0+v1)/2,(v0+v2)/2,(v0+v3)/2) sierpinski(verts,edges,faces,level-1,v1,(v0+v1)/2,(v1+v2)/2,(v1+v3)/2) sierpinski(verts,edges,faces,level-1,v2,(v0+v2)/2,(v1+v2)/2,(v2+v3)/2) sierpinski(verts,edges,faces,level-1,v3,(v0+v3)/2,(v1+v3)/2,(v2+v3)/2) return def main(): v0=mathutils.Vector(( 0.0, 1.0, -0.4)) v1=mathutils.Vector((-0.9, -0.4, -0.4)) v2=mathutils.Vector(( 0.9, -0.4, -0.4)) v3=mathutils.Vector(( 0.0, 0.0667, 1)) verts=[] edges=[] faces=[] sierpinski(verts,edges,faces,5,v0,v1,v2,v3) ob=make_mesh('Sierpinski') add_data(ob,verts,edges,faces) main()
import bpyimport mathutilsimport mathdef make_mesh(name): me = bpy.data.meshes.new(name) ob = bpy.data.objects.new(name, me) bpy.context.scene.objects.link(ob) return obdef add_data(ob,verts,edges,faces): me = ob.data me.name = ob.name +' mesh' me.from_pydata(verts,edges,faces) me.update()lv = 12k0 = 1eul = mathutils.Euler((0.0, 0.0, math.radians( 60.0)), 'XYZ')def fratree(verts,edges,faces,level,v0,v1): dv = (v1-v0) dn = dv.copy()*k0 dn.rotate(eul) dn[2] = 0.01*(level+2) v2 = v0 + dn v3 = v1 + dn v4 = (v1+v2)/2 + dn last=len(verts) verts.extend([v0,v1,v3,v4,v2]) faces.append([last,last+1,last+2,last+3,last+4]) if level!=0: fratree(verts,edges,faces,level-1,v2,v4) fratree(verts,edges,faces,level-1,v4,v3) return def main(): print('debug') v0=mathutils.Vector(( 0.0, 0.0, 0.0)) v1=mathutils.Vector(( 1.0, 0.0, 0.0)) verts=[] edges=[] faces=[] fratree(verts,edges,faces,lv,v0,v1) ob=make_mesh('fratree') add_data(ob,verts,edges,faces) main()
import bpyimport mathutilsimport mathdef make_mesh(name): me = bpy.data.meshes.new(name) ob = bpy.data.objects.new(name, me) bpy.data.collections[0].objects.link(ob) return obdef add_data(ob,verts,edges,faces): me = ob.data me.name = ob.name +' mesh' me.from_pydata(verts,edges,faces) me.update()lv = 12k0 = 1eul = mathutils.Euler((0.0, 0.0, math.radians( 60.0)), 'XYZ')def fratree(verts,edges,faces,level,v0,v1): dv = (v1-v0) dn = dv.copy()*k0 dn.rotate(eul) dn[2] = 0.01*(level+2) v2 = v0 + dn v3 = v1 + dn v4 = (v1+v2)/2 + dn last=len(verts) verts.extend([v0,v1,v3,v4,v2]) faces.append([last,last+1,last+2,last+3,last+4]) if level!=0: fratree(verts,edges,faces,level-1,v2,v4) fratree(verts,edges,faces,level-1,v4,v3) return def main(): for ob in bpy.data.collections[0].objects: bpy.data.collections[0].objects.unlink(ob) bpy.data.collections[0].objects.remove(ob) print('debug') v0=mathutils.Vector(( 0.0, 0.0, 0.0)) v1=mathutils.Vector(( 1.0, 0.0, 0.0)) verts=[] edges=[] faces=[] fratree(verts,edges,faces,lv,v0,v1) ob=make_mesh('fratree') add_data(ob,verts,edges,faces) main()