コード例 #1
0
        bool GetArrowHead(On2dVector dir, On2dPoint tip, double scale, ref On3dPointArray triangle)
        {
            double arrow_size = m_default_arrow_size * scale;

            On2dPointArray corners = new On2dPointArray();

            corners.Reserve(3);
            corners.SetCount(3);

            On2dVector up = new On2dVector(-dir.y, dir.x);

            corners[0].Set(tip.x, tip.y);
            corners[1].x = tip.x + arrow_size * (0.25 * up.x - dir.x);
            corners[1].y = tip.y + arrow_size * (0.25 * up.y - dir.y);
            corners[2].x = corners[1].x - 0.5 * arrow_size * up.x;
            corners[2].y = corners[1].y - 0.5 * arrow_size * up.y;

            triangle.Reserve(corners.Count());
            triangle.SetCount(corners.Count());

            for (int i = 0; i < corners.Count(); i++)
            {
                triangle[i] = m_plane.PointAt(corners[i].x, corners[i].y);
            }

            return(true);
        }
コード例 #2
0
        bool GetArrowHead(On2dVector dir, On2dPoint tip, double scale, ref On3dPointArray triangle)
        {
            double arrow_size = m_default_arrow_size * scale;

              On2dPointArray corners = new On2dPointArray();
              corners.Reserve(3);
              corners.SetCount(3);

              On2dVector up = new On2dVector(-dir.y, dir.x);
              corners[0].Set(tip.x, tip.y);
              corners[1].x = tip.x + arrow_size * (0.25 * up.x - dir.x);
              corners[1].y = tip.y + arrow_size * (0.25 * up.y - dir.y);
              corners[2].x = corners[1].x - 0.5 * arrow_size * up.x;
              corners[2].y = corners[1].y - 0.5 * arrow_size * up.y;

              triangle.Reserve(corners.Count());
              triangle.SetCount(corners.Count());

              for (int i = 0; i < corners.Count(); i++)
            triangle[i] = m_plane.PointAt(corners[i].x, corners[i].y);

              return true;
        }