Как я могу создать случайное количество фигур D2D (прямоугольники и эллипсы) и обращаться к ним как к массиву во время рисования? - PullRequest
0 голосов
/ 18 декабря 2010

Позвольте мне уточнить. Я определяю D2D Rectangle так:

D2D1_RECT_F rect1 = D2D1::RectF(5, 0, 150, 150);

и эллипс как:

D2D1_ELLIPSE ellipse1 = D2D1::Ellipse(D2D1::Point2F(75.f, 75.f), 75.f, 75.f);

Чтобы нарисовать эти фигуры, я сначала трансформирую их и передаю их цели render:

m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Translation(D2D1::SizeF(200, 50)));
m_pRenderTarget->FillRectangle(&rect1, m_pLinearGradientBrush);

Мне бы хотелось создать случайное количество прямоугольников и эллипсов, сохранить их в массиве и затем нарисовать их. У меня есть функция, которая возвращает случайное число от нуля до пяти. Я хочу использовать это число для создания массива, который указывает на эти фигуры, и перебирает их, чтобы нарисовать их на экране. Любые идеи о том, как я могу подойти к этой проблеме?

1 Ответ

1 голос
/ 18 декабря 2010

Это можно сделать одним из двух способов:

Вариант 1. Создайте 2 массива, содержащих прямоугольники и эллипсы соответственно. Затем мы хотим выбрать случайную форму для рисования, сначала вы выбираете случайный массив (выбирая, рисовать ли эллипс или прямоугольник), а затем выбираете конкретный прямоугольник / эллипс из этого массива.

Вариант 2. Использование OO для создания полиморфных функций Draw.

// Define new base class for your shapes
class DrawableShape
{
    HRESULT DrawMe(ID2D1RenderTarget* pUseThisRT);
};

// Create a MyD2DEllipse class implementing DrawableShape
class MyD2DEllipse : public D2D1_RECT_F, public DrawableShape
{
    HRESULT DrawMe(... pUseThisRT)
    {
        pUseThisRT->FillEllipse(this, ...);
    }
};

// Similarly create MyD2DRectangle
class MyD2DRectangle : ..
{
    ...
};

Затем вы можете создать массив DrawableShape[], из которого вы можете выбирать случайным образом.

void DrawRandomShape(DrawableShape* shapes[])
{
   shapes[rand()]->DrawMe(pUseThisRT);
}
...