2009-12-09

使用pd的OSC物件

剛開始測試 pd 上的 OSC 時,遇到一點小問題。根據 pd 官方文件指出,pd-extended 原來的預設的 OSCX 版本已經不再更新,建議改用 mrpeach 的版本。原來的 OSCX 提供 sendOSC, dumpOSC, OSCroute 三個物件,簡潔易用但擴充性不足;而 mrpeach 的版本則提供 packOSC, unpackOSC, routeOSC 三個物件外,還提供 udpsend 和 udpreceive 物件收發封包,不僅擴充性良好、支援廣播、支援 UDP 與 TCP、還可以限制資料型態。

不過 pd-extended 0.41.4 的預設仍然是使用 OSCX,欲使用 mrpeach 的 OSC 物件庫,可以採用兩種載入方式,一是動態載入,二是預設載入。

動態載入是利用 import 物件在開啟 patch  時載入。新增一個 patch,在最頂端加入 import mrpeach 物件,儲存並關閉檔案。再次開啟該檔案時便可以使用 mrpeach 版的 OSC 物件庫了。

預設載入則需將物件庫加入 Startup 載入清單。開啟 Preferences > Startup... 後新增 mrpeach,重新開啟 pd 就 OK 了。

2009-05-14

尋找最接近的三頂點

牛小姐問了個很好的問題:「如何在一群點Pn中,找到最接近獨立點A的三個點?」

第一種方法,Grasshopper 有個 Closest Point 元件,可以用來找最接近的一點,找到點後,將該點從點群Pn中移除,再重複上述步驟兩次,就可以找到最接近的三個點。但是這顯然是效率不高的土方法,要找N個點就要重複N次,十分累贅。而且,Grasshopper 在 List 操作上還欠缺 Delete Item 這種元件,移除單一 item 還得自己寫 script。因為這個方法太過繁瑣,就不舉例了(我懶惰)。

第二種方法比較簡潔,基本上只要能算出點距,將之排序,依序取出前三點,問題就解決了。作法如下:


只要修改 Interval 就可以任意取出想要的點,很好用。

2009-05-10

自訂工作區顯示模式

Grasshopper 的工作區(workspace)裡提供了若干方便的小工具和顯示資訊方式,對於元件的建置與除錯,有很大的幫助。
  1. 首先是元件的顏色:灰色表示正常物件、橘色表示警告(但應該可以執行)、紅色表示錯誤(無法執行)。
  2. 顯示物件分佈狀況的羅盤(compass widget)。可以從主選單 View > Widgets > Compass 切換顯示。
  3. 選取元件後,可以使用對齊小工具(align widget)整理元件,看起來會舒服的多。可以從主選單 View > Widgets > Align 切換顯示。
  4. 接線顏色與線條樣式,顯示傳遞訊息的類型:單線表示單一資料、雙線表示資料串列(list)、雙線線段表示樹狀結構資料(tree)。線條顏色也承襲元件顏色,顯示資料是否有問題。接線樣式的顯示與否,可以從主選單 View > Draw Fancy Wires 切換。
  5. 元件可以用名稱或圖示顯示,從主選單 View > Draw Icons 切換顯示方式。
  6. 由於尺度的不同,有時候工作平面(Construction Plane; CPlane)的座標圖示變得太小或太大,此時可以用主選單中 View > Plane Radius 設定顯示大小。

2009-05-08

關於 Loft 元件

Grasshopper 裡的 Loft 元件如同一般建模軟體的 Loft 工具一樣,都提供了建模的額外選項,如果妥善運用這些選項,可以省下不少功夫(或麻煩)。
例如以三條曲線構成的曲面,左圖是正常(Normal)模式,右圖是鬆垂(Loose)模式。


2009-05-06

真正亂的亂數

程式裡的亂數是透過亂數產生器(random number generator)的運算結果。亂數產生器是一種演算法,它根據一個亂數種子(random seed)來產生後續的數字序列。兩個相同的 seeds 所產生的亂數序列會一模一樣。不幸的是 Grasshopper 裡的 Random 元件,每次初始 seed 值都一樣是 2,這代表什麼?代表它所產生的亂數根本不亂!你看~


要得到真正亂的亂數序列,就要改變 seed,也就是讓 seed 本身每次都不能相同、要夠隨機,但這不是變成「雞生蛋、蛋生雞」的問題嗎?放心,電腦科學界的前輩們已經有好方法了。就是將一個永遠會不斷往前數的計數器當做 seed,也就是時間。將電腦裡的時間當做 seed,由於時間會不斷改變,可以確保 seed 的不確定性。

不過 Grasshopper 裡沒有取得系統時間的元件,得靠程式元件來做到。這裡我們用 C# 元件示範:


C# 函式的內容很簡單:A = System.DateTime.Now.Millisecond;
用意是取得目前時間的毫秒。當然 0-999 的範圍內還是有可能重複,但起碼夠亂了。如果要亂個徹底,可以拿系統時間(System Time)來用。左邊的 Slider 只是用來觸發 C# 元件重新計算,沒有實際作用。

[2010-03-10更新]
為了取得更亂的亂數,可以改用 Ticks。Ticks 是不斷累計的系統時鐘,是個非常大的整數,以我的電腦為例,每秒鐘有一千萬個Ticks,實在足夠了。
只要把上述函式改為 A = System.DateTime.Now.Ticks % 10000000;
便可取得 1~9999999 之間的一個整數。其實這個整數本身就已經夠亂了,可以直接使用。

RhinoCAM到貨


兩週前 CNC Milling 雕銑機設置完成後,才發現沒有像樣的刀路設計與規劃軟體,趕緊請 Yoko 協助訂購 RhinoCAM,今天終於到貨,可以正式開始測試和教育訓練。可惜 syuan 因為案子忙,沒辦法長時間協助規劃教材,我還是得想辦法壓榨他在 ETH 的實戰經驗來嘉惠學生。

RhinoCAM 教育版其實是 Pro 全功能版,支援各種三~六軸 CNC 切削機具,我們就一台小小的三軸 CNC,有點殺雞用牛刀的感覺。RhinoCAM 是 Rhino 的外掛模組,需要 Rhino 4.0 SRb4 以上版本。包裝中附有一個硬體鎖(dongle)作為網路認證之用,可供五部電腦同時使用 RhinoCAM。

安裝步驟:
  1. 先檢查是否已經安裝 Rhino 4.0 SR4b 以上版本。
  2. 在 server 和 clients 上都安裝 RhinoCAM 和 Sentinel 硬體鎖驅動程式。
  3. 在 server 上安裝授權服務,執行 C:\Program Files\Rhinoceros 4.0\Plug-ins\RhinoCAM 2.0\RainbowServerInstaller.exe。
  4. 在 clients 上的 Windows 作業系統中新增系統變數(System Variable),變數名稱為 VMILL_LISENCE_HOST,變數值為 server IP。
啟用步驟:

首次開啟 server 上的 RhinoCAM 需要進行授權認證,回傳母公司後,會收到兩組認證碼,用來完成啟用程序。待 server 端啟用完成後,clients 端即可使用。

2009-05-05

平面上封閉曲線的面積

如何求得平面上封閉曲線的面積呢?既然共面,封閉曲線自然可以形成封閉區域,便可取得面積。正規的作法是:先以封閉曲線作為邊界(boundary),產生一封閉區域(即一 Surface),然後取得該 Surface 的面積。

所需元件:
  1. Params/Geometry/Curve
  2. Surface/Freeform/Planar Srf
  3. Surface/Analysis/BRep Area
  4. Params/Special/Panel
將上述元件依序接起來就可以了 Curve -> Planar Srf -> BRep Area -> Panel,記得要將 1. Curve 的內容指向 Rhino 中的一條封閉曲線,才會有資料來源。此外,由於 BRep Area 元件也支援輸入封閉曲線,即可以省略元件 Planar Srf,變成 Curve -> BRep Area -> Panel。

2009-04-30

利用 Variable Expression 建構參數曲面

(這是前一篇文章 Parametric Surface using Variable Expression 的中文版)如果你懂得參數曲面,或者你知道如何利用參數方程式建構三維曲面,從數學軟體(如 Mathcad 或 Mathematica)轉換到 Grasshopper 的過程應該是非常容易的。舉例來說,在 Mathcad 中參數曲面的方程式看起來像是這樣子:

喜愛螺線圖形(或旋輪線圖形)的人也許對這個方程式感到似曾相識。在 Grasshopper 裡的定義則會成為這樣:

下載 Grasshopper 定義檔: paramsurf01_ch.ghx

其中我用了三個 Variable Expression (變數算式)元件分別作為 x, y, z 座標值的方程式(參數式)計算。請記得將三者的資料對應(Data matching)設為 Cross Reference(交叉配對),u 和 v 間的配對關係才會構成二維陣列。

最後產生的形體:

2009-04-29

Parametric Surface using Variable Expression

Please Note: articles in English will be moved to my new blog on grasshopper3d.

If you know parametric surface well -- or to be more specific, you know how to construct 3D surfaces using parametric equations -- it is a smooth transition from mathematical tools (such as Mathcad or Mathematica) to Grasshopper. In Mathcad, the equation for a parametric surface is:

For those who love spirograph may find it familiar. In Grasshopper, the definition looks like this:

Downloaded Grasshopper definition file: paramsurf01.ghx

In which I use Variable Expression component to hold the functions (parametric equations) for x, y, and z coordinates of the surface. Remember to set the data matching to Cross Reference so that u and v make up a 2D matrix.

And the result model of this exercise is: