如果有一条线添加到Graphicspath并且定义了两个端点,是否可以读取这对点?
Point[] myArray =
{
new Point(30,30),
new Point(60,60),
};
GraphicsPath myPath2 = new GraphicsPath();
myPath2.AddLines(myArray2);
来自myPath2的是否有类似于myPath2.Location
的东西可以给我积分(30,30)和(60,60)?
感谢
答案 0 :(得分:3)
是的,可以通过GraphicsPath.PathPoints
进行,但您需要了解GraphicsPath.PathTypes
的第二个数组!
只有将所有点添加为行坐标的简单点数组时,可能是这样的:
List<Point> points = new List<Point>();
.. // add some points!
GraphicsPath gp = new GraphicsPath();
gp.AddLines(points.ToArray());
你可以毫不费力地使用/修改积分。
如果您通过圆角形状添加它们,例如..
gp.AddEllipse(ClientRectangle);
..你需要了解各种类型!将它们添加为其他曲线gp.AddCurves(points.ToArray());
如果您将它们添加为gp.AddRectangle(ClientRectangle);
,您将获得常规点,但字节类型为
0 - 表示该点是图形的开头。
所以在你的情况下,你会得到这样的第一点:
Console.WriteLine(gp.PathPoints[1].ToString());
顺便说一句:没有GraphicsPath.Location
这样的东西;但你可能会发现GraphicsPath.GetBounds()
有用..
请注意,所有圆形形状(包括弧形和椭圆形!)实际上只包含贝塞尔点:
3 - 表示该点是a的端点或控制点 立方Bézier样条
表示PathPoints
是交替端点和控制点。
答案 1 :(得分:0)
Somethimes,矩阵无法绘制正确的点,因此...,在少量路径中,这很有用,在此示例中,您可以:读取,修改和比较点和点类型,重写路径或创建一个新的..等..
PointF[] changedPoints = Refpath.PathData.Points;
byte[] pointTypes = Refpath.PathData.Types;
List<PointF> OriginalPoints = new List<PointF>();
PointF currentPoint = new Point();
int MyCoffe = 0;
Refpath.PathPoints
.ToList()
.ForEach(
i =>
{
currentPoint = new PointF
{
X = i.X,
Y = i.Y
};
OriginalPoints.Add(currentPoint);
if (pointTypes[MyCoffe]==3)
{
// it's a curve, see the "TaW" explantion, do something, like add text caption, etc...
changedPoints[MyCoffe].X -= 100;
changedPoints[MyCoffe].Y -= 100;
// etc...
}
changedPoints[MyCoffe].X += 100; // if you want to change value
changedPoints[MyCoffe].Y += 100;
MyCoffe ++;
}
);
GraphicsPath newPath = new GraphicsPath(changedPoints, pointTypes);