本文整理汇总了C#中SVGGraphicsPath.AddLineTo方法的典型用法代码示例。如果您正苦于以下问题:C# SVGGraphicsPath.AddLineTo方法的具体用法?C# SVGGraphicsPath.AddLineTo怎么用?C# SVGGraphicsPath.AddLineTo使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SVGGraphicsPath
的用法示例。
在下文中一共展示了SVGGraphicsPath.AddLineTo方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ArcTo
//.........这里部分代码省略.........
float _angle = (uy < 0) ? -(float) Math.Acos(tp/n) : (float) Math.Acos(tp/n);
_angle = _angle*180.0f/Mathf.PI;
_angle %= 360f;
n = (float) Math.Sqrt((ux*ux + uy*uy)*(vx*vx + vy*vy));
tp = ux*vx + uy*vy;
float _delta = (ux*vy - uy*vx < 0) ? -(float) Math.Acos(tp/n) : (float) Math.Acos(tp/n);
_delta = _delta*180.0f/Mathf.PI;
if (!sweepFlag && _delta > 0)
{
_delta -= 360f;
}
else if (sweepFlag && _delta < 0)
_delta += 360f;
_delta %= 360f;
int number = 50;
float deltaT = _delta/number;
//---Get Control Point
Vector2 _controlPoint1 = Vector2.zero;
Vector2 _controlPoint2 = Vector2.zero;
for (int i = 0; i <= number; i++)
{
float t_angle = (deltaT*i + _angle)*Mathf.PI/180.0f;
_controlPoint1.x = _CosRadian*rx*(float) Math.Cos(t_angle) - _SinRadian*ry*(float) Math.Sin(t_angle) + cx;
_controlPoint1.y = _SinRadian*rx*(float) Math.Cos(t_angle) + _CosRadian*ry*(float) Math.Sin(t_angle) + cy;
if ((_controlPoint1.x != p1.x) && (_controlPoint1.y != p1.y))
{
i = number + 1;
}
}
for (int i = number; i >= 0; i--)
{
float t_angle = (deltaT*i + _angle)*Mathf.PI/180.0f;
_controlPoint2.x = _CosRadian*rx*(float) Math.Cos(t_angle) - _SinRadian*ry*(float) Math.Sin(t_angle) + cx;
_controlPoint2.y = _SinRadian*rx*(float) Math.Cos(t_angle) + _CosRadian*ry*(float) Math.Sin(t_angle) + cy;
if ((_controlPoint2.x != p2.x) && (_controlPoint2.y != p2.y))
{
i = -1;
}
}
//-----
Vector2 _p1 = Vector2.zero;
Vector2 _p2 = Vector2.zero;
Vector2 _p3 = Vector2.zero;
Vector2 _p4 = Vector2.zero;
_graphics.GetThickLine(p1, _controlPoint1, width, ref _p1, ref _p2, ref _p3, ref _p4);
Vector2 _p5 = Vector2.zero;
Vector2 _p6 = Vector2.zero;
Vector2 _p7 = Vector2.zero;
Vector2 _p8 = Vector2.zero;
_graphics.GetThickLine(_controlPoint2, p2, width, ref _p5, ref _p6, ref _p7, ref _p8);
float _half = width/2f;
float _ihalf1 = _half;
float _ihalf2 = width - _ihalf1 + 0.5f;
//-----
float t_len1 = (_p1.x - cx)*(_p1.x - cx) + (_p1.y - cy)*(_p1.y - cy);
float t_len2 = (_p2.x - cx)*(_p2.x - cx) + (_p2.y - cy)*(_p2.y - cy);
Vector2 tempPoint;
if (t_len1 > t_len2)
{
tempPoint = _p1;
_p1 = _p2;
_p2 = tempPoint;
}
t_len1 = (_p7.x - cx)*(_p7.x - cx) + (_p7.y - cy)*(_p7.y - cy);
t_len2 = (_p8.x - cx)*(_p8.x - cx) + (_p8.y - cy)*(_p8.y - cy);
if (t_len1 > t_len2)
{
tempPoint = _p7;
_p7 = _p8;
_p8 = tempPoint;
}
Profiler.BeginSample("SVGGraphicsStroke.ArcTo[CreateGraphicsPath]");
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddArcTo(r1 + _ihalf1, r2 + _ihalf1, angle, largeArcFlag, sweepFlag, _p8);
_graphicsPath.AddLineTo(_p7);
_graphicsPath.AddArcTo(r1 - _ihalf2, r2 - _ihalf2, angle, largeArcFlag, !sweepFlag, _p1);
_graphicsPath.AddLineTo(_p2);
Profiler.EndSample();
Profiler.BeginSample("SVGGraphicsStroke.ArcTo[FillPath]");
_graphics.FillPath(_graphicsPath);
Profiler.EndSample();
MoveTo(p);
Profiler.EndSample();
}
示例2: RoundedRect
//-----
public void RoundedRect(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 p5, Vector2 p6, Vector2 p7, Vector2 p8,
float r1, float r2,
float angle, float width)
{
if ((int) width == 1)
{
RoundedRect(p1, p2, p3, p4, p5, p6, p7, p8, r1, r2,
angle);
return;
}
Line(p1, p2, width);
Line(p3, p4, width);
Line(p5, p6, width);
Line(p7, p8, width);
Vector2 _p1 = Vector2.zero;
Vector2 _p2 = Vector2.zero;
Vector2 _p3 = Vector2.zero;
Vector2 _p4 = Vector2.zero;
_graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
Vector2 _p5 = Vector2.zero;
Vector2 _p6 = Vector2.zero;
Vector2 _p7 = Vector2.zero;
Vector2 _p8 = Vector2.zero;
//-------
_graphics.GetThickLine(p3, p4, width, ref _p5, ref _p6, ref _p7, ref _p8);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width/2f), r2 + (width/2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width/2f), r2 - (width/2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
_graphics.FillPath(_graphicsPath);
//-------
_graphics.GetThickLine(p5, p6, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width/2f), r2 + (width/2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width/2f), r2 - (width/2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
_graphics.FillPath(_graphicsPath);
//----------
_graphics.GetThickLine(p7, p8, width, ref _p5, ref _p6, ref _p7, ref _p8);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width/2f), r2 + (width/2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width/2f), r2 - (width/2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
_graphics.FillPath(_graphicsPath);
//-------
_graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width/2f), r2 + (width/2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width/2f), r2 - (width/2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
_graphics.FillPath(_graphicsPath);
}
示例3: CubicCurveTo
//-----
public void CubicCurveTo(Vector2 p1, Vector2 p2, Vector2 p, float width)
{
Vector2 _point = Vector2.zero;
_point = _basicDraw.currentPoint;
Vector2 _p1 = Vector2.zero;
Vector2 _p2 = Vector2.zero;
Vector2 _p3 = Vector2.zero;
Vector2 _p4 = Vector2.zero;
bool temp;
temp = _graphics.GetThickLine(_point, p1, width, ref _p1, ref _p2, ref _p3, ref _p4);
if (temp == false)
{
QuadraticCurveTo(p2, p, width);
return;
}
Vector2 _p5 = Vector2.zero;
Vector2 _p6 = Vector2.zero;
Vector2 _p7 = Vector2.zero;
Vector2 _p8 = Vector2.zero;
_graphics.GetThickLine(p1, p2, width, ref _p5, ref _p6, ref _p7, ref _p8);
Vector2 _p9 = Vector2.zero;
Vector2 _p10 = Vector2.zero;
Vector2 _p11 = Vector2.zero;
Vector2 _p12 = Vector2.zero;
_graphics.GetThickLine(p2, p, width, ref _p9, ref _p10, ref _p11, ref _p12);
Vector2 _cp1, _cp2, _cp3, _cp4;
_cp1 = _graphics.GetCrossPoint(_p1, _p3, _p5, _p7);
_cp2 = _graphics.GetCrossPoint(_p2, _p4, _p6, _p8);
_cp3 = _graphics.GetCrossPoint(_p5, _p7, _p9, _p11);
_cp4 = _graphics.GetCrossPoint(_p6, _p8, _p10, _p12);
_basicDraw.MoveTo(_point);
_basicDraw.CubicCurveTo(p1, p2, p);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddCubicCurveTo(_cp2, _cp4, _p12);
_graphicsPath.AddLineTo(_p11);
_graphicsPath.AddCubicCurveTo(_cp3, _cp1, _p1);
_graphicsPath.AddLineTo(_p2);
_graphics.FillPath(_graphicsPath);
MoveTo(p);
}
示例4: QuadraticCurveTo
//-----
public void QuadraticCurveTo(Vector2 p1, Vector2 p, float width)
{
Vector2 _point = Vector2.zero;
_point = _basicDraw.currentPoint;
Vector2 _p1 = Vector2.zero;
Vector2 _p2 = Vector2.zero;
Vector2 _p3 = Vector2.zero;
Vector2 _p4 = Vector2.zero;
_graphics.GetThickLine(_point, p1, width, ref _p1, ref _p2, ref _p3, ref _p4);
Vector2 _p5 = Vector2.zero;
Vector2 _p6 = Vector2.zero;
Vector2 _p7 = Vector2.zero;
Vector2 _p8 = Vector2.zero;
_graphics.GetThickLine(p1, p, width, ref _p5, ref _p6, ref _p7, ref _p8);
Vector2 _cp1, _cp2;
_cp1 = _graphics.GetCrossPoint(_p1, _p3, _p5, _p7);
_cp2 = _graphics.GetCrossPoint(_p2, _p4, _p6, _p8);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddQuadraticCurveTo(_cp2, _p8);
_graphicsPath.AddLineTo(_p7);
_graphicsPath.AddQuadraticCurveTo(_cp1, _p1);
_graphicsPath.AddLineTo(_p2);
_graphics.FillPath(_graphicsPath);
MoveTo(p);
}
示例5: Render
//--------------------------------------------------------------------------------
//Method: Render
//--------------------------------------------------------------------------------
public void Render(SVGGraphicsPath _graphicsPath)
{
Vector2 p;
p = currentPoint;
_graphicsPath.AddLineTo(p);
}
示例6: Render
public void Render(SVGGraphicsPath _graphicsPath)
{
_graphicsPath.AddLineTo(currentPoint);
}
示例7: RoundedRect
//-----
public void RoundedRect(SVGPoint p1, SVGPoint p2, SVGPoint p3, SVGPoint p4, SVGPoint p5, SVGPoint p6, SVGPoint p7, SVGPoint p8, float r1, float r2,
float angle, float width)
{
if((int)width == 1) {
RoundedRect(p1, p2, p3, p4, p5, p6, p7, p8, r1, r2,
angle);
return;
}
Line(p1, p2, width);
Line(p3, p4, width);
Line(p5, p6, width);
Line(p7, p8, width);
SVGPoint _p1 = new SVGPoint(0f, 0f);
SVGPoint _p2 = new SVGPoint(0f, 0f);
SVGPoint _p3 = new SVGPoint(0f, 0f);
SVGPoint _p4 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
SVGPoint _p5 = new SVGPoint(0f, 0f);
SVGPoint _p6 = new SVGPoint(0f, 0f);
SVGPoint _p7 = new SVGPoint(0f, 0f);
SVGPoint _p8 = new SVGPoint(0f, 0f);
//-------
this._graphics.GetThickLine(p3, p4, width, ref _p5, ref _p6, ref _p7, ref _p8);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
this._graphics.FillPath(_graphicsPath);
//-------
this._graphics.GetThickLine(p5, p6, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
this._graphics.FillPath(_graphicsPath);
//----------
this._graphics.GetThickLine(p7, p8, width, ref _p5, ref _p6, ref _p7, ref _p8);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
this._graphics.FillPath(_graphicsPath);
//-------
this._graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
this._graphics.FillPath(_graphicsPath);
}
示例8: QuadraticCurveTo
//-----
public void QuadraticCurveTo(SVGPoint p1, SVGPoint p, float width)
{
SVGPoint _point = new SVGPoint(0f, 0f);
_point.SetValue(this._basicDraw.currentPoint);
SVGPoint _p1 = new SVGPoint(0f, 0f);
SVGPoint _p2 = new SVGPoint(0f, 0f);
SVGPoint _p3 = new SVGPoint(0f, 0f);
SVGPoint _p4 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(_point, p1, width, ref _p1, ref _p2, ref _p3, ref _p4);
SVGPoint _p5 = new SVGPoint(0f, 0f);
SVGPoint _p6 = new SVGPoint(0f, 0f);
SVGPoint _p7 = new SVGPoint(0f, 0f);
SVGPoint _p8 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(p1, p, width, ref _p5, ref _p6, ref _p7, ref _p8);
SVGPoint _cp1, _cp2;
_cp1 = this._graphics.GetCrossPoint(_p1, _p3, _p5, _p7);
_cp2 = this._graphics.GetCrossPoint(_p2, _p4, _p6, _p8);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddQuadraticCurveTo(_cp2, _p8);
_graphicsPath.AddLineTo(_p7);
_graphicsPath.AddQuadraticCurveTo(_cp1, _p1);
_graphicsPath.AddLineTo(_p2);
this._graphics.FillPath(_graphicsPath);
MoveTo(p);
}
示例9: ArcTo
//.........这里部分代码省略.........
float ux = (tx - tcx) / rx;
float uy = (ty - tcy) / ry;
float vx = (-tx - tcx) / rx;
float vy = (-ty - tcy) / ry;
float _angle, _delta;
float tp, n;
n = (float)Math.Sqrt((ux * ux) + (uy * uy));
tp = ux;
_angle = (uy < 0) ? -(float)Math.Acos(tp / n) : (float)Math.Acos(tp / n);
_angle = _angle * 180.0f / Mathf.PI;
_angle %= 360f;
n = (float)Math.Sqrt((ux * ux + uy * uy) * (vx * vx + vy * vy));
tp = ux * vx + uy * vy;
_delta = (ux * vy - uy * vx < 0) ? -(float)Math.Acos(tp / n) : (float)Math.Acos(tp / n);
_delta = _delta * 180.0f / Mathf.PI;
if(!sweepFlag && _delta > 0) {
_delta -= 360f;
} else if(sweepFlag && _delta < 0)
_delta += 360f;
_delta %= 360f;
int number = 50;
float deltaT = _delta / number;
//---Get Control Point
SVGPoint _controlPoint1 = new SVGPoint(0f, 0f);
SVGPoint _controlPoint2 = new SVGPoint(0f, 0f);
for(int i = 0; i <= number; i++) {
float t_angle = (deltaT * i + _angle) * Mathf.PI / 180.0f;
_controlPoint1.x = _CosRadian * rx * (float)Math.Cos(t_angle) - _SinRadian * ry * (float)Math.Sin(t_angle) + cx;
_controlPoint1.y = _SinRadian * rx * (float)Math.Cos(t_angle) + _CosRadian * ry * (float)Math.Sin(t_angle) + cy;
if((_controlPoint1.x != p1.x) && (_controlPoint1.y != p1.y)) {
i = number + 1;
}
}
for(int i = number; i >= 0; i--) {
float t_angle = (deltaT * i + _angle) * Mathf.PI / 180.0f;
_controlPoint2.x = _CosRadian * rx * (float)Math.Cos(t_angle) - _SinRadian * ry * (float)Math.Sin(t_angle) + cx;
_controlPoint2.y = _SinRadian * rx * (float)Math.Cos(t_angle) + _CosRadian * ry * (float)Math.Sin(t_angle) + cy;
if((_controlPoint2.x != p2.x) && (_controlPoint2.y != p2.y)) {
i = -1;
}
}
//-----
SVGPoint _p1 = new SVGPoint(0f, 0f);
SVGPoint _p2 = new SVGPoint(0f, 0f);
SVGPoint _p3 = new SVGPoint(0f, 0f);
SVGPoint _p4 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(p1, _controlPoint1, width, ref _p1, ref _p2, ref _p3, ref _p4);
SVGPoint _p5 = new SVGPoint(0f, 0f);
SVGPoint _p6 = new SVGPoint(0f, 0f);
SVGPoint _p7 = new SVGPoint(0f, 0f);
SVGPoint _p8 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(_controlPoint2, p2, width, ref _p5, ref _p6, ref _p7, ref _p8);
float _half, _ihalf1, _ihalf2;
_half = width / 2f;
_ihalf1 = _half;
_ihalf2 = width - _ihalf1 + 0.5f;
//-----
float t_len1, t_len2;
t_len1 = (_p1.x - cx) * (_p1.x - cx) + (_p1.y - cy) * (_p1.y - cy);
t_len2 = (_p2.x - cx) * (_p2.x - cx) + (_p2.y - cy) * (_p2.y - cy);
SVGPoint tempPoint = new SVGPoint(0f, 0f);
if(t_len1 > t_len2) {
tempPoint.SetValue(_p1);
_p1.SetValue(_p2);
_p2.SetValue(tempPoint);
}
t_len1 = (_p7.x - cx) * (_p7.x - cx) + (_p7.y - cy) * (_p7.y - cy);
t_len2 = (_p8.x - cx) * (_p8.x - cx) + (_p8.y - cy) * (_p8.y - cy);
if(t_len1 > t_len2) {
tempPoint.SetValue(_p7);
_p7.SetValue(_p8);
_p8.SetValue(tempPoint);
}
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddArcTo(r1 + _ihalf1, r2 + _ihalf1, angle, largeArcFlag, sweepFlag, _p8);
_graphicsPath.AddLineTo(_p7);
_graphicsPath.AddArcTo(r1 - _ihalf2, r2 - _ihalf2, angle, largeArcFlag, !sweepFlag, _p1);
_graphicsPath.AddLineTo(_p2);
this._graphics.FillPath(_graphicsPath);
MoveTo(p);
}
示例10: CubicCurveTo
//-----
public void CubicCurveTo(SVGPoint p1, SVGPoint p2, SVGPoint p, float width)
{
SVGPoint _point = new SVGPoint(0f, 0f);
_point.SetValue(this._basicDraw.currentPoint);
SVGPoint _p1 = new SVGPoint(0f, 0f);
SVGPoint _p2 = new SVGPoint(0f, 0f);
SVGPoint _p3 = new SVGPoint(0f, 0f);
SVGPoint _p4 = new SVGPoint(0f, 0f);
bool temp;
temp = this._graphics.GetThickLine(_point, p1, width, ref _p1, ref _p2, ref _p3, ref _p4);
if(temp == false) {
QuadraticCurveTo(p2, p, width);
return;
}
SVGPoint _p5 = new SVGPoint(0f, 0f);
SVGPoint _p6 = new SVGPoint(0f, 0f);
SVGPoint _p7 = new SVGPoint(0f, 0f);
SVGPoint _p8 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(p1, p2, width, ref _p5, ref _p6, ref _p7, ref _p8);
SVGPoint _p9 = new SVGPoint(0f, 0f);
SVGPoint _p10 = new SVGPoint(0f, 0f);
SVGPoint _p11 = new SVGPoint(0f, 0f);
SVGPoint _p12 = new SVGPoint(0f, 0f);
this._graphics.GetThickLine(p2, p, width, ref _p9, ref _p10, ref _p11, ref _p12);
SVGPoint _cp1, _cp2, _cp3, _cp4;
_cp1 = this._graphics.GetCrossPoint(_p1, _p3, _p5, _p7);
_cp2 = this._graphics.GetCrossPoint(_p2, _p4, _p6, _p8);
_cp3 = this._graphics.GetCrossPoint(_p5, _p7, _p9, _p11);
_cp4 = this._graphics.GetCrossPoint(_p6, _p8, _p10, _p12);
this._basicDraw.MoveTo(_point);
this._basicDraw.CubicCurveTo(p1, p2, p);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p2);
_graphicsPath.AddCubicCurveTo(_cp2, _cp4, _p12);
_graphicsPath.AddLineTo(_p11);
_graphicsPath.AddCubicCurveTo(_cp3, _cp1, _p1);
_graphicsPath.AddLineTo(_p2);
this._graphics.FillPath(_graphicsPath);
MoveTo(p);
}
示例11: RoundedRect
public void RoundedRect(Vector2 p1, Vector2 p2, Vector2 p3, Vector2 p4, Vector2 p5, Vector2 p6, Vector2 p7, Vector2 p8,
float r1, float r2,
float angle, float width)
{
if((int)width == 1) {
RoundedRect(p1, p2, p3, p4, p5, p6, p7, p8, r1, r2,
angle);
return;
}
Line(p1, p2, width);
Line(p3, p4, width);
Line(p5, p6, width);
Line(p7, p8, width);
// TODO: IIRC, `Vector2.zero` is a p/invoke. Would it be safe to chain assignments here? Would it be more
// TODO: performant? What about just calling `new Vector2(0f, 0f)`?
Vector2 _p1 = Vector2.zero;
Vector2 _p2 = Vector2.zero;
Vector2 _p3 = Vector2.zero;
Vector2 _p4 = Vector2.zero;
_graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
Vector2 _p5 = Vector2.zero;
Vector2 _p6 = Vector2.zero;
Vector2 _p7 = Vector2.zero;
Vector2 _p8 = Vector2.zero;
//-------
_graphics.GetThickLine(p3, p4, width, ref _p5, ref _p6, ref _p7, ref _p8);
SVGGraphicsPath _graphicsPath = new SVGGraphicsPath();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
_graphics.FillPath(_graphicsPath);
//-------
_graphics.GetThickLine(p5, p6, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
_graphics.FillPath(_graphicsPath);
//----------
_graphics.GetThickLine(p7, p8, width, ref _p5, ref _p6, ref _p7, ref _p8);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p4);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p6);
_graphicsPath.AddLineTo(_p5);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p3);
_graphicsPath.AddLineTo(_p4);
_graphics.FillPath(_graphicsPath);
//-------
_graphics.GetThickLine(p1, p2, width, ref _p1, ref _p2, ref _p3, ref _p4);
_graphicsPath.Reset();
_graphicsPath.AddMoveTo(_p8);
_graphicsPath.AddArcTo(r1 + (width / 2f), r2 + (width / 2f), angle, false, true, _p2);
_graphicsPath.AddLineTo(_p1);
_graphicsPath.AddArcTo(r1 - (width / 2f), r2 - (width / 2f), angle, false, false, _p7);
_graphicsPath.AddLineTo(_p8);
_graphics.FillPath(_graphicsPath);
}