> For the complete documentation index, see [llms.txt](https://primer2.dynamobim.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://primer2.dynamobim.org/zh-cn/6_custom_nodes_and_packages/6-2_packages/3-developing.md).

# 开发软件包

Dynamo 提供了多种方法来创建软件包，以供个人使用或与 Dynamo 社区共享。在下面的案例研究中，我们将通过解构现有软件包来逐步介绍如何创建一个软件包。本案例研究基于上一章的课程构建，提供一组自定义节点用于按 UV 坐标映射几何图形（从一个 Dynamo 曲面到另一个 Dynamo 曲面）。

## MapToSurface 软件包

我们将使用一个示例包，演示点从一个曲面到另一个曲面的 UV 映射。我们已在本 Primer 的[创建自定义节点](/zh-cn/6_custom_nodes_and_packages/6-1_custom-nodes/2-creating.md)部分中构建了该工具的基础知识。下面的文件演示了如何理解 UV 映射的概念，并为可发布库开发一组工具。

在此图像中，我们使用 UV 坐标将点从一个曲面映射到另一个曲面。软件包基于此概念，但有更加复杂的几何图形。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-7e6ba6f1de3cb70728428b5ad6e3b21cb9c403df%2FuvMap.jpg?alt=media)

### 安装软件包

在前一章中，我们探讨了在 Dynamo 中基于在 XY 平面中定义的曲线为曲面镶板的方法。本案例研究扩展了这些概念，以获得更多几何图形尺寸。我们将以内置方式安装此软件包，以演示其开发方式。在下一节中，我们将演示如何发布此软件包。

在 Dynamo 中，依次单击“软件包”>“软件包管理器”，然后搜索软件包“MapToSurface”（全部写为一个单词）。单击“安装”以开始下载，并将软件包添加到库。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-54e71a45fb4ee34a793fafd8a24957e536027834%2Fmap-to-surface-install.png?alt=media" alt=""><figcaption></figcaption></figure>

完成安装后，自定义节点应位于“附加模块”>“DynamoPrimer”部分下。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-b9343a6c4df24ccd7c1b72ea97703ab47641feef%2Fpublish%20a%20package%20-%20publish%20locally%2004.jpg?alt=media)

现在，软件包已完成安装，我们来介绍其设置方式。

### 自定义节点

我们正在创建的软件包使用我们为参照而构建的五个自定义节点。下面，我们来介绍每个节点的作用。某些自定义节点基于其他自定义节点构建，图表具有布局，供其他用户直接理解。

这是一个包含五个自定义节点的简单软件包。在下面的步骤中，我们将简要介绍每个自定义节点的设置。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-6d8d87da59a99440e25967f84d4a78fe0a4d090f%2Fdevelop%20package%20-%20custom%20nodes%2001.jpg?alt=media)

#### **PointsToSurface**

这是一个基本自定义节点，所有其他映射节点均基于该节点。只需放置，该节点会将某个点从源曲面 UV 坐标映射到目标曲面 UV 坐标的位置。由于点是最基本的几何图形，基于它可构建更复杂的几何图形，因此我们可以使用此逻辑将二维几何图形（甚至三维几何图形）从一个曲面映射到另一个曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-e8d1d24ef413a13e75f2e20b7449a85a04d02f1c%2Fdevelop%20package%20-pointToSurface.jpg?alt=media)

#### **PolygonsToSurface**

仅使用此处的多边形，可演示将映射点从一维几何图形扩展到二维几何图形的逻辑。请注意，我们已将 *“PointsToSurface”* 节点嵌套到此自定义节点中。这样，我们就可以将每个多边形的点映射到曲面，然后基于这些映射点重新生成多边形。通过保持正确的数据结构（一列点列表），我们可以在多边形简化为一组点后，使多边形保持分离。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-16ea9f6282617557b39c3893472154463e93d430%2Fdevelop%20package%20-polygonsToSurface.jpg?alt=media)

#### **NurbsCrvtoSurface**

此处应用的逻辑与 *“PolygonsToSurface”* 节点中的逻辑相同。但是，我们不是映射多边形点，而是映射 NURBS 曲线的控制点。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-03c258b29c4d27d5bd4ff688fc8fc88161c1f1a3%2Fdevelop%20package%20-nurbsCrvtoSurface.jpg?alt=media)

**OffsetPointsToSurface**

此节点变得更加复杂，但概念非常简单：与 *“PointsToSurface”* 节点类似，此节点会将点从一个曲面映射到另一个曲面。但是，它还会考虑不在原始源曲面上的点，获取其与最近 UV 参数的距离，并将此距离映射到相应 UV 坐标处的目标曲面法线。在查看示例文件时，这会更有意义。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-f68726385118ba51196b67317bb9860a6666c99a%2Fdevelop%20package%20-OffsetPointsToSurface.jpg?alt=media\&token=ffc79022-226c-4508-b667-1d0cda83b0e5)

#### **SampleSrf**

这是一个简单节点，用于创建参数化曲面以从源栅格映射到示例文件中的波状曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-069448f95395236c86bca47c750d9b454b8c3c63%2Fdevelop%20package%20-sampleSrf.jpg?alt=media)

### 示例文件

示例文件位于软件包的根文件夹中。依次单击“软件包管理器”>“已安装的软件包”选项卡。

在“MapToSurface”的旁边，依次单击垂直点菜单 >“显示根目录”。

<figure><img src="https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-f20146a78a28b09a082b87a8a5708fea046dd0a2%2Fshow-root-directory.png?alt=media" alt=""><figcaption></figcaption></figure>

接着，打开 *“extra”* 文件夹，该文件夹存储软件包中所有非自定义节点的文件。这是存储 Dynamo 软件包示例文件（如果存在）的位置。下面的屏幕截图介绍每个示例文件中演示的概念。

#### **01-PanelingWithPolygons**

此示例文件演示了如何使用 *“PointsToSurface”* 来根据矩形栅格为曲面镶板。这应该看起来很熟悉，如我们在[上一章](/zh-cn/6_custom_nodes_and_packages/6-1_custom-nodes/2-creating.md)中演示的类似工作流。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-c039057093cc73104712fe6d294f2b3300cfa2bb%2Fdevelop%20package%20-sample%20file%2001.jpg?alt=media)

#### **02-PanelingWithPolygons-II**

使用类似的工作流，本练习文件显示用于将圆（或表示圆的多边形）从一个曲面映射到另一个曲面的设置。这将使用 *“PolygonsToSurface”* 节点。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-74508e28ee74c81d3a31b1c669ba50c8c1cc4db1%2Fdevelop%20package%20-sample%20file%2002.jpg?alt=media)

#### **03-NurbsCrvsAndSurface**

此示例文件通过使用“NurbsCrvToSurface”节点增加了一些复杂性。目标曲面偏移给定距离，且 NURBS 曲线映射到原始目标曲面和偏移曲面。从这里，将放样两条映射曲线以创建曲面，然后加厚该曲面。此结果实体有表示目标曲面法线的波动。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-7d8ac676f15eee3bf61fda6fe7f446967991b3e6%2Fdevelop%20package%20-sample%20file%2003.jpg?alt=media)

#### **04-PleatedPolysurface-OffsetPoints**

此示例文件演示如何将褶皱多重曲面从源曲面映射到目标曲面。源曲面和目标曲面是分别跨栅格和旋转曲面的矩形曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-122858c1421322f2791dd79038620301d4d35d74%2Fdevelop%20package%20-sample%20file%2004a.jpg?alt=media)

源多重曲面从源曲面映射到目标曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-585ccdb4f2c04599045918e8d734d7643d5f11f8%2Fdevelop%20package%20-sample%20file%2004b.jpg?alt=media)

#### **05-SVG-Import**

由于自定义节点能够映射不同类型的曲线，因此最后这个文件会引用从 Illustrator 输出的 SVG 文件，并将输入的曲线映射到目标曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-79f319e4741a1f23d48af708c071e169d9f8c609%2Fdevelop%20package%20-sample%20file%2005a.jpg?alt=media)

通过解析 .svg 文件的语法，曲线将从 .xml 格式转换为 Dynamo 复合线。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-d604e2c6708f1786e7362e49dcbcd7413fe56d98%2Fdevelop%20package%20-sample%20file%2005b.jpg?alt=media)

输入的曲线将映射到目标曲面。这样，我们可以在 Illustrator 中显式（点击）设计镶板、输入 Dynamo，然后应用于目标曲面。

![](https://338946474-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZkPl5tDHbu5X9VJTozDs%2Fuploads%2Fgit-blob-d030f57c5de5ded1a36e053a28474ee59fab3133%2Fdevelop%20package%20-sample%20file%2005c.jpg?alt=media)
