2024.06.12

这两天的心情很平静。

久违的,没有考虑很远的事情。


工程模块实现基本上已经初具雏形,基本可以实际使用了,不是之前写的类似于玩具一样。

模块并不复杂,基本上大大小小的工业软件,都已经实现过。

比较困难的地方在于,虽然实际的例子到处都是,但是代码级别的示例并不好找,几个开源的大型项目中倒是有,但是之前的我,因为基础功等问题,我也看不明白他们的实现,他们基本上实现这个模块都是从最底层构建的,有些复杂。

实现上大体分成三个部分,和操作系统的接入,自身的逻辑框架,和对其他模块的接入。

对操作系统的接入

比如一个.dwg文件,双击就可以直接打开对映的软件,并且这个打开还可以切换不同的软件,在软件中可以编辑,保存,创建,导出,生成等操作。

它是如何实现的?

通过修改注册表以及软件启动时支持命令行就可以实现双击打开,图标的部分通过一个简单的带有C++资源的icon的dll 既可以。

修改注册表的时候,需要管理员权限,软件启动时一般不需要,所以安装软件的时候,需要管理员权限,写入注册表即可,卸载的时候删除掉。再配合安装和更新模块,就实现了我们见到的绝大多数软件的样子。

自身的逻辑框架

常规的,我们需要实现一个树形结构,从最底层构建一个自定义的Object即可,然后上层不断继承这个,做更多的实现,我之前就是做到了这一步,然后再扩展上卡死了,可以用,但是很复杂,要继承的实现非常多,代码绕来绕去。

GPT给我的就挺好,只需要实现四个就可以了,底层的Vobject,然后实现一个文件和文件夹的VFile,VFloder,还有最上层的解决方案或者是项目。

对于不同文件,实现成接口IFile,然后不同的文件自己实现自己可以。

文件夹也是,常规的文件夹,以及 一些比较特殊的文件下,下面可以放一些json作为配置文件,记录当时保存时候的状态。或者是可以直接从数据库中读取生成。成为一个具有连贯性的系列。

UI层实现一个打开,关闭,设置,创建,导出,导入,搜索这些功能基本就可以了,直接使用WPF框架提供的TreeView局限太大,双击,重命名,右键菜单,选择,多选都不支持。

对于工程的打开视图倒是简单,直接使用avalondock即可。样式自己改一下就可以了。

其他模块的接入。

常规的,我们需要实现一个属性页,一个文本控件,一个图像控件。虽然框架都带,但很基本,复杂功能还是要次基础上构建。

常规的,如果实现一个图像控件,我们需要实现最基本的,放大,缩小,旋转,全屏,移动等操作。然后可以在这个空间的基础上,实现涂鸦绘制的操作,比如 绘制圆,绘制矩形,绘制曲线,绘制文字。这个可以做的很复杂。

能绘制自然就可以删除,在放缩的时候,在加上一个比例尺可以,以及尺子的功能,可以查看两点的像素距离。如果这里再加上实际物理尺寸,就可以计算出图像和实际比例。

然后我们可能希望查看图像的RBG数据以及鼠标上的坐标信息,并且可以复制到粘贴板。我们会希望查看图像的直方图,色域梯形图,切面图,伪彩色,单通道显示等。我们有可能会希望对这个图像进行校准,接入各种算法,并且列表显示并提供导出结果,当然也可以提供其他的控件。

复杂的,我们可以以文件夹为单位,查看文件下的缩略图缓存作为列表,展示的控件不仅提供之前的那些功能之外,还可以再不同的图片之间切换,如果图像之间存在联系,有些复杂的算法,比如需要多图的可以放在这里,比如我之前复现的景深融合算法,就是需要多张Z平面的图像。也可以需要多张图像的3D模块,用Opengl绘制即可。如果可以按照规则自动拍摄,并且文件自动保存到同一个文件下的话,这个逻辑就显得很有用。

可以关联到生长曲线。

在整体的级别上,我们可以查询和导入和导出数据库的文件。

后续也可以在这个基础上,实现对结果报表的操作。

其实也不复杂。