写点啥-智慧黑板
下面简单说下我现在做的东西,智慧黑板,我相信在教育领域,以后老师教学,不管是多媒体教学还是普通教学,黑板都会被这样的产品替代,我也没具体去学校了解,可能现在就已经大规模应用了。在这个行业做的比较好的应该是西沃和网易,西沃好像软件硬件一起做。这个产品(暂时这么叫吧,因为我还没做完,太庞大了)是我两年前就写了一部分,当时是写完k线之后写的,当时写的授课端,因为备课端般蛮的话可以集成ppt的组件实现,当然那太low了。智慧黑板我目前是参考西沃的产品,分为两大块,备课端和授课端,可以这么理解,备课端就是制作ppt,授课端就好比播放ppt,当然没有ppt那么强大,当然有些功能是ppt也没有的,要不直接用ppt就行了。今天主要是简单介绍下备课端这边的功能以及简单实现,下次介绍授课端,下面我截了一张图,把我做的备课端大部分功能都写上去了。
智慧黑板我这边是基于wpf net4.5 prism mvvm框架开发,好像现在比较老了吧,具体不清除很久没关注wpf winform了,题外话,有人说wpf现在能跨平台?目前来说还不行哦,clr层面的跨平台和驱动层面的跨平台不是一回事哦。目前wpf winform移植到netcore,个人感觉可能微软想丢弃netframwork这个包袱吧,而且netcore的新特性也得到支持,最重要的是标准库的接口统一,我之前写netcore文章有提到,这也是之前微软的硬伤,之前的版本以前反编译看过代码,有点乱、庞大不好维护(猜的,我也不懂)。就算干工程也比较大吧,因为驱动层面的东西需要大量兼容,比如GUI等。样式丑了点,将就看吧,wpf style tigger我的硬伤啊,不熟,哈哈。后续再花时间写样式吧。备课端的功能模块,大概分四块,左边导航页,上面菜单,有按钮和下拉,后边属性和动画,属性主要针对文本和2dPath,动画部分我还没做,反正就是固定的那几种,比如百叶窗等等,中间就是画板了,所有东西最后绘制在这个画板上面,可以任意拖动,旋转。这上面的主要功能我还差3d,3d有一定的专业知识,后续再完善。下面简单介绍下功能实现。
文本编辑器,基于wpf文档流实现,其实wpf的richbox也是基于文档流实现的。wpf文档流api相较winform丰富多了,这里的文本都是原生绘制出来的,也就是说要啥样式的文本都可以实现,甚至3d字都没问题。以前扩展过winform的richbox,那是相当痛苦,各种查api,win消息,hook等。文本编辑器支撑的数据结构主要是红黑树(包括段落,文字等都应用了红黑树),因为红黑自平衡的特点,在搜索索引方面性能很好,其实文本编辑器背后的结构就是一堆索引,而且是内存结构。这里我在文本字符串上面也应用了红黑树,不知道是否合理,大数据我也没测试,后续再优化吧。
表格,看上去像datagrid吧,其实这个表格就是原生文档流实现的,跟上面的文本编辑器有类似,里面的合并单元格都是自己手撸的,没有接口。
形状,比较简单算规矩,通过path绘制,path强大到能模拟3d,简单的3d,只是如果使用path画简单3d,就会失去wpf对3d的一些特性支持。
统计,这个是用的三方组件,其实自己去实现简单的也很简单。
思维导图,做这种很不规则的东西,建议大家不要一上来就是考虑哪些情况,这种完全没规则的东西,只能通过算法解决,尽量优化到没有ifelse,当然我的意思是if else尽量不参与业务判断。思维导图我用的是双向链表(当然它是个变种链表),刚开始用的树,后面发现增删节点很大可能,导致全局绘制,因为它需要自平衡,节点不能往一边跑,导图的左边也可以增删节点哦。
元素在画板上的拖拽,缩放,这个我用的是老外的,稍微扩展了一点功能。
好了就到这吧。