我的名字是 Bart,这是我第一次实际发布问题,而不是在这里找到解决方案。
我目前正在为 Rhino 开发一个非常简单的插件。
它应该做什么:
您选择一个结构化的点网格。该插件根据 X 位置对点进行分组,然后通过这些点插入一条 NURB 曲线。
目前这是我的代码:
var go = new Rhino.Input.Custom.GetObject();
go.SetCommandPrompt("Select All Points");
go.GeometryFilter = Rhino.DocObjects.ObjectType.Point;
go.GetMultiple(2,0);
if (go.CommandResult() != Rhino.Commands.Result.Success)
return go.CommandResult();
var o = go.Objects().Select(objRef => objRef.Point()).GroupBy(p => Math.Round (p.Location.X, 2)).ToList();
Rhino.Commands.Result rc = Rhino.Commands.Result.Success;
foreach (var ylist in o)
{
var sortedList = ylist.OrderBy(p => p.Location.Y);
Rhino.Collections.Point3dList points = new Rhino.Collections.Point3dList();
foreach (var point in sortedList)
{
Rhino.RhinoApp.WriteLine("Coordinates are: {0}, {1}, {2}", point.Location.X, point.Location.Y, point.Location.Z);
points.Add(point.Location.X, point.Location.Y, point.Location.Z);
}
//Rhino.Geometry.NurbsCurve nc = Rhino.Geometry.NurbsCurve.Create(false, 3, points);
Rhino.Geometry.Curve nc = Rhino.Geometry.Curve.CreateInterpolatedCurve(points, 3, CurveKnotStyle.Uniform);
if (nc != null && nc.IsValid)
{
if (doc.Objects.AddCurve(nc) != Guid.Empty)
{
doc.Views.Redraw();
}
else
{
rc = Rhino.Commands.Result.Failure;
}
}
}
return rc;
return Result.Success;
}
如您所见,我尝试了两种方法来生成 NURB 曲线(其中一种被注释掉了)。但是,两者都没有预期的结果。我想通过点拟合曲线(类似于 Rhino 中的 _CurveThroughPt 函数)并且不使用这些点作为控制点。
有人可以给我一个解决方案或方向吗?我在 stackoverflow 上看到了一个旧问题和解决方案,但那是从 2009 年和 VB 开始的(并且该功能显然不再存在)。将不胜感激!!!
最好的问候,巴特