999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于AutoLISP 的工程測量制圖輔助軟件

2015-11-26 07:42:52安徽省水利水電勘測設計院安徽蚌埠233000
安徽建筑 2015年1期
關鍵詞:語言功能

趙 健 (安徽省水利水電勘測設計院,安徽 蚌埠 233000)

1 開發工具及軟件部署

1.1 AutoLISP 簡介

AutoLISP語言是嵌入在AutoCAD內部的LISP編程語言,是LISP語言與AutoCAD有機結合的產物。它可以方便調用AutoCAD的繪圖命令,使設計和繪圖完全溶為一體;還可以實現對AutoCAD當前數據庫的直接訪問、修改,為實現對屏幕圖形的實時修改、交互設計、參數化設計以及在繪圖領域中應用人工智能提供了方便。

AutoLISP語言繼承了LISP語言擅長處理各種結構的數據表的特點,用戶可以按需求來設計和使用自定義的結構類型數據。而且,AutoLISP擅長描述人機交互操作的過程,對于各種用戶輸入的接受、錯誤識別與恢復等方面的優秀功能(尤其是DCL語言加入以后),其他語言很難在此方面比及。

1.2 軟件的自動加載及打包

AutoCAD在啟動時會有一個自動加載的LISP程序,該程序位于CAD安裝目錄下的Support文件夾里,以acadxxxx.lisp的方式命名(xxxx為版本號)。用記事本打開這個文件并加入下面這條語句(vl-load-all"XZS.fas"),CAD則會在“支持文件搜索路徑”所包含的文件夾里尋找“XZS.fas”并加載它(XZS.fas是筆者所編寫的LISP程序)。除此之外,還需要在XZS.fas的源代碼中加入下列語句,以實現自定義的菜單文件XZS.mnu和對話框控制語言文件XZS.DCL的自動加載:

(command"menuload""XZS.mnu");加載菜單

(menucmd(strcat"P"(itoa i)"=+XZS.POP1"));將菜單顯示在菜單欄最后一列

(setq DCL_ID(LOAD_DIALOG"XZS.DCL"))

(NEW_DIALOG"RECT"DCL_ID)

(START_DIALOG)(UNLOAD_DIALOGDCL_ID);加載DCL

接下來,是軟件安裝包的制作。在本文中,安裝包需完成以下任務:①在注冊表中搜索AutoCAD的安裝目錄和版本信息;②提示用戶選擇需要安裝的CAD平臺版本;③將XZS.fas、XZS.mnu和XZS.DCL文件復制到用戶所選擇的CAD的Support文件夾中;④在Support目錄下的acadxxxx.lsp文件中追加(vl-load-all"XZS.fas")語句。

作為一款功能強大的安裝程序制作工具,Setup Factory可以實現筆者所需要的上述要求。以下是安裝包制作過程中的主要操作代碼:

Reg2004=Registry.GetValue(HKEY_LOCAL_MACHINE,"Software\Autodesk\AutoCAD\R16.0\ACAD-201:804","AcadLocation",false);

Path2004=String.Concat(Reg2004,"\support");

File.Copy(SessionVar.Expand("%TempLaunchFolder%\XZS.fas"),Path2004,true,true,false,true,nil);

TextFile.WriteFromString(String.Concat(Path2004,"\acad2004.lsp"),strLisp,true);

2 軟件功能介紹

2.1 插入節點

在繪制線狀地物,如水涯線、陡坎時,野外采集的碎部點連線后,顯示的是折點棱角分明的多線段,這和實際地貌是不符的。為了盡可能還原實際地貌,我們需要對多線段進行擬合。AutoCAD提供了多種擬合方式,如果直接進行擬合操作的話,會導致線條偏離節點位置較遠。我們通常的做法是在折點附近手工插入點,以減輕“脫點”現象。

以1:500地形圖為例,當一條多線段折角為90°時,在距折點1m處,和多線段成20°夾角的前后位置各插入一點,再用“樣條曲線”方式進行擬合,可大幅減輕“脫點”現象。隨著折角逐漸增大,插入點至折點距離可適當增加,兩者連線與多線段夾角則逐漸減小。

手工插點是一項繁復的工作,通過本軟件的“插入節點”功能,可以讓制圖人員輕松完成這一步。該功能的整體思路為:先將多線段坐標寫入到表lst中,然后依次計算每個折點的角度angPnt,根據地形圖比例尺和angPnt再推算出插入點至節點的距離disIns1和夾角angIns1,用POLAR函數計算出插入點坐標并存儲在表lstNew中,最后調用AutoCAD的command命令生成新的多線段。主要實現代碼如下:

;----------計算出插入節點處角度及距離---------

(if(>angPnt pi)(setq angIns(-(*pi 2)angPnt))(setq angIns angPnt));angIns為改正為<180度角的angPnt

(if(<=angIns(/pi2))

(progn

(setq angIns1(+(/pi12)(*(/1.0 18)angIns)))

(setq disIns1(+0.4(*(/1.2 pi)angIns)))

)

(progn

(setq angIns1(-(/pi9)(*(/19.0 90)(-angIns(/pi2)))))

(setq disIns1(+1(*(/8 pi)(-angIns(/pi2)))))

)

);end if

(setq sca(getvar"ltscale"))

(if(>sca 0.5)

(setq disIns1(*(sqrt(/sca 0.5))disIns1))

)

;-----------插入新節點----------

(if(

(progn

(if(<(distance(nth 0 lst)(nth 1 lst))(*disIns1 2))(setq disIns1(/(distance(nth 0 lst)(nth 1 lst))3)))

(setq lstNew(cons(polar(nth 0 lst)(+ang1 ang2c angIns1)disIns1)lstNew))

)

);end if

(if(>angPnt pi)

(progn

(if(<(distance(nth 0 lst)(nth 1 lst))(*disIns1 2))(setq disIns1(/(distance(nth 0 lst)(nth 1 lst))3)))

(setq lstNew(cons(polar(nth 0 lst)(+ang1(-ang2c angIns1))disIns1)lstNew))

)

);end if

;------生成新LWPOLYLINE------

(setvar"osmode"0)

(setvar"cmdecho"0)

(apply

'command

(cons"pline"lstNew)

)

(if(=isClose1)

(command"c")

(command"")

)

2.2 編碼成圖

該功能可以根據特定的命名規則將地物自動連線,熟練掌握后可節省大量外業畫草圖及內業連線的時間。具體規則如下:

①軟件對點名中地物代碼相同的點進行自動連線(如果是高程點或散點應以數字開頭);

②字母c表示地物閉合,z表示到該點結束,如:k1c,k2z;

③如果一個點代表兩個以上地物,則其之間的分隔符以“/”表示,如:k1/g3;

④往前插入一個點以“-”表示。也可在“-”后加1~9之間的數字表示回插個數,如:k1-/g3-2。

雖然有的軟件有著類似的功能,如南方CASS中的“簡碼識別”,不過其連線方式不夠靈活。比如在測圖過程中經常需要交替跑點,而“簡碼識別”中“N+/N-”連線方法需要在一個地物未測完之前時刻記著采集過的點數及每個點在哪個位置,這一點在實際工作中很難做到。相比之下,“編碼成圖”在設計時充分考慮了測圖人員在跑桿時的測點順序和點號命名習慣,使用起來更加貼合實際、靈活方便。

假設某點點名是k1-2z/g3,則在軟件中的操作流程見圖3。

①將點名分隔成k1-2z和g3,存放于表lstName中,并最終獲得地物代碼k1,賦于變量nameCod。

②遍歷表lstLib,當其包含k1且不含有結束符(“c”或者“z”)時,返回k1后的數字“1”。“1”表示k1在表lstCor中的位置,隨后將該點的坐標追加到lstCor中的1號表中。

③若在表lstLib中未找到k1或者k1后已有結束符,則在lstLib中新增表(k1,3),在lstCor中新增3號表(k1,),然后將該點的坐標追加到lstCor中的3號表中。

④最后當nameAll中包含“-”和結束符時,對lstCor相應表中的數據進行重新排序,將結束符寫人到lstLib對應的記錄中。

以下是部分實現代碼:

;---------將坐標寫入表lstcor中-----------

(setq lstTmp(list(atof(nth 2 lstcode))(atof(nth 3 lstcode))))

(setq lstcor-new'())

(setq i01 0)

(repeat(length lstcor)

(if(=i01(-isFound 1))

(progn

(setq lstTmp(cons lstTmp(nth(-isFound 1)lstcor)))

(setq lstcor-new(cons lstTmp lstcor-new))

)

(setq lstcor-new(cons(nth i01 lstcor)lstcor-new))

)

(setq i01(+1 i01))

)

(setq lstcor(reverse lstcor-new))

;---------當nameAll中包含“-“時部分代碼-----------

(if(=(length(nth(-isFound 1)lstLib))2)

(progn;當nameall中不包含結束符時

(repeat(-(-(length lstcorRe)x)1)

(setq lstcor-tmp(cons(nth x lstcorRe)lstcor-tmp))

(setq x(+x 1))

)

)

(progn;當nameall中包含結束符時

(setq lstLib(cons(list namecod(+(length lstLib)1))lstLib))

(setq lstadd(list namecod))

(setq isContainEnd 1)

(repeat(-(-(length lstcorRe)x)1)

(setq lstadd(cons(nth x lstcorRe)lstadd))

(setq x(+x 1))

)

)

)

3 結 論

經筆者實踐,合理利用本軟件中提供的功能可以方便快速的繪制地形圖,提高處理內業資料時的工作效率。相比之下,“草圖法”在測點順序過于雜亂無章和描述地物相對位置關系時有著不可替代的優越性,而該軟件則在繪制較整狀的帶狀地形圖時更加高效便捷。在剛接觸“編碼成圖”功能時建議草圖和軟件相結合使用,當熟練掌握其點號命名的各種技巧后,則可以有針對性的用編碼替代部分草圖,最終達到降低內業時間,提高工作效率的目的。

猜你喜歡
語言功能
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
關于非首都功能疏解的幾點思考
多向度交往對語言磨蝕的補正之道
懷孕了,凝血功能怎么變?
媽媽寶寶(2017年2期)2017-02-21 01:21:24
“簡直”和“幾乎”的表達功能
累積動態分析下的同聲傳譯語言壓縮
我有我語言
中西醫結合治療甲狀腺功能亢進癥31例
主站蜘蛛池模板: 欧美国产在线看| 久草青青在线视频| 在线不卡免费视频| 国产97公开成人免费视频| 久久网欧美| 色悠久久综合| 久久99热这里只有精品免费看| 欧美日韩午夜| 手机在线国产精品| 欧美综合一区二区三区| 国产欧美高清| a在线观看免费| 99福利视频导航| 免费激情网站| 欧美日韩精品一区二区在线线| 国产精品va免费视频| 青青草久久伊人| 无码AV高清毛片中国一级毛片| 97超爽成人免费视频在线播放| 伊人AV天堂| 蝌蚪国产精品视频第一页| 亚洲一区二区无码视频| 青青青国产视频| 成人在线亚洲| 三级欧美在线| 精品视频在线观看你懂的一区| 久久香蕉国产线| 97在线免费| 国产伦精品一区二区三区视频优播| 国产成人永久免费视频| 热久久综合这里只有精品电影| 首页亚洲国产丝袜长腿综合| 亚洲国产理论片在线播放| 色综合婷婷| 欧美另类精品一区二区三区| 特级精品毛片免费观看| 午夜日b视频| 91成人在线观看视频| 欧美a在线看| …亚洲 欧洲 另类 春色| 日韩精品无码免费一区二区三区| 伊人91视频| 国产成人综合久久精品下载| 亚洲中文字幕久久无码精品A| 在线不卡免费视频| 国产精品永久久久久| 日本不卡免费高清视频| 红杏AV在线无码| 国产人妖视频一区在线观看| 亚洲国产成人综合精品2020| 日韩av在线直播| 亚洲国产中文在线二区三区免| 久草视频中文| 国产系列在线| 午夜毛片免费看| 国产99视频在线| 免费xxxxx在线观看网站| 91丨九色丨首页在线播放| 99国产在线视频| 午夜日韩久久影院| 亚洲毛片一级带毛片基地| 麻豆精品在线视频| 高清免费毛片| 欧美日韩专区| 欧美五月婷婷| 日韩无码视频网站| 91无码人妻精品一区| 在线观看无码a∨| 日韩福利在线观看| 亚洲日韩国产精品综合在线观看| 婷婷综合色| 欧美日韩免费在线视频| 性69交片免费看| 欧美亚洲欧美区| 丝袜亚洲综合| 9丨情侣偷在线精品国产| 国产99久久亚洲综合精品西瓜tv| 国产亚洲精品在天天在线麻豆| 亚洲第一成网站| 丰满人妻中出白浆| 97精品国产高清久久久久蜜芽 | 香蕉视频在线观看www|