- 相關推薦
給排水設計給排水CAD軟件開發實例
【摘要】本文介紹了用戶幻燈菜單及功能和開發方法,并給出了標高標注和圖例繪制程序的開發方法以及程序注解。。庇脩艋脽舨藛魏喗橛脩艋脽舨藛危ㄏ挛暮喎Q幻燈菜單)是在AutoCAD平臺上開發的一種高效實用的用戶圖形界面,由幻燈和相應的AutoLISP實用程序組成。其功能及用法類似于AutoCAD的圖標菜單。調用時幻燈菜單屏幕上出現一幅幻燈,幻燈顯示不同圖形界面,由幻燈和相應的AutoCAD實用程序組成。其功能及用法的功能區域,每個區域對應相應的功能,用鼠標點取即可調用該功能。
幻燈菜單可以用于開發本部門使用的工具軟件或是商業化的CAD軟件,可以大大提高開發效率以及設計繪圖速度。
下面以我院開發的標高標注程序為例介紹幻燈菜單的功能:在command:狀態下從下拉菜單中點取“標高標注1”后屏幕上出現如圖1所示幻燈,用鼠標在某一標高種類格中點擊后幻燈消失,恢復前一圖面,在提示行中提示“請輸入起點”,給點后又提示:“標高值”,輸入數值后自動按選擇的種類畫好標高符號并寫好標高值;然后重復提示“請輸入起點”標注下一個,回車則回到圖1幻燈重復使用,點EXIT退出。
。不脽舨藛蔚奶攸c
幻燈菜單可以實現AutoCAD的圖標菜單的各項功能,并且有如下優點:
。幔谱、修改效率高。制作圖標菜單時,要實現的功能數與幻燈數及菜單項的數量相同。而制作一個幻燈菜單只需要作一個幻燈,幻燈數量大幅減少,修改也容易得多。
。猓褂眯矢。為了提高軟件效率,盡量減少擊鍵次數是今后軟件的發展方向;脽舨藛慰梢詫⒍喾N形式的選擇以圖形形式直觀地顯示出來,以供選擇。以標高標注為例,以前的方法是先問標高符號形式,再問方向,而使用幻燈菜單只需點取一次即可。
。悖缑婷烙^,制作靈活多樣,使用方便;脽舨藛卧谝环脽糁袆澐值墓δ軈^數量不限,并且可以根據需要制作成方格、橫格、豎格、扇型格、圓環格等多種形式,甚至可以達到可編程序對話框的很多功能。
。洌m用性強,移植方便;脽舨藛芜m用于R9.0版以上的各種中、西文AutoCAD版本。使用幻燈菜單時,由于它包含在用ADS或AutoLISP等語言編制的程序中,所以只要能運行程序即可調出幻燈菜單,版本升級時不必改變新的菜單文件。而圖標菜單的菜單項必須逐條加入到新的菜單文件中。
。澹梢宰鞒啥ㄐ湍K重復使用,從而大大提高編程效率。
。郴脽舨藛蔚闹谱
幻燈菜單的原理是:將AutoCAD繪圖區分為若干規則的圖形區域,每一區域可以對應一組功能,在程序調用幻燈菜單時,要求用戶根據需要在某一圖形區域中選取一點,然后程序自動計算出該點所在的區域位置,從而調用所對應的程序功能。
點的定位是幻燈菜單制作編程的關鍵所在,以矩形格幻燈菜單為例,其步驟是:
。幔@取下列AutoCAD系統變量:
。觯椋澹鳎螅椋-當前繪圖區高,用繪圖單位計算;
。觯椋澹鳎悖簦-當前繪圖區中心點坐標值;
。觯螅恚幔、vsmin-虛擬屏幕的左下角及右上角點坐標值,可以用來求繪圖區寬高比,從而求出繪圖區寬度。
。猓鶕䴔M向和豎向分格數,求出每格的寬和高。
。悖牲c的坐標值分別求出點所在格的橫向和豎向序號。
。洌畽M向和豎向序號連接即可獲得該格的區域代碼。
后文將給出我院開發的標高標注和圖例繪制兩個實例,以下程序均在AutoCADR10至13各版本下順利運行,并已非常成熟。需要指出的是,為了簡化程序,突出重點,刪去了一些諸如容錯或裝飾性的語句,但不影響程序運行。
。磳嵗弧獦烁邩俗⒊绦
由程序abg.lsp和幻燈文件acdl.sld文件組成,使用說明已在前面敘述,標題7a給出abg.lsp程序清單及注解
。幔猓纾欤螅鸪绦虬ㄖ鞒绦颍幔猓绾停保祩標高標注子函數,子函數abgl至abg15類似,本文只列出abgl子函數程序。
。祵嵗獔D例繪制軟件本軟件由用戶在6頁幻燈菜單中連續選取圖例,給出一個插入圖例的左上角點后,程序自動將所選擇的圖例按順序逐項向下排列連續繪出。軟件由AutoLISP程序atl.lsp和6頁幻燈以及近百個圖塊組成;脽粑募䴙椋幔簦欤薄幔簦欤叮螅欤。圖塊名為atlabc.dwg,atl為前綴,a代表幻燈頁序號,為1~6;b代表幻燈菜單左右代碼,左面為1,右面為2;c代表幻燈菜單中上下序號,分別為1~8。
本軟件設計的核心思想是通過點的定位計算出的所對應的圖例圖塊名,然后插入圖例,多重選擇由表處理語句來完成。本文中第7節的b部分給出atl.lsp中與幻燈菜單有關的程序清單及注解。后面還有幾個子函數,由于篇幅有限本文不詳細列出程序,只做簡單介紹:
。欤幔螅簦螅欤渥雍瘮祵脽裘址M行運算,求出上一頁幻燈名;
。睿澹簦螅欤渥雍瘮祵脽裘址M行運算,求出下一頁幻燈名;
。螅澹簦睿椋熳雍瘮祵Ω髯兞浚ū仨毎ǎ鳎瑁椋欤欤┵x空值,并退出程序:
。螅澹簦铮胱雍瘮祵Ρ贿x擇的圖例表進行處理,并逐項連續插入圖例。
。缎〗Y
。幔畼烁邩俗⒊绦蚴抢没脽舨藛握{出相應的標高標注子程序。
。猓畧D例程序是利用幻燈菜單給圖例名稱賦值,然后運用字符串處理和表處理技術求得圖例名稱的列表,從而連續逐項插入被選中的圖例。
。悖畧D例幻燈菜單分兩個大區,上面是圖例區,下面是幻燈菜單的操作區,可見幻燈菜單能做成復雜高效的菜單。
。烦绦蚯鍐
。幔幔猓纾欤螅鸪绦蚣白⒔;
。ǎ洌澹妫酰睿茫海拢牵拢冢ǎ
。ǎ螅澹簦瘢鳎瑁椋欤保簦
。ǎ鳎瑁椋欤澹鳎瑁椋欤保
。
。悖铮恚恚幔睿洹澹觯螅欤椋洌濉濉澹幔悖洌薄澹
。ǎ椋妫ǎ螅澹簦瘢穑穑ǎ纾澹簦穑铮椋睿簟逭堻c取標高種類″))
。ǎ穑颍铮纾
。ǎ颍澹洌颍幔鳎
。ǎ螅澹簦瘢瑁ǎ纾澹簦觯幔颉澹觯椋澹鳎螅椋濉澹
。穑悖澹睿ǎ纾澹簦觯幔颉澹觯椋澹鳎螅椋濉澹
。穑恚幔ǎ纾澹簦觯幔颉澹觯螅恚幔澹
。穑恚椋恚ǎ纾澹簦觯幔颉澹觯螅恚椋睢澹┨摂M屏幕左下角)
。ǎ螅澹簦瘢鳎*(/(-(carpmax)(carpmin))
。-(cadrpmax)(cadrpmin)))h))
。ǎ螅澹簦瘢穑穑埃ǎ欤椋螅簦-(carpcen)(/w3))
。-(cadrpcen(
。瑁常
。ǎ螅澹簦瘢穑穑保ǎ欤椋螅簦+(carpcen)(/w3))
。+(cadrpcen)(/h3))))
。ǎ螅澹簦瘢洌ǎ鳎叮洌ǎ瑁叮
。ǎ螅澹簦瘢欤ǎ悖幔颍穑穑欤ǎ悖幔洌颍穑穑
。ǎ螅澹簦瘢穑欤ǎ悖幔颍穑穑埃穑欤ǎ悖幔洌颍穑穑埃
。ǎ螅澹簦穑欤-lxplx)ly(-lyply))
。ǎ螅澹簦穑ǎ妫椋ǎ+(/(-pxpx0)dx))))
。ǎ螅澹簦瘢ǎ妫椋ǎ+(/(-pypy0)dy))))
。ǎ螅澹簦瘢睿睿ǎ螅簦颍悖幔簦ǎ椋簦铮幔ǎ椋簦铮幔
。ǎ悖铮睿洌ǎǎ剑睿睿保矗ǎ幔猓纾保
。ǎǎ剑睿睿保常ǎ幔猓纾玻
。ǎǎ剑睿睿保玻ǎ幔猓纾常
。ǎǎ剑睿睿保保ǎ幔猓纾矗
主程序BGBZ開始
設whil1值為真
當whil1為真時執行下列程序
顯示幻燈在幻燈菜單中選點
重畫恢復原畫面
繪圖區高
繪圖區中心點
虛擬屏幕右上角
共獲取系統變量
求繪圖區寬
有效區左下角,(有效區寬和高占繪圖寬和高的三分之二)
有效區右上角
每格寬和高
。校悬c的X和Y坐標
左下角點坐標
。校悬c和PP0點X和Y坐標差;
。胤较蚋裥蛱
。俜较蚋裥蛱
將X和Y連接
多項選擇條件函數
。睿睿剑保硶r運行abe2子函數
。ǎǎ剑睿睿玻矗ǎ幔猓纾担
。ǎǎ剑睿睿玻常ǎ幔猓纾叮
。ǎǎ剑睿睿玻玻ǎ幔猓纾罚
。ǎǎ剑睿睿玻保ǎ幔猓纾福
。ǎǎ剑睿睿常矗ǎ幔猓纾梗
。ǎǎ剑睿睿常常ǎ幔猓纾保埃
。ǎǎ剑睿睿常玻ǎ幔猓纾保保
。ǎǎ剑睿睿常保ǎ幔猓纾保玻
。ǎǎ剑睿睿矗矗ǎ幔猓纾保常
。ǎǎ剑睿睿矗常ǎ幔猓纾保矗
。ǎǎ剑睿睿矗玻ǎ幔猓纾保担
。ǎǎ剑睿睿矗保ǎ螅澹簦瘢鳎瑁椋欤保睿椋欤
。;cond)
。;progn;if;while;defun
。ǎ洌澹妫酰睿幔猓纾保ǎ
。ǎ鳎瑁椋欤澹ǎ螅澹簦瘢穑保ǎ纾澹簦穑铮椋睿簟遢斎肫瘘c″))
。ǎ椋睿椋簦纾澹簦保
。ǎ螅澹簦瘢螅保ǎ纾澹簦颍澹幔臁鍢烁咧:″))
。ǎ螅澹簦瘢穑玻ǎ穑铮欤幔颍穑保埃福
。ǎ螅澹簦瘢穑常ǎ穑铮欤幔颍穑玻ǎ穑椋矗常玻
。ǎ螅澹簦瘢穑矗ǎ欤椋螅簦+(carp2)0)(+(cadrp2)2.9)))
。ǎ椋妫ǎ剑螅保埃ǎ螅澹簦穑螅病%%p0.00″)(setqs2(rtoss122)))
。ǎ悖铮恚恚幔睿洹澹欤椋睿濉澹穑薄澹溃保矗迹啊濉濉濉澹欤椋睿濉澹穑常穑
″@3.2<135″″@12.8<0″″″
″text″p42.80s2)));……
。猓幔簦欤欤螅鸪绦蚣白⒔
為11-44格規定功能,即每一格對應一個子函數
主程序BGBZ結束
定義abg1子函數
標高符號起點
不接受空值
標高值
計算各點位置
標高為0時加“±”
畫標高符號
寫標高值comma
。睿
。鳎瑁椋欤;defun-abg1a
。猓纾病幔猓纾保底雍瘮凳÷
。ǎ洌澹妫酰睿茫海裕蹋ǎ
。ǎ螅澹簦瘢幔簦欤欤椋螅簦睿椋欤簦欤螅欤洹澹幔簦欤帷澹簦欤螅欤洌睢澹薄澹鳎瑁椋欤保簦
。ǎ螅澹簦瘢簦欤穑幔簦琛澹悖幔洌幔簦臁澹
。ǎ穑颍铮恚簦稹澹埽罱o排水圖例程序
—BERIS″)
。ǎ鳎瑁椋欤澹鳎瑁椋欤
。ǎ悖铮恚恚幔睿洹澹觯螅欤椋洌濉澹ǎ螅簦颍悖幔簦簦欤穑幔簦琛澹幔簦臁澹簦欤螅欤洌睿
。ǎ椋睿椋簦纾澹簦保
。ǎ螅澹簦瘢穑穑ǎ纾澹簦穑铮椋睿簟澹埽钫堖B續點取圖例,并點取〈確定〉″))
。ǎ螅澹簦瘢瑁ǎ纾澹簦觯幔颉澹觯椋澹鳎螅椋濉澹
。ǎ螅澹簦瘢穑悖澹睿ǎ纾澹簦觯幔颉澹觯椋澹鳎悖簦颉澹
圖例繪制主程序
賦初始值
圖例圖塊路徑
提示
當whil1為真執行下面程序調出幻燈(幻燈名由三個變量連接而成,圖2為第一頁)
不接受空值
以下內容同標高標注程序
。ǎ螅澹簦瘢穑恚幔ǎ纾澹簦觯幔颉澹觯螅恚幔澹
。ǎ螅澹簦瘢穑恚椋睿ǎ纾澹簦觯幔颉澹觯螅恚椋睢澹
。ǎ螅澹簦瘢鳎*(/(-(carpmax)(carpmin))
。-cadrpmax)(cadrpmin)))h))
。ǎ螅澹簦瘢穑穑埃ǎ欤椋螅簦-(carpcen)(*w0.44))
。-(cadrpcen)(*h0.26))))
。ǎ螅澹簦瘢穑穑保ǎ欤椋螅簦+(carpcen)(*w0.44))
。+(cadrpcen)(*h0.44))))
。ǎ螅澹簦瘢洌ǎ*w0.88)4)dy(/(*h0.7)8))
。ǎ螅澹簦瘢穑ǎ悖幔颍穑穑穑ǎ悖幔洌颍穑穑
。ǎ螅澹簦瘢穑埃ǎ悖幔颍穑穑埃穑埃ǎ悖幔洌颍穑穑埃
。ǎ椋妫ǎ迹穑穑埃ǎ洌瘢玻ǎ洌瘢保
。ǎ洌澹妫酰睿洌瘢保ǎǎ椋妫ǎ迹穑ǎ悖幔颍穑悖澹睿
。ǎ螅澹簦瘢幔铮颍狻澹薄澹
。ǎ螅澹簦瘢幔铮颍狻澹病澹
。ǎ螅澹簦瘢瑁ǎ妫椋ǎ+(/(-pypy0)dy))))
。ǎ螅澹簦瘢猓欤耄睿幔恚
。ǎ螅簦颍悖幔簟澹幔簦臁澹簦欤螅欤洌睿幔铮颍猓ǎ椋簦铮幔瑁
。ǎ洌澹妫酰睿洌瘢玻ǎ
。ǎ螅澹簦瘢瑁保ǎ妫椋ǎ+(/(-pxpx0)dx))))
。ǎ悖铮睿洌ǎǎ剑瑁保保ǎ欤幔螅簦螅欤洌
。ǎǎ剑瑁保玻ǎ睿澹簦
。欤洌
。ǎǎ剑瑁保常ǎ螅澹簦睿椋欤
。ǎǎ剑瑁保矗ǎ螅澹簦铮耄
。ǎ洌澹妫酰睿欤幔螅簦螅欤洌ǎ
。ǎ洌澹妫酰睿睿澹簦螅欤洌ǎ
。ǎ洌澹妫酰睿螅澹簦睿椋欤ǎ
。ǎ洌澹妫酰睿螅澹簦铮耄ǎ
如點在上半部分運行dq1,否則運行dq2while;defun圖例主程序結束定義dq1子函數
點落在左面aorb為1
點在右面aorb為2;if
計算縱向序號計算圖例圖塊名(由4部分連接組成)
。洌瘢苯Y束
定義dq2子函數
計算橫向序號
運行lastsld子函數,向前翻頁
運行nextsld子函數,向后翻頁
運行setnil子函數,賦空退出
運行setok子函數,插入圖例
定義lastsld子函數,略
定義nextsld子函數,略
定義setnil子函數,略
定義sitok子函數,略
【給排水設計給排水CAD軟件開發實例】相關文章:
建筑給排水設計與環境保護探討08-19
建筑給排水設計與環境保護探討08-19
排水專業求職信08-25
給排水實習報告7篇08-25
站外排水問題報告08-23
排水施工合同04-06
給排水工作總結05-28
排水畫大班美術教案08-26
精選給排水的實習報告三篇06-18
精選給排水實習報告4篇03-29