bounty还有6天到期。回答此问题可获得+100声望奖励。trinityalps希望引起更多关注这个问题。
我遇到了下面代码的问题。当点击按钮时,代码应该抓取下一个模型并显示它,但是,旧的网格仍然存在于图像中并且不会消失。在VTKPlotLib中,如何在不破坏qtfigure和扰乱gui应用程序流程的情况下删除先前的网格?
from PyQt5 import QtWidgets
import vtkplotlib as vpl
from PyQt5.QtWidgets import QLineEdit, QMessageBox
from stl.mesh import Mesh
class Tagger(QtWidgets.QWidget):
def __init__(self):
super().__init__()
# Go for a vertical stack layout.
vbox = QtWidgets.QVBoxLayout()
self.setLayout(vbox)
self.setWindowTitle("Tagging Engine")
# Create the figure
self.figure = vpl.QtFigure2()
self.figure.add_preset_views()
# Create a button and attach a callback.
self.button = QtWidgets.QPushButton("Load Next Model")
self.button.released.connect(self.button_pressed_cb)
# Create textbox
self.textbox = QLineEdit(self)
self.textbox.move(20, 20)
self.textbox.resize(280, 40)
# Create a button and attach a callback.
self.button2 = QtWidgets.QPushButton("Save Current Data")
self.button2.released.connect(self.button_pressed_save)
# QtFigures are QWidgets and are added to layouts with `addWidget`
vbox.addWidget(self.button)
vbox.addWidget(self.textbox)
vbox.addWidget(self.button2)
vbox.addWidget(self.figure)
def button_pressed_cb(self):
self.mesh = Mesh.from_file(r"C:/examplefile.stl")
vpl.mesh_plot(mesh_data=self.mesh, color="#94b1ff")
# Reposition the camera to better fit to the model
vpl.reset_camera(self.figure)
self.figure.update()
2条答案
按热度按时间dgtucam11#
可以使用**remove_all_meshes()**方法。
从理论上讲,在绘制新网格之前使用self.figure.remove_all_meshes(),应该会在添加新网格之前从图形中删除以前的网格。
zkure5ic2#
bwoodsend/vtkplotlib
问题2确实提到:有几种方法可以在调用
show()
之间清理图形或删除以前添加的网格:您通常需要保留对希望更改的所有内容的引用。
因此,如果您尚未执行此操作,则可能需要将设置更改为如下所示:
一旦你有了这些参考,你就可以使用任何一个:
或者,如果你不太可能想重新显示该网格,那么你可以将其从图中删除(并保存一些RAM)。
图中的内容保持在
fig.plots
中。所以如果你感觉很懒,你可以用途:
这会清除一切(如果下一个网格的大小/位置非常不同,则在添加下一个网格后,可能需要调用fig.reset_camera()。)
由于
mesh_plot
返回一个vtkplotlib.mesh_plot
,你可以记住它,以便在下一次调用时删除它:fig.remove_plot(mesh)
可用于从图中删除图,前提是您同时具有要删除的图和图的引用。在您的示例中,
self.figure
是图形,self.mesh_plot
是要删除的图。如果愿意,也可以使用
fig -= mesh
作为fig.remove_plot(mesh)
的简写。此外,如果要从图中删除所有图,可以使用
fig -= fig.plots
。这相当于一个clear_figure
函数(如果有的话)。