最好有实例
回复内容:
谢邀 @hat600,谈谈体会。Python最近比较火啊,好像编程入门都不用学C++了大家直接上手Python,不过也确实方便。其实笔者感觉使用Rhino+Grasshopper+GH其它插件基本可以覆盖参数化设计/数字建造的大部分方面,能用到Python的都是很少的内容了。受笔者的眼界所限,只谈Rhino+Python好了。
Rhino+GH的特点是易上手,易理解;界面直观;有大量轮子(插件)可以用。缺点是只能面向过程编程。而Python没有编程基础的话上手还有些困难,优点是灵活度高,可以面向对象编程。
对于Python语法,比如可以去Codecademy:Learn to code
上学习,一个交互式在线平台。
对于RhinoPython,其实McNeel已经给出不少资料了:
Python scripting for Rhino and Grasshopper [McNeel Wiki]
其中提到的Designalyze
,有视频有源码,可惜需翻墙。
这本RhinoPythonPrimer
也有很多例子。
中文资料在Shaper3D有一些。戳:Rhino脚本与开发-Rhino(犀牛)中国技术支持与推广中心
我其实比较常用GhPython | Grasshopper
,使得Python代码可以集成到Grasshopper里。这样写代码时互动性强些,而且它可以方便的调用Grasshopper算法。
以上是涉及编程的内容。掌握RhinoPython不仅需要了解Python语法,还需要对几何的原理Nurbs和Mesh有深入理解。如果能精通RhinoPython的话,Rhino肯定也可以异常熟练了。
下面从CAD/CAM来谈建筑吧,编程可以辅助设计,比如创造形体,比如目标优化。可以辅助分析,比如分析光照视线通风等等。可以辅助建造,设计节点,设计加工刀路等等。
说到造型的话,algorithmic design
这个网站还挺有意思,不少案例都是Python的代码。目标优化(Optimization,或者叫数学规划)也值得一书,计算机科学里有很多搜索算法用于此类问题。GH里面Galapagos是个暴力优化器,Kangaroo能解决特定几何问题,除此外有时Coding还是需要的。但在很多方面,其实都有插件了,没太大必要用Python自己造轮子。比如设计加工刀路这件事,当然可以自己写编译器把几何信息翻译成GCODE,但是也是有RhinoCAM, Silkworm, KUKA|prc之类的GH插件,直接可以做到。当然,有时这些插件办不到的事情,还就得自己Coding。
确实有些东西如果没有相应插件的话,用GH很难做出来的,比如MultiAgent System,就必须自己写class了。最后贴张图,笔者用做过的小设计用RhinoPython建模和模拟的。这个用Grasshopper比较难所以选择了用Python,两百多行而已。
2016.02.18更新 最近在做一些computation和optimization的內容,發現grasshopper裡面的python奇慢無比,借google調查了一下,有些結論。
首先說Rhino,根據論壇上McNeel公司的人的說法:
(Does Rhino 5 use all 6 cores on 6 core processors?
)
Rhino is not a "multi-threaded" application. It does split off a few minor processes to other cores but nothing major. That's because modeling is a serial process. Modeling has to be done 'in order'. 所以RhinoSDK基本上不提供multi-thread的用法。
GH基於Rhino,按論壇上的說法也是基本上不支持multi-thread的。
那麼GH裡面的python是不是就沒辦法開多線程了呢?
理論上是可以的:
ghPython – New component and parallel modules
但是用沒有用呢,我是沒看過比較好的實例。
個人感覺原因是:
普通的geometric operation靠現在的CPU計算能力基本上是可以滿足的,最多等5min。所以剛需並不高。
確實需要並行計算的是更大型的計算量,比如optimization。GH自帶的galapagos, 還是第三方比如octopus或者goat這種優化解算器。而這些又都是打包好的模塊,無法在python裡面用上面文章裡面的並行計算模塊調用…… (所以python裡面的並行真的很雞肋啊)
單純的optimization又不需要依賴于Rhino平台,直接在Rhino外面操作即可。
那是不是設計geometry的optimization就沒辦法做了呢?
其實不是的,雖然目前沒有見到特別好的解決方案,之前做research的一個組用的方法是:
在Rhino外面操作,然後把geometry通過obj導入回來,或者實時傳遞點坐標在Rhino裡面重建Mesh。
最後,我同時在嘗試遷移至Dynamo平台。
——————————————— ——————————————— 原答案: 一堆感謝不點讚,你們這些壞人! ——————————————— 正式答題。這應該是我在知乎上第一個涉及專業相關的問題,慢慢答。
(其實昨日看成在建築方面的“應用”……一激動遂Mark之。剛才仔細一看是問“教程”……那麼敝人就兼顧著都說一點,簡單介紹一下這方面內容在建築中的前沿領域都在做什麼。)
首先,Python的語言教程其實很多,像 @马逸东西 说的Codecademy。
另外還有Udacity和Coursera上面的。現在MOOC類課程很多,隨便找一下就有。側重點有些是語言本身的性質,有些偏應用。(Udacity作為工業界類MOOC,實用性非常強。)
個人還是首推自家學校在EdX上開的這門:
Introduction to Computer Science and Programming Using Python
其他的基本教程直接從@马逸东西 的答案里找即可。
既然是建築相關,一般離不開Rhino。
下面來說一下Python和Rhino的關係。
Python其實有很多版本,Rhino因為是win平台起家而且用了很多.NET的內容,在python的選擇上自然也是依託.NET的IronPython。
所以,大家說的Rhino中的Python,其實就是IronPython。
這個在安裝Rhino的時候會安裝一個,也可以自己下載最新版本然後替換。
Rhino裡面的Python用法有二:其一為不藉助grasshopper的pythonscript,有簡單的IDE可以debug和step;其二為Grasshopper裡面的python component,只有一個寫script的小窗口,只能test,不能debug。(至於怎麼用external editor寫code,這又是另外一個故事了,暫且按下不表。)
Ghsshopper裡面的寫script的原生component有兩個,C#和VB,是David Rutten直接寫的,與GH和Rhino整合非常好。Python這貨,其實是個領養的娃娃。由於不會賣萌,初期很不受待見。後來修修補補才差不多,但還是有點不堪大用。
rhinoscriptsyntax和Rhino是兩套東西,一個用GUID,一個用實體的Geometry。這兩個娃什麼區別呢?GUID呢,全稱其實是globally unique identifier,可以理解為一個geometry的名字。就像你叫小明,你哥哥叫小萌,比你多個草字頭,代表不是一個人。但你們的媽媽可以一邊喊“小萌快回來吃飯啦”,一邊跑去揪著你的耳朵把你拎回家來。兩種操作,結果都是你們回來吃飯了。(誰讓媽媽喊你回來你不聽話,活該!)
用名字當然很簡單,省時省力,但有些人沒有名字,只能動手……於是就會出現兩種混用的情況。會很亂,也非常容易出錯。
另外就是如果和GH的component混用,GH自帶的數據結構處理起來也比較麻煩。一般的做法是全都flat過再接入。出來的也是list的數據類型。這樣對很多初學者來說,會一定程度上限制class的用法。我見過的即使是ETH內部人寫的script,也都是function為主,很少用class。
但是最麻煩的問題還不是這個。
由於GH其實是個圖形編程平台,其實大部分的建模都可以用GH的component本身解決。即使像“循環”這類問題,也有HoopSnake和Anemone可以一定程度上解決,只要你邏輯能理清。
所以最需要coding的問題是component解決不了而有沒有人開發相關插件的問題。這個在research裡面很常見。比如上學期上一門optimisation的課,裡面要實現一個Michell Truss 的參數化控制,於是就有了這個東西:
(另外半邊是Kramaba的優化,中間粉色的是Goat的optimiser,不重要。)
(另外半邊是Kramaba的優化,中間粉色的是Goat的optimiser,不重要。)
結果就是一個可以改變參數批量化產生各種Michell Truss的東西:
這還只是比較簡單的用法,整個script從構思到實現大概用時半天多。但真正複雜的項目一個是規模大,一個是用到的數學多。而作為一個好用的程序語言,最重要的一方面就是有足夠多的外接library提供各種函數可以用。
可python最重要的一個數學函數庫NumPy在IronPython里不能調用……不能調用……不能調用……(現在可以在x86的Rhino裡面用了,所以裝了x64版本Rhino的孩子們,再去裝一個吧 。O(∩_∩)O)於是當初就是各種問題,各種不好用。
C#就沒有這個問題,本身支持也好。GSD那邊MDes項目的Technology項目主要就是用C#,估計也跟其教授當初開始涉足這方面時候Python太挫有關……
############### 我是分割線 #############
但是,python由於其語言本身簡潔有力,很多好的特性,其發展是很有前景的。而且ETH的Gramazio Kohler Research (就是那個各種機械臂的dfab,現在併入國家出錢支持的NCCR。)以及Block Research Group里,用python的也不少。(我是不會告訴你們最出名的那個搭建磚墻的項目的原始code就是python寫的,見下。)
因為代碼量真的小很多……而且支持越來越完善。故大家現在依然在用。
但是……(對,“但是君”又來了……)他們大多數都是在用純的pythonscript,更有甚者因為是做結構優化和計算,只要輸出點陣文件即可,所以連rhino環境都不用。
比如這個算用Force Density算網格的(用Mathematica也可以實現,但Rhino裡面的python真的是不可以呢。):
The force density method « BLOCK blog
關於Block Research Group和dfab在做什麼,各位自己看網站:
BLOCK Research Group
dfab | NCCR Digital Fabrication
瑞士這是在國家出錢做建造,美帝都望塵莫及,我們目前是真心是追不上啊……
這些是我目前了解的建築方面最前沿的應用。但是教程呢,是真心沒有的。出教程的都是已經成熟的內容,前沿research大家都在摸索,要教程難道要上帝視角么……
其他周邊方向,比如結構分析和計算,就和建築離得比較遠了。
至於其他領域應用,比如CAM之流,故事就很多了……@马逸东西同學談的比較廣,有些細節和客觀事實有待推敲,但大體方向上問題不大。
P.S.
最後多說兩句。建築引入這套參數化思想和系統已經有10年有餘。開始都在專注與形式的複雜性,結果造出了很多結構奇葩的建築。現在已經進入一個可以把結構納入設計交互流程里來的時代,各種實時結構分析和優化軟件也如雨後春筍般出現。(其實也是因為computation ability提高的緣故。)
未來的發展肯定是具有物理特性的計算機模型。電腦里的建築也不再會是一個形式而已。個人覺得未來的建築師會越來越需要了解一定的結構知識。不一定會算,但要懂。
懂,你懂麼?(^_^)
国外有许多网站都有很棒的教程
下面有几个推荐的
面向设计师的Python基础教程 by 王大川
http://www. xuexiniu.com/thread-631 24-1-1.html 清楚地讲解python的基本指令与观念
Plethora Project
http://www. plethora-project.com/ed ucation/2011/09/12/rhino-python-tutorials/ 非常知名的网站
跟我读 『RhinoPython 101』系列视频教学
http:// bbs.shaper3d.com/thread -22775-1-1.html 将Rhino Python官方文件以视频方式讲解
Ezio Blasetti
http:// code.algorithmicdesign.net /following/posts 於UPenn 等知名大学任教的教授个人网站
digital [sub] stance
Posts about python on Digital [Sub]stance
Designalyze
http:// designalyze.com/softwar e/python
看到楼上好多回答 ,说明大家都挺感兴趣。 python在编程语言中算比较年轻的, 但是由于跨平台能力非常强。 寄生于各个宿主里面。 以前一般用javascript(rhino)t的地方或者MEL(maya里面用的)或者VB (catia里面)等等 都开始注入了python,更别提计算机领域里面各种其他的应用甚至互联网开发也都用起了python。
因此学习与掌握python对编程是非常有帮助的,而且确实也比较容易, 如楼上莫个楼主所说的可以用200多行完成一个小case。
除非你是想用可视化图形话的编程语言比如grasshoper 之类。 如果你想学一门真正的计算机语言用于建筑。 那么用python是比较好的选择。 尤其是对于计算机语言没有任何基础的学员。对于有编程基础的学员我的建议是从java入手,比如processing之类的。
以上提到了三种语言,加上以前的javascript 是四种。
现在说说教程,我最近接触了 rhino的python, 我读的是这本: Python scripting for Rhino and Grasshopper [McNeel Wiki]
这是基于以前javascript的教程基层上改写成python教程的。
另外maya的python我学的是
http:// help.autodesk.com/view/ MAYAUL/2015/ENU/?guid=Python_Python_in_Maya 也是以前MEL现在注入了python。
从我举例来看,你就看出python如何强势了。
另外在我自己的ikuku主页上我也会写一些关于计算机语言如何应用在建筑里面的例子。 不多,但是如果你们想跟我探讨或者什么的, 非常欢迎。 文章 |
马海东
图书 |
马海东
有一个,叫《跟我一起读RhinoPython101》有视频和书籍可在网上下载,我正在学。 @猫无忌说的那个包瑞清博士写的《学习python——做个有编程能力的设计师》也能学,是专注于景观和规划的,而且门槛有点高,没有Python语言基础看不懂的。
景观用编程来做很合适的,因为他们要处理大量的数据,这些工作让电脑来做就最好不过了。
FreeCAD,你搜一下就出来了.开源软件,可以用Python编程绘图建模,也可以用传统的方法绘图,除了有建筑设计模式还有其他的模式.软件可以下载教程和实例.
然而目前在实际工作中并没有什么鸟用.纯娱乐向
楼上的通通都给我让开。这猫多人竟然一个都答不对,还好我读书多。
这个刚好前段时间逛书店,让我大吃一鲸,有个景观的写了几大本书,吓得我哦。
仔细一看,人家是一个博士,我瞬间觉得心安理得了。这几本书如下:
《编程景观》、《学习Python-做个有编程能力的设计师》、《ArcGIS下的Python编程》和《折叠的程序》
-------------------------------------------------------------------------------------------------------------------
这里是正儿八经的景观专业的在抢程序员的饭碗案例,我大致翻了一下,代码太多了。不想看,毕竟我是用c#的结构设计狮,专业不对口。
扑通跪下了、现在建筑师都来抢我们程序员的饭碗了么?