Dynamo
Primer for v2.0
繁體中文
繁體中文
  • 關於
  • 簡介
    • 什麼是 Dynamo?它如何運作?
    • 手冊使用者指南、Dynamo 社群與平台
  • 安裝 Dynamo
  • 使用者介面
    • 工作區
    • 資源庫
  • 節點和線路
  • 基本節點和概念
    • 節點的索引
    • 用於計算設計的幾何圖形
      • 幾何圖形概述
      • 向量、平面和座標系統
      • 點
      • 曲線
      • 曲面
      • 實體
      • 網格
    • 程式的建置區塊
      • 資料
      • 數學
      • 邏輯
      • 字串
      • 顏色
    • 使用清單設計
      • 什麼是清單
      • 使用清單
      • 清單的清單
      • n 維清單
    • Dynamo 中的字典
      • 什麼是字典
      • 字典節點
      • 程式碼區塊中的字典
      • Revit 使用情況
  • 自訂節點和套件
    • 自訂節點
      • 自訂節點簡介
      • 建立自訂節點
      • 發佈至資源庫
    • 套件
      • 套件簡介
      • 套件案例研究 - Mesh Toolkit
      • 開發套件
      • 發佈套件
      • Zero-Touch 匯入
  • 適用於 Revit 的 Dynamo
    • Revit 連接
    • 選取
    • 編輯
    • 建立
    • 自訂
    • 記錄
  • Dynamo for Civil 3D
    • Civil 3D 連接
    • 入門
    • 節點資源庫
    • 範例工作流程
      • 道路
        • 燈柱放置
      • 面
        • 服務放置
      • 公用程式
        • 更名結構
      • 鐵路
        • 間隙包絡線
      • 測量
        • 點群組管理
    • 進階主題
      • 物件併入
      • Python 和 Civil 3D
    • Dynamo 播放器
    • 有用的套件
    • 資源
  • Dynamo in Forma Beta 版
    • 設定 Forma 中的 Dynamo Player
    • 在 Dynamo Player 中加入和分享圖表
    • 在 Dynamo Player 中執行圖表
    • Dynamo 計算服務與桌面版 Dynamo 的差異
  • 在 Dynamo 中撰寫程式碼
    • 程式碼區塊和 DesignScript
      • 什麼是程式碼區塊
      • DesignScript 語法
      • 速寫
      • 函數
    • 使用 DesignScript 的幾何圖形
      • DesignScript 幾何圖形基礎知識
      • 幾何基本型
      • 向量數學
      • 曲線:內插和控制點
      • 平移、旋轉和其他轉換
      • 曲面:內插、控制點、斷面混成、迴轉
      • 幾何參數化
      • 交集和修剪
      • 幾何布林運算
      • Python 點產生器
    • Python
      • Python 節點
      • Python 和 Revit
      • 設定您自己的 Python 樣板
    • 語言變更
  • 最佳實踐
    • 圖表策略
    • 指令碼撰寫策略
    • 指令碼撰寫參考
    • 管理您的程式
    • 在 Dynamo 中有效率地處理大型資料集
  • 範例工作流程
    • 入門工作流程
      • 參數式花瓶
      • 牽引點
    • 概念索引
  • 開發人員手冊
    • 從原始碼建置 Dynamo
      • 從原始碼建置 DynamoRevit
      • 管理和更新 Dynamo 中的相依性
    • 為 Dynamo 開發
      • 入門
      • Zero-Touch 案例研究 - 網格節點
      • 在 Zero-Touch 節點中執行 Python 指令碼 (C#)
      • 深入瞭解 Zero-Touch
      • 進階 Dynamo 節點自訂
      • 在 Dynamo 套件中使用 COM (互通性) 類型
      • NodeModel 案例研究 - 自訂使用者介面
      • 針對 Dynamo 2.x 更新您的套件和 Dynamo 資源庫
      • 針對 Dynamo 3.x 更新套件與 Dynamo 資料庫
      • 延伸
      • 定義 Dynamo 2.0+ 的自訂套件組織
      • Dynamo 指令行介面
      • Dynamo 整合
      • 為 Dynamo for Revit 開發
      • 發佈套件
      • 從 Visual Studio 建置套件
      • 將延伸當作套件
    • 提取請求
    • 測試預期結果
    • 範例
  • 附錄
    • 常見問題
    • 視覺程式設計和 Dynamo
    • 資源
    • 發行說明
    • 有用的套件
    • 範例檔案
    • 主體程式整合對應表
    • 下載 PDF
    • Dynamo 鍵盤快速鍵
Powered by GitBook
On this page
  • Code Block 中的點標記法
  • 呼叫節點 - 建立、動作、查詢
  • 交織的狀況如何?
  • 將節點轉換為程式碼
  • 練習:曲面牽引
Edit on GitHub
Export as PDF
  1. 在 Dynamo 中撰寫程式碼
  2. 程式碼區塊和 DesignScript

DesignScript 語法

Previous什麼是程式碼區塊Next速寫

Last updated 2 months ago

您可能發現 Dynamo 中節點名稱有一個常見現象:每個節點都使用 . 語法而不含空格。這是因為每個節點頂部的文字都表示指令碼撰寫的實際語法,而 . (或 點標記法 ) 將元素與我們可能呼叫的方法分開。這樣可以從視覺指令碼輕鬆轉換為文字型指令碼。

如果將點標記法做一般的類比,在 Dynamo 中如何處理一個參數式蘋果呢?以下是我們在決定吃蘋果之前先對蘋果執行的一些方法。(注意:這些方法不是實際的 Dynamo 方法)。

人類用語
點標記法
輸出

蘋果的顏色是什麼?

Apple.color

紅色

蘋果成熟了嗎?

Apple.isRipe

true

蘋果有多重?

Apple.weight

6 盎司。

蘋果來自何處?

Apple.parent

樹

蘋果建立哪些項目?

Apple.children

種子

這個蘋果是本地生長的嗎?

Apple.distanceFromOrchard

60 英里。

我不知道您覺得如何,但根據以上表格的輸出來判斷,這似乎是一個美味的蘋果。我認為我會執行 Apple.eat()。

Code Block 中的點標記法

記住蘋果的類比,我們來看看 Point.ByCoordinates,並示範如何使用 Code Block 建立一個點。

在 Dynamo 中,Code Block 語法 Point.ByCoordinates(0,10); 產生的結果與 Point.ByCoordinates 節點相同,只是我們可以使用一個節點來建立點。比起將不同節點連接至 X 與 Y,此方法更有效率。

  1. 在 Code Block 中使用 Point.ByCoordinates,我們就是以內建節點 (X,Y) 的順序指定輸入。

呼叫節點 - 建立、動作、查詢

您可以透過 Code Block 呼叫資源庫中的任何一般節點,只要該節點不是特殊的 「使用者介面」節點 (具有特殊的使用者介面功能) 即可。例如,您可以呼叫 Circle.ByCenterPointRadius,但是呼叫 Watch 3D 節點意義不大。

一般節點 (資源庫中的大多數節點) 通常分為三種類型。您會發現資源庫在組織時也考慮到了這些品類。在 Code Block 中呼叫時,對這三種類型方法 (或節點) 的處理方式不同。

  1. 建立 - 建立 (或建構) 項目

  2. 動作 - 對某項目執行動作

  3. 查詢 - 取得既有項目的性質

建立

「建立」品類將從零開始建構幾何圖形。我們在 Code Block 中以從左至右的順序輸入值。這些輸入的順序與節點中從上到下的輸入順序相同。

將 Line.ByStartPointEndPoint 節點與 Code Block 中對應的語法做比較,可以獲得相同結果。

動作

動作是您對該類型的物件執行的行為。Dynamo 使用許多程式語言中通用的 點標記法 對物件套用動作。確定物件後,輸入點,後接動作名稱。動作類型方法的輸入將放置在括號中,類似於建立類型的方法,只是您不必指定對應節點上看到的第一個輸入。我們改為指定執行動作時所依據的元素:

  1. Point.Add 節點是動作類型節點,因此語法稍有不同。

  2. 輸入是 (1) point 以及要加上去的 (2) vector。在 Code Block 中,我們已將點 (物件) 命名為 pt。為了將命名為 vec 的向量加入 pt,我們會撰寫 pt.Add(vec) 或採用「物件, 點, 動作」的格式。加入動作僅有一個輸入,也就是 Point.Add 節點的所有輸入減去第一個輸入。Point.Add 節點的第一個輸入是點本身。

查詢

查詢類型的方法會取得物件的性質。由於物件本身就是輸入,因此您不必指定任何輸入。不需要使用括號。

交織的狀況如何?

節點的交織與 Code Block 的交織稍有不同。如果是節點,使用者會在節點上按一下右鍵,然後選取要執行的交織選項。如果是 Code Block,使用者對於資料的建構方式會有更多的控制。Code Block 速寫方法使用 複製指南 設定幾個一維清單應採用的配對方式。角括號 <> 中的數字定義所產生巢狀清單的階層:<1>、<2>、<3> 等。

  1. 在此範例中,我們使用速寫來定義兩個範圍 (本章的下一節將講述速寫的更多內容)。簡單來說,0..1; 相當於 {0,1},-3..-7 相當於 {-3,-4,-5,-6,-7}。結果將產生包含 2 個 x 值與 5 個 y 值的清單。如果我們不對這些不相符的清單使用複製指南,則會得到包含兩個點的清單,這是長度最短的清單。使用複製指南,我們可以找出 2 個座標與 5 個座標所有可能的組合 (即笛卡兒積)。

  2. 使用語法 Point.ByCoordinates(x_vals<1>,y_vals<2>);,可以得到 兩個 清單,每個清單有 五個 項目。

  3. 使用語法 Point.ByCoordinates(x_vals<2>,y_vals<1>);,可以得到 五個 清單,每個清單有 兩個 項目。

使用此標記法,我們也可以指定哪個清單佔優勢:2 個清單 (各包含 5 個項目) 還是 5 個清單 (各包含 2 個項目)。在此範例中,若變更複製指南的順序,結果將在格線中產生一列點清單或一欄點清單。

將節點轉換為程式碼

以上 Code Block 方法可能花一點時間才能習慣,而 Dynamo 中提供稱為「將節點轉換為程式碼」功能,可以讓程序更輕鬆。若要使用此功能,請在 Dynamo 圖表中選取一系列節點,在圖元區上按一下右鍵,然後選取「將節點轉換為程式碼」。Dynamo 會將這些節點及所有輸入與輸出濃縮到一個 Code Block 中!這不僅是一個強大的工具可學習 Code Block,也能讓您處理更高效的參數式 Dynamo 圖表。我們將使用「將節點轉換為程式碼」結束以下練習,因此請勿錯過。

練習:曲面牽引

按一下下方的連結下載範例檔案。

附錄中提供完整的範例檔案清單。

為了展示 Code Block 的強大功能,我們要將既有的牽引欄位定義轉換為 Code Block 形式。使用既有定義可示範 Code Block 與視覺指令碼如何具有相關性,有助於學習 DesignScript 語法。

先重新建立以上影像中的定義 (或開啟範例檔案)。

  1. 請注意,Point.ByCoordinates 的交織已設定為 「笛卡兒積」。

  2. 格線中的每個點都會根據其與參考點的距離而沿著 Z 方向上移。

  3. 重新建立並增厚曲面,同時在幾何圖形上建立相對於距參考點距離的凸度。

  1. 從頭開始,我們先定義參考點:Point.ByCoordinates(x,y,0); 我們使用的 Point.ByCoordinates 語法與參考點節點上方指定的語法相同。

  2. 將變數 x 與 y 插入 Code Block,以便我們可以使用滑棒動態更新這些內容。

  3. 在 Code Block 的輸入加入一些 滑棒,範圍從 -50 到 50。這樣我們可以跨越整個預設 Dynamo 格線。

  1. 在 Code Block 的第二行,我們定義速寫以取代數字序列節點:coordsXY = (-50..50..#11);我們將在下一節詳細討論此內容。現在,請注意此速寫相當於視覺指令碼中的 Number Sequence 節點。

  1. 現在,我們將從 coordsXY 序列建立點的格線。為了執行此作業,我們要使用 Point.ByCoordinates 語法,但還需要使用我們在視覺指令碼中採用的方式,創造一個清單的 笛卡兒積。為了執行此作業,我們鍵入行:gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0); 角括號表示笛卡兒積參考。

  2. 請注意,在 Watch3D 節點中,我們有一個橫越 Dynamo 格線的點格線。

  1. 現在講解困難的部分:我們希望根據點距參考點的距離,將這些點的格線上移。首先,我們呼叫這一組新點 transPts。由於平移是針對既有元素的動作,因此我們不用 Geometry.Translate...,而是使用 gridPts.Translate

  2. 從圖元區上的實際節點,我們可以看到有三個輸入。要平移的 geometry 已經宣告,因為我們正對該元素執行動作 (使用 gridPts.Translate)。其餘兩個輸入將插入函數 direction 與 distance 的括號內。

  3. direction 很簡單,我們使用 Vector.ZAxis() 垂直移動。

  4. 參考點與每個格線點之間的距離仍需要計算,因此我們使用相同方式對參考點執行此動作:refPt.DistanceTo(gridPts)

  5. 程式碼的最後一行得出平移後的點:transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));

  1. 我們現在已經有資料結構適當的點格線,可以建立 Nurbs 曲面。我們使用 srf = NurbsSurface.ByControlPoints(transPts); 建構曲面

  1. 最後,為了對取面增加一些深度,我們使用 solid = srf.Thicken(5); 建構實體。在此案例中,我們在程式碼中將曲面變厚了 5 個單位,不過也可以將其宣告為變數 (例如將其稱為 thickness),然後使用滑棒控制該值。

使用「將節點轉換為程式碼」簡化圖表

只需按一下按鈕,「將節點轉換為程式碼」功能即可自動執行我們剛剛完成的整個練習。這不僅在建立自訂定義及可重複使用的 Code Block 時很有威力,也是瞭解如何在 Dynamo 中撰寫指令碼非常有用的工具。

  1. 先使用練習的步驟 1 中使用的既有視覺指令碼。選取所有節點,在圖元區上按一下右鍵,然後選取 「將節點轉換為程式碼」。非常簡單。

Dynamo 已自動建立文字版本的視覺圖表、交織與全部項目。在您的視覺指令碼上試試看,體驗 Code Block 的強大功能!

14KB
Dynamo-Syntax_Attractor-Surface.dyn
NodeNames