我正在编写一个应用程序,用于绘制小部件/菜单/控件等以创建应用程序模型。每个屏幕都表示为小部件的集合,每个小部件都是简单的类,例如
class Model(object):
def __init__(self):
self.widgets = []
class Widget(object):
def __init__(self):
self.x, self.y = 0, 0
self.w, self.h = 100,20
self.text = "Widget"
现在用户可以在编辑器中编辑 x,y,w,h 并且它会在许多视图(位置)中渲染,渲染本身可能会更改 w 和 h,因为我们至少希望显示最佳拟合。
例如文本“Widget”在不同视图中可能需要宽度 200 或 205
问题:
那么问题是渲染/视图本身修改了模型,如何避免这种情况?现在我有主视图和主模型,任何其他视图如果想要渲染复制模型并渲染它,从而避免主模型的更改。
这种方法很简单,代码仍然简单,但需要不必要的模型副本,我想了很多方法来避免这种情况,但所有方法都会使代码复杂化,并且可能效率不高,因为无论如何,如果不复制模型,则渲染时间属性需要放置在某个地方,例如在每个小部件的每个渲染器中。
我正在用 python 实现它,但这与答案无关。
如果模型中渲染变化的唯一内容是 x、y、w、h,那么您有几个选择:
复制这些字段:x、y、w、h 和 x_drawn、y_drawn 等。渲染可以更改 _drawn 值,并使模型不介意它们已更改。例如,保存模型时,不要保存 _drawn 值。然后模型可以在渲染过程中发生变化,但这并不重要。
将 x,y,w,h 移动到 RenderedGeometry 类中,并为每个模型提供一个实例。现在您仍然可以复制模型,但它可以是浅复制,加上 RenderedGeometry 类的新副本,从而减少必须复制的数量。
将字段复制到 x_original、y_original 字段组中。在渲染之前,将 x,y 复制到 _original 字段中。渲染后,将它们复制回来。模型实例本身不必复制,只需复制少量数据即可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)