1、Richie,CADesign .cn,+Landscape +Architecture +CityPlanning,SiniticinkH,27,CADesign .cn,目前计算机辅助风景园林规划设计的状况,2D,3D,?,手工,“手工”,智能,DATA,67,避免形而上谈论计算机辅助设计技术,坚持传统设计基础上拓展新的设计方法,计算机辅助风景园林规划设计策略的基本架构,计算机辅助设计与学科高度交叉的风景园林规划专业,1-以参数模型构建的方式主导设计过程,2-以对数据的地理信息化辅助规划设计过程,3-以对建筑环境生态模拟控制与优化设计的过程,以参数模型构建的方式主导设计过程,基于节点式参数
2、化工具Grasshopper(GH)的基本构建,使用Python语言构建参数化模型,#导入需要用到的标准库 import rhinoscriptsyntax as rs import math import random #basiclines函数定义建筑水平方向的结构线,输入条件为一个点 def basiclines(basicpoint,lengthunit,angle,offsetvalue,topbplineheigh, multiple1,multiple2,multiple3, floorheight):bpoint0=(basicpoint0,basicpoint1,basicp
3、oint2)bpoints=bpoints.append(bpoint0)lengthunit=lengthunit #lengthunit定义截面基本间距单元multiple1=multiple1 #定义第一段截面基本间距单元倍数bpoint1=(bpoint00+multiple1*lengthunit,bpoint01,bpoint02)bpoints.append(bpoint1)angle=angle #angle定义建筑转折处的角度multiple2=multiple2 #定义第二段截面基本间距单元倍数hypotenuse=multiple2*lengthunitbpoint2=(
4、bpoint10+hypotenuse*math.sin(angle),bpoint11+hypotenuse*math.cos(angle),bpoint12)bpoints.append(bpoint2)multiple3=multiple3 #定义第三段截面基本间距单元倍数bpoint3=(bpoint20+multiple3*lengthunit,bpoint21,bpoint22)bpoints.append(bpoint3)bpline0=rs.AddPolyline(bpoints) #底层水平结构线bplines=bplines.append(bpline0)fh=floorh
5、eight #层高#建立上部水平结构线 for i in range(1,4):dividecurvelength=rs.CopyObject (bpline0,0,0,fh*i)bplines.append(dividecurvelength)offsetbplines=offsetvalue=offsetvaluefor j in bplines:offsetbpline=rs.OffsetCurve(j,0,0,0,offsetvalue)offsetbplines.append(offsetbpline)topbplineheight=topbplineheight topbpline
6、center=rs.OffsetCurve(bplines-1,0,0,0,offsetvalue/2)topbpline=rs.CopyObject(topbplinecenter,0,0,topbplineheight),参数化协同设计的方法,结构协同设计,生态分析协同,动力学的协同,地理信息系统协同,结构协同设计,Ansys Workbench,生态分析协同,动力学的协同,地理信息系统协同,最小外接立方体,进化计算与迭代,参数化的目的,探索“未知”的形态手段纯粹的形式 引入影响因子,参数化的目的,探索“未知”的形态手段纯粹的形式 引入影响因子,参数化的目的,可以建造的“未知”形态形式构建
7、探索 已建造,参数化的目的,可以建造的“未知”形态形式构建探索 已建造,大厦的设计借助了航空业设计软件,可以根据理想数据调整各种设计,也可以非常方便地计算各种材料的型号及数量。建筑设计这个行业虽然还停留在20世纪,但lT等产业已经进入21世纪,所以电脑技术的应用必不可少。,英国伦敦瑞士再保险总部大厦,参数化的目的,参数化传统设计形态 “唯一”的设计形态 形式模块,参数化的目的,参数化传统设计形态 “唯一”的设计形态 形式模块,设计流程方式的创造性,参数化的目的,-作为解决问题的工具,import rhinoscriptsyntax as rs import math import random
8、 #basiclines函数定义建筑水平方向的结构线,输入条件为一个点 def basiclines(basicpoint,lengthunit,angle,offsetvalue,topbplineheigh, multiple1,multiple2,multiple3, floorheight):bpoint0=(basicpoint0,basicpoint1,basicpoint2)bpoints=bpoints.append(bpoint0)lengthunit=lengthunit #lengthunit定义截面基本间距单元multiple1=multiple1 #定义第一段截面基本
9、间距单元倍数bpoint1=(bpoint00+multiple1*lengthunit,bpoint01,bpoint02)bpoints.append(bpoint1)angle=angle #angle定义建筑转折处的角度multiple2=multiple2 #定义第二段截面基本间距单元倍数hypotenuse=multiple2*lengthunitbpoint2=(bpoint10+hypotenuse*math.sin(angle),bpoint11+hypotenuse*math.cos(angle),bpoint12)bpoints.append(bpoint2)multip
10、le3=multiple3 #定义第三段截面基本间距单元倍数bpoint3=(bpoint20+multiple3*lengthunit,bpoint21,bpoint22)bpoints.append(bpoint3)bpline0=rs.AddPolyline(bpoints) #底层水平结构线bplines=bplines.append(bpline0)fh=floorheight #层高#建立上部水平结构线 for i in range(1,4):dividecurvelength=rs.CopyObject (bpline0,0,0,fh*i)bplines.append(divid
11、ecurvelength)offsetbplines=offsetvalue=offsetvaluefor j in bplines:offsetbpline=rs.OffsetCurve(j,0,0,0,offsetvalue)offsetbplines.append(offsetbpline)topbplineheight=topbplineheight topbplinecenter=rs.OffsetCurve(bplines-1,0,0,0,offsetvalue/2),编程与设计,pupoints4=for e in range(len(pupoints4sub):pupoints
12、4.append(pupoints4sube0,pupoints4sube1,pupoints4sube2)sectionpolylinesparts=for q in range(len(pupoints0): #通过随机选择的点建立截面结构线 sectionpolylinesparts.append(rs.AddPolyline(pupoints0q,pupoints1q,pupoints2q,pupoints4q)return sectionpolylinesparts,pupoints4#mainfunction函数时主要为interface code,建立于用户间的互动操作 def
13、mainfunction():basicpoint=rs.GetPoint(Select one point:)if not basicpoint:returnvalues=5,120,12,5,4,3,4,5lengthunit=values0angle=values1offsetvalue=values2topbplineheight=values3multiple1=values4multiple2=values5multiple3=values6floorheight=values7 #与用户的互动程序,图为程序运行时Rhino命令行的提示,可以看到设计过程中主要用于控制建筑结构线的相
14、关参数while True:prompt=Settingresult=rs.GetString(prompt,Insert:,(Lengthunit,Angle,Offsetvalue,Topbplineheight,Multiple1,Multiple2,Multiple3, Floorheight,Insert)if not result:returnresult=result.upper()if result=LENGTHUNIT:f=rs.GetReal(Lengthunit:,values0)if f is not None:lengthunit=f,elif result=ANGL
15、E:f=rs.GetReal(Angle(110-120):,values1,110,120)if f is not None:angle=felif result=OFFSETVALUE:f=rs.GetReal(Offsetvalue:,values2)if f is not None:offsetvalue=felif result=TOPBPLINEHEIGHT:f=rs.GetReal(Topbplineheight:,values3)if f is not None:topbplineheight=felif result=MULTIPLE1:f=rs.GetReal(Multip
16、le1:,values4)if f is not None:multiple1=felif result=MULTIPLE2:f=rs.GetReal(Multiple2:,values5)if f is not None:multiple2=felif result=MULTIPLE3:f=rs.GetReal(Multiple3:,values5)if f is not None:multiple3=felif result=FLOORHEIGHT:f=rs.GetReal(Floorheight:,values5)if f is not None: floorheight=felif r
17、esult=INSERT:breakbplines,offsetbplines,topbpline=basiclines(basicpoint,lengthunit,angle,offsetvalue,topbplineheight,multiple1,multiple2,multiple3,floorheight)sectionpolylinespart0,pupoints40=basicpoints(bplines,lengthunit)sectionpolylinespart1,pupoints41=basicpoints(offsetbplines,lengthunit) topdiv
18、ide=rs.DivideCurveLength(topbpline,lengthunit,True,True)topdividepoints=for a in range(len(topdivide):topdividepoints.append(topdividea0,topdividea1,topdividea2)toppolylines=for s in range(len(topdividepoints):,import rhinoscriptsyntax as rs mesh=mesh #导入外部程序的Mesh面。 meshes=rs.ExplodeMeshes(mesh) #分解
19、单一Mesh面为多个。 xymeshes= for i in range(len(meshes): if i =0: #处理分解后第一个Mesh面的展平位置。 mesh0point=rs.MeshVertices(meshesi) mesh0points= for r in mesh0point: mesh0points.append(r0,r1,r2) xymesh0=rs.OrientObject(meshesi,mesh0points, 0,10,0,10,0,0,0,0,0,1) xymeshes.append(xymesh0) else: #余下Mesh面的循环遍历。 vertice
20、s2=rs.MeshVertices(meshesi) vertices1=rs.MeshVertices(meshesi-1) vertices2lst= vertices1lst= for q in vertices2: vertices2lst.append(q0,q1,q2) for p in vertices1: vertices1lst.append(p0,p1,p2) #找到相邻两个面的共同顶点。 ver=m for m in vertices1lst for n in vertices2lst if m=n a=ver0 b=ver1 #找到相邻两个面共同顶点的索引。 inde
21、xa=vertices1lst.index(a) indexb=vertices1lst.index(b) #找到相邻两个面不共边的顶点。 cref=m for m in vertices1lst if m not in ver0 cv=m for m in vertices2lst if m not in ver0 #定义面的延展方向。 refvertice=rs.MeshVertices(xymeshesi-1) refvertices= for x in refvertice: refvertices.append(x0,x1,x2) indexc=c for c in range(0,
22、3) if c !=indexa and c!=indexb print(indexc) refverticespoint=rs.MirrorObject(rs.AddPoint(refverticesindexc0),refverticesindexa,refverticesindexb) mirrorpoint=rs.PointCoordinates(refverticespoint) for z in mirrorpoint: mirrorpoint=z0,z1,z2 #获得面的延展。 xymesh=rs.OrientObject(meshesi,a,b,cv,refverticesin
23、dexa,refverticesindexb,mirrorpoint,1) xymeshes.append(xymesh) print(xymesh) vertices2lst= vertices1lst= ver= print(xymeshes) #可以用Print函数检查结果。,设计方法的改变对设计师能力架构的调整提出了要求,除非仅是坚持传统的设计方法,否则在拓展更广阔的设计形态领域时,需要将参数模型构建的方法纳入到学科的架构中,以利于设计过程中的交互,这也是解决目前掌握该领域知识的设计师相对寥寥无几而不易进行团队合作的尴尬境地最好的方式。,众科技巨头呼吁重视编程教育,看看扎克伯格、比尔盖茨、Jack Dorsey等如何激励小孩学习编程?(视频),ArcGIS,CADesign .cn,关于我们+联系方式+版权声明,设计是本质,是核心,切勿舍本逐末!,编程让设计的过程变得有创造性!,谢谢!,