首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >三维绘图程序交互模式(“画图工具”)的体系结构

三维绘图程序交互模式(“画图工具”)的体系结构
EN

Software Engineering用户
提问于 2011-09-14 10:18:59
回答 3查看 1.2K关注 0票数 8

我们正在开发一个基于Qt的应用程序,用于浏览和绘制作为3D像素图形处理的卷。应用程序的布局由三个正交的切片视图组成,用户可以在上面画点、圆圈等东西,也可以擦除已经画好的像素。想象一下3D Gimp或MS涂料。

您将如何为不同的交互模式(即油漆工具)设计架构?

我的想法是:

  • 使用MVC模式
  • 对每个交互模式都有一个单独的控制器。
  • 在所有三个切片视图上安装一个事件过滤器,以收集所有传入用户交互事件(鼠标、键盘)。
  • 将事件重定向到当前活动的交互控制器。

我希望对这一想法提出批评意见。

EN

回答 3

Software Engineering用户

发布于 2011-10-23 13:21:29

通常,MVC是一种定义相对较大的操作的样式。这与您定义为绘制3d像素的复杂操作并不完全一致。我建议看一看与MVC密切相关的另一种风格,即MVVM。它允许通过您的不同工具在操作的对象之间进行更紧密的绑定,并具有该对象的视图。

票数 2
EN

Software Engineering用户

发布于 2012-11-17 10:43:31

我不认为建立作为不同的“控制器”的交互模式将很好地为您服务。你的逻辑是什么?控制器是将显示和用户输入绑定到您的模型,但我想象这只是一个画布和一个鼠标指针,那么为什么多控制器?

您可以拥有在模型类中的交互模式之间更改的切换逻辑。您可能不需要在多个控制器中使用它,除非您为用户提供了完全不同的“画布”类型元素和布局。不管是哪种方式,我认为一些设计模式的好选择应该是工厂和/或装饰师,或者类似的东西。

从按钮中收集事件,单击交互模式的调色板(您的意思是这是一种Photoshop/MS绘制的工具条,对吗?)使用该事件作为工厂的输入。这个工厂将生成一个与“工具”接口(或您想称之为它的任何东西)相一致的东西的实例。例如,新生成的工具实例存储在控制器中,以便在用户绘制时随时接收鼠标输入。

如果您想变得复杂--比如可以同时选择一些工具,比如“磁性锁”和“绘图”--您的控制器对实现工具接口的实例的引用需要在运行时进行扩展,比如w/ a责任链模式(或前面提到的装饰器)。现在,前面提到的工厂将制造一个以上的工具。在传递用户的鼠标输入之前,控制器将在命令链中“排列”这些命令。例如,磁性锁“工具”实现在将“沿着链”传递给绘图工具之前,可能会将用户的输入稍微更改为存在于指南上。

票数 1
EN

Software Engineering用户

发布于 2012-11-17 09:36:54

你的想法基本上是正确的。在State的Design书中也提到了它。您的编辑器有一个当前的工具对象(它实现了一个通用工具接口),并将所有相关的用户交互委托给它(mouseclick、键事件等)。油漆工具、选择工具等类将实现工具界面,并负责处理用户事件序列。

public interface Tool {

代码语言:javascript
运行
复制
void HandleKeyboardEvent(...);
void HandleMouseEvent(...);

}

class RectangleTool : Tool { //accumulates drawing state }

当您更改一个工具时,更改的只是当前的工具对象,UI中的其余逻辑将保持不变。

如果您有3个正交视图,那么您可以有3个工具对象或仅仅一个,这取决于您的设计。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/108179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档