Поделиться через


Метод GraphicsPathIterator::NextSubpath(INT*,INT*,BOOL*) (gdipluspath.h)

Метод GraphicsPathIterator::NextSubpath получает начальный и конечный индекс следующего подпути (рисунок) в связанном пути этого итератора.

Синтаксис

INT NextSubpath(
  INT  *startIndex,
  INT  *endIndex,
  BOOL *isClosed
);

Параметры

startIndex

Указатель на int , получающий начальный индекс.

endIndex

Указатель на INT , получающий конечный индекс.

isClosed

Указатель на BOOL , получающий значение, указывающее, закрыта ли полученная фигура. Если рисунок закрыт, полученное значение равно TRUE; В противном случае полученное значение равно FALSE.

Возвращаемое значение

Этот метод возвращает количество точек данных на следующем рисунке. Если в пути больше нет цифр, этот метод возвращает значение 0.

Комментарии

При первом вызове метода GraphicsPathIterator::NextSubpath итератора он получает индексы для первого рисунка (подпуть) связанного пути этого итератора. Во второй раз он получает индексы для второй цифры, и так далее. Каждый раз при вызове GraphicsPathIterator::NextSubpath возвращается количество точек данных на рисунке, индексы которых были получены. Если цифр не осталось, возвращается значение 0.

Примеры

В следующем примере создается объект GraphicsPath и добавляется пять рисунков в путь. Код передает адрес этого объекта GraphicsPath конструктору GraphicsPathIterator для создания итератора, связанного с путем. Код три раза вызывает метод GraphicsPathIterator::NextSubpath итератора, чтобы получить начальный и конечный индекс третьего рисунка пути. Затем код вызывает метод GraphicsPathIterator::CopyData итератора для получения точек данных третьего рисунка.

VOID NextSubpathExample2(HDC hdc)
{
   Graphics graphics(hdc);

   // Create a graphics path with five figures (subpaths).
   GraphicsPath path;

   path.AddRectangle(Rect(20, 20, 60, 30));   // Subpath count is 1.

   path.AddLine(100, 20, 160, 50);            // Subpath count is 2.
   path.AddArc(180, 20, 60, 30, 0.0f, 180.0f);

   path.AddRectangle(Rect(260, 20, 60, 30));  // Subpath count is 3.

   path.AddLine(340, 20, 400, 50);            // Subpath count is 4.
   path.AddArc(340, 20, 60, 30, 0.0f, 180.0f);
   path.CloseFigure();
  
   path.AddRectangle(Rect(420, 20, 60, 30));  // Subpath count is 5.

   // Create an iterator, and associate it with the path.
   GraphicsPathIterator iterator(&path);

   // Call NextSubpath three times to get the starting and ending
   // indices for the third figure.
   INT start;
   INT end;
   BOOL isClosed;
   INT count;
   count = iterator.NextSubpath(&start, &end, &isClosed);
   count = iterator.NextSubpath(&start, &end, &isClosed);
   count = iterator.NextSubpath(&start, &end, &isClosed);

   // Get the third figure's data points.
   PointF* points = new PointF[count];
   BYTE* types = new BYTE[count];
   iterator.CopyData(points, types, start, end);

   // Draw the third figure's data points.
   SolidBrush brush(Color(255, 255, 0, 0));
   for(INT j = 0; j < count; ++j)
      graphics.FillEllipse(
         &brush,
         points[j].X - 3.0f,
         points[j].Y - 3.0f,
         6.0f,
         6.0f);

   delete points;
   delete types;
}

Требования

   
Верхняя часть gdipluspath.h

См. также раздел

Построение и рисование контуров

GraphicsPath::GetPathData

GraphicsPath

GraphicsPathIterator

GraphicsPathIterator::CopyData

GraphicsPathIterator::GetSubpathCount

Методы GraphicsPathIterator::NextMarker

NextSubpath

Пути