ACG狂人

其实我更爱姐汁...

关于MVC PropertySet OperatorStack的一些设计思考

最近在给公司里码一个场景编辑器,大致得实现的功能有:
地形高度刷
地形纹理刷
放置小物件和房屋
放置粒子系统
设置路径点和只能摄像机点

算是个简单的不能再简单的场景编辑器了吧...但是这样的一个工具还是很头痛的,特别是用C++来写...
头痛的原因不是别的,正是这个表现层和后台数据同步问题。这个在C++的UI库中目前还真没有什么现成的好办法,于是开始造轮子,为MFC写了PropertySet和OperatorStack。
首先这个UI数据和内存数据双向同步的问题直接让我崩溃了...由于以前写过一些工具,知道这东西如果不做个设计就开始冲着功能写的话会有什么后果。嗯,于是继承封装了CMFCPropertyGridCtrl控件,为每个叶子属性项封装了一个LeafItem,根据属性名来更新PropertySet里对应的数据......具体实现几千字略- - 最终成型时代码这样:
DynamicObject obj;
propertyGrid.attachObject(obj);
这里的DynamicObject继承PropertySet,于是propertyGrid控件就会显示obj里所有的属性数据了...然后是双向更新问题,目前是给Property里加了一个eventValueChanged事件响应,让PropertyGridCtrl监听这些数据的变化,而propertyGridCtrl这个UI上的数据变化同样是派生实现CMFCPropertyGridCtrl的值变化响应函数来给绑定的LeafItem更新数据,也是直接就刷新到Property里了。
还有OperatorStack.....这个是操作栈,记录用户操作的,用于撤销和重做的操作,也用到了PropertySet来记录变化对象的属性快照,嗯,叫SnapShootRecord的类里面记录的都是一个对象的变化属性。
先就记录这么多,很乱很不容易懂,主要给我自己做个记录的,没啥贡献,实际上还有很多不好用的地方,所以最近在想一些改进设计,等我想好了放上来详细设计和源码吧.......

posted on 2010-11-20 19:30 酿妹汁 阅读(2011) 评论(2)  编辑 收藏 引用 所属分类: C++

评论

# re: 关于MVC PropertySet OperatorStack的一些设计思考 2010-11-20 22:02 战魂小筑

QT Please  回复  更多评论   

# re: 关于MVC PropertySet OperatorStack的一些设计思考 2010-12-22 18:37

QT个蛋蛋......
编个QT能把我小电脑的硬盘折腾坏了.....
开个玩笑...实际上我是不适应QT的那种奇怪的感觉,怎么说呢......
自带的编辑器用的不好用,给vs上个ui编辑插件又感觉很蹩脚,于是果断放弃......  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理