2

简短的问题:我想使用有翼的边缘结构绘制不同的形状,所以我有一个类实际上可以绘制任何有翼的边缘,另一个类用于定义立方体和其他形状。现在我想在同一个图形上绘制 2 个立方体,但我不能,而且我总是在每个图形中得到一个立方体。

长问题:我想用有翼的egde结构绘制不同的形状,所以我有:

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

然后我为每个需要绘制的形状设置一个类,例如:

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)  

问题是当我想在同一个图中绘制两个立方体时。我尝试了许多可能的 hold、gca 等组合,但最后我总是在图 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))

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

4

1 回答 1

2

不要为每个“结构”定义新轴:

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

传入类,因此它们都可以axWEdge同一轴上绘制:

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 回答