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
  • Python 和 Revit
  • 平台特定 API
  • 練習 1
  • 練習 2
  • 練習 3
Edit on GitHub
Export as PDF
  1. 在 Dynamo 中撰寫程式碼
  2. Python

Python 和 Revit

Python 和 Revit

現在我們已經示範了如何在 Dynamo 中使用 Python 指令碼,接下來瞭解將 Revit 資源庫連接至指令碼撰寫環境。請記住,我們使用以下 Code Block 的前四行匯入了 Python 標準和 Dynamo 核心節點。若要匯入 Revit 節點、Revit 元素及 Revit 文件管理員,我們只需再加入幾行程式碼:

import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit

# Import Revit elements
from Revit.Elements import *

# Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

import System

這會提供 Revit API 的存取權,以及適用於 Revit 工作的自訂指令碼。透過合併視覺程式設計程序與 Revit API 指令碼,將大幅改進協同合作與工具開發。例如,BIM 管理員與線路圖設計者可以針對同一圖表進行合作。透過這種協同合作,他們可以改善模型的設計與執行。

平台特定 API

練習 1

建立新的 Revit 專案。

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

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

在以下練習中,我們將探索 Dynamo for Revit 中的基本 Python 指令碼。此練習重點是處理 Revit 檔案及元素,以及 Revit 與 Dynamo 之間的通訊。

這是對連結至 Dynamo 階段作業的 Revit 檔案擷取 doc、uiapp 及 app 的現成方法。先前使用 Revit API 的程式設計人員可能會注意到觀看清單中的項目。如果對這些項目不熟悉,沒有問題,我們會在以下練習中使用其他範例。

以下將講述在 Dynamo 中如何匯入 Revit 服務及擷取文件資料。

看一下 Dynamo 中的 Python 節點。您也可以從下方找到程式碼:

# Load the Python Standard and DesignScript Libraries
import sys
import clr

#Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

#Place your code below this line
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

#Assign your output to the OUT variable
OUT = [doc,uiapp,app]

練習 2

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

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

在本練習中,我們將在 Revit 內使用 Dynamo Python 節點建立簡單的模型曲線。

首先,在 Revit 中建立新的概念量體族群。

開啟 「概念量體」資料夾,然後使用 公制量體.rft 樣板檔。

在 Revit 中,使用鍵盤快速鍵 un 帶出「專案單位」設定,將長度單位變更為公尺。

啟動 Dynamo,然後建立以下影像中的一組節點。我們先在 Revit 中從 Dynamo 節點建立兩個參考點。

  1. 建立 Code Block,提供 "0;" 的值

  2. 將此值插入 ReferencePoint.ByCoordinates 節點做為 X、Y 與 Z 輸入。

  3. 建立三個滑棒,讓其範圍介於 -100 與 100 之間,且步長大小為 1。

  4. 將每個滑棒連接至 ReferencePoint.ByCoordinates 節點。

  5. 在工作區中加入 Python 節點,按一下節點上的「+」按鈕以加入另一個輸入,然後將兩個參考點插入每個輸入。開啟 Python 節點。

看一下 Dynamo 中的 Python 節點。在下方尋找完整的程式碼。

  1. System.Array:Revit 需要一個系統陣列做為輸入 (而非 Python 清單)。這只是又一行程式碼,但注意引數類型將有助於在 Revit 中進行 Python 程式設計。

import sys
import clr

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
#Import Revit elements
from Revit.Elements import *
import System

#define inputs
startRefPt = IN[0]
endRefPt = IN[1]

#define system array to match with required inputs
refPtArray = System.Array[ReferencePoint]([startRefPt, endRefPt])

#create curve by reference points in Revit
OUT = CurveByPoints.ByReferencePoints(refPtArray)

我們已在 Dynamo 中使用 Python 建立以直線連接的兩個參考點。接下來在下一個練習中更進一步。

練習 3

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

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

此練習仍很簡單,但講述了在 Revit 與 Dynamo 之間連接資料與幾何圖形的主題。我們從開啟 Revit-StructuralFraming.rvt 開始。開啟後,啟動 Dynamo,並開啟檔案 Revit-StructuralFraming.dyn。

此 Revit 檔案是一個非常基本的檔案。兩條參考曲線:一條繪製在 Level 1 上,另一條繪製在 Level 2 上。我們要將這些曲線匯入 Dynamo 並保持即時連結。

在此檔案中,我們將一組節點插入 Python 節點的五個輸入。

  1. Select Model Element 節點: 按一下每個節點的選取按鈕,然後選取 Revit 中的對應曲線。

  2. Code Block: 使用語法 0..1..#x; , 將介於 0 與 20 之間的整數滑棒連接至 x 輸入。此作業會指定在兩條曲線之間繪製的樑數量。

  3. Structural Framing Types: 在此我們將從下拉式功能表中選擇預設的 W12x26 樑。

  4. Levels: 選取「Level 1」。

此 Python 程式碼稍多一些,但程式碼中的註解描述程序的狀況

import clr
#import Dynamo Geometry
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
# Import Revit elements
from Revit.Elements import *
import System

#Query Revit elements and convert them to Dynamo Curves
crvA=IN[0].Curves[0]
crvB=IN[1].Curves[0]

#Define input Parameters
framingType=IN[3]
designLevel=IN[4]

#Define "out" as a list
OUT=[]

for val in IN[2]:
	#Define Dynamo Points on each curve
	ptA=Curve.PointAtParameter(crvA,val)
	ptB=Curve.PointAtParameter(crvB,val)
	#Create Dynamo line
	beamCrv=Line.ByStartPointEndPoint(ptA,ptB)
	#create Revit Element from Dynamo Curves
	beam = StructuralFraming.BeamByCurve(beamCrv,designLevel,framingType)
	#convert Revit Element into list of Dynamo Surfaces
	OUT.append(beam.Faces)

在 Revit 中,我們有一個跨越兩條曲線的樑陣列做為結構元素。注意:這不是真實範例...結構元素是用做從 Dynamo 所建立原生 Revit 例證的範例。

在 Dynamo 中也可以看到結果。Watch3D 節點中的樑是指從 Revit 元素查詢的幾何圖形。

請注意,我們有一套連續的程序,將資料從 Revit 環境轉換到 Dynamo 環境。總之,程序的工作方式如下:

  1. 選取 Revit 元素

  2. 將 Revit 元素轉換為 Dynamo 曲線

  3. 將 Dynamo 曲線分割為一系列 Dynamo 點

  4. 使用兩條曲線之間的 Dynamo 點建立 Dynamo 線

  5. 透過參考 Dynamo 線建立 Revit 樑

  6. 透過查詢 Revit 樑的幾何圖形,輸出 Dynamo 曲面

這聽上去可能有點笨拙,但指令碼可讓該作業非常簡單,只需在 Revit 中編輯曲線並重新執行解析器即可 (雖然在執行此作業時,您可能不得不刪除先前的樑)。這是因為我們是以 Python 放置樑,因此破壞了 OOTB 節點所擁有的關聯。

在 Revit 中更新參考曲線後,我們得到一個新的樑陣列。

PreviousPython 節點Next設定您自己的 Python 樣板

Last updated 2 months ago

Dynamo 專案的潛在宗旨是拓寬平台的實作範圍。隨著 Dynamo 加入更多程式至事項表,使用者可以從 Python 指令碼撰寫環境存取平台特定 API。雖然在本節中只是對 Revit 進行案例研究,但我們可以預期在將來的更多章節中,會針對在其他平台撰寫指令碼提供全面的自學課程。此外,現在還可以存取許多 資源庫,您可以將這些資源庫匯入 Dynamo!

以下範例示範使用 Python 從 Dynamo 實作 Revit 特定作業的方式。若要更詳細地檢閱 Python 與 Dynamo 及 Revit 之間的關係,請參閱。Python 與 Revit 的另一項有用資源是 專案。

IronPython
Dynamo Wiki 頁面
Revit Python Shell
2KB
Revit-Doc.dyn
10KB
Revit-ReferenceCurve.dyn
3MB
Revit-StructuralFraming.zip
archive