君方智能设计平台-对象持久化技术方案

1.背景介绍

  • 1.1序列化功能

序列化是将复杂的图形对象、数据结构或对象转换成一种可被存储、传输或分享的格式的过程。这个格式通常是二进制或文本形式,能够轻松地保存在文件中或通过网络发送到其他应用程序。序列化的目的是将数据持久化,使其在不同时间和地点能够被还原为原始对象。

在图形平台开发中,序列化常常用于保存用户创建的图形对象和场景数据。这意味着用户可以在下次打开应用程序时重新加载之前的工作,而无需从头开始。

  • 1.2反序列化功能

反序列化是将序列化的数据还原为内存中的对象和数据结构的过程。这个过程是序列化的逆过程,它涉及解码序列化格式并将数据映射回相应的对象和数据结构。

在反序列化过程中,解码器负责解析序列化数据并将其还原为原始数据类型。这可能涉及将字节流转化为数字、字符串、布尔值等基本数据类型,并将其映射回对象的属性。解码器必须确保数据的完整性和一致性,以避免潜在的错误。

  • 1.3 序列化的原理

序列化是一项至关重要的技术,它在图形平台开发中发挥着关键作用。序列化的本质是将图形对象和数据结构转化为一种可持久化存储或传输的格式,使得这些数据能够在不同的时间和地点进行加载和还原。为了更好地理解序列化,让我们深入研究其原理。

2.使用场景

  • 文件打开
  • 文件保存
  • 对象拷贝
  • 事务机制

3.常用的持久化方案

  • 3.1 方案1

在AutoCAD的产品中,如果对象需要持久化,需要实现持久化的类实现如下的接口。

virtual int GetSize() cosnt = 0
virtual bool Serialize(char *pData) = 0
virtual bool Unserialize(char*pData) = 0
virtual Object * Clone() = 0
virtual Object* DeepClone() = 0

缺点:容易出错,升级代码维护困难。

  • 3.2 方案2

UG/NX,广联达数维等技术方案,利用OM的反射框架,底层统一实现,灵活性不够。

已知情况:

  • AutoCAD,AutoCAD Architecture,AutoCAD MEP, 没有OM框架。
  • UG/NX、广XX达维设计有自己的OM反射框架。

使用OM优点:对象拷贝,序列化和反序列化,事务支持容易。定义数据对象时,只许通过宏定义对象schema,底层统一实现。

缺点:需要额外的OM框架,增加工作量,问题排查麻烦。

采用AutoCAD无OM模式优点:对象拷贝,序列化和反序列化,数据版本升级容易且灵活,代码的可读性好,问题排查容易。

缺点:新增数据对象,实现自己的拷贝,序列化和反序列化逻辑。

使用OM框架,Redo/Undo能够实现增量备份更容易支持。

4.OM反射方案选择

通过实现类似于Qt中对象属性反射功能,可以参考UG及广XXX达设计实现。

(1)UG方案:实现通过定义对象定义schema文件,类似Qt编译前通过特定程序生成反射代码文件。

反射文件样例

static ClassAttribute attributeTable[] ={{

&StiffenerParmsClassId, &StiffenerParms::m_distanceToleranceAttId, "m_distanceTolerance", NULL, NULL, NULL, NULL, NULL, NULL,

{0, -1, -1}, 124u, NULL_RTC, offsetof(class UGS::Ship::StiffenerParms, m_distanceTolerance),

0u, 0u, OM_type_double, 0, 0, 0}}

(2)广XX达方案等:通过定义宏来生成反射代码文件。

方案比较

UG方案:代价大,流程复杂,好处是可以生成不同语言的接口文件。

广XX达方案:简单,也能满足要求。

综合考虑,采取类似广XX达方案,简单也能满足需求。

5.OM框架实现

5.1 类Class的Schema设计

 成员类型成员名称成员功能
ClassId       m_parentClassId
ClassId        m_classId
Guid            m_assemblyId所属模块Guid
std::vector<PropertySchema>m_properties属性schema列表
std::wstring m_assemblyName所属模块名称
std::wstring m_className
std::wstring m_parentClassName
intm_version
int      m_index

5.2 属性Property的schema设计

成员类型成员名称成员功能
PropertySchemaType m_propertySchemaType
IntOrFloatTypem_intOrFloatType
IntBaseType    m_intBaseType
string  m_propertyName
string  m_propertyType
intm_offset
intm_propertySize
intm_propertyBehaviourTypes

6.总结

        序列化和反序列化是图形平台开发中的关键技术,它们允许将图形对象和数据结构转化为可持久化存储或传输的格式。不同的序列化实现方案可供选择,包括二进制序列化、XML 和 JSON 序列化,以及自定义序列化。通过基于OM框架的序列化和反序列化方案,可以实现数据的持久性和跨平台传输,为图形平台开发提供更大的灵活性和可扩展性。

君方智能设计平台链接:

ShipMaker船舶协同设计软件介绍-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783396.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学术会议征稿】2024年第四届工商管理与数据科学学术会议(BADS 2024)

2024年第四届工商管理与数据科学学术会议(BADS 2024) 2024 4th International Conference on Business Administration and Data Science 2024年第四届工商管理与数据科学学术会议(BADS 2024)将于2024年10月25-27日在新疆喀什召开&#xff0c;由喀什大学支持本次会议。会议旨…

Mapboxgl 根据 AWS 地形的高程值制作等高线

更多精彩内容尽在dt.sim3d.cn&#xff0c;关注公众号【sky的数孪技术】&#xff0c;技术交流、源码下载请添加VX&#xff1a;digital_twin123 使用mapboxgl 3.0版本&#xff0c;根据 AWS 地形图块的高程值制作等高线&#xff0c;源码如下&#xff1a; <!DOCTYPE html> &…

OV证书签发一般要多久?

OV证书&#xff0c;即组织验证型SSL证书&#xff0c;的签发流程涉及多个阶段&#xff0c;其具体时间取决于多种因素。OV证书的签发一般需要1-3个工作日&#xff0c;这个过程可以分为以下几个阶段&#xff1a; 1、选择和购买证书&#xff1a; 用户需要在SSL证书服务商处选择合适…

AnaPico为众多工厂产线老化测试提供高效经济的微波解决方案

在电子设备的生产中&#xff0c;老化测试在整个使用寿命期间的可靠性和对声明参数的保证起着重要作用&#xff0c;尤其是在特殊应用&#xff08;国防和航天工业、电信、医药等&#xff09;方面。即使经过成功的参数和功能测试&#xff0c;在实际操作条件下使用时也有可能出现设…

【JSP+Servlet+Maven】——优质外卖订餐系统之概论部分

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…

【Linux】进程的概念 + 查看进程

前言&#xff1a; 在前面我们学习了Liunx的基本指令和权限相关知识&#xff0c;还有基本工具的使用&#xff0c;有了以上的基础知识我们本章将正式接触Linux操作系统。 目录 1.冯诺依曼体系结构1.1 内存存在的意义1.2 程序加载到内存的含义1.3 程序的预加载&#xff1a; 2 .认识…

python读取指定文件夹下的图片(glob获取)

python读取指定文件夹下的图片&#xff08;glob获取&#xff09; 定义traverse_images函数&#xff0c;仅需要改变下根路径即可 glob是python中用来查找符合特定规则的文件路径名的函数 import os from glob import globdef traverse_images (folder_path):image_formats …

Google账号输入用户名和密码后提醒要到手机通知点是,还要点击数字,但是我手机收不到

有一些朋友换了一个新的电脑后手机登录谷歌账号时&#xff0c;用户名和密码都正确输入以后&#xff0c;第三步弹出一个提示&#xff0c;要在手机上的通知栏点击是&#xff0c;并且点击手机上相应的数字才能继续登录。 但是自己的手机上下拉通知栏却没有来自谷歌的通知&#xf…

mkv怎么改成mp4格式?把mkv改成MP4的几种方法介绍

mkv怎么改成mp4格式&#xff1f;将mkv格式的视频文件转换为MP4格式是许多用户常常需要解决的问题&#xff0c;尤其是在不同设备之间传输和播放视频时。mkv是一种灵活且功能强大的多媒体容器格式&#xff0c;能够包含多种视频、音频和字幕轨道。然而&#xff0c;尽管其优势显著&…

前端web在线PPT编辑器-PPTLIST

哈喽&#xff0c;大家好&#xff0c;今天给大家介绍一款的在线的PPT编辑器开源框架-PPTLIST&#xff1b;他是一个基于 Vue3.x TypeScript 的在线演示文稿&#xff08;幻灯片&#xff09;应用&#xff0c;还原了大部分 Office PowerPoint 常用功能&#xff0c;支持 文字、图片、…

MSP学习

一、迁移资源调研 完成导入&#xff0c;类似完成选型分析 离线工具调研 账单 二、迁移计划 1、

【教程】新的Selenium!整合了隐藏浏览器指纹等功能

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 前景提要 driver Driver() 常用driver 接口 最后的话 前景提要 新的selenium&#xff0c;整合了隐藏浏览器指纹&#xff0c;非常好用&#x…

Nginx七层(应用层)反向代理:HTTP反向代理proxy_pass篇

Nginx七层&#xff08;应用层&#xff09;反向代理 HTTP反向代理proxy_pass篇 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of thi…

极品AI大模型,抓紧收藏!整合包!

近期&#xff0c;科技巨头谷歌终于发布了1个月前在I/O开发者大会上预告过的Gemma 2大模型。据谷歌介绍&#xff0c;与第1代Gemma模型相比&#xff0c;新模型拥有更优的性能&#xff0c;推理效率也更高。我当然是&#xff0c;“无所谓&#xff0c;我会出手.jpg”&#xff0c;给大…

微深节能 料场堆取料机大机定位防碰撞系统 格雷母线

在现代工业领域&#xff0c;尤其是大型料场、港口、码头等复杂作业环境中&#xff0c;堆取料机的精准定位与防碰撞系统显得尤为重要。这些大型设备的高效、安全运行直接关系到生产效率和作业安全。武汉市微深节能科技有限公司推出的格雷母线高精度位移测量系统&#xff0c;为料…

AI中药处方模型构建与案例

在中医领域,人工智能(AI)可以生成各种指令来辅助诊断、治疗和研究。 1. 诊断辅助指令: 根据患者的症状和体征,自动分析并生成可能的中医证候诊断建议。利用中医望闻问切四诊信息,智能识别关键症状,提供对应的中医辨证思路。2. 治疗建议指令: 根据辨证结果,自动推荐相应…

什么牌子麦克风好,无线麦克风什么品牌好,领夹麦克风性价比推荐

在自媒体内容创作的繁荣时代&#xff0c;领夹麦克风作为提升音频质量的关键工具&#xff0c;其市场需求正以前所未有的速度扩张。面对市场上琳琅满目的品牌和型号&#xff0c;如何在众多选项中做出既贴合个人需求又具备专业水准的选择&#xff0c;成为创作者们共同面临的课题。…

TB作品】51单片机 Proteus仿真 51单片机SPI显示OLED字符驱动

// GND 电源地 // VCC 接5V或3.3v电源 // D0 P1^4&#xff08;SCL&#xff09; // D1 P1^3&#xff08;SDA&#xff09; // RES 接P12 // DC 接P11 // CS 接P10 OLED显示接口与控制实验报告 背景 OLED&#xff08;有机发光二极管&#xff09;显示器由于其高对比度、低功耗和…

【DFS(深度优先搜索)详解】看这一篇就够啦

【DFS详解】看这一篇就够啦 &#x1f343;1. 算法思想&#x1f343;2. 三种枚举方式&#x1f343;2.1 指数型枚举&#x1f343;2.2 排列型枚举&#x1f343;2.3 组合型枚举 &#x1f343;3. 剪枝优化&#x1f343;4. 图的搜索&#x1f343;5. 来几道题试试手&#x1f343;5.1 选…

通过端口转发实现docker容器运行时端口更改

通过端口转发实现docker容器运行时端口更改 前言启动容器查看容器ip地址端口转发 前言 关于修改docker正在运行中容器端口&#xff0c;网上大部分分为3类: 1. 删除原有容器重新创建;2. 改配置文件;3. 在现有容器上新提交镜像&#xff0c;用新镜像起新的容器。 1和3属于同一种流…