_CurveThroughPt rhino3d SDK (C# )

本文关键字:SDK CurveThroughPt rhino3d | 更新日期: 2023-09-27 18:32:55

我的名字是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的(该功能显然不再存在)。将不胜感激!!

此致敬意巴特

_CurveThroughPt rhino3d SDK (C# )

显然,在调试过程中出了点问题,新代码没有加载到 Rhino 中。

事实上,CreateInterpolatedCurve给出的结果与Rhino中的_CurveThroughPt函数相同。

此致敬意巴特