如何创建D2D形状(矩形和椭圆)的随机数,并把它们称为一个阵列,同时在画什么?(How can I

2019-10-29 12:29发布

让我解释。 我定义了一个矩形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);

要绘制这些形状,我第一次变换并将其传递给渲染目标:

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

我想一个方法来创建矩形和椭圆的一个随机数,并将其存储在一个数组,然后才能够吸引他们。 我有一个返回一个随机数从0到5的功能。 我希望能够用这个数字来创建一个指向这些形状的阵列,并遍历它们,将它们绘制到屏幕上。 我如何能解决这个问题的任何想法?

Answer 1:

你可以做到这一点是有2种方法之一:

选项1 - 创建包含分别矩形和椭圆2个阵列。 然后,我们要选择一个随机的形状画,你先挑随机阵列(选择是否绘制椭圆或矩形),然后选择从该数组中的特定矩形/椭圆形。

选项2 - 使用OO创建一个多态绘图功能。

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


文章来源: How can I create a random number of D2D shapes (rectangles and ellipses) and refer to them as an array while drawing?