\n'); } function setFlash(){ var myFlshObj = document.myFlash; var photoAlbum=document.getElementById('photoAlbum'); if(photoAlbum&&myFlshObj){ var awidth=0; awidth=parseInt(photoAlbum.offsetWidth); if(awidth<260) myFlshObj.height='150px'; if(awidth>=260 && awidth<350) myFlshObj.height='240px'; if(awidth>=350 && awidth<370) myFlshObj.height='305px'; if(awidth>=370 && awidth<550) myFlshObj.height='320px'; if(awidth>=550 && awidth<730) myFlshObj.height='455px'; if(awidth>=730) myFlshObj.height='590px'; } } function setAlbumUrl(name){ albumTypename=name; setFlash(); myFlash_DoFSCommand(null,"test"); } function showLoginWindow(ev){ var obj = document.getElementById("pop-login"); if(document.all){ obj.style.top = ev.clientY +'px'; obj.style.left = ev.clientX - 272 +'px'; } else{ obj.style.top = ev.pageY +'px'; obj.style.left = ev.pageX - 272 +'px' } obj.style.display ="block"; document.getElementById("pop-user-name").focus(); } function hideLoginWindow(){ document.getElementById("pop-login").style.display ="none"; } var blogID=getBlogID(); var UserName = ""; if(blogID!=null){ var tmpUserName=blogID.split("."); UserName=tmpUserName[0]; } function resize(obj){ if(window.event.srcElement.tagName == 'A'){ return; } obj.parentNode.childNodes[1].style.display = obj.parentNode.childNodes[1].style.display=='none' ? 'block': 'none'; obj.parentNode.childNodes[2].style.display = obj.parentNode.childNodes[2].style.display=='none' ? 'block': 'none'; } function tab(event){ var evt = (document.all)?window.event:event; if(evt.keyCode == 9){ document.getElementById("pop-password").focus(); return false; } else{ return evt.keyCode; } } function tab1(event){ var evt = (document.all)?window.event:event; if(evt.keyCode == 9){ document.getElementById("save").focus(); return false; } else{ return evt.keyCode; } } function tabTrack(event) { var evt = (document.all)?window.event:event; if(evt.keyCode == 9){ document.getElementById("pop-password-track").focus(); return false; } else{ return evt.keyCode; } }
建模、仿真工具
日志
本来计划2006年10月推出SimLab的第一个版本的,可惜由于是用Open Source的QT做的界面,但我又没有打算Open Source Simlab,所以就没有推出。而是在10月又开始在研究其他的GUI库,如GTK和WTL,总之算是学习吧。
需要说明的是,这个仅仅是个演示版,模型比较少,功能方面,包括对图形的操作,undo/redo,cut/past/copy等都做了,save还没做,因为今年主要是在做界面,对图形的操作是去年就完成的,可惜对图形的旋转操作做的不够理想!
由于QT的License的问题,可能不会再使用QT,除非有商业版本的QT,我才会优先选择QT。不过QT确实非常好用,而GTK就难很多,做的界面在windows下很丑,在linux下倒是很好看。
在SimLab的开发过程中,确实遇到了很多技术方面的难题,有建模方面的,也有仿真方面的。由于SimLab提供了一个可视化的界面,所以大多数的难题都出在可视化上,具体的,在可视化建模方面,目前有以下一些难题无法解决:
在仿真方面遇到的问题有:
今天在baidu上使用simlab搜索了一下,发现居然有那么多叫做SimLab的软件,即有国外的又有国内的,功能居然都和我要开发的SimLab很像!以前没有写blog,没有查询这些事情,今天发现居然这么多同名的同类型的软件!真是太晕了!看来我的开发速度太慢了,虽然想法很好,可就是太慢了!唉,软件还是在公司里开发快呀,一个人的力量太有限了!要是能找到有人投资就好了,其实除了SimLab,我还有好的在可视化方面的软件想开发,都是应用在不同的领域。可惜没时间!
不过,用baidu搜索的时候,我的关于simlab的blog排在第一,呵呵,也算是安慰吧!
正像SimLab简介中所说的一样,SimLab曾经使用过好几个GUI框架来提供GUI界面,不过建模库和仿真库却是使用的标准C++,否则就不会那么好移植了。其中,MFC,查不多是最早开发时,使用的的GUI架构,这其中,还支持GDI+,可惜考虑到MFC不能跨平台移植,所以开发了一段时间后,就放弃使用MFC了,它的简易的界面如下:
图1.VC版本的SimLab,连接线已经实现了
后来,采用wxWidgets,主要是因为它的跨平台移植性很好,又是免费的,且可以和windows上提供的一些平台结合使用,例如GDI+,在wxWidgets中也可以使用,下图是使用了wxWidgets+GDI+的界面:
图2. wxWidgets+GDI+的SimLab,消除了图形锯齿
使用wxWidgets最后版本的界面如下,有点仿照20-sim的意思:
图3. wxWidgets最终版本的SimLab
而QT版本的界面如下:
图4. QT版本的SimLab
如果不出什么意外,SimLab将最终采用QT来开发。而在使用QT的过程中,我发现,QT的绘图效率非常高,都不用额外使用双缓冲,拖拽图形也不会产生闪烁,而使用MFC和wxWidgets,都必须使用双缓冲,甚至是GDI+,也不例外。而QT在绘图时,可以很方便地实现GDI+的功能,消除锯齿后,其速度要比使用GDI+来消除图形锯齿快很多,所以,使用QT确实有很多好处,其跨平台的特性就不用说了,著名的linux的界面就是用QT来开发的。而且使用QT做自定义的界面比其他两个框架都容易的多。
SimLab是我花了大约5年的时间,利用业余的时间,独立开发的一个建模、仿真的软件。开发它的初衷,主要是在大学作课题时,使用了一个建模、仿真的软件20-sim(http://www.20-sim.com),这个软件支持键图和方块图的建模与仿真,用在自动控制的仿真分析上比Matlab更有精度,例如对空中加油的仿真分析,用Matlab建模就不行,但用20-sim却可以。我的课题,就是使用20-sim来作的建模、仿真分析。由于国内没有类似的软件,我就想开发一套这样的软件,但直到毕业后,才开始着手开发。其实在学校的时候,只是作了一些研究工作,写的程序后来都推翻了,后来重新设计架构,里面使用了很多设计模式,算是练练手吧。
开发时间,虽然说是5年,其实总共加起来,估计还不到半年,因为中间开发都没有进度压力,况且有时候又工作很忙,实际上,也就只有五一、十一有点时间开发,所以进度很慢。不过架构却是在3年前,也就是在我第一个公司的时候,就做完了的,现在做的,就是界面,期间换了好几个GUI框架,什么c++ builder、MFC、wxWindows,现在刚在今年五一,将界面又换成了QT,不过目前的软件,使用预编译宏,所以这几个GUI框架都还是支持的,之所以这样换,是因为为了可以将软件移植到Linux或其他操作系统,所以C++ builder及MFC肯定不能用,wxWindows使用了好长一段时间,后来移植到Linux的时候一看,发现有些控件和windows上的效果不同,所以现在使用QT,因为使用QT,开发自绘控件比其他都容易一些,就像Java一样,不过,使用QT有一个不好之处就是,它licence不是那么自由,虽然现在有open source的。不过我已经渐渐喜欢上了QT,之因为它做界面真的可以像使用Java那样随心所欲,而且都是使用模式设计。
目前SimLab的界面有点像微软的visio,不过visio之不过是用来建模的,但Simlab却是用来建模及仿真的。SimLab目前的建模水平,却具备了visio大部分的功能。