[发明专利]一种面向三维场景的矢量图标绘制方法及装置有效
申请号: | 201910997448.8 | 申请日: | 2019-10-21 |
公开(公告)号: | CN110851118B | 公开(公告)日: | 2021-03-23 |
发明(设计)人: | 郭明强;黄颖;王均浩;曹威;谢忠;吴亮;关庆锋 | 申请(专利权)人: | 中国地质大学(武汉) |
主分类号: | G06F8/20 | 分类号: | G06F8/20 |
代理公司: | 武汉知产时代知识产权代理有限公司 42238 | 代理人: | 金慧君 |
地址: | 430000 湖*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 三维 场景 矢量 图标 绘制 方法 装置 | ||
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、针对各种图标对象进行编辑逻辑的设定,包括两类:整体变换和由于控制点的重置而导致的图标任意变换:
S41、通过交互方式,通过地图开发库API提供的根据坐标来获取图元的接口来获取图标坐标;
S42、经过坐标转换,将步骤S41得到的图标坐标转换为生成地图坐标;
S43、根据地图坐标,修改图标样式及属性:
修改图标样式有两种方式:(1)根据先前获取的图标,得到其控制点序列和属性,删除现有的图标,重新根据控制点和图标样式生成并添加新的图标,然后把相应的属性信息添加到新的图标;(2)直接修改现有图标样式,该方式需在内存中维护图标具体的几何,缺点是占用了更多的内存,优点是更为简单;
修改图标属性:图标属性由于是挂接在图标对象上的,因此在获取图标对象的同时,也就获取了相应的属性信息,该属性信息在设计时以键值对来进行管理,修改相应的键值即可;
整体变换即修改现有图标样式,有两个层次:保持图标整体形状以及各部分的比例关系不变;在设计图标对象类时,在基类MilPlotBase定义有MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot()这几个虚函数,在具体的图标派生类中重载实现这几个函数,而实现这几个函数的方式同样有两种:1、直接在图标派生类中维护图标具体的几何,相应的操作则是针对各几何对象作几何运算,实现各几何对象的MoveMilPlot()、RotateMilPlot()以及ScaleMilPlot();2、根据现有图标对象的控制点,计算移动、缩放、旋转后新的控制点,然后重新生成、添加新的图标对象,删除现有的即可;
图标任意变换包括:
S44、直接修改图标控制点:
操作对象直接是图标的控制点,则图标的整体都会发生变化,因此对于图标控制点的存储要有相应的逻辑,按照一定的顺序存储,从控制点序列中很明确地知道控制点在图标中的方位,从而实现直接修改;
S45、根据新的控制点重新生成图标:
S46、调用图标生成算法,绘制图标;
S47、保存新的图标控制点序列。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国地质大学(武汉),未经中国地质大学(武汉)许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910997448.8/1.html,转载请声明来源钻瓜专利网。