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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論