基于AutoCAD Lisp宗地的自动标注技术
2023-01-25
来源:步旅网
……GRAPHICS AND IMRAGE PROCESSING …… 一一 ”………… … …………………… 一…… … … …… ,基于AutoCAD Lisp宗地的自动标注技术 唐争气 摘要:介绍了利用AutoCAD Lisp二次开发功能快速标注宗地的界址点坐标值及边长面积等,不 仅能反映宗地的界址点组成.还直观地反映该宗地的形状及其界址点之间的关系。着重阐述了基 于AutoCAD宗地的标注流程和程序实现。 关键词:宗地;界址点;标注 Aut。,CAD具有强大的绘图和编辑功能,标注功能也有很多 种,如线性标注、坐标标注等,而且还可以对标注内容的样式、 对齐方式进行修改。 在宗地图中宗地的位置、形 扶和面积等特性都是由其界址 点所决定的,目前,宗地界址点成果表的形式多种多样,但都 比较简单,仅是界址点坐标成果表,没有有实现直接在宗地图 上结合界址点编号和坐标一体化标注。必须结合宗地图才能了 解该宗地的形状及其界址点之间关系。 主要基于AutoCAD二次开发宗地图上实现同时标注界址点编 号和坐标一体化自动标注坐标、边长面积的算法流程和程序实现。 1 多义线的结点坐标数据的获取 1.1 多义线的自动选取和遍历 (setvar "osmode'。0) 《setq sset《ssget”x“flist(CORS-4”<OC”)(COt'IS 0 POLYLINE“ ̄(cons 0“LWP0LY'LINE。')(cons一4“or>“)))) (if sset (progn (setq slen(sslength sset); idx 0) (repeat slen (setq en(ssname sset idx)) :转换为Via—Object类型对象 《setq plobj fMakeObject en)) ) 1.2坐标数据的提取 :得到POLYLINE或LWPOLYLINE坐标表 (defun GetVertexs(entname/tmplst coords) (setq plobj(MakeObject entname) coords 0) (setq pttyp(VIax—get—pr0perty plobj ObjectName)) (if(member pltyp ("AcDbPolyline ‘AcDb2dPo}v e“)) (progn (setq tmplst(vlax—safearraV一>list(vlax一.variant—value(vlax— get-property plobi 'Coordinates)))) ( ̄cond ((=pltyp“AcDb2dPOlyl ne“);Polyline 1Iwhile tmplst (setq coords I[append coords(1ist(1ist(,car tmplst)(cadr tmplst)))[》 (setq tmplst(cdddr tmplst))- );while ): ((=pltyp。'AcDbPolyline“);LWPolyline I[.while tmplst [lsetq coords(append coords(1ist(1ist i(car tmplst)(cadr tmplst))))) (setq tmplst(cddr tmplst)) );while ): 】 ̄cond );progn ):_f coords ) (defun Settle(vedst/ret pre i) 如果起点终点坐标相同,从坐标表中除去起点 fif IM-every =《car veils[)《car(reverse verlst))) (setq verlst(cadr verlst)l} ):.f :除去重复的结点 (setq ret(1ist(nth 0 verlst)) pre(nth 0 verlst) i 1) (while(setq cur{nth i vedst);} (if(not IM-every :cur pre)) 《setq ret(append ret(1ist cur))) ):lf (setq i(+i 1) pre cur) ,);while ret ) *……… …………… 口… …… …………………m…… 实用第一 智慧密集 2坐标的标注 2.1 标注位置的计算 lsetq offsetObjl(via-Offset plobj 1 0) offsetObj2(via-Offset plobj一1 O) offsetObj l(vlax-safearray-get-element 《vlax—variant—value offsetObj 1) 0) areal《vlax—get—property offsetObjl"Area) offsetObj2(vlax—safearray-get—element (vlax—variant—value offsetObj2) 0 ) area2(vlax—get—property offsetObj2 Area) ) 《If【>areal area) (setq offsetObj offsetObj 1) (setq offsetObj offsetObj2) ) (setq offplvers(GetVertexs offsetObj) offplvers{Settle offplvers) ) (setq offplvers《append offplvers{list(car offplvers)))) :为了起点与终点也标注 (setq plvers(append plvers(Iist(car plvers)))) (foreach each offdimplvers Icond ((<(abs(一(car each)(car centroid)))( textWidth 0.25)) (setq Just MC”) ): ((>(car each)(car centroid)) 《setq Just‘BL“) ): ((<(car each)(car centroid)) (setq Just”BR。) ): );cond 2.2引线与坐标标注的绘制 (command“line“curpt each ) {setq zbd2x(car each)) (setq zbd2y(cadr each)) (setq zbdx Icar curpt)) (setq zbdy(cadr curpt)) (if(>=zbd2x zbdx) (progn (setq bhO(+bh0 1)) 《setq bh(itoa bh0)) ;;(command”line each(1ist(+zbd2x 30)zbd2y) ) (command“circle”(1ist《4-zbd2x 1)zbd2y)1) (command"lin (1ist(4-zbd2x 2)zbd2 ̄(1ist《4-zbd2x 1 5》zbd2 ̄ ) (command”te ”J—MC (1ist(-4zbd2x 1)zbd2y)1 0 bh) (setq elast(entlast) l与矗 elast{MakeObject elast) ) (VIax—put—property elast ScaleFactor 0.6) 《via—Update elast) (command”text…S~Standard“”j~bl”(1ist(-4zbd2x 2) (+zbd2y 1))“1 “0“(strcat“×(N)=” (rtos zbdy 2 3))) 《command“text—S~Standard …tl“(1ist(4-zbd2x 2) (一zbd2y 1))”1”…0(strcat”Y(E)=” 《rtos zbdx 2 3))) ) (progn (setq bh0(-4bh0 1)) (setq bh(itoa bh0)) ;;(command line each(1ist(一zbd2x 30)zbd2y) ) (command”circle”(1ist(一zbd2x 1)zbd2y¨) (command。1in (1ist《一zbd2x 2)zbd2 ̄(1ist《一zbd2x 1 5)zbd2 ̄。.) (command text…J“MC”(1ist(一zbd2x 1)zbd2 ̄)1 0 bh) (setq elast(entlast) elast(MakeObject elast) ) (vlax—put—prOperty elast ScateFactor 0.6) (via~Update elast) (command”text…S Standard…j~bl“(1ist(一zbd2x 1 5) 《4-zbd2y 1))”1…0(strcat ×《N)=” (rtos zbdy 2 3))) (command“text…S”Standard” …tl(1ist(一zbd2x 1 5) (一zbd2 ̄1})“1“”0“(strcat“Y(E):”《rtos zbdx 2 3))) ) ) 3面积的标注 3.1位置的计算 《vlax—put-property plobj Closed:vlax-True) (via-Update plobj) Isetq curves(vlax-make-safearray vlax-vbobject 【o.O))) (vlax-safearray-fill curves(1ist plobj)) (setq regionObj(vlax-safearray-get-element (vlax—variant—value{via—AddRegion mSpace curves)) O ) ) (setq area(vlax-get—property regionObj Area)) :质心坐标 (setq centroid(vlax—safearray一>list(vlax—variant-value (vIax—get—property regionObj Centroid)))) 3.2面积的标注 (command text…S~等线体“centroid 1 0(strcat(rtos area 2 2)”平方米“)) 4边长的标注 4.1位置的计算 {setq pre(nth 0 offplvers) …… B胁PHICS AND I眦BE PROCESSING……………… ………………………………………………………… i 1) 动完成所有宗地标注,如图1所示。 (while(setq cur(nth i offplvers)) (setq dist(distance pre cur) ang(/《 (angle pre cur)1 8O.O)pi)) ) (if(>dist 1 00) (progn (setq cen《list(/{+(car pre)(car cur))2)(/(+(cadr pre)(cadr cur))2))) //边长标注 ): ):lf (setq pre cur i(+i 1)) );while 4.2边长的标注 (cond 图1 宗地标注成果图 《(or《and【>:ang 0)(<=ang 90)) (and(>:ang 270)(<=ang 360)) ) 6结语 利用此方法标注界址点编号和坐标一体化。自动标注坐 标、边长、面积,这样不仅能保证标注内容准确无误,还可以 节约时间提高效率。 {command“text…S“等线体“”jlIIIMC“cen 1 ang(strcat (rtos dist 2 2) m )) ): ((and(>ang 90)(<ang 270)) 《setq ang(+180 ang)) 参考文献 [1】别建晓.Auto CAD中坐标标注的改进.城市勘测,2008, (1):120—121. (command text~S~等线体~j—MC“cen 1 ang(strcat(rtos dist 2 2)“m“)) ) );cond [2】冯瑞莲,毛卫民,等.城镇勘测定界中运用Visual LISP语 言快速制作宗地图[J].城市勘测,2008,(1):104—105. 5程序运行 程序加载之后,在命令行输入bzxy就可以启动程序,全自 [3】高艳,顾有兵.AutoCAD中多义线的坐标标注【J].工程 与建设,20o7,(06):875—876. (收稿日期:2011-12—09) (上接第74页) get NetCOnnectiOnPrOps(cOnnection): if(connProps.MediaType =tagNETCON—MEDI △ PE NCMLAN&&connProps.Name=:Networklntf.Name) —4结语 通过程序修改网络配置,只需点击一次鼠标就能修改IP 地址、网关等全部网络配置,相对于手工修改,操作简洁、效 率更高.而且不需要记忆网络配置的具体内容,给移动办公的 人员带来了方便。作者通过查阅资料和相关帮助,对C#存储、 { connection.Disconnect();∥禁用网络 connection.Connect0; //启用网络 break; 获取和修改网络配置的方法进行了总结和实验,设计和开发了 可靠的网络配置修改程序。文中代码在VS 2008和Windows Server 2003中编译通过,编译程序在多台电脑的Windows XP、 Windows Server 2003和Windows Server 2008中测试通过 ) ) break; ) ) break; 参考文献 【1】易向东,陈蓓,万英.C#程序员开发指南【M】.北京:中 国林业出版社,2006. (收稿日期:2012—01—28) ) ) ) 琏螭 ’