【问题标题】:How can I create a random number of D2D shapes (rectangles and ellipses) and refer to them as an array while drawing?如何创建随机数量的 D2D 形状(矩形和椭圆)并在绘图时将它们称为数组?
【发布时间】:2011-05-27 08:56:57
【问题描述】:

让我详细说明。我像这样定义一个 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);

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

【问题讨论】:

    标签: list graphics ellipse direct2d rendertarget


    【解决方案1】:

    您可以通过以下两种方式之一来实现:

    选项 1 - 创建 2 个分别包含 Rectangles 和 Ellipses 的数组。然后我们要选择一个随机的形状来绘制,首先选择随机数组(选择是绘制椭圆还是矩形),然后从该数组中选择一个特定的矩形/椭圆。

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

    【讨论】:

    • 嗨 Sanjit,感谢您的回复。我会试试这个并回复你:)
    • Sanjit,这似乎是正确的方法,但我在实现这一点时遇到了一些麻烦。完成询问后,我将在此处发布该问题的链接。你能看看吗? :)
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2020-07-05
    • 1970-01-01
    相关资源
    最近更新 更多