基于Autocad数字地形图分幅裁剪的实现.pdf
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Autocad 数字 地形图 裁剪 实现
- 资源描述:
-
第22卷第2期
Fol. 22 No.2
2012年6月
Geology of Anhui
June 2012
文章编号:1005-6157(2012)02-155-03
基于 Auto cad数字地形图分幅裁剪的实现
曹安准,邓毅
安徽省地质测绘技术院,安徽合肥230022)
摘要:针对当前市场上很多地形图成图软件在分幅时裁剪不干净,容易丢对象和分幅速度慢等情况,笔者使用Vi
sual Lisp编程语言,基于 Autocad中的“ Break”命令开发了一个相对完善的載剪エ具以代之。
关键词: Visual Lisp;:圆;椭圆;样条曲线;2D多段线;图元对象
中国分类号:TP391.4
文献标识码:A
0引言
很少使用,故本程序未考虑面实体的裁剪。
1.2交点计算
当前测绘行业应用较广的基于 Autocad的测绘成
图幅裁剪前将必须逐一计算得出裁剪对象和裁剪
图软件较多,虽然其功能側重各不相同,但其中对地边框的交点坐标。其中直线段和直线段的交点计算最
形图裁剪分幅功能必不可少。笔者在实际使用过程中为简单,只需列出两线段的直线方程,然后组成方程
发现,这些软件的裁剪功能均存在一个共同的缺陷,组进行解算即可。其它对象的交点计算,总体原则也
即裁剪不干浄,分幅后丢失图元对象严重,尤其对一是列方程组进行计算。地形图中图元丰富,有各种类
些特殊对象如椭圆、闭合样条曲线、2D多段线以及别的图元对象,其交点坐标计算较为复杂,且算法稍
自相交图元等。部分商业软件在使用其裁剪工具对有不当,计算速度会极慢,计算精度难以保障。故本
2D多段线和自相交图元进行裁剪时,甚至会出现严文不做论述,而考虑直接使用第三方API函数,以提
重错误而导致系统崩溃。包括 Autodesk公司自己的测高开发速度和可靠性。
绘商业软件 Aulocad MAP在内,其裁剪工具也不尽完1.3统计裁剪图元及相应断点坐标
善,对于上述的特殊图元尤其是自相交图元同样会出1.3.1定义选择集
现裁剪不干净现象。另外,部分成图软件在使用此功在地形图裁剪之前,需要选择裁剪边界线,此裁
能时的系统资源需求极大,裁剪速度较慢。针对这些剪边界线可以是圆、椭圆以及任意形状的多边形。然
缺陷,笔者使用 Visual Lisp编程语言,基于 Autocad后使用获得其边界坐标值,按自右向左的顺序选择图
中的“ Break”命令开发了一个相对完善的裁剪工具元对象。因文本、点及参照块无需裁剪,故可以事先
以代之。
定义一个选择过滤器 filter,以加快选择和计算速度。
收集裁剪图元对象
3.2分类统计图元对象
在交点计算过程中,根据被选中且和裁剪边界有
1.1地形图图元分析
至少两个交点的对象类型进行分类统计,统计原则
地形图中图元丰富,尤其基于 Autocad的地形图为:圆和椭圆一类、闭合样条曲线一类、2D多段线
产品中,基本图元涉及到系统的各种类别。主要包一类、剩下的非点非字非块非面一类。并统计各类图
括文本、点、线、面以外部参照实体等。其中线实元和裁剪边界的交点坐标。具体代码如下
体又包含了直线、圆、圆弧、椭圆、椭圆弧、优化多
( if Bpt_ sublist;如果有交点
段线、2D多段线等。地形图分幅裁剪,主要裁剪对
象为线实体和面实体,但面实体在大比例尺地形图中( setg T'rimobj T'emobj);统计此对象进人待裁剪
收稿日期
作者简介:曹安准(1962-),男,安徽蚌埠人,工程师,主要从事数字化制图、航测和GIS工作。
156
徵地质
2012年
列表,并同时统计交点列表作为待断开点
略)
con
seta counter
(and (or(equal Objectname"Acdbcircle"(equal
setq Breakobjnumber (length Circleandellipsetri
Objectname" Acdbemllipse")(>( length Bpt_sublist) mobj_liet)》;需要分解的圆及椭圆对象数量
1);统计超过一个交点的圆及椭圆对象
(setq Circleandellipsetrimobj_list append Circle
(setq Bpt_Sublist (nth counter Circleandellipseobjb
andellipsetrimobj_list( ist Trimobj);统计圆及椭圆plis)y
对象
( setq Vnewt'rim_obj(apa- copy Vtrim_obi);克隆
( setq Circleandellipseobjbpt-_list( append Circlean-一个需要分解的对象
dellipseobjbpt_list( list Bpt_ sublist);圆及椭圆断点( set@ Arcandellipset'rimobj_list( append Arcandel
列表
setrimobj]list(ist( entlast));新产生的需要栽剪的
(and( equal Objectname" Acdbspline'")(vlax-对象(圆弧及椭圆弧;其交点列表不变)
curve-isclosed Vtemobj)(>(length Bpt_sublist) 1)) t (if (equal (vla-get-objectname Vnewtrim_obj)
计闭合的超过一个交点的样条曲线
Acdbcircle"
(setq Closedspli
ne Irimo
obj_list (append Closed Spli-
(progn
netrimobj_list(list Trimobj)
(command "break"Trim_obj (car Bpt_Sublist
( cadr Bpt_ Sublist));将圆变孤
(T
(command "break"(entlast)(cadr Bpt_Sublist
( setq Generaltrimobi_list( (append Generaltri-( (car Bpt_Sublist);逆时针方向断开
nbli_list(list" Irimobj));统计一般对象
(setq Generalobj Bpt_list (append Generalobjb
(if ( equal (vla-get-objectname VNEWTRIM_obj)
pt _list( list Bpt_ sublist));一般对象断点列表
Acdbellipse)
(setq counter (+ counter
2特殊对象预处理
2.1圆及椭圆图元对象预处理
andellipsetrimobj _list Arcandellipsetri-
因为圆和椭圆都是一个闭合的整体,要通过某-一 mobj_list
点将将其一分为二是不可能的。考虑到园以及椭圆被
裁剪之后必定要变成圆弧或椭圆弧,而圆弧或椭圆弧22闭合样条曲线处理
是可以通过一个点将其一分为二的。鉴于此,可以考
闭合样条曲线通过一点同样无法将其一分为
虑一种算法在裁剪前就将圆或椭圆进行无损转化成圆但非闭合样条出线可以被展开阅读全文
文档分享网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。



链接地址:https://www.wdfxw.net/doc24721830.htm