更新日期：2025.04.06
版本：0.8.6

提供的案例文件中，仅仅是每个工具的讲解，对应视频内容。具体的动画该如何制作，并不涉及。
建议安装Heteroptera插件与Human插件。如果实在不想安装，请自行查找摄像机相关的组件，替换Heteroptera的Camera Crane组件，以实现摄像机控制。

----------
0.8.6的改动：

**EventOperation**
- 现在第一个输入端默认Flatten
- 修复第5个输出端在区间0-1且位于所有event区间的外部时，会输出0 to 1而不是null的问题
- 修复Event和EventOperation在使用Graph-Mapper+的情况下出现的无法弹出跳转区间菜单问题

**ConnectToEventOperationButton**
- 若选中的Event后的Graph Mapper，且一个位于组内，一个不在组内，位于组内的Graph Mapper已连接至一个已存在的EventOperation，那么不在组内的这个Graph Mapper会加入这个组，并连接至这个EventOperation
- 若选中了多个Event后的Graph Mapper，且这些Graph Mapper都各自在不同的独立组内，且它们各自的组内已经有一个已连接的Event Operation，那么将其连接至各自的Event Operation

**MotionText**
- 优化性能
- 默认情况下不上色

**Color Alpha**
- 增加右键菜单模式切换，0-1/0-255，并显示当前状态
- 如果alpha值为0，则锁定与它输出端连接的下游组件

**TimeInterval**
- 修复MotionSlider连接到输入端1时，不会正确输出区间的问题

**IntervalLock**
- 修复值为0且位于所有event区间的外部时，会输出true的问题

**新增: GetViewportFov**
- 自动计算水平FOV/垂直FOV数值

**新增: IntervalSwticher**
- 简化ExportAnimation与V-Ray Timeline的控制切换

**工具栏**
- 保存XML配置文件，保存默认位置
- 修复工具栏在横向的时候，图标高度缩小的问题

**ModifySenderSettingsButton**
- 切换双击MotionSender自动生成的Graph形式，四种模式：
  - 默认Graph Mapper
  - 如果有Riched Graph Mapper，可选择
  - 如果有V-Ray Graph，可选择
  - 如果有Graph-Mapper+，可选择
- 保存默认帧数设置到XML
- 保存默认Graph设置到XML
- 保存默认开启状态

----------

Motion

Motion是一个GH动画插件，参考了多种动画插件以及烟灰动画课程中的核心思路，旨在更方便地进行GH动画的制作。


插件功能：


**组件**

01_Animation

【Motion Slider】

点击区间文本框直接修改Slider区间

配合工具栏上的CreateUnionSliderButton，创建Motion Union Slider，之后可以复制粘贴Motion Slider，Motion Union Slider的区间会自动进行更新

Motion Union Slider的值与Motion Slider的值是联动的

Union Slider点击右键菜单可以连接到所有EventOperation和Interval Lock的时间输入端，避免特殊情况下断开连接


【Motion Sender】

将Motion Sender放在Motion Slider的输出端旁边，会自动连接它的输出端，并显示其区间范围

双击Motion Sender可以快速创建Event以及后接的Graph Mapper，Graph Mapper的默认模式为Bezier


【Event】

输入端Time接收Motion Sender传来的值

输入端Domain确定想改变的数值范围

选择某个组件，点击HIDE可以在这个Event的时间范围之外隐藏组件显示，点击LOCK可以在这个Event的时间范围之外锁定组件

鼠标移动到按钮范围内，会自动绘制指示线，来显示哪些组件被这个Event隐藏/锁定

双击Event可跳转到该Event对应的EventOperation

可以使用Heteroptera的【Graph Mapper +】/ 【Riched Graph Mapper】/ 【V-Ray Graph】来替代默认Graph Mapper，连接在Event组件与EventOperation组件之间

---右键菜单

使用空值模式时，只有在组件接收不到值时才会进行对指定组件的隐藏/锁定操作

可选择区间和指定区间的Sender进行连接


【EventOperation】

选中多个位于Event后面的Graph Mapper ，点击工具栏按钮ConnectToEventOprationButton，将创建一个EventOperation，并自动与选中的所有Graph Mapper相连。如果之前已经正确创建了Union Slider，那么其第二个输入端Time也会自动和Union Slider相连。

输入端Event前会显示当前事件的值【0-1】

输出端Remapped Value会显示当前事件输出的值，也就是在Event的第二个输入端的区间中所对应的值

放大组件可以点击+按钮，增加两个输出端

输出当前事件在所有事件中的序号

输出当前事件的值域区间

双击组件可以弹出菜单，菜单中会显示所有区间的值，点击指定区间会跳转至对应的Event

如果当前帧不在任意一个区间内时，会输出上一个事件区间以及它对应的事件值。
例如有3个区间0-30,60-90,120-150，如果当前帧为91，则返回最后一个区间60-90以及它的值(即帧处于90时的值)


【Interval Lock】

指定区间，并将这个组件与指定组件放在一个Group内，时间在区间外时会对组内的所有组件进行锁定



02_Export

【ExportSliderAnimation】

导出.png格式图片，透明背景

Raytraced(光线追踪)显示模式导出帧，可设置采样数

自定义区间导出帧

导出完毕后点击Open按钮直接跳转至导出文件夹

中途可按ESC停止导出



03_Utils

【AdjustSearchCount】

调整最大组件搜索数量，最大值为30个



【FilletEdgeIndex】

根据Brep和输入的点确定边的序号，配合FilletEdge进行倒角



【ZDepth】

开启深度图显示模式，类似Rhino中的ShowZBuffer命令

导出深度图

自定义导出深度图的比例，基础分辨率基于当前工作视窗。



【Arrange Tab Components】

指定插件Tab名称，分组列出所有该插件的电池放置在画布上



【Dynamic Output】

自动根据输入端的数据生成对应数量的输出端

如果是一个list，则每个输出端都会输出list中的1个数据，并显示**Out+序号**

如果是一个tree，则每个输出端都会输出一个路径下的所有数据，并显示**路径号**，例如{0;1}



【Color Alpha】

修改颜色的Alpha值



【Motion Text】

设置文字的各类属性

可设置文字字符间距

可输入多种颜色，颜色会均分到每个字符

输出文字Mesh

输出文字边缘线



【Motion Image Preview】

读取Motion Material提供的材质



【Motion Material】

支持所有材质相关参数修改

支持输入Diffuse/Transparency/Environment/Bump贴图

可输入图片的路径

也可直接输入 **Javid** 和  **Bitmap+** 插件输出的System.Drawing.Bitmap格式作为贴图



【Motion Image Selector】

读取指定文件夹路径，可根据Index输出对应序号的图片



【Image Transform Settings】

修改Diffuse / Transparency / Bump(暂时有问题) 贴图的Transform



【Point On View】

配合Human插件的Render xxx to Screen，可将Mesh等物体渲染到屏幕

输出端1用于视窗预览，方便确定位置

输出端2用于导出，是物体在导出图片中的实际位置



**工具栏按钮**

 【ModifySliderButton】

 批量创建Motion Slider
   例如输入0,30,60,90，点击创建，生成区间为0-30,30-60,60-90的三个新的Motion Slider

 分割选中的Motion Slider区间并新建
   例如文本框内显示0,30，可以将其修改为0,15,30，这样会创建出0-15,15-30两个新的Motion Slider

 合并选中的Motion Slider区间并新建
   先选择想合并的Motion Slider，例如0-30,30-60,60-90区间的三个Motion Slider
   点击合并按钮后，画布上会创建出一个新的Motion Slider，区间为0-90

 替换选中的Motion Slider区间值
   例如选中的Motion Slider区间值分别为0-30,30-60,60-90，此时文本框内会出现0,30,60,90，将30改为33，60改为66，点击替换按钮，然后所有区间值都会进行相应修改


【SliderControlButton】

控制UnionSlider，双向更新

支持输入数值，按Enter确定

点击+ /- 增减值

鼠标右键点击按钮，可连续增加/减少值

点击MIN / MAX 跳转到最小值



【UpdateSenderButton】

为所有Motion Slider添加Motion Sender



【CreateUnionSliderButton】

先选择MotionSlider，点击左键，可创建一个Union Slider

之后只需要将Motion Slider和Motion Sender一起复制，即可自动联动Union Slider与Motion Slider的值和区间

右键可解除联动关系



【ConnectToMultipleEventOperationButton】

选择多个Graph Mapper，点击按钮，新建Event Operation并自动连好连线

新建的Event Operation会自动和Union Slider连接

如果同时选中了已存在的Event Operation和Graph Mapper，点击左键也会多对一连接

连接时，将与其连接的所有Event和Graph Mapper归到一个组内;如果已有EventOperation和组，则将新的Event和Graph Mapper添加至这个组

如果选中了一个Graph Mapper，它没有连接到Event Operation，但是与它在同个组的Graph Mapper已经连接到了一个Event Operation，那么点击按钮,当前选中的Graph Mapper就会连接至这个Event Operation


【ClickFinderButton】

点击左键，会闪烁显示当前模型空间内所有GH物件的BoundingBox

点击Rhino视窗内的GH物件，会自动选择该物件并跳转到其在GH画布的位置



【AddScribbleWPFButton】

创建Scribble

突破字体大小限制

可设置5种字体样式

直接点击下拉列表选择字体

可按单行最大字符数来分行，预览显示



【RangeSelectorWPFButton】

选择已存在区间的所有值，作为区间的最小值和最大值，并组成区间

区间Param会自动创建到画布中央



【NamedViewSwitchButton】

切换状态，默认开启

开启时，如果当前Grasshopper文档已经有Named View，按下CTRL+ +/ -键，进行Named View的循环切换

如果没有创建Named View，按键后会进行提示


【JumpToAffectedComponentButton】

选择Event（点选），按钮会变亮，点击按钮跳转至被HIDE/LOCK的组件

选择被Event组件HIDE/LOCK的组件（点选），按钮会变亮，点击按钮跳转至对应Event组件


【MotionSliderSettingsButton】

点击按钮后，变为开启状态。此时会在Motion Slider的左侧显示时间
时间取决于每秒帧数。可以右键点击按钮，修改每秒帧数。显示的时间会根据帧数做出相应变化。

