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

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.mzph.cn/bicheng/42862.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器本地部署文件服务器minio

minio类似于阿里云的OSS&#xff0c;为不方便把图、文、日志等形式的文件保存在公有云上的&#xff0c;可以在自己的服务器上部署文件服务器 看过本人前几个文章的&#xff0c;使用docker就会很快上手部署&#xff0c;直接上所有代码 #添加镜像 docker search minio docker p…

怎么给电子文档批量盖骑缝章或公章?

怎么给电子文档批量盖骑缝章或公章?假如你有100个PDF电子文档要同时盖缝章&#xff0c;如果不借助专业的盖电子骑缝章软件&#xff0c;还真不好干。下面讲述如何利用e-章宝批量盖电子骑缝章。 1.在软件中导入待批量盖章的PDF文件 如下图&#xff0c;在“待盖章PDF文件”区域…

谨慎投稿!这本EI期刊正在被“劫持”!

Journsl ofTisniin lniversity Seience and Technology《天津大学学报&#xff08;自然科学与工程技术版&#xff09;》创刊于l955年&#xff0c;月刊&#xff0c;全国核心期刊&#xff0c;天津市一级期刊。该刊是由天津大学主办的综合性学术刊物&#xff0c;主要刊登自然科学和…

这款拖拽式大屏设计神器,太惊艳了!收藏吧!

概念​ 可视化大屏是当今信息时代的一种重要技术工具&#xff0c;它以大屏幕为显示终端&#xff0c;通过图形、图表、地图等形式将大量数据和信息直观地呈现出来&#xff0c;帮助用户更好地理解和分析数据。 JVS智能BI的可视化大屏从界面布局、色彩搭配&#xff0c;到图表类型…

大模型推理加速调研(框架、方法)

大模型推理加速的目标是高吞吐量、低延迟。吞吐量为一个系统可以并行处理的任务量。延时&#xff0c;指一个系统串行处理一个任务时所花费的时间。调研了一些大模型推理的框架。 框架llama.cpprtp-llmvllmTensorRT-LLMLMDeployfastllm语言Chttps://github.com/ggerganov/llama…

SpringBoot项目——送水管理系统

1、导入坐标 坐标作用pagehelper-spring-boot-startermybatis分页插件spring-boot-starter-thymeleafJSP模板引擎mybatis-spring-boot-startermybatisspring-boot-starter-webwebspring-boot-starter-testtestlombok不需要再写getter、setter或equals方法&#xff0c;只要有一…

3D问界—什么是blender,与MAYA有什么区别

问题提出&#xff1a;什么是blender&#xff0c;与MAYA有什么区别 Blender 是一个开源的、免费的 3D 建模和动画软件&#xff0c;广泛应用于各种领域。它提供了丰富的功能和工具&#xff0c;适用于从业余爱好者到专业艺术家的不同需求。 1. Blender 的主要用途和功能 属 性描述…

Vue2基础 13:内置指令

内置指令 1 指令梳理2 补充指令2.1 v-text2.2 v-html2.3 v-cloak案例--延迟引入vue造成js阻塞 2.4 v-once案例--点击按钮1并展示初始的值 2.5 v-pre 1 指令梳理 前面几节的基础学习已经用到了部分的指令&#xff0c;先梳理一下。 指令描述v-bind单向绑定解析表达式&#xff0…

高项论文老是过不了!换种方法与思路…

2024年上半年信息系统项目管理师成绩公布后&#xff0c;许多考生的论文成绩都不理想&#xff0c;很多人得了30多分&#xff0c;及格线上的考生大多只有45、46分&#xff0c;而50分以上的考生似乎并不多。以下应该是许多考生的心声&#xff1a; 每次都是论文不及格&#xff0c;…

蚂蚁全媒体总编刘鑫炜谈新媒体时代艺术家如何创建及提升个人品牌

新媒体时代艺术家如何创建及提升个人品牌形象——专访蚂蚁全媒体总编刘鑫炜 图为蚂蚁全媒体总编刘鑫炜 在新媒体风潮席卷全球的今天&#xff0c;传统艺术与新媒体技术的融合越来越紧密。这种变革不仅改变了艺术作品的呈现方式&#xff0c;也给艺术家们提供了更多的可能性。那么…

【SOLID原则前端中的应用】接口隔离原则(Interface Segregation Principle,ISP)- vue3示例

接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;在Vue 3中的应用 接口隔离原则&#xff08;Interface Segregation Principle&#xff0c;ISP&#xff09;规定&#xff0c;客户端不应该被迫依赖于它不使用的方法。 换句话说&#xff0c;…

图形编辑器基于Paper.js教程07:鼠标画直线或移动路径

探索Paper.js: 使用鼠标绘制直线和轨迹 在数字图形设计和Web应用开发中&#xff0c;提供一个直观和互动的界面供用户绘制图形是极为重要的。Paper.js是一款功能强大的JavaScript库&#xff0c;它使得在HTML5 Canvas上绘制矢量图形变得简单快捷。本文将介绍如何使用Paper.js实现…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

新时代【机器学习】与【Pycharm】:【随机数据生成】与智能【股票市场分析】

目录 第一步&#xff1a;准备工作 1.1 安装必要的库 小李的理解&#xff1a; 1.2 导入库 小李的理解&#xff1a; 第二步&#xff1a;生成和准备数据 2.1 生成随机股票数据 小李的理解&#xff1a; 2.2 数据探索与可视化 小李的理解&#xff1a; 2.3 数据处理 小李…

可编程直流电源的恒压模式(CV)和恒流模式(CC)

本文介绍可编程直流电源的恒压模式&#xff08;CV&#xff09;和恒流模式&#xff08;CC&#xff09;。 可编程直流电源在硬件开发过程中经常被用到&#xff0c;通常&#xff0c;它有2种模式&#xff0c;恒压模式&#xff08;CV&#xff09;和恒流模式&#xff08;CC&#xff…

桌面记事便签哪款好 好用的桌面记事本app

很多人喜欢在桌面上记事&#xff0c;尤其是经常使用电脑的上班族&#xff0c;这样查看起来更加方便。但在网上众多的记事软件中&#xff0c;哪款才是最好用的呢&#xff1f; 在众多选择中&#xff0c;敬业签以其出色的功能和用户体验脱颖而出&#xff0c;成为很多人记事的首选…

Debezium报错处理系列之第111篇:Can‘t compare binlog filenames with different base names

Debezium报错处理系列之第111篇:Cant compare binlog filenames with different base names 一、完整报错二、错误原因三、解决方法Debezium从入门到精通系列之:研究Debezium技术遇到的各种错误解决方法汇总: Debezium从入门到精通系列之:百篇系列文章汇总之研究Debezium技…

#数据结构 链表

单向链表 1. 概念 单向链表 单向循环链表 双向链表 双向循环链表 解决&#xff1a;长度固定的问题&#xff0c;插入和删除麻烦的问题 1、逻辑结构&#xff1a; 线性结构 2、存储结构&#xff1a; 链式存储 链表就是将 结点 用链串起来的线性表&#xff0c;链就是 结点 中的…

UE C++ 多镜头设置缩放 平移

一.整体思路 首先需要在 想要控制的躯体Pawn上&#xff0c;生成不同相机对应的SpringArm组件。其次是在Controller上&#xff0c;拿到这个Pawn&#xff0c;并在其中设置输入响应&#xff0c;并定义响应事件。响应事件里有指向Pawn的指针&#xff0c;并把Pawn的缩放平移功能进行…

MySQL的慢sql

什么是慢sql 每执行一次sql&#xff0c;数据库除了会返回执行结果以外&#xff0c;还会返回sql执行耗时&#xff0c;以mysql数据库为例&#xff0c;当我们开启了慢sql监控开关后&#xff0c;默认配置下&#xff0c;当sql的执行时间大于10s&#xff0c;会被记录到慢sql的日志文件…