技术领域
[0001] 本
发明涉及三维图形
渲染领域的富文本编辑技术,也可用于二维图纸(如CAD制图)。
背景技术
[0002] BIM(
建筑信息模型)是近年来建筑信息化领域核心的理念之一,其数据的
基础即为建筑的三维信息模型。相比于传统的二维设计、绘图,BIM技术全面利用三维图形技术,以
建筑物(建筑构件、建筑整体)的三维图形为载体进一步挂接各种建筑信息参数,形成建筑信息模型,然后进行建筑物、甚至构件的全生命周期管理。可以说,三维图形是BIM技术的肌肉与
皮肤,直观的三维图形表达与处理能有效帮助BIM关键应用的落地,实现其价值,譬如建筑模型的
可视化、
碰撞检测、5D虚拟施工等。很难想象这些应用能在非图形或者二维图形的世界中完成。
[0003] 文字显示是三维图形引擎中必不可少的渲染单元。富文本(含多种字体Style)编辑也是文字处理
软件中的常见功能。但是基于三维引擎的富文本编辑工具目前还比较缺乏。而且现在常见的三维引擎中文本显示模
块基本都是单行单样式或者多行单样式,不支持多行文本多样式动态编辑,显示样式如图1所示。此类文本显示技术存在样式单一、固定,不能够实时编辑、动态排版等
缺陷。
发明内容
[0004] 本发明的目的在于解决在现有三维引擎中富文本样式单一、固定且不能够实时编辑、动态排版的问题。
[0005] 为了达到上述目的,本发明提供了一种基于三维引擎的富文本编辑方法,包括以下步骤:
[0006] 1)编辑生成符合Rope数据结构的字符串,所述Rope数据结构中各叶子
节点的字符子串携带有相应的格式;
[0007] 2)对所述Rope数据结构进行解析,依次读取所述Rope数据结构中各叶
子节点的字符子串,并以相应的格式显示在三维引擎的
指定显示区域;其中,根据三维引擎中指定显示区域的大小,以及各字符子串的格式,进行动态排版,所述排版包括换行、调整字符间距。
[0008] 进一步的,步骤1)中各字符子串携带的格式包括中英文、字体、字号、
颜色、倾斜、粗细、下划线、删除线中的一种或多种的组合。
[0009] 进一步的,基于Rope数据结构,步骤1)中生成的所述字符串能够被实时动态编辑,所述编辑包括插入、删除、
修改。
[0010] 进一步的,步骤2)中根据三维引擎中指定显示区域的宽度以及各字符子串的格式,确定每行所能显示的字符个数,据此进行换行或调整字符间距。
[0011] 进一步的,步骤2)中,如果行尾遇到标点符号,则标点符号紧跟行尾显示,本行字符间距微调。
[0012] 进一步的,步骤2)中,如果行尾遇到标点符号,则标点符号连同其之前的一个字符一起换行显示,且上一行字符间距微调。
[0013] 进一步的,步骤2)中所述排版还包括缩进、调整行间距、调整段落间距,根据各字符子串所携带的格式信息进行解析而实现。
[0014] 进一步的,步骤2)中如果所述指定显示区域字符排满之后仍有字符未显示,则将所有字符等比例缩小直至所有字符都能显示。
[0015] 进一步的,所述三维引擎为BIM建筑信息模型中的三维图形引擎。
[0016] 本发明还提供了一种基于三维引擎的富
文本编辑器,包括以下模块:
[0017] 字符串编辑模块,用于编辑生成符合Rope数据结构的字符串,所述Rope数据结构中各叶子节点的字符子串携带有相应的格式;
[0018] 解析排版模块,用于对所述Rope数据结构进行解析,依次读取所述Rope数据结构中各叶子节点的字符子串,并以相应的格式显示在三维引擎的指定显示区域,并根据三维引擎中指定显示区域的大小,以及各字符子串的格式,进行动态排版,所述排版包括换行、调整字符间距。
[0019] 进一步的,字符串编辑模块中,各字符子串携带的格式包括中英文、字体、字号、颜色、倾斜、粗细、下划线、删除线中的一种或多种的组合。
[0020] 进一步的,基于所述Rope数据结构,所述字符串编辑模块能够实时动态编辑所生成的字符串,所述编辑包括插入、删除、修改。
[0021] 进一步的,解析排版模块根据三维引擎中指定显示区域的宽度以及各字符子串的格式,确定每行所能显示的字符个数,据此进行换行或调整字符间距。
[0022] 进一步的,如果行尾遇到标点符号,所述解析排版模块将标点符号紧跟行尾显示,本行字符间距微调。
[0023] 进一步的,如果行尾遇到标点符号,所述解析排版模块将标点符号连同其之前的一个字符一起换行显示,且上一行字符间距微调。
[0024] 进一步的,所述解析排版模块执行的排版还包括缩进、调整行间距、调整段落间距,根据各字符子串所携带的格式信息进行解析而实现。
[0025] 进一步的,如果所述指定显示区域字符排满之后仍有字符未显示,所述解析排版模块将所有字符等比例缩小直至所有字符都能显示。
[0026] 进一步的,所述三维引擎为BIM建筑信息模型中的三维图形引擎。
[0027] 本发明还提供了一种电子设备,该电子设备包括:存储装置;一个或多个处理器;其中,存储装置用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述的方法。
[0028] 本发明还提供了一种
计算机程序产品,包括计算机程序指令,当所述指令由处理器执行时,用于实现前述的方法。
[0029] 本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现前述的方法。
[0030] 与
现有技术相比,本发明借助Rope数据结构对富文本进行编辑,取得了以下技术效果:
[0031] (1)由于富文本以Rope数据结构存储,携带有不同格式的字符子串以Rope数据结构的叶子节点而划分,字符子串可以适应三维引擎显示区域的大小灵活显示在不同的行,从而实现富文本的多样式灵活显示;
[0032] (2)由于富文本是以Rope数据结构存储,这种二叉树结构可以高效处理字符串的拼接、删除、随机
访问,从而可以实现富文本的实时编辑、动态排版。
[0033] 同时本发明也可以用于二维图纸中,实现富文本的实时编辑、动态排版。
附图说明
[0034] 图1为现有技术的文本显示样式图;
[0035] 图2为本发明的富文本显示样式图;
[0036] 图3为本发明的富文本编辑方法
流程图;
[0037] 图4为本发明的富文本编辑器组成结构图。
具体实施方式
[0038] 为了便于本领域普通技术人员理解和实施本发明,下面结合附图对本发明的技术方案进行清楚、完整地描述,应当理解,所描述的
实施例仅仅用以解释本发明,并不限定本发明。
[0039] 本发明需要解决的是富文本文字的多样式问题,还需要解决富文本文字的动态排版问题。为此本发明采用了Rope数据结构。Rope是一个二叉树,叶子节点包含的是断开的字符子串,非叶子节点包含的是权重,权重=节点左边所有叶子节点的字符个数。一个字符串被分为两部分,Rope左子树包含的是字符串的左边部分,Rope右子树包含的是字符串的右边部分。
[0040] 如图3所示,本发明实施例提供了一种基于三维引擎的富文本编辑方法,包括以下步骤:
[0041] S1.编辑生成符合Rope数据结构的字符串,所述Rope数据结构中各叶子节点的字符子串携带有相应的格式。
[0042] 该步骤中,使用带格式化的字符串来表示不同的文字格式,带格式化的字符串以Rope数据结构存放,这种数据结构可以高效处理字符串的拼接、查询、删除以及随机访问,因此符合Rope数据结构的格式化字符串可以被实时动态地进行插入、删除、修改等编辑操作。
[0043] 该步骤中,各字符子串携带的格式包括常见的文字格式,包括字体、字号、颜色、倾斜、粗细、中英文、下划线、删除线等等,也包括上述格式的组合,例如绿色宋体加粗字。
[0044] S2.对所述Rope数据结构进行解析,依次读取所述Rope数据结构中各叶子节点的字符子串,并以相应的格式显示在三维引擎的指定显示区域;其中,根据三维引擎中指定显示区域的大小,以及各字符子串的格式,进行动态排版,所述排版包括换行、调整字符间距。
[0045] 该步骤中,对Rope数据结构进行解析,依次读取的字符串中出现粗体则将字体切换成粗体,如果字符串中出现颜色则按指定的颜色显示等。字符子串的格式可以是一种格式,也可以使多类格式的排列组合,如绿色的宋体加粗字。
[0046] 优选的,步骤S2中根据三维引擎中指定显示区域的宽度以及各字符子串的格式,确定每行所能显示的字符个数,据此进行换行或调整字符间距。本发明的方案中,富文本的字符格式丰富,不同格式(如字体、倾斜、粗细、大小等)的字符所占宽度不同,因此在一个固定宽度的显示区域显示一行文字,每行显示的字数是随字符格式而动态变化的,每行所能显示的字符个数需要根据显示区域的宽度和各字符子串的格式动态确定。另外,当行尾遇到标点符号时,可以根据标点符号的占位宽度灵活选择显示方式,例如当遇到单个逗号、句号等标点符号时,可以选择将标点符号紧跟行尾显示,对本行字符间距微调;而当行尾遇到破折号、省略号以及多个问号、多个感叹号等标点符号时,可以选择将标点符号连同其之前的一个字符一起换行显示,且将上一行字符间距微调。
[0047] 优选的,步骤S2中所述排版还可以包括缩进、调整行间距、调整段落间距等常见的排版情况,缩进值、行间距、段落间距等均可以在编辑生成字符串或者后续实时编辑字符串时通过编辑字符子串的格式而实现,排版时根据各字符子串所携带的格式信息进行解析而实现动态排版。
[0048] 优选的,还可以根据三维引擎中显示区域的大小进行动态排版,例如显示区域排满之后如果仍有字符未显示,则将所有字符等比例缩小直至所有字符都能显示。
[0049] 本发明的富文本显示样式如图2所示,富文本中包含了多种字体、多种字号、多种颜色、粗体、斜体等,且可实时编辑,拖动外周蓝色框可实时排版,类似PPT中的文本框,区别在于,本发明中的实时动态排版功能用于三维引擎。
[0050] 优选的,本发明基于三维引擎的富文本编辑方法中,三维引擎可以是BIM建筑信息模型中的三维图形引擎,用于建筑信息
三维建模领域的富文本显示和编辑排版。
[0051] 如图4所示,本发明实施例还提供了一种基于三维引擎的富文本编辑器,包括以下模块:
[0052] 字符串编辑模块100,用于编辑生成符合Rope数据结构的字符串,所述Rope数据结构中各叶子节点的字符子串携带有相应的格式;
[0053] 解析排版模块200,用于对所述Rope数据结构进行解析,依次读取所述Rope数据结构中各叶子节点的字符子串,并以相应的格式显示在三维引擎的指定显示区域,并根据三维引擎中指定显示区域的大小,以及各字符子串的格式,进行动态排版,所述排版包括换行、调整字符间距。
[0054] 优选的,字符串编辑模块100中,各字符子串携带的格式包括中英文、字体、字号、颜色、倾斜、粗细、下划线、删除线中的一种或多种的组合。
[0055] 优选的,基于所述Rope数据结构,字符串编辑模块100能够实时动态编辑所生成的字符串,所述编辑包括插入、删除、修改。
[0056] 优选的,解析排版模块200根据三维引擎中指定显示区域的宽度以及各字符子串的格式,确定每行所能显示的字符个数,据此进行换行或调整字符间距。不同格式(如字体、倾斜、粗细、大小等)的字符所占宽度不同,因此在一个固定宽度的显示区域显示一行文字,每行显示的字数是随字符格式而动态变化的,每行所能显示的字符个数需要根据显示区域的宽度和各字符子串的格式动态确定。
[0057] 优选的,如果行尾遇到标点符号,所述解析排版模块将标点符号紧跟行尾显示,本行字符间距微调。
[0058] 优选的,如果行尾遇到标点符号,所述解析排版模块将标点符号连同其之前的一个字符一起换行显示,且上一行字符间距微调。
[0059] 优选的,所述解析排版模块200执行的排版还包括缩进、调整行间距、调整段落间距,根据各字符子串所携带的格式信息进行解析而实现。
[0060] 优选的,解析排版模块200还可以根据三维引擎中显示区域的大小进行动态排版,如果所述指定显示区域字符排满之后仍有字符未显示,所述解析排版模块将所有字符等比例缩小直至所有字符都能显示。
[0061] 优选的,所述三维引擎为BIM建筑信息模型中的三维图形引擎。
[0062] 本发明实施例还公开了一种电子设备,该电子设备包括:存储装置;一个或多个处理器;其中,存储装置用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现前述实施例的方法。
[0063] 本发明还提供了一种计算机程序产品,包括计算机程序指令,当所述指令由处理器执行时,用于实现前述实施例的方法。
[0064] 本发明还提供了一种计算机可读存储介质,其上存储有计算机程序,当所述计算机程序被执行时,实现本发明前述实施例的方法。
[0065] 综上,本发明方案基于Rope数据结构对字符串进行构建,使得携带有不同格式的字符子串以叶子节点而划分,从而可以灵活显示在三维引擎显示区域的不同行,实现富文本的多样式灵活显示;同时由于富文本是以Rope数据结构存储,这种二叉树结构可以高效处理字符串的拼接、删除、随机访问,从而可以实现富文本的实时编辑;基于Rope数据结构中各字符子串本身携带的格式或者后续实时编辑设置的格式,本发明中字符串的显示能够实现动态排版。
[0066] 尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
[0067] 需要说明的是,附图中的流程图和
框图显示了根据本发明实施例的方法、装置和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图和框图中的每个方框可以代表一个模块、程序段或代码的一部分,包含一个或多个用于实现逻辑功能的计算机可执行指令。也要注意的是,框图和流程图中的每个方框或方框的组合,可以用执行规定的功能或动作的专用的基于
硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0068] 在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。