2014-09-13 444 views
0

我想实现一个Rhino插件来提取NURB曲线控制点的位置属性。如果您绘制曲线或像Sphere一样的实体形状,则可以使用这种方法。你有一些点画,你也有一些控制点。如何从犀牛NURB文件中提取曲线控制点

更多地了解NURB广告控制点,你可以阅读本link

+0

你是什么意思的“犀牛插件?”你指的是在Java虚拟机上运行的Rhino JavaScript引擎吗? – 2014-09-14 13:59:57

+0

不,Rhino是3D设计应用程序,如果您检查链接,您会看到 – Mohammad 2014-09-15 04:29:11

+0

确定。我添加了一个编辑来删除“rhino”标签,因为该标签意味着Stack Overflow中的其他内容。 (我对这个犀牛一无所知,所以我很抱歉地说我不能帮你。)你可能想尝试找到更具体的标签; “插件”将不太可能提供帮助。 – 2014-09-15 11:54:21

回答

0

在VS 2012,您应该安装新组件犀牛。那么您可以像这样检索NURBS属性:

Surface sr = obj_ref.Surface(); 
if (null == sr) 
    return Result.Failure; 

NurbsSurface ns = sr.ToNurbsSurface(); 
if (null == ns) 
    return Result.Failure; 


foreach (var point in ns.Points) 
{ 
    doc.Objects.AddPoint(point.Location); 
} 

foreach (var knot in ns.KnotsU) 
{ 
    // do anything by KnotsU 
} 


foreach (var knot in ns.KnotsV) 
{ 
    // do anything by KnotsV 
} 

doc.Views.Redraw(); 
1

此Python代码提取选定曲线的控制点并将曲线名称关联到提取的控制点。

import rhinoscriptsyntax as rs 
from System.Drawing import Color 
import Rhino as Rh 
#Collecting the curves 
obj = rs.GetObjects("Select curves",4) 
#adding a Layer as a parent layer 
rs.AddLayer("Knots") 
for curve in obj: 
    if rs.IsCurve(curve): 
#Creating new layers from objects name 
      LayerName = rs.ObjectName(curve) 
      rs.AddLayer(LayerName,Color.Aqua,True,False,"Knots") 
      points = rs.CurvePoints(curve) 
      if points: 
       for pt in points: 
        CtrlPoint = rs.AddPoint(pt) 
        rs.ObjectLayer(CtrlPoint,LayerName) 
        rs.ObjectName(CtrlPoint,rs.ObjectName(curve))