2

短い質問: 私は winged egde 構造を使用してさまざまな形状を描画したいので、実際に翼のある eged を描画する 1 つのクラスと、立方体やその他の形状を定義する別のクラスがあります。今、同じ図に 2 つの立方体を描きたいのですが、できません。各図に常に 1 つの立方体を描画します。

長い質問: 翼のあるエッジ構造を使用してさまざまな形状を描画したいので、次のようにします。

class WEdge -> wedge_instance = WEdge(vertices, faces) 

次に、たとえば、描画する必要がある図形ごとに 1 つのクラスがあります。

class Box -> simplebox = Box(vertices, faces, translation, rotation)

WEdge クラスでは、次のコードを使用して実際にオブジェクトをプロットします。

        ax = a3.Axes3D(pl.figure())
        for k in range(self.nFaces):
           currentColumn = self.faces[k,:]
           vtx = np.zeros([4,3])
           j = 0
           for i in currentColumn:
               vtx[j] = self.vertices[i-1]
               j = j +1
        tri = a3.art3d.Poly3DCollection([vtx])
        tri.set_color(colors.rgb2hex(sp.rand(3)))
        tri.set_edgecolor('b')
        ax.add_collection3d(tri)  

問題は、同じ図形に 2 つの立方体を描きたい場合です。hold、gca などの可能な組み合わせを多数試しましたが、最終的には常に図 1 の 1 つの立方体と図 2 の別の立方体が得られます。

例:

>>>Box(3,1,3, [0,1,0], np.eye(3))
>>> # hold, gca, timer...
>>>Box(3,1,3, [1,0,3], np.eye(3))

Box(3,1,3, [0,1,0], np.eye(3)Box(3,1,3, [1,0,3], np.eye(3)

4

1 に答える 1

2

「構造」ごとに新しい軸を定義しないでください。

    ax = a3.Axes3D(pl.figure())

クラスに渡しaxて、WEdgeすべて同じ軸で描画できるようにします。

def init(self, ..., ax=None):
    self.ax = ax if ax else a3.Axes3D(pl.figure())

we1 = WEdge()
we2 = WEdge(ax=we1.ax)

あるいはもっと平等に、

ax = a3.Axes3D(pl.figure())
we1 = WEdge(ax)
we2 = WEdge(ax)

axキューブ クラスにも渡す必要がある場合があります。

于 2013-10-02T09:57:47.730 に答える