如何开发一个应用程序来绘制,编辑和保存Cocoa中的UML模型?

时间:2008-11-21 02:38:04

标签: macos cocoa

单个UML图表形状是NSView子类还是NSBezierPaths?如何创建和管理图表?

4 个答案:

答案 0 :(得分:3)

这样做的一种方法是:

  • 创建基于文档的应用
  • 为最终用户在画布中绘制的不同对象设计模型类,共享一个抽象超类
  • 在你的CanvasView类中,实现drawRect并让它调用NSDocument子类,或者对于更细粒度的类,它是viewcontroller,以获取应该以正确的顺序绘制的所有对象来绘制它们。
  • 对于这些对象中的每一个,从CanvasView的drawRect:implementation中调用drawInteriorInView:rect:方法或者它们都已实现的类似方法。

这种粒度设计的优点是,如果您需要这样做,您可以决定用直接的CoreGraphics调用替换NSBezierPath绘图,而无需完全重新构建应用程序。

典型的Cocoa控件,例如tableView,实现了一堆不同的绘图方法,一个用于背景,一个用于网格线等等。所有这些都从视图的drawRect中调用(如果适用):。 / p>

或者您当然可以查看GCDrawKit,它似乎具有非常实用的功能。特别请查看随附的示例应用程序。

答案 1 :(得分:2)

你看过OmniGraffle吗?它可以做你需要的。

[非编程相关的答案......]

答案 2 :(得分:2)

您是否查看过/ Developer / Examples / AppKit中的Sketch示例项目?它应该至少让你到达目的地的一半。

答案 3 :(得分:2)

您通常会从NSView子类开始,以表示“画布”并处理绘图和鼠标/键盘事件。您可能会在绘图方法中使用NSBezierPath来填充和勾勒出形状。根据绘图代码的复杂程度,您可以将所有内容放在NSView子类中,或者创建一个NSCell子类,它可以从NSView中完成一些工作。在任何一种情况下,您都希望定义数据源协议(或创建绑定),以便从数据模型中代表UML项目的对象向NSView提供数据。

核心动画也值得考虑,虽然我会从一开始就使用NSView,至少对于一个简单的原型。