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
  • 什麼是 Zero-Touch?
  • Zero-Touch 套件
  • 案例研究 - 匯入 AForge
  • 練習 1:邊緣偵測
  • 練習 2:建立矩形
Edit on GitHub
Export as PDF
  1. 自訂節點和套件
  2. 套件

Zero-Touch 匯入

Previous發佈套件Next適用於 Revit 的 Dynamo

Last updated 1 month ago

什麼是 Zero-Touch?

「Zero-Touch 匯入」是指匯入 C# 資源庫所使用的一個簡易點選方法。Dynamo 將讀取 .dll 檔案的公開方法,並將其轉換為 Dynamo 節點。您可以使用 Zero-Touch 開發自己的自訂節點與套件,並將外部資源庫匯入 Dynamo 環境。

  1. .dll 檔

  2. Dynamo 節點

使用 Zero-Touch,您可以實際匯入不一定是為 Dynamo 開發的資源庫,並建立一組新節點。目前的 Zero-Touch 功能展示出 Dynamo 專案的跨平台能力。

Zero-Touch 套件

標誌/影像

名稱

案例研究 - 匯入 AForge

在 Dynamo 中,建立新檔案,然後選取 「檔案」>「匯入資源庫...」

接下來,找到 dll 檔。

  1. 在快顯視窗中,導覽至 AForge 安裝的「Release」資料夾。該資料夾可能位於類似如下的資料夾中:C:\Program Files (x86)\AForge.NET\Framework\Release。

  2. AForge.Imaging.dll: 在此案例研究中,我們只希望使用 AForge 資源庫中的這個檔案。選取此 .dll,然後按一下 「開啟」。

回到 Dynamo,您應該會看到資源庫中已加入 AForge 節點群組。現在,可以從我們的視覺程式存取 AForge 影像資源庫!

練習 1:邊緣偵測

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

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

現在已匯入資源庫,我們將從這第一個簡易練習 (01-EdgeDetection.dyn) 開始。我們將對範例影像執行某些基本影像處理,以展示 AForge 影像如何進行篩選。我們將使用 Watch Image 節點展示結果,並在 Dynamo 中套用與 Photoshop 中類似的篩選。

File Path 節點僅提供我們所選影像的路徑字串。接下來,我們需要在 Dynamo 中將其轉換為可用的影像檔。

  1. 使用 File From Path,在 Dynamo 環境中將檔案路徑項目轉換為影像。

  2. 將 File Path 節點連接至 File.FromPath 節點。

  3. 為了將此檔案轉換為影像,我們將使用 Image.ReadFromFile 節點。

  4. 最後,我們來查看結果!將 Watch Image 節點放在圖元區上,並連接至 Image.ReadFromFile。我們尚未使用 AForge,但已成功將影像匯入 Dynamo。

在 AForge.Imaging.AForge.Filters (「導覽」功能表中) 下,您會發現有許多可用的篩選。我們現在將使用這些篩選的其中之一,以根據閾值對影像執行去飽和度。

  1. 將三個滑棒放至圖元區,然後將其範圍變更為 0 到 1,將其步長值變更為 0.01。

  2. 在圖元區加入 Grayscale.Grayscale 節點。這是 AForge 篩選,會將灰階篩選套用至影像。從步驟 1 將這三個滑棒連接至 cr、cg 和 cb。將頂部與底部滑棒的值變更為 1,將中間滑棒的值變更為 0。

  3. 若要套用灰階篩選,我們需要對影像採取某項動作。為此,我們使用 BaseFilter.Apply。將影像連接至影像輸入,並將 Grayscale.Grayscale 連接至 baseFilter 輸入。

  4. 插入 Watch Image 節點,我們得到一個去飽和度的影像。

我們可以控制如何根據紅、綠、藍的閾值對此影像執行去飽和度。這些閾值由 Grayscale.Grayscale 節點的輸入定義。請注意,影像看起來非常暗,這是因為我們的滑棒中將綠色的值設定為 0。

  1. 將頂部與底部滑棒的值變更為 0,將中間滑棒的值變更為 1。這樣即可取得更清晰的去飽和度影像。

接下來我們使用去飽和度影像,並對其套用其他篩選。去飽和度影像具有一定的對比度,因此我們要測試某些邊緣偵測。

  1. 在圖元區加入 SobelEdgeDetector.SobelEdgeDetector 節點。

  2. 將此節點連接至 BaseUsingCopyPartialFilter.Apply,並將去飽和度影像連接至此節點的影像輸入。

  3. Sobel 邊偵測器已在新影像中亮顯邊。

拉近後,邊偵測器已顯示標示圈的外框 (以像素為單位)。AForge 資源庫的工具可利用與此類似的結果並建立 Dynamo 幾何圖形。我們將在下一個練習中探索該功能。

練習 2:建立矩形

現在我們已介紹了一些基本影像處理,接下來使用影像來驅動 Dynamo 幾何圖形!在本練習中,基本上我們的目的是使用 AForge 與 Dynamo 執行影像的 「即時追蹤」。我們將使用簡易的作業從參考影像中擷取矩形,不過 AForge 中提供了執行更複雜作業的工具。我們將使用下載練習檔案中的 02-RectangleCreation.dyn。

  1. 使用 File Path 節點,導覽至練習資料夾中的 grid.jpg。

  2. 連接上述其餘的一系列節點,以顯示路線參數式格線。

  1. 在圖元區加入 BlobCounter,接著我們需要採取某種方式來處理影像 (類似於上一個練習的 BaseFilter.Apply 工具)。

很遺憾,「處理影像」節點不會立刻顯示在 Dynamo 資源庫中。這是因為函數可能沒有顯示在 AForge 原始程式碼中。若要修正此問題,我們需要尋找因應措施。

  1. 在圖元區加入 Python 節點,然後在 Python 節點中加入下列程式碼。此程式碼將匯入 AForge 資源庫,然後處理匯入的影像。

import sys
import clr
clr.AddReference('AForge.Imaging')
from AForge.Imaging import *

bc= BlobCounter()
bc.ProcessImage(IN[0])
OUT=bc

將影像輸出連接至 Python 節點輸入,Python 節點將產生 AForge.Imaging.BlobCounter 結果。

  1. 將 Python 指令碼的輸出連接至 BlobCounterBase.GetObjectRectangles。這會讀取影像中的物件,並根據閾值從像素空間萃取量化的矩形。

  1. 在圖元區加入另一個 Python 節點,連接至 GetObjectRectangles,然後輸入以下程式碼。這將建立經過組織的 Dynamo 物件清單。

OUT = []
for rec in IN[0]:
	subOUT=[]
	subOUT.append(rec.X)
	subOUT.append(rec.Y)
	subOUT.append(rec.Width)
	subOUT.append(rec.Height)
	OUT.append(subOUT)
  1. 轉置上一步 Python 節點的輸出。這會建立 4 個清單,分別代表每個矩形的 X、Y、寬度及高度。

  2. 使用 Code Block 將資料排列為適合 Rectangle.ByCornerPoints 節點的結構 (程式碼如下)。

recData;
x0=List.GetItemAtIndex(recData,0);
y0=List.GetItemAtIndex(recData,1);
width=List.GetItemAtIndex(recData,2);
height=List.GetItemAtIndex(recData,3);
x1=x0+width;y1=y0+height;
p0=Autodesk.Point.ByCoordinates(x0,y0);
p1=Autodesk.Point.ByCoordinates(x0,y1);
p2=Autodesk.Point.ByCoordinates(x1,y1);
p3=Autodesk.Point.ByCoordinates(x1,y0);

我們現在有一系列形,代表影像中的白色正方形。透過程式設計,我們已實現與 Illustrator 中的即時追蹤 (大致) 類似的功能!

不過還需要清理一下。拉近後,可以看到有一些不需要的小矩形。

接下來要編寫程式碼,除去不需要的矩形。

  1. 在 GetObjectRectangles 節點與另一個 Python 節點之間插入一個 Python 節點。節點的程式碼位於下方,會移除小於指定大小的所有矩形。

rectangles=IN[0]
OUT=[]
for rec in rectangles:
 if rec.Width>8 and rec.Height>8:
  OUT.append(rec)

消除多餘的矩形後,只是為了好玩,我們將從矩形建立曲面,並根據矩形的面積依距離擠出矩形。

最後,將 both_sides 輸入變更為 false,會產生一個方向的擠出。將產生的此結果浸入樹脂,將產生造型極為奇特的桌子。

本節將示範如何使用 Zero-Touch 匯入協力廠商的資源庫。如需有關開發自己 Zero-Touch 資源庫的資訊,請參考 。

Zero-touch 套件是使用者定義之自訂節點的良好補充。下表列出使用 C# 資源庫的一些套件。如需有關套件的更多詳細資訊,請造訪附錄中的。

在本案例研究中,我們將展示如何匯入 外部 .dll 資源庫。AForge 是功能強大的資源庫,提供從影像處理到人工智慧的一系列功能。我們將參考 AForge 的影像類別執行以下的一些影像處理練習。

我們從下載 AForge 開始。在 上,選取 [Download Installer (下載安裝程式)],並在下載完成後進行安裝。

若要匯入影像,請在圖元區加入 File Path 節點,並從練習資料夾 (相片來源:) 中選取「soapbubbles.jpg」。

在下一步,我們將參考影像中的白色正方形,並將其轉換為實際的 Dynamo 幾何圖形。AForge 具有許多功能強大的電腦視覺工具,這裡我們要使用其中一種很重要的資源庫工具,名為 。

後續步驟會展現一些熟練使用 的技巧。不必學會這些,也能處理 Dynamo 工作。這比較算是用來示範 Dynamo 環境的靈活度,可搭配多種外部資源庫使用。

以上是基本範例,但這裡描述的概念可以轉變成令人興奮的真實應用。電腦視覺可用於許多程序。這裡列示一些範例:條碼讀取器、透視配合、及。如需此練習相關的更多 AForge 進階主題,請完整閱讀。

Dynamo Wiki 頁面
「套件」一節
AForge
AForge 下載頁面
flickr
BlobCounter
AForge Imaging API
投影對映
增強實景
本文
Mesh Toolkit
Dynamo Unfold
Rhynamo
Optimo
1MB
ZeroTouchImages.zip
archive