0

示例“ObjectManipulator”包含一个名为“DrawingHelperSnapping”的类。那里展示了我如何使用捕捉线绘制叠加层。

我在我的代码中实现了这一点,它工作正常。因为当我将选定的框转换为选定的捕捉线时,它不会起作用。

    private void FindClosestEdge(Point2D mousePos, IList edges, IList vertices, ref double minDist, ref Segment2D nearestEdge)
    {
        if (edges == null)
        {
            return;
        }

        foreach (IndexLine edge in edges)
        {
            var pt1 = (Point3D)vertices[edge.V1];
            var pt2 = (Point3D)vertices[edge.V2];

            var p2d1 = WorldToScreen(pt1);
            var p2d2 = WorldToScreen(pt2);

            var seg = new Segment2D(p2d1, p2d2);
            var t = seg.ClosestPointTo(mousePos);

            if (t >= 0 && t <= 1)
            {
                var dist = Point2D.Distance(mousePos, seg.PointAt(t));

                if (dist < minDist)
                {
                    minDist = dist;
                    nearestEdge = seg;

                    // when i take pt1
                    SnapPosition = pt1;
                }
            }
        }
    }

当我使用 pt1 时,它可以将框设置在右侧

在此处输入图像描述

当我从蓝色盒子中取出上边时,它设置在右上角而不是左上角,所有其他边它也不起作用信息:我只将 3d 显示为 2d 视图,并且只有盒子

在此处输入图像描述

任何建议或帮助示例 thx

4

0 回答 0