NotImplementedException из конструктора CustomLineCap .NET - PullRequest
2 голосов
/ 03 августа 2010

Я хочу нарисовать произвольную линию колпачка - равносторонний треугольник с радиусом r.Видимо, я не могу:

  Dim triangleSide As Single = CSng(3 * r / Math.Sqrt(3))
  Dim triangleHeight As Single = CSng(3 * r / 2)
  path = New GraphicsPath()
  Dim points() As PointF = New PointF() { _ 
      New PointF(-triangleSide / 2, 0), _ 
      New PointF(triangleSide / 2, 0), _
      New PointF(0, triangleHeight) }
  path.AddLines(points)

  ' Not Implemented Exception, Was is Das? '
  _HlpCap = New CustomLineCap(path, Nothing) 

Что-то не так, или это просто ошибка фреймворка?

РЕДАКТИРОВАТЬ:

После замечания Марка Сидаде я пытался использовать (Nothing, path) и это помогло, но мне нужно заполнить треугольник, а не только погладить его ...

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Очевидно, что путь не может пересекать ось X. Я использовал этот код для создания стрелки:

  GraphicsPath capPath = new GraphicsPath();
  float arrowSize = 2.0f;
  capPath.AddLines(new PointF[] {
    new PointF(arrowSize, -(float)Math.Sqrt(3.0) * arrowSize),
    new PointF(0.0f, -0.01f),
    new PointF(-arrowSize, -(float)Math.Sqrt(3.0) * arrowSize)
  });

  CustomLineCap arrowCap = new CustomLineCap(capPath, null, LineCap.NoAnchor, (float)Math.Sqrt(3.0) * arrowSize);
1 голос
/ 03 августа 2010

Исключение составляет библиотека GDI +, которая возвращает статус NotImplemented из своей функции GdipCreateCustomLineCap().Попробуйте передать путь обводки вместо Nothing:

  Dim path2 As GraphicsPath = New GraphicsPath()
  path2.AddLines(points);
  _HlpCap = New CustomLineCap(path, path2) 
...