首页 / 专利库 / 电脑零配件 / 计算机系统 / 硬件 / 外围设备 / 键盘 / 导航键 / 箭头键 / 一种面向三维场景的矢量图标绘制方法及装置

一种面向三维场景的矢量图标绘制方法及装置

阅读:738发布:2020-05-12

专利汇可以提供一种面向三维场景的矢量图标绘制方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种面向三维场景的矢量图标绘制方法及装置,本发明的矢量图标绘制方法包括:1)各种图标对象(规则/不规则)的定义;2)设计实现各图标对象的几何 算法 ;3)绘制图标对像,保存其基本信息;4)针对各种图标对象进行编辑逻辑的设定。本发明包含规则和非规则两类图标绘制及编辑,可灵活扩展,适用于各类专业组合图元的绘制和编辑。本发明适用于桌面端、Web端、移动端各类型图标绘制场景,已在各端应用中实践。同时该方案虽为三维绘制,但可灵活扩展,适用于各类专业组合图元的绘制和编辑,亦可稍作调整适用于二维图标的绘制和编辑。该图标绘制算法成熟、稳定,已通过各大开源地图平台实际应用予以验证,具备较大推广价值。,下面是一种面向三维场景的矢量图标绘制方法及装置专利的具体信息内容。

1.一种面向三维场景的矢量图标绘制方法,其特征在于,包括以下步骤:
S1、各种图标对象的图标基类及各派生类的定义,具体为:
针对规则图标和非规则图标,抽象出一个共同的基类MilPlotBase,基类MilPlotBase中包含图标的基本属性以及用于绘制和编辑的基本操作函数,所述基本属性包含图标类型mType,所述基本操作函数为虚函数;对于不同类型的图标,对应的派生类从该基类继承,各派生类根据mType属性字段来区分,重载实现相应的虚函数;
S2、设计实现各图标对象的几何算法,包括基础算法、规则图标算法以及不规则图标算法;规则图标算法包含旗帜类图标的实现算法和指北针类图标的实现算法;不规则图标算法包含箭头类图标的实现算法和集结区域类图标的实现算法;
基础算法包含如下算法:
(1)分别用于贴地和不贴地的贝塞尔曲线算法;
(2)分别用于贴地和不贴地的样条曲线算法,样条曲线算法的阶乘因子>=2;
(3)几何插值加密算法;
(4)计算几何中心点算法;
(5)根据地形更新几何各坐标点高程算法;
旗帜类图标的实现算法流程如下:
S211、根据任意两控制点构成一个竖直面;
S212、根据旗杆在竖直面横向和纵向所占比例,计算旗杆对应线段的两端点;
S213、根据旗帜组成比例关系计算旗帜类图标的头部控制点;
S214、根据头部控制点计算旗帜头部几何坐标点序列:
(1)三旗和矩形旗根据上一步计算的头部控制点的相关坐标计算出旗帜头部的三角形和矩形的几何坐标点序列;
(2)波浪旗旗帜头部几何由四部分组成:上下2条样条曲线以及左右2条线段,样条曲线根据其所占比例先计算其两端的控制点,通过插值得到控制点数组,然后利用Bezier曲线算法计算其几何坐标点序列;左右线段根据步骤S212计算的对应线段的两端点及步骤S213计算出的头部控制点分别计算左右线段几何坐标,按顺序连接两条Bezier曲线和左右线段,构成波浪旗旗帜的头部几何坐标点序列;
S215、将旗杆和旗帜的头部几何坐标点序列按顺序存储构成旗帜图标的两个几何坐标点数组;
指北针类图标的实现算法流程如下:
S221、设计指北针图标都同时含有文字和几何,对于文字和几何分别去设计;设计时,在平面视图模式下计算指北针图标各部分的几何,如果场景中有地形数据,则对各个几何进行插值,然后利用基础算法计算各个几何每个坐标点的高程,实现指北针类图标贴地形的效果;
S222、计算指北针图标各个不同部分的定位点;
S223、根据定位点及相关的比例因子计算指北针图标中各部分的几何组成,得到各组成部分的坐标序列;
S224、对各组成部分的坐标序列进行插值加密;
S225、对插值加密过的坐标序列的每个坐标计算其高程,并保存为三维坐标点序列;
S226、按设计逻辑保存三维坐标点序列;
S227、保存图标中各文字的坐标及内容;
集结区域类图标的实现算法的原理是:采用现有算法实现在二维平面的设计,然后利用基础算法实现高程的设计,从而得到集结区域类图标的三维设计算法;箭头类图标的实现算法包含单箭头图标的实现方法和双箭头坐标的实现方法;其中,单箭头图标的算法流程如下所示:
S231、分析控制点数组,确认有效控制点;其中,直箭头由两个有效控制点进行控制,燕尾单箭头由大于2个的多个有效控制点进行控制;
S232、利用有效控制点及箭头头、腰、尾部各部分的比例关系计算箭头各部分的定位点:通过有效控制点、各部分之间的比例关系以及各夹角的大小进行几何运算计算出各部分的定位点;
S233、根据头部定位点计算头部几何的坐标点序列:通过头部因子、最后的一个控制点以及矢量方向计算头部各定位点,将头部各定位点按顺序连接起来构成箭头头部;
S234、根据尾部定位点计算尾部几何的坐标点序列;
S235、根据腰部控制点生成样条曲线,构成腰部几何坐标点序列:双线箭头腰部的定位点,通过头部定位点、尾部定位点及腰部的宽度因子来计算;单线箭头的腰部按照控制点生成样条曲线,头部则通过最后的两个控制点计算其矢量方向;
S236、按照顺序连接头部、腰部、尾部所有几何点序列,构成箭头的所有坐标点数组;
S237、对箭头坐标点序列进行插值加密;
S238、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
其中,双箭头图标的算法流程如下所示:
S241、分析控制点数组,构建双箭头所需的四个控制点;
S242、分别计算生成双箭头的两个组成部分对应的新的控制点序列,所述两个组成部分是指将双箭头图标划分为两个部分,各部分各自具有一个箭头,以及腰部和尾部,从而形成第一部分和第二部分;
S243、利用控制点及各部分的比例关系计算箭头头部、腰部、尾部各部分控制点;
S244、根据腰部控制点计算第一部分的腰、第二部分的腰及腰部中间的控制点序列:
(1)计算腰部中线控制点:根据新的控制点坐标,对于第一部分和第二部分,分别根据头部及尾部因子,确定其腰部中线控制点的首尾坐标,然后对两点之间的线段进行插值,得到腰部控制点序列;
(2)计算腰部控制点:腰部控制点分左腰部和右腰部控制点,由腰部第一部分因子和第二部分因子来控制腰部形状,通过对插值点根据因子做偏移来得到第一部分和第一部分的两个腰部控制点序列;
S245、根据头部定位点计算两个箭头头部几何的坐标点序列;
S246、根据尾部定位点计算两个箭头尾部几何的坐标点序列;
S247、根据腰部控制点生成Bezier曲线,构成腰部几何坐标点序列:
基于步骤S244得到的3个腰部控制点序列,对控制点序列的首尾两点进行容错处理,以保证控制点序列与箭头头部以及箭头尾部相连接;通过Bezier曲线进行拟合生成光滑曲线得到腰部几何坐标点序列;
S248、顺序连接箭头头部、尾部及腰部点序列,构成箭头的坐标点数组;
S249、对箭头坐标点序列进行插值加密;
S2410、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
S3、交互绘制图标对象,添加图标几何、定制图标样式,并保存图标的基本信息;
S4、针对各种图标对象进行编辑逻辑的设定,包括两类:整体变换和由于控制点的重置而导致的图标任意变换。
2.根据权利要求1所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S1中所述基本属性以及绘制和编辑的处理函数具体包含:基类MilPlotBase中包含图标标识ID、图标名称Name、图标类型mType、图标控制点数组ctrolDots、图标图形参数数组ginfos、用于创建图标,获取创建图标的几何对象数组的虚函数CreateMilPlot()、用于根据控制点的改变更新图标的虚函数UpdateMilPlot()、用于更新图标的图形参数的虚函数UpdateMilPlotInfo()、用于计算中心点的虚函数CalCenter()、用于平移图标的虚函数MoveMilPlot()、用于旋转图标的虚函数RotateMilPlot()、用于缩放图标的虚函数ScaleMilPlot()、用于重新绘制图标的虚函数Redraw;
CreateMilPlot、Update MilPlot以及UpdateMilPlotInfo()使用步骤2所涉及的具体图标的算法,实现生成图标的所有组成部分的几何点序列;
Move、Scale、Rotate可通过监听鼠标事件自定义交互工具实现图元的相应操作,实现相应操作时,通过图标对象的ctrolDots字段重新赋值,实现对图标的控制点的更新:两种情况:(1)对于Scale和Rotate来说,要求根据参照点进行控制点的修改,该参照点可通过CalCenter方法获取,再采取相应的缩放、旋转几何算法对控制点进行更新;(2)对于Move来说,只需对所有的控制点进行相应的平移几何运算即可。
3.根据权利要求1所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S222中,所述定位点根据整个图标的控制点以及各部分比例因素去综合考量计算;对于文字而言,采用下述两种方法中的一种去实现:(1)作为标注类考虑,仅仅在定位点上加相应的标注即可;(2)作为一个几何来处理,分别计算每个字的矢量点。
4.根据权利要求1所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S3分为以下步骤:
S31、监听鼠标事件,获取鼠标点击的坐标点序列:
通过鼠标或者触摸交互获取图标控制点,根据图标类型的不同要求获取不同数量的控制点;
S32、将通过交互获取的坐标为设备坐标或者屏幕坐标,通过地图平台提供的相应的API转为二维坐标,从而得到二维的地图坐标的控制点坐标序列;
S33、根据转换过的控制点坐标序列,调用图标算法,获取图标几何的三维坐标点序列,根据坐标点序列构建地图开发库所支持绘制的几何对象;
S34、定制图标对象的几何绘制样式,包括边线颜色、边线宽度、填充颜色及透明度、字体、字形、字体颜色及大小;设定图标对象的属性,包括ID、名称、类型、控制点序列、以及其他扩展属性;
S35、把图标坐标点序列构成地图库所支持的几何对象;
S36、根据绘制样式以及图标几何对象调用相应图形库或者地图开发库的API接口实现绘制,同时保存相应的属性信息
5.根据权利要求1所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S4中,所述整体变换是指移动、旋转以及缩放。
6.根据权利要求1所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S4中,所述编辑逻辑所对应的编辑包括:修改图标样式、修改图标属性以及修改图标几何。
7.根据权利要求2所述的面向三维场景的矢量图标绘制方法,其特征在于,步骤S4包括如下步骤:
S41、通过交互方式,通过地图开发库API提供的根据坐标来获取图元的接口来获取图标坐标;
S42、经过坐标转换,将步骤S41得到的图标坐标转换为生成地图坐标;
S43、根据地图坐标,修改图标样式及属性:
修改图标样式有两种方式:(1)根据先前获取的图标,得到其控制点序列和属性,删除现有的图标,重新根据控制点和图标样式生成并添加新的图标,然后把相应的属性信息添加到新的图标;(2)直接修改现有图标样式,该方式需在内存中维护图标具体的几何,缺点是占用了更多的内存,优点是更为简单;
修改图标属性:图标属性由于是挂接在图标对象上的,因此在获取图标对象的同时,也就获取了相应的属性信息,该属性信息在设计时以键值对来进行管理,修改相应的键值即可;
修改现有图标样式,有两个层次:保持图标整体形状以及各部分的比例关系不变;在设计图标对象类时,在基类MilPlotBase定义有MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot()这几个虚函数,在具体的图标派生类中重载实现这几个函数,而实现这几个函数的方式同样有两种:1、直接在图标派生类中维护图标具体的几何,相应的操作则是针对各几何对象作几何运算,实现各几何对象的MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot();2、根据现有图标对象的控制点,计算移动、缩放、旋转后新的控制点,然后重新生成、添加新的图标对象,删除现有的即可;
S44、直接修改图标控制点:
操作对象直接是图标的控制点,则图标的整体都会发生变化,因此对于图标控制点的存储要有相应的逻辑,按照一定的顺序存储,从控制点序列中很明确地知道控制点在图标中的方位,从而实现直接修改;
S45、根据新的控制点重新生成图标:
S46、调用图标生成算法,绘制图标;
S47、保存新的图标控制点序列。
8.根据权利要求7所述的面向三维场景的矢量图标绘制方法,其特征在于,在步骤S45中:
在设计图标对象类时,在基类MilPlotBase定义有Update MilPlot()这个虚函数,在具体的图标派生类中重载实现;由于控制点的修改对各种类型图标的影响是不同的,对于箭头类图标,无需考虑其他因素,直接根据修改过的控制点重新调用图标生成算法生成新的图标即可;但是对于旗帜类、指北针类图标,图标控制点的修改,还需考虑到图标局部的形状不变,对于旗帜类的旗帜头部、指北针类各个部分都应保存相应的比例关系。
9.一种面向三维场景的矢量图标绘制装置,具备计算机存储介质,所述计算机存储介质内存储有计算机可执行指令,其特征在于,所述计算机可执行指令用于实现如权利要求
1-8任一项所述的面向三维场景的矢量图标编辑装置。

说明书全文

一种面向三维场景的矢量图标绘制方法及装置

技术领域

[0001] 本发明涉及图标绘制与编辑领域,更具体地说,涉及一种面向三维场景的矢量图标绘制方法及装置。

背景技术

[0002] 图标可分为规则图标和非规则图标,规则图标是指其几何形状及各部分的比例关系固定,且不依时间、地点和其它因素而改变,比如旗帜类、指北针类等图标,非规则图标是指指不能或完全不能形成标准化数据,需要用特定的算法来描述图形特征,依比例尺或半依比例尺的图标,比如箭头类、地域类等。
[0003] 图标绘制与编辑功能是应急救援等应用系统的基础功能。传统的二维空间中的图标绘制方法无法适应三维应用场景。现有的三维图标绘制方法由于过于复杂,性能较低,无法快速应用于三维应用系统中。

发明内容

[0004] 本发明要解决的技术问题在于,针对现有技术的现有三维图标绘制方法由于过于复杂,性能较低,无法快速应用于三维应用系统中的缺陷,提供一种更为高效可行的面向三维场景的矢量图标绘制方法及装置,其目的在于实现面向三维场景的矢量图标快速渲染
[0005] 根据本法发明的其中一方面,本发明解决其技术问题所采用的技术方案是:构造一种面向三维场景的矢量图标绘制方法,包括以下步骤:
[0006] S1、各种图标对象的图标基类及各派生类的定义,具体为:
[0007] 针对规则图标和非规则图标,抽象出一个共同的基类MilPlotBase,基类MilPlotBase中包含图标的基本属性以及用于绘制和编辑的基本操作函数,所述基本属性包含图标类型mType,所述基本操作函数为虚函数;对于不同类型的图标,对应的派生类从该基类继承,各派生类根据mType属性字段来区分,重载实现相应的虚函数;
[0008] S2、设计实现各图标对象的几何算法,包括基础算法、规则图标算法以及不规则图标算法;规则图标算法包含旗帜类图标的实现算法和指北针类图标的实现算法;不规则图标算法包含箭头类图标的实现算法和集结区域类图标的实现算法;
[0009] 基础算法包含如下算法:
[0010] (1)分别用于贴地和不贴地的贝塞尔曲线算法;
[0011] (2)分别用于贴地和不贴地的样条曲线算法,样条曲线算法的阶乘因子>=2;
[0012] (3)几何插值加密算法;
[0013] (4)计算几何中心点算法;
[0014] (5)根据地形更新几何各坐标点高程算法;
[0015] 旗帜类图标的实现算法流程如下:
[0016] S211、根据任意两控制点构成一个竖直面;
[0017] S212、根据旗杆在竖直面横向和纵向所占比例,计算旗杆对应线段的两端点;
[0018] S213、根据旗帜组成比例关系计算旗帜类图标的头部控制点;
[0019] S214、根据头部控制点计算旗帜头部几何坐标点序列:
[0020] (1)三旗和矩形旗根据上一步计算的头部控制点的相关坐标计算出旗帜头部的三角形和矩形的几何坐标点序列;
[0021] (2)波浪旗旗帜头部几何由四部分组成:上下2条样条曲线以及左右2条线段,样条曲线根据其所占比例先计算其两端的控制点,通过插值得到控制点数组,然后利用Bezier曲线算法计算其几何坐标点序列;左右线段根据步骤S212计算的对应线段的两端点及步骤S213计算出的头部控制点分别计算左右线段几何坐标,按顺序连接两条Bezier曲线和左右线段,构成波浪旗旗帜的头部几何坐标点序列;
[0022] S215、将旗杆和旗帜的头部几何坐标点序列按顺序存储构成旗帜图标的两个几何坐标点数组;
[0023] 指北针类图标的实现算法流程如下:
[0024] S221、设计指北针图标都同时含有文字和几何,对于文字和几何分别去设计;设计时,在平面视图模式下计算指北针图标各部分的几何,如果场景中有地形数据,则对各个几何进行插值,然后利用基础算法计算各个几何每个坐标点的高程,实现指北针类图标贴地形的效果;
[0025] S222、计算指北针图标各个不同部分的定位点;
[0026] S223、根据定位点及相关的比例因子计算指北针图标中各部分的几何组成,得到各组成部分的坐标序列;
[0027] S224、对各组成部分的坐标序列进行插值加密;
[0028] S225、对插值加密过的坐标序列的每个坐标计算其高程,并保存为三维坐标点序列;
[0029] S226、按设计逻辑保存三维坐标点序列;
[0030] S227、保存图标中各文字的坐标及内容;
[0031] 集结区域类图标的实现算法的原理是:采用现有算法实现在二维平面的设计,然后利用基础算法实现高程的设计,从而得到集结区域类图标的三维设计算法;箭头类图标的实现算法包含单箭头图标的实现方法和双箭头坐标的实现方法;其中,单箭头图标的算法流程如下所示:
[0032] S231、分析控制点数组,确认有效控制点;其中,直箭头由两个有效控制点进行控制,燕尾单箭头由大于2个的多个有效控制点进行控制;
[0033] S232、利用有效控制点及箭头头、腰、尾部各部分的比例关系计算箭头各部分的定位点:通过有效控制点、各部分之间的比例关系以及各夹角的大小进行几何运算计算出各部分的定位点;
[0034] S233、根据头部定位点计算头部几何的坐标点序列:通过头部因子、最后的一个控制点以及矢量方向计算头部各定位点,将头部各定位点按顺序连接起来构成箭头头部;
[0035] S234、根据尾部定位点计算尾部几何的坐标点序列;
[0036] S235、根据腰部控制点生成样条曲线,构成腰部几何坐标点序列:双线箭头腰部的定位点,通过头部定位点、尾部定位点及腰部的宽度因子来计算;单线箭头的腰部按照控制点生成样条曲线,头部则通过最后的两个控制点计算其矢量方向;
[0037] S236、按照顺序连接头部、腰部、尾部所有几何点序列,构成箭头的所有坐标点数组;
[0038] S237、对箭头坐标点序列进行插值加密;
[0039] S238、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
[0040] 其中,双箭头图标的算法流程如下所示:
[0041] S241、分析控制点数组,构建双箭头所需的四个控制点;
[0042] S242、分别计算生成双箭头的两个组成部分对应的新的控制点序列,所述两个组成部分是指将双箭头图标划分为两个部分,各部分各自具有一个箭头,以及腰部和尾部,从而形成第一部分和第二部分;
[0043] S243、利用控制点及各部分的比例关系计算箭头头部、腰部、尾部各部分控制点;
[0044] S244、根据腰部控制点计算第一部分的腰、第二部分的腰及腰部中间的控制点序列:
[0045] (1)计算腰部中线控制点:根据新的控制点坐标,对于第一部分和第二部分,分别根据头部及尾部因子,确定其腰部中线控制点的首尾坐标,然后对两点之间的线段进行插值,得到腰部控制点序列;
[0046] (2)计算腰部控制点:腰部控制点分左腰部和右腰部控制点,由腰部第一部分因子和第二部分因子来控制腰部形状,通过对插值点根据因子做偏移来得到第一部分和第一部分的两个腰部控制点序列;
[0047] S245、根据头部定位点计算两个箭头头部几何的坐标点序列;
[0048] S246、根据尾部定位点计算两个箭头尾部几何的坐标点序列;
[0049] S247、根据腰部控制点生成Bezier曲线,构成腰部几何坐标点序列:
[0050] 基于步骤S244得到的3个腰部控制点序列,对控制点序列的首尾两点进行容错处理,以保证控制点序列与箭头头部以及箭头尾部相连接;通过Bezier曲线进行拟合生成光滑曲线得到腰部几何坐标点序列;
[0051] S248、顺序连接箭头头部、尾部及腰部点序列,构成箭头的坐标点数组;
[0052] S249、对箭头坐标点序列进行插值加密;
[0053] S2410、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
[0054] S3、交互绘制图标对象,添加图标几何、定制图标样式,并保存图标的基本信息;
[0055] S4、针对各种图标对象进行编辑逻辑的设定,包括两类:整体变换和由于控制点的重置而导致的图标任意变换。
[0056] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S1中所述基本属性以及绘制和编辑的处理函数具体包含:基类MilPlotBase中包含图标标识ID、图标名称Name、图标类型mType、图标控制点数组ctrolDots、图标图形参数数组ginfos、用于创建图标,获取创建图标的几何对象数组的虚函数CreateMilPlot()、用于根据控制点的改变更新图标的虚函数UpdateMilPlot( )、用于更新图标的图形参数的虚函数UpdateMilPlotInfo()、用于计算中心点的虚函数CalCenter()、用于平移图标的虚函数 MoveMilPlot()、用于旋转图标的虚函数RotateMilPlot()、用于缩放图标的虚函数ScaleMilPlot()、用于重新绘制图标的虚函数Redraw;
[0057] CreateMilPlot、Update MilPlot以及UpdateMilPlotInfo()使用步骤2所涉及的具体图标的算法,实现生成图标的所有组成部分的几何点序列;
[0058] Move、Scale、Rotate可通过监听鼠标事件自定义交互工具实现图元的相应操作,实现相应操作时,通过图标对象的ctrolDots字段重新赋值,实现对图标的控制点的更新:两种情况:(1)对于Scale和Rotate 来说,要求根据参照点进行控制点的修改,该参照点可通过CalCenter方法获取,再采取相应的缩放、旋转几何算法对控制点进行更新;(2)对于Move来说,只需对所有的控制点进行相应的平移几何运算即可。
[0059] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S222中,所述定位点根据整个图标的控制点以及各部分比例因素去综合考量计算;对于文字而言,采用下述两种方法中的一种去实现: (1)作为标注类考虑,仅仅在定位点上加相应的标注即可;(2)作为一个几何来处理,分别计算每个字的矢量点。
[0060] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S3分为以下步骤:
[0061] S31、监听鼠标事件,获取鼠标点击的坐标点序列:
[0062] 通过鼠标或者触摸交互获取图标控制点,根据图标类型的不同要求获取不同数量的控制点;
[0063] S32、将通过交互获取的坐标为设备坐标或者屏幕坐标,通过地图平台提供的相应的API转为二维坐标,从而得到二维的地图坐标的控制点坐标序列;
[0064] S33、根据转换过的控制点坐标序列,调用图标算法,获取图标几何的三维坐标点序列,根据坐标点序列构建地图开发库所支持绘制的几何对象;
[0065] S34、定制图标对象的几何绘制样式,包括边线颜色、边线宽度、填充颜色及透明度、字体、字形、字体颜色及大小;设定图标对象的属性,包括ID、名称、类型、控制点序列、以及其他扩展属性;
[0066] S35、把图标坐标点序列构成地图库所支持的几何对象;
[0067] S36、根据绘制样式以及图标几何对象调用相应图形库或者地图开发库的API接口实现绘制,同时保存相应的属性信息
[0068] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S4中,所述整体变换是指移动、旋转以及缩放。
[0069] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S4中,所述编辑逻辑所对应的编辑包括:修改图标样式、修改图标属性以及修改图标几何。
[0070] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,步骤S4包括如下步骤:
[0071] S41、通过交互方式,通过地图开发库API提供的根据坐标来获取图元的接口来获取图标坐标;
[0072] S42、经过坐标转换,将步骤S41得到的图标坐标转换为生成地图坐标;
[0073] S43、根据地图坐标,修改图标样式及属性:
[0074] 修改图标样式有两种方式:(1)根据先前获取的图标,得到其控制点序列和属性,删除现有的图标,重新根据控制点和图标样式生成并添加新的图标,然后把相应的属性信息添加到新的图标;(2)直接修改现有图标样式,该方式需在内存中维护图标具体的几何,缺点是占用了更多的内存,优点是更为简单;
[0075] 修改图标属性:图标属性由于是挂接在图标对象上的,因此在获取图标对象的同时,也就获取了相应的属性信息,该属性信息在设计时以键值对来进行管理,修改相应的键值即可;
[0076] 修改现有图标样式,有两个层次:保持图标整体形状以及各部分的比例关系不变;在设计图标对象类时,在基类MilPlotBase定义有MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot()这几个虚函数,在具体的图标派生类中重载实现这几个函数,而实现这几个函数的方式同样有两种:1、直接在图标派生类中维护图标具体的几何,相应的操作则是针对各几何对象作几何运算,实现各几何对象的MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot();2、根据现有图标对象的控制点,计算移动、缩放、旋转后新的控制点,然后重新生成、添加新的图标对象,删除现有的即可;
[0077] S44、直接修改图标控制点:
[0078] 操作对象直接是图标的控制点,则图标的整体都会发生变化,因此对于图标控制点的存储要有相应的逻辑,按照一定的顺序存储,从控制点序列中很明确地知道控制点在图标中的方位,从而实现直接修改;
[0079] S45、根据新的控制点重新生成图标:
[0080] S46、调用图标生成算法,绘制图标;
[0081] S47、保存新的图标控制点序列。
[0082] 进一步地,在本发明的面向三维场景的矢量图标绘制方法中,在步骤S45中:
[0083] 在设计图标对象类时,在基类MilPlotBase定义有Update MilPlot()这个虚函数,在具体的图标派生类中重载实现;由于控制点的修改对各种类型图标的影响是不同的,对于箭头类图标,无需考虑其他因素,直接根据修改过的控制点重新调用图标生成算法生成新的图标即可;但是对于旗帜类、指北针类图标,图标控制点的修改,还需考虑到图标局部的形状不变,对于旗帜类的旗帜头部、指北针类各个部分都应保存相应的比例关系。
[0084] 根据本发明的另一方面,本发明为解决其技术问题,还提供了一种面向三维场景的矢量图标绘制装置,具备计算机存储介质,所述计算机存储介质内存储有计算机可执行指令,所述计算机可执行指令用于实现上述任一项所述的面向三维场景的矢量图标编辑装置。
[0085] 实施本发明的面向三维场景的矢量图标绘制方法及装置,具有以下有益效果:本发明适用于桌面端、Web端、移动端各类型图标绘制场景,已在各端应用中实践。同时该方案虽为三维绘制,但可灵活扩展,适用于各类专业组合图元的绘制和编辑,亦可稍作调整适用于二维图标的绘制和编辑。该图标绘制算法成熟、稳定,已通过各大开源地图平台实际应用予以验证,具备较大推广价值。附图说明
[0086] 下面将结合附图及实施例对本发明作进一步说明,附图中:
[0087] 图1是Web前端三维场景中图标绘制方法的流程图
[0088] 图2是图标简化类图;
[0089] 图3是三角旗的示意图;
[0090] 图4是加控制点的三角旗的示意图;
[0091] 图5是矩形旗的示意图;
[0092] 图6是加控制点的矩形旗的示意图;
[0093] 图7是波浪旗的示意图;
[0094] 图8是加控制点的波浪旗的示意图;
[0095] 图9是旗帜类图标的算法流程图;
[0096] 图10是圆形尖角指北针的示意图;
[0097] 图11是带控制点的圆形尖角指北针的示意图;
[0098] 图12是十字箭头指北针的示意图;
[0099] 图13是带控制点的十字箭头指北针的示意图;
[0100] 图14是指北针图标的算法流程图;
[0101] 图15是圆形尖角指北针组成部分的示意图;
[0102] 图16是十字箭头指北针组成部分的示意图;
[0103] 图17是简单燕尾箭头的示意图;
[0104] 图18是带控制点的简单燕尾箭头的示意图;
[0105] 图19是直箭头的示意图;
[0106] 图20带控制点的直箭头的示意图;
[0107] 图21是单线箭头的示意图;
[0108] 图22是带控制点的单线箭头的示意图;
[0109] 图23是双线箭头的示意图;
[0110] 图24是带控制点的双线箭头的示意图;
[0111] 图25是集结区的示意图;
[0112] 图26是带控制点的集结区的示意图;
[0113] 图27是简单燕尾箭头组成部分的示意图;
[0114] 图28是直箭头组成部分的示意图;
[0115] 图29是双箭头组成部分的示意图;
[0116] 图30是单线箭头组成部分的示意图;
[0117] 图31是集结区组成部分的示意图;
[0118] 图32是单向箭头的算法流程图;
[0119] 图33是双箭头控制点示意图;
[0120] 图34是双箭头的算法流程图;
[0121] 图35是图标绘制流程图;
[0122] 图36是图标编辑流程图。

具体实施方式

[0123] 为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
[0124] 一种面向三维场景的矢量图标绘制及编辑方法,如图1所示,其包括以下步骤如下具体所示。
[0125] 步骤1)各种图标对象(规则/不规则)的定义,包括图标基类及各派生类的定义和实现
[0126] 1、规则图标:指其几何形状及各部分的比例关系固定,且不依时间、地点和其它因素而改变,比如旗帜类、指北针类等图标。
[0127] 2、非规则图标:指不能或完全不能形成标准化数据,需要用特定的算法来描述图形特征,依比例尺或半依比例尺的图标,比如箭头类、地域类等。
[0128] 针对规则图标和非规则图标,抽象出一个共同的基类MilPlotBase,具体如下代码所示。基类 MilPlotBase中包含图标的基本属性以及用于绘制和编辑的基本操作函数,所述基本属性包含图标类型mType,所述基本操作函数为虚函数;对于不同类型的图标,对应的派生类从该基类继承,各派生类根据mType属性字段来区分,重载实现相应的虚函数。
[0129]
[0130]
[0131] 同时参考图2,其为图标简化类图。在本实施例中,基类MilPlotBase中包含图标标识ID、图标名称Name、图标类型mType、图标控制点数组ctrolDots、图标图形参数数组ginfos、用于创建图标,获取创建图标的几何对象数组的虚函数CreateMilPlot()、用于根据控制点的改变更新图标的虚函数 UpdateMilPlot()、用于更新图标的图形参数的虚函数UpdateMilPlotInfo()、用于计算中心点的虚函数 CalCenter()、用于平移图标的虚函数MoveMilPlot()、用于旋转图标的虚函数RotateMilPlot()、用于缩放图标的虚函数ScaleMilPlot()、用于重新绘制图标的虚函数Redraw;
[0132] 对于不同类型的图标可分别从该基类继承,根据mType属性字段来区分,重载实现相应的虚函数,需要注意的是:
[0133] 1、CreateMilPlot(后续函数名均为简写形式)及Update需要使用步骤2所涉及的具体图标的算法,该算法应能实现生成该图标的所有组成部分的几何点序列。
[0134] 2、Move、Scale、Rotate可通过监听鼠标事件自定义交互工具实现图元的相应操作,但是这些操作对于控制点是有影响的,因此需更新控制点,即对图标对象的ctrolDots字段重新赋值,两种情况:(1) 对于Scale和Rotate来说,要求根据参照点进行控制点的修改,该参照点可通过CalCenter方法获取,再采取相应的缩放、旋转几何算法对控制点进行更新;(2)对于Move来说,只需对所有的控制点进行相应的平移几何运算即可。
[0135] 步骤2)设计实现各图标对象的几何算法
[0136] 1、基础算法:分析各种图标的各个组成部分,设计实现其基础算法,包含如下:
[0137] (1)贝塞尔曲线算法(贴地、不贴地);
[0138] (2)样条曲线(阶乘因子>=2)算法(贴地、不贴地);
[0139] (3)几何插值加密算法;
[0140] (4)计算几何中心点算法;
[0141] (5)根据地形更新几何各坐标点高程算法(支持三维的地图库都有提供取地形高程的API)。
[0142] 2、规则图标算法:根据二维图标的相应规范,规范中明确了图标各个部分的组成及其比例关系,依据其在三维场景中呈现状态的实际情况,需做相应的变化。比如旗帜类图标总是站立的,就需要进行坐标轴的转换;而指北针类图标,需根据场景中是否有地形数据这个因素,如果有地形数据,则图标算法实现的应该是贴地形的几何,而没有地形数据,则只需考虑统一的高程即可。下面分别对旗帜类和指北针类的图标进行设计:
[0143] (1)旗帜类图标:根据不同的形状,旗帜类图标可分为三角旗、波浪旗、矩形旗等,而该类图标都有两部分构成:多边形代表旗(数量:1)、线段代表旗杆(数量:1),如图3至图8所示。
[0144] 具体算法流程如下,如图9所示:
[0145] S211、根据任意两控制点构成一个竖直面;
[0146] S212、根据旗杆在竖直面横向和纵向所占比例,计算旗杆对应的线段两端点;
[0147] S213、根据旗帜组成比例关系计算旗帜头部控制点;
[0148] S214、根据头部控制点计算旗帜头部几何坐标点序列:
[0149] (1)三角旗和矩形旗比较简单,根据上一步计算的旗杆的头部控制点的相关坐标,可以很容易计算出旗帜头部的三角形和矩形的几何坐标;
[0150] (2)波浪旗旗帜头部几何由四部分组成,上下样条曲线(数量:2)、左右线段(数量:2),样条曲线可根据其所占比例先计算其两端的控制点,通过插值得到控制点数组,然后利用Bezier曲线算法计算其几何坐标,左右线段可根据步骤S212计算的对应线段的两端点及步骤S213计算出的头部控制点分别计算其几何坐标。按顺序连接两条Bezier曲线和左右线段,构成波浪旗旗帜的头部几何坐标点序列。
[0151] S215、将旗杆和旗帜头部的坐标点序列按顺序存储构成旗帜图标的两个几何坐标点数组。
[0152] (2)指北针类图标:根据不同的形状,指北针类图标可分为十种不同的类型,这里不一一列举每种的实现算法,只针对具有代表性的比较复杂的两种(圆形尖角指北针、十字箭头指北针)进行说明,其他类型的可以根据这一设计思路来进行,两类图标如图10至图13所示。
[0153] 具体算法流程如下,如图14所示:
[0154] S221、分析指北针各组成部分:
[0155] 根据其在三维场景中的真实呈现,指北针类图标都应该是平铺地面,因此可在平面视图模式下计算其各部分的几何,如果场景中有地形数据,则对各个几何进行插值,然后计算各个几何每个坐标点的高程(已在基础算法中提供),这样就可以实现贴地形的效果。
[0156] 分析图标的组成部分,如图15、图16所示,两种类型的指北针都有5个组成部分,且都含有文字和几何,对于文字和几何可以分别去设计实现。
[0157] S222、计算图标各个不同部分的定位点:
[0158] 定位点可根据整个图标的控制点以及各部分比例因素去综合考量计算。对于文字而言,有两种方法去实现:(1)作为标注类考虑,仅仅在定位点上加相应的标注即可;(2)作为一个几何来处理,分别计算每个字的矢量点。两种方式各有优缺点:第一种实现简单,且文字的效果要好一些,但是如果有地形的情况下,文字与地形贴合不了;第二种实现算法比较复杂,且效果不如第一种,但能与地形贴合。综合考虑推荐使用第一种方式,即以标注类进行处理。
[0159] S223、根据定位点及相关的比例因子计算指北针图标中各部分的几何组成:
[0160] 比较特殊的是图15中的几何5,这个几何可以通过3个定位点来绘制一条样条曲线或者3点弧来实现,其他的各种几何都是比较规则的,可通过定位点及相应的比例因子很容易实现。
[0161] S224、对各组成部分的坐标序列进行插值加密;
[0162] S225、对插值加密过的坐标序列的每个坐标计算其高程,并保存为三维坐标点序列;
[0163] S226、按设计逻辑保存三维坐标点序列;
[0164] S227、保存图标中各文字的坐标及内容。
[0165] 3、非规则图标算法:指不能形成标准化数据,需要用特定的算法来描述图形特征,依比例尺或半依比例尺的图标,比如箭头类、地域类(集结区域),如图17至图26所示;其中,本发明的简单燕尾箭头即是指单向燕尾箭头。
[0166] 这类箭头根据其在三维场景中的真实呈现,都应该是平铺地面,因此可在平面视图模式下计算其各部分的几何,如果场景中有地形数据,则对各个几何进行插值,然后计算各个几何每个坐标点的高程(已在基础算法中提供),这样就可以实现贴地形的效果。
[0167] 分析图标各部分组成,如图27至图31所示,箭头类图标除单线箭头外都由三大部分构成:头部、尾部、腰部,而单线箭头则只有箭头及腰部两部分构成,集结区则是由一条光滑曲线(样条或者Bezier)构成的封闭区构成。
[0168] (1)常规箭头(即单箭头)的算法流程如图32所示:
[0169] S231、分析控制点数组,确认有效控制点:
[0170] 直箭头由两个控制点进行控制;燕尾简单箭头与直线箭头类似,区别在于由多个控制点进行控制。
[0171] S232、利用有效控制点及箭头头、腰、尾部各部分的比例关系计算箭头各部分的定位点:
[0172] 通过有效控制点、各部分之间的比例关系以及各夹角的大小可以通过几何运算计算出各部分的定位点。
[0173] S233、根据头部定位点计算头部几何的坐标点序列:
[0174] 通过头部因子、最后的一个控制点以及矢量方向计算头部各定位点,将头部各定位点按顺序连接起来构成箭头头部。
[0175] S234、根据尾部定位点计算尾部几何的坐标点序列;
[0176] S235、根据腰部控制点生成样条曲线,构成腰部几何坐标点序列:
[0177] 双线箭头腰部(图27的几何2)的定位点,通过头部定位点、尾部定位点及腰部的宽度因子来计算;单线箭头的腰部(图30的几何2)按照控制点生成样条曲线,头部(图30的几何1)则通过最后的两个控制点计算其矢量方向。
[0178] S236、按照顺序连接头部、腰部、尾部所有几何点序列,构成箭头的所有坐标点数组;
[0179] S237、对箭头坐标点序列进行插值加密;
[0180] S238、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
[0181] 双箭头(图29)算法流程比较复杂,主要分为几个组成部分,箭头头部(数量:2)、箭头尾部(数量: 1),箭头腰部(数量:3),其中头部和尾部的计算与常规箭头步骤S233、S234中的思路是一致的,根据头部及尾部因子可以计算出头部和尾部坐标,难点在于箭头腰部的计算。
[0182] 双箭头的算法流程如图34所示:
[0183] S241、分析控制点数组,构建双箭头所需的四个控制点;
[0184] S242、分别计算生成双箭头的两个组成部分对应的新的控制点序列:
[0185] 两个组成部分是指将双箭头图标划分为两个部分,各部分各自具有一个箭头,以及腰部和尾部,从而形成第一部分和第二部分,即本发明的左半部分和右半部分。双箭头的控制点有4个,其中头部控制点为图33 的几何2、图33的几何4,其余的是两个尾部控制点,图33的几何1和图33的几何3这两个点实际上是尾部控制点在其中点的插值,图33的几何1和图33的几何2作为图33左边箭头的新的控制点,而图33的几何3和图33的几何4作为图33右边箭头的新的控制点。
[0186] S243、利用控制点及各部分的比例关系计算箭头头部、腰部、尾部各部分控制点;
[0187] S244、根据腰部控制点计算左腰、右腰及腰部中间的控制点序列:
[0188] (1)计算腰部中线控制点:根据上一步生的新的控制点坐标,以图33左边箭头为例,新的控制点为图 33几何1和图33几何2,根据头部及尾部因子,确定其腰部中线控制点的首尾坐标,然后对两点之间的线段进行插值,得到腰部控制点。
[0189] (2)计算腰部控制点:腰部控制点分左腰部和右腰部控制点,由腰部左边因子和右边因子来控制腰部形状,通过对插值点根据因子做偏移来得到左右两个腰部控制点序列。
[0190] S245、根据头部定位点计算两个箭头头部几何的坐标点序列;
[0191] S246、根据尾部定位点计算两个箭头尾部几何的坐标点序列;
[0192] S247、根据腰部控制点生成Bezier曲线,构成腰部几何坐标点序列:
[0193] 基于步骤S244得到的3个腰部控制点序列,对控制点序列的首尾两点进行容错处理,以保证控制点序列与箭头头部以及箭头尾部相连接。通过Bezier曲线进行拟合生成光滑曲线得到腰部坐标点序列。
[0194] S248、顺序连接箭头头部、尾部及腰部点序列,构成箭头的坐标点数组;
[0195] S249、对箭头坐标点序列进行插值加密;
[0196] S2410、对插值加密过的二维坐标点序列根据地图地形数据计算其高程值,构成三维坐标点序列。
[0197] 步骤3)交互绘制图标对像,添加图标几何、定制其样式,并保存其基本信息:
[0198] 通过图标算法,获取的是组成相应图标的几何坐标点序列,而真正呈现在用户面前的是图形,这些图形通过图形引擎渲染绘制出来的,同时该图标图形不仅仅是只具有几何的外形,还应该可自定义样式,以及自己独有的属性信息或者说是元数据信息,只有具备了这些条件才是一个完整的图标。
[0199] 实现一个完整的图标对象的绘制,主要分为以下几个步骤,流程如图35所示:
[0200] 步骤1)监听鼠标事件,获取鼠标点击的坐标点序列:
[0201] 通过鼠标或者触摸交互获取图标控制点,根据图标类型的不同要求获取不同数量的控制点:如旗帜类和指北针类要求获取两个控制点,地域类则要求3个及以上的控制点,箭头类根据类型的不同要求的控制点的数量不一样(直箭头:2,普通燕尾箭头:>=2,双箭头:4,单线箭头:>=2)
[0202] 步骤2)坐标转换,获取图标控制点序列:
[0203] 由于通过交互获取的坐标为设备坐标或者屏幕坐标,如果要显示到相应的场景地图中,则需要把设备坐标或者屏幕坐标转换为场景地图所对应的地图坐标,转换方法各种地图平台都有提供相应的API可供调用,这里需要说明的是这种转换都是针对二维坐标,而在三维场景中绘制图形需要的是三维坐标,这个处理是在图标的具体算法中实现,而这里只需得到二维的地图坐标的控制点即可。
[0204] 步骤3)根据转换过的控制点序列,调用图标算法,获取图标几何的三维坐标点序列。根据坐标点序列构建地图开发库等所支持绘制的几何对象;
[0205] 步骤4)定制几何绘制样式,包括边线颜色、边线宽度、填充颜色及透明度、字体、字形、字体颜色及大小等;设定图标对象的属性,包括ID、名称、类型、控制点序列、以及其他扩展属性;
[0206] 步骤5)把图标坐标点序列构成地图库所支持的几何对象;
[0207] 步骤6)根据绘制样式以及图标几何对象调用相应图形库或者地图开发库的API接口实现绘制,同时保存相应的属性信息(内存、本地文件、数据库保存均可)。
[0208] 步骤4)编辑各种图标对象
[0209] 编辑、修改是标绘中不可或缺的一环,同时也分多个层次:1、修改图标样式;2、修改图标属性;3、修改图标几何。
[0210] 其流程如图36所示:
[0211] 步骤1)通过交互方式(鼠标、触摸屏),获取图标坐标点:
[0212] 对于图标对象的获取,地图开发库API都有提供根据坐标来获取图元的接口,对于如指北针类型的图标 (包含几何图元和文字),由于其有几个部分组合而成,我们可以以组合实体来进行处理。
[0213] 步骤2)坐标转换,生成地图坐标:
[0214] 需注意的是通过交互方式获取的坐标同样需要转换为地图坐标。
[0215] 步骤3)根据地图坐标,修改图标样式及属性:
[0216] 修改图标样式有两种方式:(1)根据先前获取的图标,得到其控制点序列和属性,删除现有的图标,重新根据控制点和图标样式生成并添加新的图标,然后把相应的属性信息添加到新的图标。(2)直接修改现有图标样式,该方式需在内存中维护图标具体的几何,缺点是占用了更多的内存,优点是更为简单。
[0217] 修改图标属性:图标属性由于是挂接在图标对象上的,因此在获取图标对象的同时,也就获取了相应的属性信息,该属性信息在设计时一般以键值对来进行管理,修改相应的键值即可。
[0218] 修改现有图标样式,有两个层次:保持图标整体形状以及各部分的比例关系不变,比如整体移动、旋转、缩放。在设计图标对象类时,我们有定义Move、Rotate、Scale几个虚函数,在具体的图标类中可以重载实现这几个函数,而实现这几个函数的方式同样有两种:1、直接在图标类中维护其具体的几何,相应的操作则是针对各几何对象作几何运算,实现各几何对象的Move、Rotate、Scale。2、根据现有图标对象的控制点,计算移动、缩放、旋转后新的控制点,然后重新生成、添加新的图标对象,删除现有的即可。
[0219] 步骤4)直接修改图标控制点:
[0220] 操作对象直接是图标的控制点,则图标的整体都会发生变化,因此对于图标控制点的存储要有相应的逻辑,按照一定的顺序存储,我们可以从控制点序列中很明确地知道控制点在图标中的方位。
[0221] 步骤5)根据新的控制点重新生成图标
[0222] 在设计图标对象类时,我们有定义Update这个虚函数,在具体的图标类中可重载实现。由于控制点的修改对各种类型图标的影响是不同的,比如箭头类图标,无需考虑其他因素,直接根据修改过的控制点重新调用图标生成算法生成新的图标即可;但是对于旗帜类、指北针类图标,图标控制点的修改,还需考虑到图标局部的形状不变,比如旗帜类的旗帜头部、指北针类各个部分都应保存相应的比例关系(与Scale类似,但也有区别,即锚点不一样,Scale操作的锚点是图标的几何中心点,而此操作的锚点是指北针两个控制点中未修改的控制点),因此在实现Update这个接口时,旗帜类和指北针类图标是与图标的生成算法在细节上是有区别的。
[0223] 步骤6)调用图标生成算法,绘制图标;
[0224] 步骤7)保存新的图标控制点序列。
[0225] 上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈