如何从2D几何图形中获取真实线宽以创建自定义线条
核心原因
VertexBufferReader仅返回点位信息是接口设计逻辑决定的:顶点缓冲区仅存储图元的顶点坐标、拓扑结构、顶点色/UV这类顶点级几何数据,线宽属于图形对象的样式属性,不会写入顶点缓存,因此无法通过读取顶点缓存的方式获取线宽。
获取2D几何真实线宽的可行方法
根据2D图形的对象类型,对应取值方式如下:
- 普通直线、构造线、独立多段线图元:直接读取图元对象的
LineWeight属性即可,该字段存储的就是图元配置的线宽基准值。注意区分打印线宽和显示线宽的单位:如果属性值是打印单位(毫米),换算为当前视图下的显示宽度时,需要乘以当前视口的缩放比例系数。 - 块参照内嵌套的2D线条:不要直接读取块炸开后的顶点缓存,先遍历块定义的属性字典,定位到对应线图元的样式条目读取线宽参数;如果块参照设置了全局缩放,最终真实线宽需要乘以块的缩放比例系数。
- 自带宽度属性的宽多段线:这类线段的宽度是绑定在单段顶点上的,不属于全局样式,
VertexBufferReader默认读取的是多段线中心线顶点,你需要将读取接口的枚举参数切换为宽多段线模式,即可读取每个顶点对应的起始、结束宽度,相邻两点宽度的平均值就是该段线段的真实线宽。 - 第三方自定义实体生成的2D线条:这类对象的线宽不挂在通用
LineWeight属性下,直接调用实体自带的GetSegmentWidth()方法,传入线段的索引值,即可返回对应段的真实线宽。
避坑提示:不要通过抓取屏幕像素测量线条显示宽度反推参数,该值会随视口缩放、抗锯齿开关、显卡驱动渲染策略变化,不属于几何对象的固定真实线宽。
内容的提问来源于stack exchange,提问作者Игорь Быков
相关产品推荐
相关产品推荐

