如何创建随机数的D2D形状(矩形和椭圆形)并在绘制时将它们称为数组?

时间:2010-12-17 21:36:32

标签: list graphics ellipse direct2d rendertarget

让我详细说明一下。我像这样定义一个D2D矩形:

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);

要绘制这些形状,我首先将它们转换并将它们传递给rendertarget:

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

我想要一种方法来创建随机数量的矩形和椭圆,并将它们存储在一个数组中,然后也可以绘制它们。我有一个函数,返回从0到5的随机数。我希望能够使用该数字创建一个指向这些形状的数组,并迭代它们以将它们绘制到屏幕上。关于如何处理这个问题的任何想法?

1 个答案:

答案 0 :(得分:1)

你可以实现这两种方式之一:

选项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);
}