rhinogh教程-參數(shù)化編程讓設(shè)計更具有創(chuàng)造力_第1頁
rhinogh教程-參數(shù)化編程讓設(shè)計更具有創(chuàng)造力_第2頁
rhinogh教程-參數(shù)化編程讓設(shè)計更具有創(chuàng)造力_第3頁
rhinogh教程-參數(shù)化編程讓設(shè)計更具有創(chuàng)造力_第4頁
rhinogh教程-參數(shù)化編程讓設(shè)計更具有創(chuàng)造力_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

Python+PythonforRhinoceros+PythonforProgrammingAllowsDesignersmoreFromGrasshopperto從Grasshopper到為什么(建筑,景觀,規(guī)劃)設(shè)計師也要學習編程語言?為什么學習編程語言會選擇ython?設(shè)計者在沒有接觸過任何編程語言輔助設(shè)計情況下,面對突然的“新”領(lǐng)域,必然會質(zhì)疑。然而沒有任何事物的出現(xiàn)是一下子的,為什么要學習Python也是從逐漸的需求開始。大部分設(shè)計者已經(jīng)開始使用節(jié)點可視化編程語言Grasshopper來協(xié)助設(shè)計,為設(shè)計的創(chuàng)造性帶來無限的可能,并解決各類設(shè)計過程中遇到的問題,但是節(jié)點可視化編程本身的特點,靜態(tài)的數(shù)據(jù)處理方式一定程度上限制了編程語言對數(shù)據(jù)結(jié)構(gòu)處理的能力,然而這完全可以從Python動態(tài)更加自由處理數(shù)據(jù)的方法中獲得彌補;另外Grasshopper逐漸擴大的組件群體雖然盡可能滿足各類設(shè)計的需求但是仍然無法與ython的模塊庫相比較,從math、random、dcimal、numbers、fractions到abc、array、bisct、Collections、unctools等為ython編程語言帶來無限的潛力,同時包括ython作為語言嵌入到三維模型軟件從軟件平臺獲取的模塊;再者Python從底發(fā)明,第一個公開版于1991年以來,因為受到廣泛應(yīng)用領(lǐng)域的支持,日益完善并不斷地持續(xù)發(fā)展,相對ython語言,Grashopper節(jié)點可視化編程語言從2000之后開始發(fā)展,面對的主要是細分的設(shè)計領(lǐng)域,同時Grashopper出現(xiàn)的目的是為了減少設(shè)計者學習純粹語言的負擔,能夠快速使用組件連線編寫程序,并獲得實時的幾何形式變化,然而事情總是有兩個方面,在方便設(shè)計者的同時也減弱了純粹語言本身所應(yīng)具有的語句魔力。解決ython轉(zhuǎn)向設(shè)計領(lǐng)域的使用,又解決Grashopper節(jié)點可視化編程的限制,最合適的方法不是強調(diào)某一個方面,而是將二者結(jié)合,Rhinoceros平臺嵌入了ythonythonScript,Gashopper也嵌入了hython,可以完美的實現(xiàn)ython的不同接口方式。如何擺正ython在設(shè)計領(lǐng)域的地位?如何正確的定位ython的使用模式?從Gahopper、Rhinoceos、cS到MAYA,的設(shè)計領(lǐng)域軟件平臺對Python語言的支持,使得設(shè)計者不用擔心不得不學習各類不同編程語言來滿足不同平臺的需要,Python作為語言具有支持各類平臺的趨勢,同時ython語言本身的發(fā)展規(guī)模和可預見的持續(xù)發(fā)展?jié)摿σ约罢Z言簡潔易學的特點,必然成為設(shè)計者首選的語言,而不是C#又或者VB。設(shè)計者學習Python的目的是為了更好地輔助設(shè)計,解決各類設(shè)計上遇到的問題和探索更廣闊的設(shè)計形式領(lǐng)域,而不是使用編程語言來代替的設(shè)計,那些僅僅依靠編程語言玩味形式而又缺失基本的藝術(shù)審美層次的設(shè)計只會抹殺編程語言本應(yīng)該處理解決設(shè)計問題的作用。除非特殊情況,不建議使用Rhinoceros嵌入的PythonScript,而是使用Grasshopper中嵌入的Ghython,將Grasshopper與Python。設(shè)計的是如何處理設(shè)計問題,設(shè)計的特點是不斷的推敲設(shè)計形式和不斷的修改提升,并具有創(chuàng)造性,純粹的Python語言無法實時方便的觀察幾何形式的變化,也不能夠快速的建立起根據(jù)設(shè)計構(gòu)思實現(xiàn)的幾何形式,這些需求Grashopper卻可以達到,構(gòu)建了一種數(shù)據(jù)結(jié)構(gòu)調(diào)整實時觀察幾何形式變化推敲的設(shè)計過程,然而設(shè)計上遇到的各類問題單憑Grashopper很難處理解決,需要憑借yhton更強大的語言協(xié)助處理,Gahopper與hython就構(gòu)成了輔助設(shè)計最好的組合方式。《學習ython-做個有編成能力的設(shè)計師》不是純粹的ython編程學習,而是在學習基本ython編程語言時又如何輔助設(shè)計的闡述,從ythonS到y(tǒng)thonScript再到Ghython,將ython真正作為設(shè)計者從事設(shè)計輔助的編程語言;但是這又不是純粹幾何形式編程的說明,而是又包括了Python編程數(shù)據(jù)結(jié)構(gòu)、基本語句、函數(shù)與類的學習。整本書都是在編程與設(shè)計、理性與感性的邏輯思維之間不斷的跳躍,這正是編程讓設(shè)計更具有創(chuàng)造力的本質(zhì)。程序地 網(wǎng)絡(luò) M-RHINO模型 Rhinoceros GrasshopperVersionMay-16,2013,0.9.0056 Python3.2.2T-文本文件部分程序需要 研究室內(nèi)獲取,進入為010-1-關(guān)于018-2-數(shù)據(jù)結(jié)構(gòu)(Data020-列表020-索026-列表的基本030-列表的方040-元組040040-Python的字典與Grasshopper044-Pyhton045-GhPython與樹型數(shù)據(jù)059-字符059-用Python替代Grasshopper062073-re(regularexpression082-3-基本語句(Basic084-print()與084-084-使用import102-4-函數(shù)141-5-1 10學習Python"ython(英國發(fā)音?p??/發(fā)音?p?θ?/),是一種面向?qū)ο?、直譯式電腦編程語言,具有二十年的發(fā)展歷史,成熟且穩(wěn)定。它包含了一組完善而且容易理解的標準庫,能夠輕松完成很多常見的任務(wù)。它的語法簡捷和清晰,盡量使用無異義的英語單詞,與其它大多數(shù)程序設(shè)計語言使用大括號不一樣,它使用縮進來定義語句塊。"-ikipedia?Python語言被用于各類領(lǐng)域,十分廣泛,例如編程語言、數(shù)據(jù)庫、Windows編程、多、科學計算、網(wǎng)絡(luò)編程、游戲編程、嵌入和擴展、企業(yè)與政務(wù)應(yīng)用等。在過去幾十年中,大量的編程語言被發(fā)明,被取代,并修改或者組合在一起, 月編成語言榜前名的依次為C、Java、C++、Objective-C、C#、PHP、(Visual)Basic、Python、JavaScript、Perl、Ruby、PL/SQL、Delphi/ObjectPascal、VisualBasic.NET、Lisp、acal、Ada、Transact-SQL、Logo、NXT-G,眾多的編成語言并不是都對設(shè)計行業(yè)都適用的,具體選擇哪種語言由行業(yè)使用軟件平臺所支持的語言來確定。對于建筑、景觀與城市規(guī)劃設(shè)計行業(yè),Python語言也起到越來越重要的作用,ython往往被嵌入到設(shè)計行業(yè)的軟件平臺上作為使用。MAYA是MEL,自8.5之后支持yhton語言。Rhinoceros是Rhinocript,自5.0之后嵌入Ironpython,Houdini使用的是HScript,自9.0后使用HOM(HoudiniObjctMode),支持ython語言。地理信息軟件,ArcGi8基于地理視圖的語言開始引入,9.0開始支持ython。VUE自然景觀生成軟件與FME地理數(shù)據(jù)轉(zhuǎn)化平臺同樣支持ython語言,可見ython程序語言在逐漸的被更廣泛的三維圖形軟件所支持,成為眾望所歸共同的語言。Python是“一種解釋型的、面向?qū)ο蟮摹в袆討B(tài)語義的高級程序設(shè)計語言”,已經(jīng)具有近二十年的發(fā)展歷史,成熟且穩(wěn)定,在2012年之前是2007年、2010年的年度編程語言,眾多三維圖形軟件選擇Python作為語言是未來圖形程序軟件發(fā)展的趨勢。ython的設(shè)計語言“優(yōu)美”、“明確”、“簡單”,在面對多種選擇時,ython開發(fā)者會花哨的語法,而選擇明確的沒有或者很少歧義的語言,因此學習ython不像學習C++、Java等語言難以學習,其語言優(yōu)美與英語語法結(jié)構(gòu)類似,這正是Python語言最早設(shè)計指導思想之一,提高代碼的可讀性。在ython成為絕大部分圖形程序的語言后,對于設(shè)計師個人來說是有莫大的好處。在項目中,經(jīng)常使用ARCGIS處理地理數(shù)據(jù),F(xiàn)ME轉(zhuǎn)換數(shù)據(jù)格式,使用Rhinoceros與Grasshopper來構(gòu)建幾何模型,在深入進一步拓展軟件的設(shè)計能力,解決諸多軟件本身模塊無法解決的現(xiàn)實問題時,就要求助于語言,如果各軟件的語言不統(tǒng)一,這就要耗費設(shè)計師過多的時間在語言的學習上,然而編程也只是協(xié)助設(shè)計師處理設(shè)計問題的,這個在變的越來越重要時,所有圖形化設(shè)計軟件自然將語言轉(zhuǎn)向ython一種語言形式,以減輕設(shè)計師的負擔。設(shè)計師恐怕從來沒有想過建筑等設(shè)計行業(yè)會與編程發(fā)生關(guān)聯(lián),甚至對設(shè)計的傳統(tǒng)方法提出調(diào)整,甚至。實際上自從計算機輔助設(shè)計開始,編程就已經(jīng)滲入到設(shè)計行業(yè),只是各類功能的開發(fā)都是由軟件科技公司處理提供給設(shè)計者使用,例如AutoDesk公司的各類輔助設(shè)計的產(chǎn)品。然而隨著計算機輔助設(shè)計軟件平臺的發(fā)展,為了適應(yīng)設(shè)計無限的創(chuàng)造力,緊緊依靠開發(fā)者提供的功能不足以滿足設(shè)計的要求,必須為設(shè)計者提供一套設(shè)計者本人根據(jù)設(shè)計的目的,可以進一步通過程序編寫達到要求的方法,那就是在各類三維圖形設(shè)計軟件中嵌入編程語言,例如最為廣泛使用的ython。編程語言通過圖形程序與設(shè)計構(gòu)建了最為直接的聯(lián)系,使得設(shè)計的過程更加智能化,以利用語言的魔力實現(xiàn)更復雜設(shè)計形式的創(chuàng)造和各類設(shè)計以及分析問題的解決途徑。同時也對設(shè)計者提出了新的要求,那就是只有在掌握編程語言的基礎(chǔ)上,才能夠應(yīng)用這一具有魔力的技術(shù),實現(xiàn)設(shè)計過程的創(chuàng)造性改變。設(shè)計技術(shù)的發(fā)展趨勢也使得設(shè)計者不得不這一種情況,然而任何人都應(yīng)該學會編程,編程不僅是一門語言,它在改變著人們思考問題的方式,更何況充滿創(chuàng)造力的設(shè)計行業(yè)。當設(shè)計者開始從編程語言的邏輯思維方式思考設(shè)計形式的時候,是一種與直觀的設(shè)計關(guān)照截然不同的思維方式,一個在理性邏輯思維與感性設(shè)計思維之間不斷跳躍的過程,兩者之間不斷的影響與融合,這正是使用編程語言來輔助設(shè)計帶來的影響,更是一種設(shè)計者樂此不彼的新的設(shè)計過程的游戲,因為編程讓設(shè)計過程更具有創(chuàng)造力。12學習Python>>>frommathimportsqrt#使用frommoduleimportfunction語句直接導入模塊math的sqrt>>>sqrt(36)#可以直接使用導入的函PythonS可以逐行的打入語句,并實時地反饋語句的運行結(jié)果,也可以從PythonS/File/NewWindow打開新的解釋器窗口,可以輸入成段的語句,再單擊Run/RunModule或者按F5執(zhí)行程序。x=input('Enteravalueforx')y=input('Enteravaluefory')frommathimportsqrt#按F5執(zhí)行上述程序,PythonS會執(zhí)行程序,并打印結(jié)Enteravalueforx12Enteravaluefory9PythonS可以幫助設(shè)計師學習ython語句,但是卻不能處理建筑設(shè)計的三維形式,很多三維圖形軟件平臺雖然已經(jīng)內(nèi)嵌了Python語言作為,但是推薦使用具有Grashopper節(jié)點可視化編程的Rhinocero軟件作為輔助設(shè)計的工具。Rhinoceros本身具有ythonScript交互式解釋器,可以直接調(diào)用Rhinoceros的rhinocriptyntax模塊,Rhino模塊等?;赗hinoceros的PythonScript解釋2Data18學習Python編程的內(nèi)容之一是數(shù)據(jù)結(jié)構(gòu),尤其使用編程進行幾何數(shù)據(jù)的處理,數(shù)據(jù)結(jié)構(gòu)是通過某種方式組織在一起的數(shù)據(jù)元素的集合?;贕rashopper節(jié)點可視化編程中,數(shù)據(jù)結(jié)構(gòu)被劃分為單元數(shù)據(jù)(item),線性數(shù)據(jù)list,列表)和樹型數(shù)據(jù)(tree),單元數(shù)據(jù)僅包含一個數(shù)據(jù);線性數(shù)據(jù)僅有一個路徑,該路徑下有多個項值;樹型數(shù)據(jù)由多個線性數(shù)據(jù)組成,即含有多個列表,對于多個路徑分支,每一個分支下有至少包含一個數(shù)據(jù)。Grasshopper的基本數(shù)據(jù)結(jié)構(gòu)類Grasshopper節(jié)點可視化編程數(shù)據(jù)結(jié)構(gòu)關(guān)系的處理方法與純粹編程語言數(shù)據(jù)結(jié)構(gòu)處理方式基本如出一轍,在python語言數(shù)據(jù)結(jié)構(gòu)中,主要處理的方法分別是,列表(list)和字典(dictionary)。其中列表與Grasshopper中0.0,1.0,2.0],字典則與樹型數(shù)據(jù)基本一致,例如{0:0.01:10Grasshopper的基本數(shù)據(jù)結(jié)構(gòu)類列表是Grasshoppper數(shù)據(jù)結(jié)構(gòu)的類型,也是python語言的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu),在python中通常將列表和元(tuple)統(tǒng)稱為序列(squenc),但是元組與列表基本一樣,只是元組不能夠修改,在具體操作上主要只有創(chuàng)建元組和元組,因此在提及python數(shù)據(jù)結(jié)構(gòu)序列時以列表為主。python列表用中括號[]表示,數(shù)據(jù)之間使用逗號隔開,例如[0,1,2,3,6,2]。列表中的每一個元素被分配一個序號,即元素的位置,稱之為索引(index)。第一個索引為0,第二個為1,以此類推,這個表示的方法與Grasshopper是一致的,索引值從0開始計數(shù)的一個原因是也可以從最后一個元素開始計數(shù),列表中最后一個元素標記為-1,倒數(shù)第二個標記為-2,以此類推。在闡述列表及其索引時,結(jié)合Grasshopper,GhPython,PythonScript以及Python比較說明。因為都是編程語言,實質(zhì)都是一樣,Python與Grasshopper只是表述方法存在差異,那么對于GhPython,ythonScript只是嵌入的平臺不同,一般只會在接口處理上存在差異;python就是最為純粹的,只有嵌入到不同的設(shè)計分析平臺才能夠真正的發(fā)揮作用。從下圖中能夠看到Grashopper節(jié)點可視化編程與ythoncript語言編程達到同一個結(jié)果,即構(gòu)建一個方形,對方形等分10份獲取等分點,并標注等分點的索引值。使用Grasshopper使用Grasshopper20學習PythonGhPythonGhPython將等分點的數(shù)據(jù)輸入到hhn中,輸入數(shù)據(jù)的類型為iAccess,語句dpindex=list(range(len(dpoints))),其中l(wèi)en(dpoints)是獲取列表長度,即包含元素數(shù)量python內(nèi)建函數(shù),range()是迭代一個數(shù)字序列的函數(shù)返回一個區(qū)間值,list()函數(shù)可以將區(qū)間值轉(zhuǎn)化為列表,將該列表賦值于變量程序importrhinoscriptsyntaxas #將輸入列表賦值給新的變量dpoints,也可以直接使用變量 #返回列表索引值的方 #打印索引值列 #打印等分點列表,可以觀察到輸入等分點數(shù)據(jù)在GhPython中顯示的DataOut=List#定義GhPython輸出項變量,此項為等分點列 #定義GhPython輸出項變量,此項為等分點索引值長度、最小值、最大值、數(shù)列區(qū)經(jīng)常在列表處理時需要獲知列表的長度,如果列表為數(shù)字,則一般會提取最大值和最小值。三個內(nèi)置函數(shù)分別為ln()、min、max。通過函數(shù)ln()得知列表長度后,如果遍歷循環(huán)列表,則需要構(gòu)建遍歷列表的區(qū)間,即最大值為列表長度,最小值為0,這時就可以使用ange()函數(shù)。而在Gasshopper中獲取列表長度的方法可以使用組件Litlngth或者Teettiic。目前在0.9.0056版本還沒有直接獲取一個列表最大值和最小值的組件,但是可以使用Bounds組件獲取列表的數(shù)據(jù)區(qū)間,即為最大值和最小值,也可以自行使用hython編寫也可以。Python語言編寫的程序要比Grasshopper節(jié)點組件連接的方法更加簡潔,但是節(jié)點組件的方更加直觀22學習Python>>>print(range(5,20,3))range(5,20,3)>>>>>>[5,8,11,14,>>>len(lst)>>>max(lst)Grasshoper實現(xiàn)列表Grasshoper實現(xiàn)列表長度、最?。ù螅┲怠?shù)列區(qū)間的方使用PythonScript編寫方形等分點標注索引值的程序邏輯與Grasshopper基本一樣,首先需要確定在PythonScript中如何建立矩形,可以使用函數(shù)AddRectangle實現(xiàn),其實就相當于Grasshopper組件Rectangle,hinociptynax.Addctngle(plane,idth,hight)函數(shù)語法中有三個參數(shù),plane為參考平面確定矩形繪制的位置,width和hight為寬高。因此需要首先建立參考平面,通過函數(shù)orldXYlane()獲取XY水平方向以原點為中心的參考平面賦值給plane,并通過函數(shù)Movelaneplae,oin到指定坐標的位置上。成功構(gòu)建矩形,DivideCurvecurv_id,egmnt,crat_point=al,rtun_point=True)函數(shù)可以將該矩形等分,并返回等分點的列表,使用函數(shù)ddointpoint,y=one,z=one即可增加三點。那么如何像Grasshopper組件PointList一樣標注索引值呢?在標準庫rhinoscriptsyntax模塊中有函數(shù)AddText(text,point_or_plane,height=1.0,font="Arial",font_style=0,justification=None)可用,需要輸入的參數(shù)有2.Data>>>[67,5,3,99,5,4,2,1,230,>>>lst.sort()#排序>>>[0,1,2,3,4,5,5,67,99,使用Grasshopper編使用PythonScript不管是使用Grashopper還是PythonScript,基本的邏輯構(gòu)建過程是一致的,只是因為采取不同的編程語言方式,在語法上有明顯的出入,尤其節(jié)點可視化的方式與純粹語言之間的區(qū)別。在PythonScript中的函數(shù)和方法相當于Grashopper下的組件,因為各自編程平臺所提供的函數(shù)(組件)存在差異,因此可能在Python中是使用三點通過函數(shù)rhinosciptsyntax.ddCuve(point,degree=3)建立有弧度的曲線,但是在Grahoppe中可以使用組件Catnary懸鏈線建立有弧度的曲線,又例如在根據(jù)模式剔出等分點時,ythoncript首先建立模式的列表,再使用list.append()的方法,按照模式列表的索引值提取等分點列表,在組織數(shù)據(jù)時使用了類似的方法,只是按照另一模式列表的索引值,使用lit.insert()組織數(shù)據(jù);在Grashopper下,則使用組件Cullattern模式移除列表,并結(jié)合athMapper組件調(diào)整數(shù)據(jù)結(jié)構(gòu),獲取與ythoncipt程序編寫一樣的形式結(jié)果。無論使用哪一種編程方式,遵循的思想仍然是如何構(gòu)建這個邏輯構(gòu)建過程,任何語言編程只是為實現(xiàn)設(shè)計的形式或者分析數(shù)據(jù)服務(wù),因此學習任何編程語言的時候不是為了純粹的語言學習,最為關(guān)鍵的是如何把它應(yīng)用于需要解決的問題上,也因此Python不是某一個領(lǐng)域特有的編程語言,即不屬于互聯(lián)網(wǎng)、計算機操作程序、科學計算、多,也不屬于建筑設(shè)計領(lǐng)域。有些時候使用ythonScript看起來要比使用Grashopper要繁瑣,在使用編程來處理設(shè)計形式領(lǐng)域時,可以將二者結(jié)合使用,例如本例的桁架,在Grashopper下編寫會更加順暢,但是在ythonScript下,因為數(shù)據(jù)組織沒有Grahopper來的那么直接,需要借助于or循環(huán)語句完成數(shù)據(jù)結(jié)構(gòu)的調(diào)整,就有些繁瑣。雖然ython提供了很多列表的基本操作和方法,但是對于需要借助于相關(guān)參數(shù)而不是直接輸入數(shù)據(jù)的方式調(diào)整數(shù)據(jù)列表結(jié)構(gòu),例如對于一個列表每隔一個移除一個項值,直至整個列表,在Grasshopper下可以直接使用CullPattern組件方便完成,但是在ython下往往需要借助于循環(huán)語句完成。當然因為ython具有更強大的語法方法以及模塊函數(shù),在Grashopper解決某類問題失效時,ython語言編程是最好的選擇。32學習Python幾何邏輯構(gòu)建過PythonScript與Grasshopper程序編寫的邏輯構(gòu)建過程基本一致,首先拾取一個點,沿一定方向建立一根直線,然后偏移獲取兩側(cè)的直線,對中間的直線延長一定的距離,獲取端點,ythoncript下再拾取中間點,通過三點建立一根有弧度的曲線,Grasshopper下直接使用Catenary懸鏈線建立有弧度的曲線,對三根曲線等分相同數(shù)量,獲取等分點,并模式移除部分點,調(diào)整數(shù)據(jù)結(jié)構(gòu),連為折線。

hyn其它DataTree的方—般在研究Python編寫程序時,已經(jīng)具有了使用Grasshopper編寫程序的能力,在GhPython中使用樹型數(shù)據(jù)的方法與Grasshopper類似,只是使用的語法和編寫不同。DataTree.Insert(data(T),GHPath,index)是根據(jù)指定的路徑和指定該路徑下索引值位置插入項值的方法;DataTree.ItemExists(GHPath,index)是判斷指定路徑下的索引值是否存在,返回值為True或者False;而DataTree.PathExists(GHPath)則僅判斷指定的路徑是否存在;DataTree.Remove(GHPath)移除指定路徑以及該路徑下所有項值;DataTree.MergeTree(DataTree(T))合并兩個路徑分支,如果路徑分支相同則將項值放置于一個路徑之下,不同則不進行路徑下項值的合并,而各自單獨放置于各自的路徑分支之下進行合并;DataTre.ath(indx)指定路徑的索引值獲取該路徑;DataTre.RenumberPaths()將所有路徑分支按照順序從0開始重新命名;ataee.ipliyaths()可以簡化路徑分支。...#接上文程addpoints=Glst[2][3]#提取Glst列表索引值為2的子列表,并繼而提取子列表索引值為3的項值D.netadpnt,G_ath,02#根據(jù)指定的路徑和printDF)tre{5;3;1;1;1;1;0},如果索引值超出了原路徑最大索引值,則在其間填補索引項,值則為空值<null)runv=D.teiGH_ah02#判斷指定的路徑print(returnv)#返回值為returnv=DF.ItemExists(GH_Path(9,0),3)斷指定的路徑print(returnv)#返回值為runBE=D.ahit(G_ah90#判斷指定的路徑 #返回值為returnP=DF.Path(5)#根據(jù)指定的路徑索引值返回該路print(returnP)#返回值為

標記標記importRhino#調(diào)入Rhino模fromGrasshopperimportDataTree#從Grasshopper模塊中調(diào)入DataTree類fromGrasshopper.Kernel.DataimportGH_Path#調(diào)入GH_Path函數(shù)data=TreeData#將輸入的數(shù)據(jù)賦值給新定義的變量orgdata=[]#建立空的列表layerTree=DataTree[Rhino.Geometry.Point3d]()#建立空的樹型數(shù)據(jù)foriinrange(data.BranchCount):#循環(huán)遍歷各個路徑分支 #按索引值提取路 #提取路徑{A;B;C;D}模式下的Difbranchpath%2==0:#如果D項除以2無余數(shù)即等于 #按索引值提取該路徑分支下的所有項值并賦值給新的變blst=[]#建立空的列表,用于放置每次循環(huán)時每一路徑下的項forkinrange(len(branchlst)):#遍歷循環(huán)提取的每一路徑分支 #依次將每一路徑分支項值追加到空列表 #將列表的值逆向排 #將重新組織后的列表放入空列表orgdataelse:#除了D項除以2無余數(shù)條件下的其它情況,與無余數(shù)操作基本一樣,但是不反轉(zhuǎn)列forkinbranchlst:#與forkinrange(len(branchlst))類似,只是k直接為項值而不是索引值foriinrange(len(orgdata)):#循環(huán)遍歷列表,建立樹型數(shù)據(jù)path=GH_Path(i)#使用GH_Path()函數(shù)定義路徑v=orgdata[i]#依次提取子列表賦值給新變量layerTree.AddRange(v,path)#建立路徑為path,值為v的樹型數(shù)OTreeData=orgdata#輸出因為包含子列表,輸出值為:IronPython.Runtime.List,因此在 #輸出數(shù)型數(shù)據(jù),值為點坐標,可以在Grasshopper中進一步操%號被用來作為格式化的操作符,如果字符串里包含實際的%,則通過%%即兩個百分號進行轉(zhuǎn)義。如果希望格式化浮點數(shù),可以使用說明符類型,精度控制由“.“號加上希望保留的小數(shù)位數(shù)確定例如>>>formatstr="Piwiththreedecimals:%.3f,andenteravaluewithpercentsign:%.2f%%."#通過%建立格>>>frommathimportpi#從模塊math中調(diào)入>>>newstr=formatstr%( )#使用格式化值來格式化字符串模式>>>'Piwiththreedecimals:3.142,andenteravaluewithpercentsign:3.14除了轉(zhuǎn)換說明符%外,可以增加轉(zhuǎn)換標志,-表示左對齊,+表示在轉(zhuǎn)換值之前要加上正負號,“”空白字符,表示正數(shù)之前保留空格,0表示轉(zhuǎn)換值若位數(shù)不夠則用0填充;如果格式化字符串中包含*,那么可以在值元組中設(shè)置寬度;(.)點號加數(shù)字表示小數(shù)點后的位數(shù)精度,如果轉(zhuǎn)換的是字符串,那么該數(shù)字則表示最大字段寬度。轉(zhuǎn)換類型參看表轉(zhuǎn)換類含帶符號的十進制整o不帶符號的八進u不帶符號的十進x不帶符號的十六進制(小寫X不帶符號的十六進制(大寫e科學表示的浮點數(shù)(小寫E科學表示的浮點數(shù)(大寫十進制浮點g如果指數(shù)大于-4或者小于精度值則和e相同,其它情況與fG如果指數(shù)大于-4或者小于精度值則和E相同,其它情況與F相C單字符(接受整數(shù)或者單字符字符串r字符串(使用repr轉(zhuǎn)換任意Python對象s字符串(使用str轉(zhuǎn)換任意Python對象>>>ormattr="%10,%10.2,%.2,%.5,%.*,$%d,%x,%"#各類轉(zhuǎn)換說明符示例,%10f代表字段寬為10的十進制浮點數(shù),%10.2f代表字段寬為10,精度為2的十進制浮點數(shù),%.2f代表精度為2的十進制浮點數(shù),%.5s寬度為5的字符串,%.*s代表從值元組中指定寬度的字符串,%d代表帶符號的十進制整數(shù),%x代表不帶符號的十六進制(小寫),%f代表十進制浮點>>>newstr=formatstr%(pi,pi,pi,"oPython!",5,"o>>>' 3.14,3.14,o,>>>formatstr="%010.2f,%-10.2f,%+5d,%+5d"#各類轉(zhuǎn)換說明符示例,%010.2f代表字符寬度為10并用0進行>>>newstr=formatstr%(pi,pi,10,->>> ,+10,-string模塊提供了另一種格式化字符串的方法,即Template()函數(shù)模板字符串,轉(zhuǎn)換操作符為$符號,配合使用t.ubtitute()方法格式化模板字符串達到字符串格式化的目的,參數(shù)可以直接賦值,也可以使用字典變量提供值/名稱對,如果想替換字符串中單詞的一部分,那么參數(shù)名需要使用括號括起來。2.Data>>>fromstringimportTemplate#從string模塊中調(diào)入模板字符串函數(shù)>>>s=Template('$x,glorious$x!')#定義模板字符串,$為字符串格式化操作>>> #定義值,并使用s.substitute()方法格式化模板字符'Python,glorious>>>s=Template('${x}thonis #替換單詞的一部分時,需要使用大括號{}括>>> #定義值,并使用s.substitute()方法格式化模板字符'pythoniss=Template('$xand$yarebothamazing!')#定義多個需要替換的字符串>>>d=dict([('x','Python'),('y','Grasshopper')])#定義值字典>>>{'x':'Python','y':>>>s.substitute(d)#使用值字典格式化模板字符串'PythonandGrasshopperareboth64學習Python2.字符串在處理不同平臺的數(shù)據(jù)傳輸時具有重要作用,因為不同的平臺所要求的數(shù)據(jù)格式會有所不同,因此需要格式化字符串使之符合各自平臺使用的標準。規(guī)劃設(shè)計過程中需要將基于地理信息系統(tǒng)ArcGIS平臺分析的數(shù)據(jù)接入到Grasshopper之下,為了方便接入,在接入之前將地理信息分析的數(shù)據(jù)轉(zhuǎn)換為.XYZ格式的數(shù)據(jù),并修改其后綴名為.txt可以在文本文件中打開。將.XYZ格式文件修改后綴名為.txt將.XYZ格式文件修改后綴名為.txt據(jù)之間由逗號隔開,分別代表X、Y坐標,以及Z值,其中Z值可以是高程,亦可以是坡度、坡向、水文等任何地理信息數(shù)據(jù)。使用Grasshopper既有的組件即可很容易的將該數(shù)據(jù)調(diào)入到Grasshopper平臺之下,并借助于高程數(shù)據(jù)生成使用Grasshopper1.1.調(diào)入文 文5.建立地形表3.切分字符4.數(shù)列成6.賦予地形表面顏2.Data打開文件后即可對文件進行讀與寫。文件的方法可以使用f.read()參數(shù)為整數(shù),代表幾個字符;.radline()則是單獨的一行,直到第一個換行符出現(xiàn),同時也該換行符,在不使用任何參數(shù)的時候僅讀取一行,如果參數(shù)為一個非負的整數(shù),則代表可以字符數(shù)的最大值;.radlins()則可以一個文件中所有行并將其作為列表返回。>>> #以只讀方式打開文>>><_io.TextIOWrappername='E:\\PythonDesign\\PythonProgram\\elevation.txt'mode='r'>>> #指定數(shù)量的字>>> #一行,從上次過后的位置開始,可以理解為流 .175,247>>> #指定數(shù)量的字>>> #剩余所有行并返回列 .175,247\n', .175,247\n', .175,247\n',708.175,247\n', .175,247\n', .175,247\n', \n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n',08.175,247\n', .175,247\n', .175,247\n', \n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n',.175,247\n', .175,247\n', .175,247\n', .175,247 .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', .175,247\n', 75,247\n', .175,247\n', .175,247\n', .175,247 .175,247\n', .175,247\n', .175,247>>>f.close()#使用f.close()方法關(guān)閉文寫入文件的方法可以使用.itsting所提供的參數(shù)字符串會被追加到文件中已存在部分的后面f.wriines()方法則可以把列表中所有字符串寫入文件。另外沒有f.wriine()的方法,因為可以使用f.write()>>>f=open('E:\PythonDesign\PythonProgram\write.txt','w')#以寫模式打開文件>>><_io.TextIOWrappername='E:\\PythonDesign\\PythonProgram\\write.txt'mode='w'>>>f.write('o #使用f.write()方法寫入字符>>>lst=['oPython!\n','oGrasshopper!\n','Theyarebothamazing!']#定義列表,‘\n’為換>>>f.wri #把列表寫入文>>>f.close()#使用f.close()方法關(guān)閉文被寫入字符串后的.txt文68學習Python2.在實際調(diào)整數(shù)據(jù)文件時,需要對文件內(nèi)容進行迭代,進行相應(yīng)的操作并所有內(nèi)容,可以直接使用循環(huán)語句即可達到內(nèi)容迭代的目的,迭代的過程可以使用f.rad()逐個字符迭代,也可以使用f.readlines()逐行迭代;同時可以使用for循環(huán)語句迭代forlinein.radlines():,也可以使用whiletru/brak語句迭代,兩者中whiletue/beak語句可以讓迭代更加簡潔,并且在完所有行時結(jié)束循環(huán)。程序 #以只讀方式打開文 #建立空的列表,放置調(diào)整后的字符whileTrue:#循環(huán)迭代文 #逐一的 #調(diào)整字符串,每行前增加標志 #將調(diào)整后的字符串追加到列表ifnotline:break#判斷是否完全部行,如果完則停止循f.close()print(lst)#打印列['#oPython!oPython!\n','#oGrasshopper!\n','#Theyarebothamazing!',文件是作為流的存在,因此只能從頭到尾的順序數(shù)據(jù),如果希望隨意移動到位置,可以使用的方法定位,也可以使用f.l()的方法獲知當前的位置>>>f=open('E:\PythonDesign\PythonProgram\write.txt','w')#以寫入模式打開>>>f.write(o #寫入字符>>>f.seek(6)#定義寫入或者的位6>>> #在定義的位置寫入字符串,原字符串之后的字符被剔>>>f.close()#關(guān)閉文>>> #打開文>>>f.read()#文'o>>>f.close()#關(guān)閉文>>> #再次打開>>> #逐指定數(shù)量的字>>> #逐指定數(shù)量的字>>>f.l()#使用f.l()的方法獲知當前已完的位置42.Data前文已經(jīng)構(gòu)建了基本的地形表面,但是如何按照不同顏分定義的不同高程區(qū)間并標注顏例?使用Grasshopper既有的組件也可以達到同樣的目的,這里使用GhPythonGhPython分類模GhPython構(gòu)建等高線部分程70學習PythonGhPython輸入條件為劃分區(qū)間的數(shù)列,將數(shù)據(jù)調(diào)入的輸出項Z值,即高程坐標或者任何其它地理信息數(shù)據(jù)例如坡度等,按照劃分的區(qū)間數(shù)列調(diào)整數(shù)據(jù),將位于各自區(qū)間之內(nèi)的Z值向下取值,例如列表[247,297,347,397,447]的分類數(shù)列,即可以劃分為0~247,247~297,297~347,347~397,397~447,447幾個分區(qū),如果Z值為265.98那么其位于247~297區(qū)間之內(nèi),則將數(shù)據(jù)調(diào)整為247,其它的所有值以此類推,在保持原來數(shù)據(jù)結(jié)構(gòu)的基礎(chǔ)上來調(diào)整數(shù)值。importrhinoscriptsyntaxasrs #定義空的列表,用于放置轉(zhuǎn)化為浮點數(shù)的forjindata:#循環(huán)遍歷Z值列表,將字符串使用函數(shù)float()轉(zhuǎn)化為浮點數(shù) #將轉(zhuǎn)化后的值追加到列表 #將轉(zhuǎn)化后的值列表賦值給原變量foriincal:#以類似的方法轉(zhuǎn)化分類列表的值為浮點數(shù),該方法為直換原來的forkinrange(len(cal)-1):#循環(huán)遍歷分類列表,循環(huán)截止到索引值為-2的位置,使用k+1獲取最后索引位 #獲取索引值為k位置的項 #獲取索引值為k+1位置的項forqinrange(len(data)):#內(nèi)循環(huán)遍歷Z值列表ifa<=data[q]<b:#通過條件語句判斷Z值是否位于分類區(qū)間a~b之 #Z值如果位于a~b分類區(qū)間,則將該Z值以a值替forwinrange(len(data)):#循環(huán)遍歷初步調(diào)整后的Z值列表ifdata[w]>=cal[-1#使用條件語句判斷是否Z值有大于分類列表中索引值為-1位置的值,如果存在則將Z值調(diào)整為分類列表中索引值為-1位置的值data[w]=cal[-elifdta<=cal0 #使用條件語句判斷是否Z將Z值調(diào)整為分類列表中索引值為0位置的值分類模塊程序的編寫,主要是通過兩個輸入條件,分類列表和Z值列表關(guān)系的確定調(diào)整數(shù)值。第一次or循環(huán)語句初步將位于各區(qū)間的Z值調(diào)整為區(qū)間的起始端值,但是并沒有判斷大于分類列表最大值和小于分類列表最小值的Z值,因此第二次o循環(huán)通過使用條件語句來解決這個在第一次循環(huán)中為處理的問題。GhPython使用分類模塊調(diào)整Z值,結(jié)合Grahopper下Gradint組件和MehColour組件將地形表面賦予按照分類列表劃分區(qū)間的顏色。但是如何把顏色的圖例標示出來,能夠更直觀的查找高程區(qū)間,可以使用組件Lngnd,其輸入項Color以及Tags分別為顏色和,顏色和的值可以借助于Ghython編寫相應(yīng)的程序,根據(jù)顏色和分類模塊處理后的Z值建立engend組件輸入項值。>>> ')#對字符串進行模式匹配,返回MatchObject對>>>m.group(1)#返回模式中與給定組匹配的字符>>>m.start(1)#調(diào)給定組匹配項的開始索引4>>>m.end(1)#調(diào)給定組匹配項的結(jié)束位置索引>>>m.span(1)#調(diào)給定組匹配項的區(qū)間(4,在Grasshoppper中構(gòu)建的基本結(jié)構(gòu)線一般需要導入到專業(yè)的結(jié)構(gòu)分析平臺下進一步進行分析,例如基于AnsysWorkbench下的線性靜力結(jié)構(gòu)與動力學分析。AnsysWorkbench下的線性靜力結(jié)構(gòu)分析是用來分析結(jié)構(gòu)在給定靜力載Mechanical模塊求解,一般可以使用集成的StaticStructural分析系3Basic82學習Python列表可以使用循環(huán)遍歷每一個項值,也可以適用for循環(huán)語句遍歷字典的所有鍵forkeyind:也可以遍歷/值使用forkey,valueind.items>>>d=dict(a=2,b=3,c=6,d=0)#建立字>>>{'d':0,'a':2,'c':6,'b':>>>forkeyind:#遍歷字典中的所有鍵>>>forkey,valueind.items():#遍歷字典的print(key,'correspoinds',value)dcorrespoinds0acorrespoindsccorrespoindsbcorrespoinds86學習Python以古建筑的《營造法式》與《清式則例》以及已此為基礎(chǔ)研究文獻提供了詳細深入古建筑營造的方法,即建筑的基本規(guī)則為基礎(chǔ),可以設(shè)計變化出萬千種的形式。不過設(shè)計的過程由于靜態(tài)關(guān)系研究的方法,使古建筑構(gòu)件關(guān)系的梳理不易,例如在研究舉架倍數(shù)關(guān)系時,如果能夠自由根據(jù)規(guī)則變化不同尺度分析形式將使關(guān)系研究更易凸顯。動態(tài)參數(shù)研究的方法將有助于研究營造法式的根本邏輯關(guān)系,將研究的重心放在基本關(guān)系的構(gòu)建上,由參數(shù)控制關(guān)系變化,直擊古建筑構(gòu)建的精髓。清式古建筑木構(gòu)架中,相鄰兩檁中一中的水平距離為步架;木構(gòu)架相鄰兩檁中一中的垂直距離(舉高)除以對應(yīng)步架長度所得的系數(shù)為舉架。根據(jù)《梁思成全集第六卷》舉架出檐法編寫程序可以建立參數(shù)模型。在參數(shù)模型構(gòu)建的過程中,需要梳理舉架出檐法的數(shù)據(jù)關(guān)系,以利用輸入的舉架高、舉架差數(shù)、步架值、步架數(shù)以及檁半徑構(gòu)建進一步古建筑模型構(gòu)建的參數(shù),一個是下圖所示的M列表值,以及計算平水在內(nèi)的新舉架值MH列表。在這個程序編寫的過程中,程序依然作為技術(shù)的基礎(chǔ),而邏輯構(gòu)建過程才是編程的理念,因此需要首先讀懂《清式則例》舉架搭建的參數(shù)關(guān)系,才能夠通過程序編寫獲取進一步模型構(gòu)建所需要的數(shù)據(jù)。以五檁舉架小式為例,輸入的參數(shù)舉架高即為0.5舉加列表的初始值,舉架差數(shù)為步幅值,即舉架以0.2為差數(shù)逐漸遞增,所以舉架值為0.5,0.7、0.9的一個等差數(shù)列,步架值即圖中的X值,步架數(shù)是有幾個X值,小式五檁為2步架,小式七檁為3步架,因為在計算平水高時,規(guī)定小式按檁徑減一寸計算,因此需要輸入?yún)?shù)檁半經(jīng)。輸出參數(shù)的M列表值,為舉高,其中頂部的舉高需要包括平水的高,依次求和的一個列表,即包含第一個索引值為0的值為0在內(nèi),代表不移動對象,索引值為1的為0+0.5X,索引值為2的是0+0.5x+(0.7x+平水高),其中七檁舉架以此類推。{0:'pointA',1:'pointB',2:'pointC',3:>>>A=[]#建立空的列>>>B=[]#建立空的列>>>fora,binziplst#解包元>>>[0,1,2,>>>['pointA','pointB','pointC',編號迭enumerate()函數(shù)可以在迭代列表的時候同時返回索引值和>>>listC=['pointA','pointB','pointC','pointD']#建立列>>>d={}#建立空的字>>>forindex,valueinenumerate(listC):#使用函數(shù)enumerate()編號迭d[index]=value>>>{0:'pointA',1:'pointB',2:'pointC',3:列表推導列表推導式 comprehension是利用其它列表創(chuàng)建新列表的法,類似于for循環(huán)語句>>>lst=[]#建立空的列表>>>foriinrange(3,37,5):#循環(huán)遍ifi%2==0:#確定條件以執(zhí)行操作 #滿足條件的值進行的操>>>[64,324,>>>lst=[x*xforxinrange(3,37,5)ifx%2==0]#使用列表推導式建立上文的for循環(huán)程序,將程序的過程>>>[64,324,>>>[(x,y)forxinrange(3)foryinrange(2)]#使用列表推導式建立元組對的列表[(0,0),(0,1),(1,0),(1,1),(2,0),(2,4條件在設(shè)計編程的時候,往往需要判斷某一種情況是否為真,或者為假繼而采取不同的操作策略,例如一組空間隨機點Z值即高程值大于或者小于某一個值時將會被刪除,這個過程需要判斷所有點的高程值與給定值之間的大小關(guān)系。條件語句的基本結(jié)構(gòu)為ifexpression:elifexpression:以三維點坐標列表形式存在,初始參考點至少為兩個;target為目標參考點,與初始參考點類似,其數(shù)量應(yīng)該與初始參考點保持一致;flags為可選參數(shù),值為1時,原對象,默認時不,值為2時縮放對象,默認時不縮放。獲知關(guān)鍵的方法之后并且已經(jīng)研究了空間面展平的關(guān)系,可以嘗試構(gòu)建邏輯過程,索引值為0放置于二中,關(guān)鍵是與之相接索引值為1的第二個平面如何在二維中與之相接,通過ython語言以判斷出三維和二維中各面的對應(yīng)關(guān)系,即三維中點a、b、c和d和二維中點a'、b',c'和d'的對位索引值,只需要確定將索引值為1的面次序放置于二,在使用方法OrintObjct()時初始參考點和目標參考點即可。初始參考點即為a、b、d,目標參考點a'、b'已經(jīng)有了,還需要第三個點,如果直接使用c'在對位時方向是錯誤的,因此需要將c'點按照a'、b'構(gòu)建的直線鏡像到對面,獲取c'點,即完成了目標參考點的構(gòu)建為a'、b'和c'點。從上段闡述基于編程解決具體問題思考的過程可以明顯地感覺到,ython的基本數(shù)據(jù)結(jié)構(gòu)和基本的語句是基礎(chǔ),rhinocriptyntax模塊的方法是使用Python語言處理幾何形式的橋梁,基于編程的邏輯構(gòu)建過程才是問題得以解決的。邏邏輯構(gòu)建過程圖程序:importrhinoscriptsyntaxasrs#調(diào)入rhinoscriptsyntax模塊并構(gòu)建別名為rsmeshes=rs.ExplodeMeshes(mesh)#分解Mesh格網(wǎng)為各個單lp=[]#建立空的列表,用于放置輸入的定位點轉(zhuǎn)化的點坐標列print(LocationPoint)#輸入的點對象格式為<System.Guidobjectat0x00000000000000338524cd80-a17d-foriinLocationPoint:#遍歷循環(huán)定位點,并獲取各個點坐標列表print(lp)#轉(zhuǎn)化為點坐標列表的格式為<Rhino.Geometry.Point3dobjectat0x0000000000000037,-xymeshes=[]#建立空的列表,用于放置次序展平后的Mesh單元foriinrange(len(meshes)):#遍歷循環(huán)空間Meshifi==0:#使用if條件語句判斷,當索引值i為0時的情況,即對第一個單元面操作mesh0point=rs.MeshVertices(meshes[i])#獲取第一個單元面的所有頂點lp,1)#將第一個單元面放置于二維平面上,初始參考點為第一個單元面的頂點,目標參考點為輸入xymeshes.append(xymesh0)#將第一個展平在二維中的面追加到列表else:#除了索引值i為0的情況之外所有三單元面的處理方式,即從索引值i為1時開始vertices2=rs.MeshVertices(meshes[i])#獲取索引值為i時單元面的所有頂點vertices1=rs.MeshVertices(meshes[i-1])#獲取索引值為i-1時單元面的所有頂點ver=[mforminvertices1forninvertices2ifm==n]#使用列表推導式循環(huán)遍歷索引值分別為與i-1時三單元面頂點,并且要求提取的條件為兩個列表中重合的點,即前文圖式中點a和點a=ver[0]#提取點b=ver[1]#提取點 #獲取點a在索引值為i-1時單元面頂點中的索引 #獲取點b在索引值為i-1時單元面頂點中的索引d=[morminvetices2lstifmnotinve0]#使用列表推導式循環(huán)遍歷索引值為i時單元面的頂點,并且要求提取的條件為不重合的點,如果為四邊面則有四個點,因此增加了]以提取第一個不重合的點,即前文圖式中的點d。其中mnotinver表示m不是ver容器(列表)中的成員revertic=r.Mherticsxymhei1])#獲取已經(jīng)轉(zhuǎn)化為二維單元面索引值為i-1時的單元頂點,即如果i為1時,第一個二維單元平面索引值為0時的單元面即程序中ifi==0條件時追加的單元面,如果i為2時,二維單元平面索引值為1,即上次循環(huán)展平的單元面,以此類推indexc=[cforcinrange(0,3)ifc!=indexaandc!=indexb]#獲取索引值為i-1時單元面頂點除a、b之外,點c的索引值,c!=indexaandc!=indexb即為c即不等于a也不等于b[indexb])#鏡像前述圖式二維中c'點,參考點為a'、b',獲取cm #獲取cm'點的點坐標列8005f]>),即m、y雖然表示同一個點,但是值不相je=(m==n)#判斷在GhPython中鏈式賦值得兩個變量是否相tjmn#打印返回值為(True,<System.Guidobjectat0x0000000000000038[7ccba4d3-7284-49d3-8836-aa8b8a2b3673]>,<System.Guidobjectat0x0000000000000038[7ccba4d3-7284-49d3-8836-布爾運算使用if條件語句在進行條件判斷時,有時也需要同時判斷多個條件,例如當符合條件x<100,同時x>36使用布爾運算符連接ifx>36andx<00:即可。如果為或的關(guān)系使用or連接,為非的關(guān)系使用not連接。獲取最短路徑情況獲取最短路徑情況98學習Python程序:實現(xiàn)將直線在各個交匯處打斷的方法,可以分別獲取每條直線與所有其他直線交點的列表,并將該直線的首點和尾點分別放置于列表的開始和結(jié)束,使用函數(shù)hinoscitytxotititpoint,toleance=one點后,再使用函數(shù)hinosciptsyntax.Addolylinepoint,eplace_id=None)根據(jù)首尾點和交匯點建立折線。在程序編寫過程中,使用for循環(huán)語句遍歷列表項值,并增加了嵌套for循環(huán)代碼,使用函數(shù)hinosciptsyntax.ineineIntersetionlineA,lineB,planar=ue)獲取每條直線與所有直線交匯處的交點。if條件語句的判斷,借助布爾運算符選擇同時符合三個條件的點,即首先存在交點,其次該點位于索引值為i的直線上,再者該點位于直線p上,即符合交點的條件。importrhinoscriptsyntaxasrslst=[]#建立空的列表,用于放置直線首尾點與交點pls=[]#建立空的列表,用于放置根據(jù)交點構(gòu)建的折線plsp=[]#建立空的列表,用于臨時放置循環(huán)每一步的交點pl=[]#建立空的列表,用于臨時放置循環(huán)每一步的交點和首尾foriinrange(len(li)):#使用for循環(huán)語句遍歷直線列表forpinli:#使用嵌套循環(huán)語句再次遍歷直線列表,即將li[i]的直線與所有直線進行相交的 #次序?qū)i[i]直線與p直線相交提取交ifpointandrs.IsPointOnCurve(li[i],point[0])andrs.IsPointOnCurve(p,point[0#確定條件滿足存在點,點在直線li[i]和點在p上的三個條件,找交 #如果滿點的條件,將該點追加到列表lstplsp.append(point[0])#如果滿點的條件,將該點追加到列表plst中 end=rs.CurveEndPoint(li[i])#獲取li[i]直線的尾點 #將首尾點和plsp列表的交點放置于一個列表中,因為首尾點是單個元素,所以pls.append(rs.AddPolyline(rs.SortPointList(pl)))#排序點與連為折線plsp=[]#清空列表,用于循環(huán)的下一步pl=[]#清空列表,用于循環(huán)的下一100學習Python4102學習Python定義交互程序以及建筑屋頂結(jié)構(gòu)defmainfunction():#使用deffunction(parameter):語句定義交互程序,如果不需要傳遞參數(shù),即設(shè)置形basicpoint=rs.GetPoint('Selectonepoint:')#在Rhinoceros空間中拾取一個點作為初始定位點ifnotbasicpoint:return#return語句后面沒有跟任何值的函數(shù)則不返回值values=[5,120,12,5,4,3,4]#定義預設(shè)的實際參數(shù)列表 #賦值截面間距單元控制距離,即單元長angle=values[1]#定義建筑轉(zhuǎn)折角度offsetvalue=values[2]#定義建筑進深topbplineheight=values[3]#定義屋脊線相對高度multiple1=values[4]#定義建筑開始段截面間距單元控制距離倍數(shù)multiple2=values[5]#定義建筑轉(zhuǎn)折段截面間距單元控制距離倍數(shù)multiple3=values[6]#定義建筑結(jié)束段截面間距單元控制距離倍數(shù)whileTrue:#使用whileTrue:語句定義交互程prompt='Setting'#賦值字符串,用于Rhinoceros命令行提示交互 個元組

ifnotresult:return#如果不存在值,則不返回result=result.upper()#將輸入的字符串大寫ifresult=='LENGTHUNIT':#使用條件語句判斷變量result的值f=rs.GetReal('Lengthunit:',values[0])#根據(jù)result的值輸入相應(yīng)的值,同時設(shè)置默認值iffisnotNone:lengthunit=f#如果非空,則將值賦值給變量lengthunit即單位長度elifresult=='ANGLE':#使用同樣的方法賦值iffisnotNone:angle=felifresult=='OFFSETVALUE':iffisnotNone:offsetvalue=felifresult=='TOPBPLINEHEIGHT':iffisnotNone:topbplineheight=felifresult=='MULTIPLE1':iffisnotNone:multiple1=felifresult=='MULTIPLE2':iffisnotNone:multiple2=felifresult=='MULTIPLE3':110學習Pythonreturnoine,eooinea,eopiepaainunonbioi,enghui,anoeumultiple2,multiple3,floorheight)調(diào)入到Ghython中的程序可以使用Grashopper節(jié)點可視化程序繼續(xù)編寫,完善設(shè)計的細部,大部分情況下只要Grashoppr能夠處理的程序,都建議在Grashoppr處理,甚至上文的程序完全可以在Grahopper平臺下完成,因此就沒有必要使用ython來完成。只有在Grashopper無法處理程序和處理較為復雜時需要考慮使用ython來協(xié)助完成,任何編程都是出自于如果協(xié)助完成設(shè)計的創(chuàng)造,而不是無謂的炫技,本末倒置。114學習Pythondeffactorial(n):#定義ifn==1:#最小可能性,即1的階乘是1return1returnn*factorial(n-1)#大于1的數(shù)的階乘是n*(n-1)的階乘遞歸的過程可以參考右側(cè)的圖示進一步理解,圖示中的紅色線標示的部分都可以被下一組語句替換(即調(diào)用自身一次),依次類推,全部被替換完時的要求為參數(shù)為1,此時返回值為1,即最后的表達式為7×6×5×...×2×1在Python中自帶了一個turtle烏龜繪圖的庫,可以配合遞歸的使用繪制分形圖形。但是turtle繪圖在Rhinoceros下的PythonScript中并沒有嵌入,也許是因為Rhinoceros本身就是繪圖平臺,因此如果希望在PythonScript下實現(xiàn)turtle繪圖,可以自行編寫相應(yīng)的類。而在Grasshopper中可以安裝已經(jīng)開發(fā)好的組件Rabbit獲取Lsystem系統(tǒng),實現(xiàn)turtle繪圖的方法。程序fromturtleimport*#使用*星號導入turtle模塊中的所有函數(shù)deff(length,depth):#定義函數(shù),形式參數(shù)length為單位長度,depth為遞歸迭代的次ifdepth==0:#最小可能性,即迭代次數(shù)為0時,向前一個單位長else:#不斷調(diào)用自身函數(shù)的f(500,4)#執(zhí)行定義函120學習Python?變?變化變化 condition(direction='z',swing='x',multi=5,swingangle=0,rotateangle=20,pd='x'):#調(diào)整旋轉(zhuǎn)角度后的幾何形變化forninrange(300):#調(diào)整for循環(huán)語句以及初dineo,gici,i,gge,oaa,dlnoicdni,elaptngeeapienegienuigngeedineo,gici,i,gge,oaa,dlnoicdni,elaptngeeapienegienuigngeedineo,gici,i,gge,oaa,dlnoicdni,elaptngeeapienegienuigngee126學習Python?變?變化forninrange(1000):#調(diào)整for循環(huán)語句以及初始值ieoneingiein,uiinganeangeppaeieodonui,elaptngeeapienegienuigngeeieoneingiein,uiinganeangeppaeieodonui,elaptngeeapienegienuigngeeieoneingiein,uiinganeangeppaeieodonui,elaptngeeapienegienuigngeelambda函>>>deff(x):#常規(guī)的定義函數(shù)方return>>>f(3)>>>flam=lambdax:x**2#使用lambda定義函數(shù),其中x相當于形式參數(shù),冒號后面的為操作程序,賦值給定義的>>>flam(3)130學習Python4工業(yè)機器人已經(jīng)在逐步的替代部分手工制造,這個趨勢伴隨著技術(shù)的進步與機器人成本的降低越來越明顯.工業(yè)機器人的應(yīng)用可以增加工作的效率,可以獲得手工不易達到的一些施工。工業(yè)機器人的動作指令則由計算機發(fā)出,編程正是設(shè)計師與機器人之間溝通的語言途徑。使用工業(yè)機器人進行施工作業(yè),可以進行虛擬模擬以檢查施工過程中是否存在隱患,例如定位點的錯誤,部分作業(yè)區(qū)域不在機器人作業(yè)范圍,多個機器人協(xié)同合作時發(fā)生機械臂碰撞等。在研究過程里,使用了ABBIRB-6400工業(yè)機器人來模擬建筑作業(yè)過程。工業(yè)機器人將從一側(cè)底端一點開始作業(yè),水平方向按順序逐一進行作業(yè),例如焊接、安裝或者搬運等工作。工業(yè)機器人一般是根據(jù)已經(jīng)設(shè)計好的形式,編入指令從始作業(yè)。雖然這個過程并不是形式創(chuàng)造的過程,但是卻可以根據(jù)工業(yè)機器人的運動構(gòu)建邏輯過程逆向形式探索。本次研究使用了ABBIRB2600ID型號的工業(yè)機器人,可以用于集成弧焊工藝設(shè)備,以及搬運和上下料作業(yè),該型號工業(yè)機器人的基本參數(shù)和實體模型可以從./即ABB機器 獲取和研究中虛擬搭建了IRB2600ID型號的 工業(yè)機器人的主要部件,以保證邏輯構(gòu)虛擬搭建的IRB2600ID型號機器建過程中物理模擬過程的真實性。使用Ghython語言編寫邏輯構(gòu)建過程,輸入的參數(shù)確定為工業(yè)機器人機械臂軸運動的工作范圍,并設(shè)置了各軸在整個運動過程中運動的速率,增加了工業(yè)機器人整體運動的方向。在邏輯構(gòu)架過程中,確定了各軸運動與迭代時間db10_timr正弦絕對值周期性運動的規(guī)律,以速率axis虛擬搭建的IRB2600ID型號機器控控制參數(shù)下記錄機器人的運動軌從ABB機器的IRB2600ID型號機器人已經(jīng)分好各個部分并組裝完好,可以在Rhinoceros入。將各個部分的機械臂調(diào)入到Grashopper操作平臺為Mesh格網(wǎng),并根據(jù)機械臂的初始位置繪制各個機械臂的軸線用于控制運動的轉(zhuǎn)向。使用GhPython結(jié)合時間time模塊編寫運動的方式,當時間開始時,按照程序開始運動,并記錄尾端機械臂頭軸線中點的運動軌跡。機器人各個機械臂底部的部分逐次控制之上的部分,因此開始確定底座的運動方式,再去除底座來控制其余的部分,在其余的部分中仍然首先控制底部的機械臂獲得整體運動,再移出,計算剩余部分的運動,依次類推完成整個運動過程。如果不停止時間運動將會一直持續(xù)下去,也可以調(diào)整不同的參數(shù)以及機器人整體的運動軌跡來逆向模擬獲取不同的幾何形式。134學習Python

Grasshopper封裝組件程函dbl0_timer=round(dbl0_time_current-dbl0_time_00,1)#計算兩次獲取 #以差值為參數(shù)計算軸3的轉(zhuǎn)動角度 MoveD=dbl0_timer*(float(move))#以差值為參數(shù)計算整體移動的距離設(shè)置不同的參數(shù),對于各軸設(shè)置了不同的速率,即在整個模擬過程中各軸運動的次數(shù)頻率的不同將獲得不同的形式結(jié)果。由于多個參數(shù)的輸入只是在控制工業(yè)機器人的運動規(guī)律,卻不易預測最終的形式結(jié)果。只是這種形式結(jié)果是在一定參數(shù)控制下同一邏輯構(gòu)架過程衍生的結(jié)果。根據(jù)設(shè)定參數(shù)的不同,這個結(jié)果也并不唯一,但是構(gòu)建邏輯是一致的,這個邏輯就是由物理機械的運動規(guī)律和限制由語言所表述的過程。不僅可以通過輸入?yún)?shù)改變形式結(jié)果,的邏輯構(gòu)建過程仍然可以無止境的調(diào)整和塑造,以獲得的形式演化。目前基于Grasshopper的擴展組件Godzilla和HAL||RbProgramming&tl都可以控制工業(yè)機器人,可5類138學習Python事物認知過程中,總是習慣將世界中存在的對象進行分類,例如鳥類、魚類、花草等,在Rhinoceros幾何形式中則有點、線、曲面、格網(wǎng)等。每個分類之所以能夠歸為一類,是因為該類的對象具有共同的屬性特征,例如鳥類一般都能夠飛翔,具有翅膀,身披羽毛等,而魚類則水中,用腮呼吸,用鰭輔助身體平衡與運動;而點具有坐標,線具有曲率、長度、方向,曲面具有表面積、截面線等。每一類都有每一類的屬性特點,也具有該類的一些行為方法,但是每一個類下又有很多子類,例如鳥類又分雨燕目、鴿形目、雁形目等,而雨燕目之下由有科,科下則為具體的對象例如黑雨燕、珍雨燕、小雨燕等。對于人類認知世界的分類系統(tǒng),在ythonclassBird:#定義一般鳥類的屬性與方法,語句classBird:中Bird為類的名fly='Whirring'#定義一般鳥類飛的屬definit(self):#調(diào)用init構(gòu)造函數(shù),初始化對象的各屬性,類的各屬性(成員變量)均可以在構(gòu)造函數(shù)中定義;每一個類方法的第一個參數(shù)(self),包括

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論