矢量图形开发中的动态注记实现

在矢量图形程序开发中,为确保注记清晰展示,需要避免文本重叠。本文介绍了在图形引擎开发中实现注记优化的方法。通过计算每个注记点周围的空间,检查是否有其他注记占据,寻找最佳位置放置注记,形成最优注记链表,最终一次性绘制。算法支持点、折线和多边形注记,具备动态位置调整、长注记折行和沿线条自动调整等功能。
摘要由CSDN通过智能技术生成

在矢量图形程序开发过程中,需要显示每个矢量对象的注记,比如地图中各个城市的名称、道路的名称等;而通常图形数据都是按多层来进行组织的,也就是说,在屏幕上看到的电子地图,可能是分别由行政区多边形层、道路线层、城市点层等迭加而成。如果不加限制地显示注记(直接把每个地物的注记文本TextOut出来),有可能会造成文本相互间的重叠,影响显示效果,这与专业地图生产的整饰要求是相违背的。大家可以去翻看任何一本正规地图册,上面所有的注记都是不相互遮盖的,所以,电子地图的生成,也必须要满足这个要求。

    一般专业的GIS软件都提供了相应的接口,如MapInfo和ArcInfo都提供了类似“注记优化”等的选项,而在自主开发图形引擎的应用中,就必须自己来编写代码解决这个问题。

    我的实现思路是在画每一层图形地物时,图形先画在DC上,而注记不要先直接画出来(否则后画的图层会影响先画的注记;注记必须是在图形都画完后,才能在上面一起生成),而是经过空间计算,看看注记点附近的上下左右8个位置是否有其他注记的包络矩形占据,如果有,则按照1-8的顺序依次计算新位置,如果找到一个空位,就把这个包络矩形连同注记文本放在一个链表中保存,如果找不到空位,则放弃;下一个地物的注记,再同这个链表中的矩形进行计算...这样,当图形画完后,也就得到一个最优注记的链表,然后再将这个链表中的注记画在生成图形的DC上。如下就是优化注记的算法示意图。

------------------------
|    1  |   2    |    3   |
------------------------
|   8  |

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值