沿指定方向把一个点投影到多种目标几何体;正向完全没有命中时自动反向查找,并返回最近命中点及其目标索引。
功能概览
该组件适合解决“目标可能位于点的任意一侧,但仍希望使用同一个方向向量完成查找”的投影任务。它先沿输入方向检查全部目标,找到正向命中时只在这些结果中选择距离输入点最近的一项;只有正向对全部目标都没有结果,才整体改用反方向重试。输出索引保持目标在“几何体”输入列表中的原始位置,因此可以用同一个索引从并行的名称、编号、材质或构件信息列表中取回对应数据。
可作为目标的对象包括平面、直线、圆、圆弧、曲线、盒体、曲面、Brep 和网格,以及能够转换为曲线、Brep 或网格的其他几何数据。无法识别的类型会产生警告,不会被当作有效障碍物。
适用场景
- 从一个检测点寻找指定轴向上最近的板面、外壳或网格交点。
- 目标可能分布在方向向量两侧,但正向目标应始终优先于反向目标。
- 投影到多种混合几何体后,用目标索引同步查询构件编号或其他并行数据。
- 以默认向下方向把单个点投向模型;向下无目标时再检查上方对象。
工作流程
- 准备一个有效输入点,并整理目标几何体列表;需要保留身份信息时,让并行信息列表与目标列表使用相同顺序。
- 连接投影方向;不连接时使用向下的世界 Z 轴反方向。
- 组件先沿该方向检查所有有效目标,并在正向命中中选择距离输入点最近的一项。
- 如果正向对全部目标都没有命中,组件才沿完全相反的方向重复检查。
- 将输出点用于定位、测距或后续建模,并用输出索引读取对应目标的数据。
输入
| 端口 | 是否必需 | 数据与结构 | 默认、匹配与误接说明 |
|---|---|---|---|
| 点(P) | 必需 | 单个有效三维点;每次求解处理一项。 | 没有点或点无效时不产生有效结果。若要处理多个点,应由 Grasshopper 的数据匹配形成多次求解,而不是把点列表误接成单项。 |
| 方向(D) | 可选 | 单个非零向量,表示优先投影方向。 | 未连接时采用 −Z。向量长度不影响方向判断;零长度向量会报错。反向并非同时搜索,而是正向完全失败后的回退。 |
| 几何体(G) | 必需 | 目标列表,支持平面、直线、圆、圆弧、曲线、盒体、曲面、Brep、网格及可转换几何。 | 列表顺序决定输出索引。空项被跳过但仍保留其原始位置意义;至少要有一个有效目标。无法识别的类型会警告,目标列表不会与点逐项配对,而是共同参与本次最近命中查找。 |
输出
| 端口 | 结果与结构 | 典型下游 |
|---|---|---|
| 点(P) | 单个最近命中点。正向有结果时来自正向;正向全部失败时才可能来自反向。两侧都未命中时为空。 | 距离测量、点定位、构造平面、曲线分割、几何生成或可视化标记。 |
| 索引(I) | 单个整数,表示命中目标在原始几何体列表中的位置;未命中时为 −1。 | 列表取项、同步读取构件名称、编号、属性、颜色或其他与目标顺序一致的数据。 |
实际示例
假设输入点位于原点,方向设为世界 X 轴正方向。目标列表依次包含位于 X=8 的平面、位于 X=3 的盒体以及位于 X=−1 的网格。组件在正方向同时命中前两项,并选择距离为 3 的盒体交点;输出索引为 1。尽管反向网格距离输入点只有 1,它不会胜出,因为正向已经存在命中。如果移除或移动两个正向目标,使正向完全没有交点,组件才反向查找,随后输出网格上的交点和索引 2。这一结果可直接驱动“列表取项”,从与目标列表平行的构件编号列表中取得该网格对应的编号。
配合使用
- 上游可用点参数、曲线评价或几何分析结果提供检测点;方向可来自单位向量、直线方向或局部坐标轴。
- 将“点”输出连接到距离、移动、分割或标记组件,检查投影后的空间位置。
- 将“索引”输出连接到列表取项,并把目标名称、编号或属性列表接入同一列表取项组件。
- 若需要对每个目标分别保留所有交点,本组件的“只取方向优先的最近命中”规则并不适用,应改用能够输出全部交点的相交工具。
常见问题与限制
- 为什么更近的反向目标没有被选中?
- 正向优先级高于距离。只要正向存在任何命中,组件就不会检查或比较反向结果。
- 为什么输出点为空且索引为 −1?
- 正反两个方向都没有与有效目标相交,或目标列表没有可用几何体。检查方向、目标范围以及输入点是否位于可达射线上。
- 为什么出现不支持类型的警告?
- 该项既不是已支持的目标类型,也不能转换为曲线、Brep 或网格。警告项会被跳过,其他有效目标仍可参与查找。
- 索引为什么看起来有空档?
- 索引对应原始输入列表位置。列表中的空项会被跳过,但后续有效目标不会重新编号。
- 能否使用零向量表示不限定方向?
- 不能。该组件必须建立明确的优先方向,零长度方向会直接报错。