汽车仿真软件v35概要设计文档格式.docx
《汽车仿真软件v35概要设计文档格式.docx》由会员分享,可在线阅读,更多相关《汽车仿真软件v35概要设计文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
![汽车仿真软件v35概要设计文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/16/1c39a205-0264-40f4-b6c5-ff756e9da834/1c39a205-0264-40f4-b6c5-ff756e9da8341.gif)
上面2里的内容
组卷,出卷,自动评分
2.2.运行环境
硬件:
IntelP41.2G以上、32M显存以上显卡
软件:
Windows2000以上
2.3.基本设计概念
·
基于Windows系统,VisualC++2005,OpenGL1.2开发
快速的定制、添加各种教学页面
快速的定制、添加各种题目页面
多种车型发布控制;
素材库、题材库可自定义组织内容
2.4.结构
主模块:
页面的创建管理;
远程的控制
基础模块:
一些基础类;
资源管理系统
界面控件:
定制的界面控件
仪表:
测量仪表的实现
电路:
电路数据与逻辑
界面实现:
各种界面的实现及对页面编辑、添加的支持
三维模块:
三维对象的创建、数据的管理
拆装模块:
支持拆装题的编辑、添加
2.4.1.主框架
A.主框架主要负责实现页面的创建与管理以及程序运行模式的控制。
B.由代表应用程序的“ArApp”负责程序运行模式的控制。
普通模式下,不做任何处理;
教师授课模式下,启动定时器,记录当前数据并通过远程模块发送出去;
学生受控模式下,过滤鼠标键盘的操作,接收远程模块发送来的数据,保持与教师控制端一致。
C.由代表主框架窗口的“ArMainFrame”负责页面的创建与切换管理。
由页面工厂统一管理并提供各种页面的创建参数类;
“ArMainFrame”根据创建参数类创建出新页面,并负责新旧页面的切换;
页面池负责记录创建参数类及页面快照,用以实现返回上一个页面及页面状态的恢复;
页面创建管理
2.4.2.一般界面架构
A.不同种类的界面有不同的实现。
具体的设计在详细设计里体现。
B.基本思路都是:
多种视图元素通过控制器访问数据对象,数据的变化通过观察者接口更新相关视图元素。
C.几种基础的经常使用的页面提供编辑器,以供外部扩充。
简单页面
2.4.3.基础资源管理
A.”ArCarResManagerCL”封装对底层文件的访问,使得程序对普通文件、流文件、甚至压缩文件都能用一种方式访问。
这样在调试的时候,可以使用易于查看的文本文件,软件发布的时候可以根据需要,将某些文件进行打包甚至压缩。
这时不需要改动代码,只要配置抽象文档系统即可。
B.老的调用方式:
调用GetResPackM(constCString&
sPackPath)得到一个ArIResourceCL接口,然后将实现了ArIResPersistCL接口的客户类传给ArIResourceCL,底层的ArPackedResLibCL反调LoadFromStreamM(IStream*pStm)函数,将数据流交给客户类使用。
C.考虑新的调用方式:
直接从ArCarResManagerCL上获取数据流IStreamPtr使用。
详细接口函数声明
classCarBase_DllExpCrCarResManagerCL:
publicCrIResManagerCL
{
public:
//根据包路径获取数据包接口。
sPackPath是资源包路径,不限制必须是DLL名
ArIResourceCL*GetResPackM(constCString&
sPackPath);
//给目标对象加载数据。
sResName是安装目录内的路径,更灵活(无需关心属于哪个DLL数据包)
BOOLLoadResM(ArIResPersistCL*pResObj,constCString&
sResFile);
//(新做法)直接获取资源数据流。
sResName:
安装目录内的路径(无需关心属于哪个数据包)
//然后直接调用IStream:
:
Read()读取数据。
***注意:
不能用写入类的函数***
IStreamPtrGetResStreamM(constCString&
sResFile);
VoidSetCurDIrM(constCString&
sResName);
CStringGetCurDIrM();
}
外部文件组织
我们软件的首页会将所有的页面(结构/原理、题目、知识点)都列出来,用户点击后进入相应的窗口。
因此有页面类型与页面ID两个概念:
如:
电路页面,知识点页面,拆装页面都是页面类型。
点火系电路页面,起动系电路页面则是页面ID。
具体到数据组织的时候:
1.页面类型的数据放在“soft\frame\”下:
如“拆装窗口”类型相关的数据,如底图、按钮、列表框图等,统一放在“soft\frame\backoutPG”下:
如“电路窗口”类型相关的数据,如底图、按钮、列表框图等,统一放在“soft\frame\circuitPG”下:
2.具体页面(结构/原理、题目、知识点)的数据,放在相应“车型\系统\xxx”下
如“气缸盖拆装”这道题相关的数据,如拆装脚本、模型列表等则放在相应“santana\simu\engine\xxx”下。
至于多道题目共用的数据,如模型(模型理想情况是可以与零部件库Santana\media\part里共用),如不能就放在车型下(santana\simu\sbjModel)。
再如“氧传感器的检测”是一道电路题,此题目的初始化文件放在“Santana\simu\gaso\xxx”下,但电路数据、电路图是共用的,那就放在“Santana\simu\circuit”下
“xxx”一般是题号,也可几道题上再建一个文件夹。
3.电路数据库不再是唯一的:
从现在的情况看,有多个车型,并且电路的需求也不一样,所以电路数据库不是一个,软件里的电路数据类也不能是全局对象,而是要根据电路题目初始化不同的电路数据。
4.如何确定外部文件位置:
页面工厂根据页面ID(题目ID)创建页面的时候,首先确定使用的页面类,然后根据需要传入配置文件,配置文件里记录要用的其他数据文件,用相对位置或绝对位置(bin之下)都可以。
当用“资源管理程序”打开某个文件的时候,资源管理程序的“当前目录”就设置为此文件的目录;
也可以外部设置当前目录。
在此之后就可以用相对路径打开文件。
使用相对路径时候前面可以加“..\”,来指向共用的数据。
2.4.4.电路与仪表
A.先使用以前的做法和实现。
B.
C.
2.4.5.三维模块
A.公司产品的主要思路是虚拟仿真,三维功能是每一个软件都必不可少的。
个人觉得可以考虑做一个比较通用的、灵活的三维模块,在不同的软件里都可以拿来用,应该可以提高整个公司的开发效率。
B.考虑将三维模块分成3部分:
“场景组织”、“资源管理”、“三维渲染”
C.“场景管理”,描述了三维空间中有哪些内容,以及它们是如何组织在一起的;
D.“资源管理”,不管模型、纹理还是字体等一切对象,绘制它们都需要不同的资源。
“资源管理”负责加载、重用、卸载这些资源。
E.“三维渲染”,三维空间中的东西最后将被渲染到屏幕上,这涉及到渲染管线、指定的渲染系统、渲染状态等API对象等底层对象。
“三维渲染系统”提供对底层三维API的抽象,可以根据需要支持OpenGL或Direct3D。
实际的零件结构
A.横线上是抽象结构,横线下是具体例子。
B.部件相当于树列表上的节点,有名称,可以被单独选取、隐藏;
组合部件相当于父节点,可以展开,也可以收缩当作一个整体来选取、隐藏;
子部件相当于子节点。
C.子部件包含1~n个零件,可单独运动但不能被单独选取;
D.不同的零件可能使用同一个模型数据。
如汽缸盖紧固螺栓下有8个,每一个都能被单独的拆装,但它们都是由一个模型数据创建。
设计的数据结构
A.横线上的节点与实体由“场景管理”负责创建并管理;
B.节点表示一个包或容器的概念,可以包含其他的子节点或实体;
C.实体表示空间中的一个实实在在的物体,可以移动、旋转改变位置;
D.横线下的模型及相关数据由“资源管理”负责创建并管理;
E.一个模型对应一个数据文件,包含三角片、材质等用于绘制的数据,
实现
渲染、主结构
1.根据配置文件初始化渲染系统,可以选择Direct3D或OpenGL;
2.创建场景并在场景中架设摄像机;
通过资源管理器创建物体并放置在场景中;
3.创建窗口、视口并与摄像机关联,一个视口上显示一个摄像机能“看”到的物体;
4.控制器接收消息和命令,将其转换成对场景和摄像机的控制;
5.刷新时:
窗口要求场景绘制它能看见的部分;
场景将能见的物体交给渲染系统绘制;
初始序列图
资源管理
A.模型对象由ModelManager负责创建、管理及重用。
例如多个位置的螺栓用一个螺栓模型数据。
B.材质由MaterialManager负责创建、管理及重用。
例如不同的子网格使用同一种材质。
C.纹理贴图由TextureManager负责创建、管理及重用。
例如不同的零件使用同一种金属纹理贴图。
D.主要的想法是Model、Texture等对象只负责使用数据,而将从文件读取解析数据职责交给Manager负责,这样可以容易的支持多种数据格式,以及数据格式的装换。
E.结合前面的文档管理系统,xxxManager可以实现自动的从磁盘文件、数据包、压缩文档等读取数据。
2.4.6.拆装模块
2.4.7.题目与数据库
2.5.功能与程序的关系
2.6.人工处理任务
3.接口设计
4.运行设计
5.数据结构设计