如何提取ONCURVE、ONSURFACE类型点的XYZ坐标并修改点位置
点坐标读取与位置调整实现方案
坐标提取逻辑
三类点的取值逻辑如下:
- 坐标定义类型点:直接读取点内置的X/Y/Z属性值,填入用户窗体对应的三个文本框即可,以RhinoCommon API为例,取值代码为
double x = pointObj.Location.X,Y、Z取值逻辑相同。 - ONCURVE类型点:这类点绑定在曲线上,本身仅存储所属曲线引用和曲线参数t,无直接存储的固定坐标。你需要先获取点绑定的曲线实例,调用曲线的
PointAt(t)方法计算得到当前的三维坐标值,再写入文本框。 - ONSURFACE类型点:这类点绑定在曲面上,本身仅存储所属曲面引用和曲面UV参数,无直接存储的固定坐标。你需要先获取点绑定的曲面实例,调用曲面的
PointAt(u, v)方法计算得到实时三维坐标值,再写入文本框。
坐标修改调整点位置逻辑
给用户窗体的三个坐标文本框添加值变更监听事件,触发时按点类型做对应处理:
- 坐标定义类型点:将三个文本框输入的数值转换为浮点类型,构造新的三维坐标对象直接替换点的原有坐标属性,即可完成位置更新。
- ONCURVE类型点:将用户输入的新坐标转为目标三维点,调用绑定曲线的
ClosestPoint()方法,计算出曲线上离目标点最近位置对应的参数t,替换点的原有t参数即可。调整后的点会始终保持在所属曲线上,不会脱离曲线约束。 - ONSURFACE类型点:将用户输入的新坐标转为目标三维点,调用绑定曲面的
ClosestPoint()方法,计算出曲面上离目标点最近位置对应的UV参数,替换点的原有UV参数即可。调整后的点会始终保持在所属曲面上,不会脱离曲面约束。
内容的提问来源于stack exchange,提问作者user228502
相关产品推荐
相关产品推荐

