# 建立自訂節點

Dynamo 提供自訂節點的多種不同建立方法。您可以從頭開始建置自訂節點、從既有圖表建置自訂節點，或使用 C# 明確建置自訂節點。在本節中，我們將討論在 Dynamo 使用者介面內透過既有圖表建置自訂節點。此方法非常適用於清理工作區，以及封裝一系列節點以供在其他位置重複使用。

## 練習：UV 對映的自訂節點

### 第 I 部分：以圖表開始

在以下影像中，我們將使用 UV 座標在曲面之間對映點。我們將使用此概念建立對 XY 平面中的曲線進行參考的面板化曲面。在此，我們將建立四邊形面板以進行面板化，但運用相同邏輯，我們可以使用 UV 對映建立多種面板。這是開發自訂節點的好機會，因為我們在此圖表或在其他 Dynamo 工作流程中，可以更輕鬆地重複使用類似程序。

!

> 按一下下方的連結下載範例檔案。
>
> 附錄中提供完整的範例檔案清單。

接下來先建立我們希望巢狀插入到自訂節點中的圖表。在此範例中，我們將建立使用 UV 座標將多邊形從基準曲面對映至目標曲面的圖表。我們會經常使用此 UV 對映程序，因此該程序是建立自訂節點的良好備用程序。如需曲面和 UV 空間的更多資訊，請參閱[曲面](/zh-tw/5_essential_nodes_and_concepts/5-2_geometry-for-computational-design/5-surfaces.md)頁面。從上面下載的 .zip 檔案中，完整的圖表為 *UVmapping\_Custom-Node.dyn*。

!

> 1. **Code Block：** 使用此行建立範圍介於 -45 到 45 之間的 10 個數字 `45..45..#10;`
> 2. **Point.ByCoordinates：** 將 **Code Block** 的輸出連接至「x」與「y」輸入，並將交織設定為交互參考。現在應該已建立點的格線。
> 3. **Plane.ByOriginNormal：** 將 *Point* 輸出連接至 *origin* 輸入，以便在每個點處建立平面。將使用預設的法線向量 (0,0,1)。
> 4. **Rectangle.ByWidthLength：** 將上一步中的平面連接至 *plane* 輸入，並使用 **Code Block** 以值 *10* 指定寬度與長度。

現在應該能看到矩形的格線。接下來使用 UV 座標將這些矩形對映到目標曲面。

!

> 1. **Polygon.Points：** 將上一步中的 **Rectangle.ByWidthLength** 輸出連接至 *polygon* 輸入，以擷取每個矩形的角點。這些是將要對映到目標曲面的點。
> 2. **Rectangle.ByWidthLength：** 使用 **Code Block** 以值 *100* 指定矩形的長度與寬度。這將是基準曲面的邊界。
> 3. **Surface.ByPatch：** 將上一步中的 **Rectangle.ByWidthLength** 連接至 *closedCurve* 輸入，以建立基準曲面。
> 4. **Surface.UVParameterAtPoint：** 連接 **Polygon.Points** 節點的 *Point* 輸出與 **Surface.ByPatch** 節點的 *Surface* 輸出，以傳回每個點處的 UV 參數。

現在，我們已建立基準曲面與一組 UV 座標，可以匯入目標曲面並在曲面之間對映點。

!

> 1. **File Path：** 選取要匯入的曲面的檔案路徑。檔案類型應是 .SAT。按一下 *「瀏覽...」* 按鈕，導覽至上面所下載 .zip 檔案中的 *UVmapping\_srf.sat* 檔案。
> 2. **Geometry.ImportFromSAT：** 連接檔案路徑以匯入曲面。您在幾何圖形預覽中應該能看到匯入的曲面。
> 3. **UV：** 將 UV 參數輸出連接至 *UV.U* 與 *UV.V* 節點。
> 4. **Surface.PointAtParameter：** 連接匯入的曲面以及 u 與 v 座標。現在，您應該能看到目標曲面上 3D 點的格線。

最後一步是使用 3D 點來建構矩形曲面修補。

!

> 1. \*\*PolyCurve.ByPoints：\*\*連接曲面上的點以建構通過這些點的 PolyCurve。
> 2. \*\*Boolean：\*\*在工作區中加入 **Boolean**，將其連接至 *connectLastToFirst* 輸入，並切換至「True」以封閉 polycurve。現在，您應該能看到對映到曲面的矩形。
> 3. \*\*Surface.ByPatch：\*\*將 polycurve 連接至 *closedCurve* 輸入，以建構曲面修補。

### 第 II 部分：從圖表到自訂節點

現在選取要巢狀插入至自訂節點的節點，同時考慮希望採用的節點輸入與輸出。我們希望自訂節點盡可能靈活，因此該自訂節點應該能對映任何多邊形，而不僅僅是矩形。

選取以下節點 (從 Polygon.Points 開始)，在工作區上按一下右鍵，然後選取「建立自訂節點」。

!

在「自訂節點性質」對話方塊中，指定自訂節點的名稱、描述及品類。

!

> 1. 名稱：MapPolygonsToSurface
> 2. 描述：將多邊形從基礎曲面對映至目標曲面
> 3. 附加元件品類：Geometry.Curve

自訂節點已顯著清理工作區。請注意，已根據原始節點命名輸入與輸出。接下來編輯自訂節點，以便讓名稱更具描述性。

!

按兩下「自訂節點」以對其進行編輯。這將開啟工作區，並以黃色背景表示節點內部。

!

> 1. **Input：** 將輸入名稱變更為 *baseSurface* 與 *targetSurface*。
> 2. **Output：** 為對映的多邊形加入其他輸出。

儲存自訂節點，然後返回首頁工作區。請注意 **MapPolygonsToSurface** 節點反映我們剛剛所做的變更。

!

我們也可以在**自訂註解**中加入內容，以提高自訂節點的堅實性。註解有助於提示輸入與輸出類型，或說明節點的功能。使用者將游標懸停在自訂節點的輸入或輸出上方時，將顯示註釋。

按兩下「自訂節點」以對其進行編輯。這會重新開啟黃色背景工作區。

!

> 1. 開始編輯 Input **Code Block**。若要開始註解，請在註解文字之前鍵入「//」。鍵入有助於說明節點的任何內容 - 在此我們將描述 *targetSurface*。
> 2. 接下來還要設定輸入類型等於某個值，以設定 *inputSurface* 的預設值。在此，我們將預設值設定為原始 **Surface.ByPatch** 設定。

也可以將註解套用到 Output。

!

> 編輯 Output Code Block 中的文字。在註解文字前鍵入「//」。在此，我們將加入更深入的描述，以說明 *Polygons* 與 *surfacePatches* 輸出。

!

> 1. 將游標懸停在自訂節點輸入上方可查看註解。
> 2. 設定 *inputSurface* 的預設值後，我們也可以執行定義，而不提供曲面輸入。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://primer2.dynamobim.org/zh-tw/6_custom_nodes_and_packages/6-1_custom-nodes/2-creating.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
