使用清單
Last updated
Last updated
現在我們已建立清單,接下來討論可以對清單執行哪些作業。將清單想像為一副紙牌。這副紙牌是清單,而其中每張紙牌都代表一個項目。
相片由 Christian Gidlöf 拍攝
我們可以對清單執行哪些查詢?這將存取既有性質。
這副紙牌有多少張?52 張。
有幾種花色?4 種。
用哪種材料製成?紙。
長度是多少?3.5" 或 89mm。
寬度是多少?2.5" 或 64mm。
我們可以對清單執行哪些動作?這會根據指定的作業變更清單。
我們可以重新洗牌。
我們可以根據點數對紙牌排序。
我們可以根據花色對紙牌排序。
我們可以拆分紙牌。
我們可以雙手各握一部分紙牌。
我們可以選取其中特定的某張牌。
以上列示的所有作業都有類似的 Dynamo 節點,供您使用一般資料的清單。以下課程將展示我們可以對清單執行的一些基本作業。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
以下影像是基礎圖表,我們在兩個圓之間繪製線以表示基本清單作業。我們將探究如何管理清單內的資料,並透過以下清單動作示範視覺結果。
首先使用一個 Code Block,值為
500;
插入 Point.ByCoordinates 節點的 x 輸入。
將上一步驟的節點插入 Plane.ByOriginNormal 節點的 origin 輸入。
使用 Circle.ByPlaneRadius 節點,將上一步驟的節點插入 plane 輸入。
使用 Code Block,為 radius 指定
50;
的值。這是我們要建立的第一個圓。使用 Geometry.Translate 節點,在 Z 方向將圓上移 100 個單位。
使用 Code Block 節點,透過以下程式碼定義 10 個 0 和 1 之間的數字:
0..1..#10;
將上一步驟的 Code Block 插入兩個 Curve.PointAtParameter 節點的 param 輸入。將 Circle.ByPlaneRadius 插入頂部節點的 curve 輸入,將 Geometry.Translate 插入下方節點的 curve 輸入。
使用 Line.ByStartPointEndPoint,連接兩個 Curve.PointAtParameter 節點。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
List.Count 節點很簡單:它會對清單中的值進行計數,並傳回該數量。使用清單的清單時,此節點將更為精細,不過我們將在後續章節示範該內容。
**List.Count ****** 節點會傳回 Line.ByStartPointEndPoint 節點中的線數。在此案例中,該值為 10,這與從原始 Code Block 節點建立的點數一致。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
List.GetItemAtIndex 是對清單中的項目進行查詢的基本方式。
首先,在 Line.ByStartPointEndPoint 節點上按一下右鍵以關閉其預覽。
使用 List.GetItemAtIndex 節點,我們將選取索引 0 或線清單中的第一個項目。
變更介於 0 到 9 之間的滑棒值,以使用 List.GetItemAtIndex 選取其他項目。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
List.Reverse 會反轉清單中所有項目的順序。
若要正確顯示反轉的線清單,請將 Code Block 變更為
0..1..#50;
以建立更多條線複製 Line.ByStartPointEndPoint 節點,在 Curve.PointAtParameter 與第二個 Line.ByStartPointEndPoint 之間插入 List.Reverse 節點
使用 Watch3D 節點可預覽兩個不同的結果。第一個節點顯示無反轉清單的結果。線垂直連接至相鄰的點。但是,反轉清單會以另一個清單中的相反順序連接所有點。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
List.ShiftIndices 是建立扭轉或螺旋樣式或任何其他類似資料處理的良好工具。此節點會將清單中的項目移位指定數量的索引。
採用對反轉清單的相同程序,將 List.ShiftIndices 插入 Curve.PointAtParameter 與 Line.ByStartPointEndPoint。
使用 Code Block,指定值「1」將清單移位一個索引。
請注意,變更很小,但下方 Watch3D 節點中所有的線在連接至其他組點時已移位一個索引。
將 Code Block 變更為較大的值 (例如 30),我們發現對角線有顯著不同。在此範例中,此移位的作用類似於相機的光圈,對原始圓柱形產生了扭轉。
按一下下方的連結下載範例檔案。
附錄中提供完整的範例檔案清單。
List.FilterByBooleanMask 將根據一系列布林值或者「True」或「False」值移除某些項目。
為了建立一系列「True」或「False」值,我們需要多做一些工作...
使用 Code Block,採用以下語法定義表示式:
0..List.Count(list);
。將 Curve.PointAtParameter 節點連接至 list 輸入。我們將在程式碼區塊一章中更詳細地講解此設置,但此案例中的程式碼行將產生代表 Curve.PointAtParameter 節點每個索引的清單。使用 _ % _ ** (模數)** 節點,將 Code Block 的輸出連接至 x 輸入,將值 4 連接至 y 輸入。這會產生索引清單除以 4 時的餘數。模數在建立樣式時是非常有用的節點。4 的所有可能餘數包括:0、1、2、3。
從 %** (模數)** 節點,我們知道值 0 表示索引可由 4 整除 (0、4、8 等)。使用 == 節點,我們可以測試餘數的值是否為 0,以測試是否能整除。
Watch 節點顯示此狀況:True/False 樣式為:true,false,false,false...。
使用此 True/False 樣式,連接至兩個 List.FilterByBooleanMask 節點的 mask 輸入。
將 Curve.PointAtParameter 節點連接至 List.FilterByBooleanMask 的每個 list 輸入。
Filter.ByBooleanMask 的輸出為 in 與 out。in 表示遮罩值為 true 的值,而 out 表示遮罩值為 false 的值。透過將 in 輸出插入 Line.ByStartPointEndPoint 節點的 startPoint 與 endPoint 輸入,我們建立出經過篩選的線清單。
Watch3D 節點顯示出線比點少。我們只篩選了 True 值,因此只選取了 25% 的節點。