日韩欧美爱爱,欧美日韩一级大片,极品久久久久久,色黄网站,38激情网,日韩成人资源,日韩一级

現(xiàn)在位置:范文先生網(wǎng)>理工論文>石油能源論文>給排水設(shè)計給排水CAD軟件開發(fā)實例

給排水設(shè)計給排水CAD軟件開發(fā)實例

時間:2022-08-06 10:19:54 石油能源論文 我要投稿
  • 相關(guān)推薦

給排水設(shè)計給排水CAD軟件開發(fā)實例

【摘要】本文介紹了用戶幻燈菜單及功能和開發(fā)方法,并給出了標(biāo)高標(biāo)注和圖例繪制程序的開發(fā)方法以及程序注解。
  
 。庇脩艋脽舨藛魏喗橛脩艋脽舨藛危ㄏ挛暮喎Q幻燈菜單)是在AutoCAD平臺上開發(fā)的一種高效實用的用戶圖形界面,由幻燈和相應(yīng)的AutoLISP實用程序組成。其功能及用法類似于AutoCAD的圖標(biāo)菜單。調(diào)用時幻燈菜單屏幕上出現(xiàn)一幅幻燈,幻燈顯示不同圖形界面,由幻燈和相應(yīng)的AutoCAD實用程序組成。其功能及用法的功能區(qū)域,每個區(qū)域?qū)?yīng)相應(yīng)的功能,用鼠標(biāo)點取即可調(diào)用該功能。
  
  幻燈菜單可以用于開發(fā)本部門使用的工具軟件或是商業(yè)化的CAD軟件,可以大大提高開發(fā)效率以及設(shè)計繪圖速度。
  
  下面以我院開發(fā)的標(biāo)高標(biāo)注程序為例介紹幻燈菜單的功能:在command:狀態(tài)下從下拉菜單中點取“標(biāo)高標(biāo)注1”后屏幕上出現(xiàn)如圖1所示幻燈,用鼠標(biāo)在某一標(biāo)高種類格中點擊后幻燈消失,恢復(fù)前一圖面,在提示行中提示“請輸入起點”,給點后又提示:“標(biāo)高值”,輸入數(shù)值后自動按選擇的種類畫好標(biāo)高符號并寫好標(biāo)高值;然后重復(fù)提示“請輸入起點”標(biāo)注下一個,回車則回到圖1幻燈重復(fù)使用,點EXIT退出。
  
 。不脽舨藛蔚奶攸c
  
  幻燈菜單可以實現(xiàn)AutoCAD的圖標(biāo)菜單的各項功能,并且有如下優(yōu)點:
  
 。幔谱、修改效率高。制作圖標(biāo)菜單時,要實現(xiàn)的功能數(shù)與幻燈數(shù)及菜單項的數(shù)量相同。而制作一個幻燈菜單只需要作一個幻燈,幻燈數(shù)量大幅減少,修改也容易得多。
  
 。猓褂眯矢。為了提高軟件效率,盡量減少擊鍵次數(shù)是今后軟件的發(fā)展方向。幻燈菜單可以將多種形式的選擇以圖形形式直觀地顯示出來,以供選擇。以標(biāo)高標(biāo)注為例,以前的方法是先問標(biāo)高符號形式,再問方向,而使用幻燈菜單只需點取一次即可。
  
  c.界面美觀,制作靈活多樣,使用方便。幻燈菜單在一幅幻燈中劃分的功能區(qū)數(shù)量不限,并且可以根據(jù)需要制作成方格、橫格、豎格、扇型格、圓環(huán)格等多種形式,甚至可以達(dá)到可編程序?qū)υ捒虻暮芏喙δ堋?br />  
 。洌m用性強(qiáng),移植方便;脽舨藛芜m用于R9.0版以上的各種中、西文AutoCAD版本。使用幻燈菜單時,由于它包含在用ADS或AutoLISP等語言編制的程序中,所以只要能運行程序即可調(diào)出幻燈菜單,版本升級時不必改變新的菜單文件。而圖標(biāo)菜單的菜單項必須逐條加入到新的菜單文件中。
  
 。澹梢宰鞒啥ㄐ湍K重復(fù)使用,從而大大提高編程效率。
  
  3幻燈菜單的制作
  
  幻燈菜單的原理是:將AutoCAD繪圖區(qū)分為若干規(guī)則的圖形區(qū)域,每一區(qū)域可以對應(yīng)一組功能,在程序調(diào)用幻燈菜單時,要求用戶根據(jù)需要在某一圖形區(qū)域中選取一點,然后程序自動計算出該點所在的區(qū)域位置,從而調(diào)用所對應(yīng)的程序功能。
  
  點的定位是幻燈菜單制作編程的關(guān)鍵所在,以矩形格幻燈菜單為例,其步驟是:
  
 。幔@取下列AutoCAD系統(tǒng)變量:
  
 。觯椋澹鳎螅椋-當(dāng)前繪圖區(qū)高,用繪圖單位計算;
  
 。觯椋澹鳎悖簦-當(dāng)前繪圖區(qū)中心點坐標(biāo)值;
  
 。觯螅恚幔、vsmin-虛擬屏幕的左下角及右上角點坐標(biāo)值,可以用來求繪圖區(qū)寬高比,從而求出繪圖區(qū)寬度。
  
 。猓鶕(jù)橫向和豎向分格數(shù),求出每格的寬和高。
  
  c.由點的坐標(biāo)值分別求出點所在格的橫向和豎向序號。
  
 。洌畽M向和豎向序號連接即可獲得該格的區(qū)域代碼。
  
  后文將給出我院開發(fā)的標(biāo)高標(biāo)注和圖例繪制兩個實例,以下程序均在AutoCADR10至13各版本下順利運行,并已非常成熟。需要指出的是,為了簡化程序,突出重點,刪去了一些諸如容錯或裝飾性的語句,但不影響程序運行。
  
  4實例一———標(biāo)高標(biāo)注程序
  
  由程序abg.lsp和幻燈文件acdl.sld文件組成,使用說明已在前面敘述,標(biāo)題7a給出abg.lsp程序清單及注解
  
 。幔猓纾欤螅鸪绦虬ㄖ鞒绦颍幔猓绾停保祩標(biāo)高標(biāo)注子函數(shù),子函數(shù)abgl至abg15類似,本文只列出abgl子函數(shù)程序。
  
 。祵嵗獔D例繪制軟件本軟件由用戶在6頁幻燈菜單中連續(xù)選取圖例,給出一個插入圖例的左上角點后,程序自動將所選擇的圖例按順序逐項向下排列連續(xù)繪出。軟件由AutoLISP程序atl.lsp和6頁幻燈以及近百個圖塊組成;脽粑募䴙椋幔簦欤薄幔簦欤叮螅欤洹D塊名為atlabc.dwg,atl為前綴,a代表幻燈頁序號,為1~6;b代表幻燈菜單左右代碼,左面為1,右面為2;c代表幻燈菜單中上下序號,分別為1~8。
  
  本軟件設(shè)計的核心思想是通過點的定位計算出的所對應(yīng)的圖例圖塊名,然后插入圖例,多重選擇由表處理語句來完成。本文中第7節(jié)的b部分給出atl.lsp中與幻燈菜單有關(guān)的程序清單及注解。后面還有幾個子函數(shù),由于篇幅有限本文不詳細(xì)列出程序,只做簡單介紹:
  
 。欤幔螅簦螅欤渥雍瘮(shù)對幻燈名字符串進(jìn)行運算,求出上一頁幻燈名;
  
 。睿澹簦螅欤渥雍瘮(shù)對幻燈名字符串進(jìn)行運算,求出下一頁幻燈名;
  
 。螅澹簦睿椋熳雍瘮(shù)對各變量(必須包括whill)賦空值,并退出程序:
  
  setok子函數(shù)對被選擇的圖例表進(jìn)行處理,并逐項連續(xù)插入圖例。
  
 。缎〗Y(jié)
  
 。幔畼(biāo)高標(biāo)注程序是利用幻燈菜單調(diào)出相應(yīng)的標(biāo)高標(biāo)注子程序。
  
 。猓畧D例程序是利用幻燈菜單給圖例名稱賦值,然后運用字符串處理和表處理技術(shù)求得圖例名稱的列表,從而連續(xù)逐項插入被選中的圖例。
  
  c.圖例幻燈菜單分兩個大區(qū),上面是圖例區(qū),下面是幻燈菜單的操作區(qū),可見幻燈菜單能做成復(fù)雜高效的菜單。
  
 。烦绦蚯鍐
  
  a.abg.lsp程序及注解;
  
 。ǎ洌澹妫酰睿茫海拢牵拢冢ǎ
  
 。ǎ螅澹簦瘢鳎瑁椋欤保簦
  
 。ǎ鳎瑁椋欤澹鳎瑁椋欤保
  
 。
  
  
  
 。悖铮恚恚幔睿洹澹觯螅欤椋洌濉濉澹幔悖洌薄澹
  
 。ǎ椋妫ǎ螅澹簦瘢穑穑ǎ纾澹簦穑铮椋睿簟逭堻c取標(biāo)高種類″))
  
 。ǎ穑颍铮纾
  
 。ǎ颍澹洌颍幔鳎
  
  (setqh(getvar″viewsize″)
  
 。穑悖澹睿ǎ纾澹簦觯幔颉澹觯椋澹鳎螅椋濉澹
  
 。穑恚幔ǎ纾澹簦觯幔颉澹觯螅恚幔澹
  
 。穑恚椋恚ǎ纾澹簦觯幔颉澹觯螅恚椋睢澹┨摂M屏幕左下角)
  
 。ǎ螅澹簦瘢鳎*(/(-(carpmax)(carpmin))
  
 。-(cadrpmax)(cadrpmin)))h))
  
  (setqpp0(list(-(carpcen)(/w3))
  
 。-(cadrpcen(
  
 。瑁常
  
 。ǎ螅澹簦瘢穑穑保ǎ欤椋螅簦+(carpcen)(/w3))
  
  (+(cadrpcen)(/h3))))
  
 。ǎ螅澹簦瘢洌ǎ鳎叮洌ǎ瑁叮
  
 。ǎ螅澹簦瘢欤ǎ悖幔颍穑穑欤ǎ悖幔洌颍穑穑
  
 。ǎ螅澹簦瘢穑欤ǎ悖幔颍穑穑埃穑欤ǎ悖幔洌颍穑穑埃
  
 。ǎ螅澹簦穑欤-lxplx)ly(-lyply))
  
 。ǎ螅澹簦穑ǎ妫椋ǎ+(/(-pxpx0)dx))))
  
 。ǎ螅澹簦瘢ǎ妫椋ǎ+(/(-pypy0)dy))))
  
  (setqnn(strcat(itoax)(itoay)))
  
 。ǎ悖铮睿洌ǎǎ剑睿睿保矗ǎ幔猓纾保
  
  ((=nn13)(abg2))
  
 。ǎǎ剑睿睿保玻ǎ幔猓纾常
  
  ((=nn11)(abg4))
  
  主程序BGBZ開始
  
  設(shè)whil1值為真
  
  當(dāng)whil1為真時執(zhí)行下列程序
  
  顯示幻燈在幻燈菜單中選點
  
  重畫恢復(fù)原畫面
  
  繪圖區(qū)高
  
  繪圖區(qū)中心點
  
  虛擬屏幕右上角
  
  共獲取系統(tǒng)變量
  
  求繪圖區(qū)寬
  
  有效區(qū)左下角,(有效區(qū)寬和高占繪圖寬和高的三分之二)
  
  有效區(qū)右上角
  
  每格寬和高
  
 。校悬c的X和Y坐標(biāo)
  
  左下角點坐標(biāo)
  
  PP點和PP0點X和Y坐標(biāo)差;
  
  X方向格序號
  
 。俜较蚋裥蛱
  
  將X和Y連接
  
  多項選擇條件函數(shù)
  
  nn=13時運行abe2子函數(shù)
  
 。ǎǎ剑睿睿玻矗ǎ幔猓纾担
  
  ((=nn23)(abg6))
  
 。ǎǎ剑睿睿玻玻ǎ幔猓纾罚
  
  ((=nn21)(abg8))
  
 。ǎǎ剑睿睿常矗ǎ幔猓纾梗
  
 。ǎǎ剑睿睿常常ǎ幔猓纾保埃
  
 。ǎǎ剑睿睿常玻ǎ幔猓纾保保
  
 。ǎǎ剑睿睿常保ǎ幔猓纾保玻
  
 。ǎǎ剑睿睿矗矗ǎ幔猓纾保常
  
 。ǎǎ剑睿睿矗常ǎ幔猓纾保矗
  
  ((=nn42)(abg15))
  
 。ǎǎ剑睿睿矗保ǎ螅澹簦瘢鳎瑁椋欤保睿椋欤
  
  );cond)
  
 。;progn;if;while;defun
  
 。ǎ洌澹妫酰睿幔猓纾保ǎ
  
  (while(setqp1(getpoint″輸入起點″))
  
 。ǎ椋睿椋簦纾澹簦保
  
  (setqs1(getreal″標(biāo)高值:″))
  
 。ǎ螅澹簦瘢穑玻ǎ穑铮欤幔颍穑保埃福
  
  (setqp3(polarp2(/pi4)3.2))
  
 。ǎ螅澹簦瘢穑矗ǎ欤椋螅簦+(carp2)0)(+(cadrp2)2.9)))
  
  (if(=s10)(setps2″%%p0.00″)(setqs2(rtoss122)))
  
 。ǎ悖铮恚恚幔睿洹澹欤椋睿濉澹穑薄澹溃保矗迹啊濉濉濉澹欤椋睿濉澹穑常穑
  
  ″@3.2<135″″@12.8<0″″″
  
  ″text″p42.80s2)));……
  
 。猓幔簦欤欤螅鸪绦蚣白⒔
  
  為11-44格規(guī)定功能,即每一格對應(yīng)一個子函數(shù)
  
  主程序BGBZ結(jié)束
  
  定義abg1子函數(shù)
  
  標(biāo)高符號起點
  
  不接受空值
  
  標(biāo)高值
  
  計算各點位置
  
  標(biāo)高為0時加“±”
  
  畫標(biāo)高符號
  
  寫標(biāo)高值comma
  
  
  
 。睿
  
 。鳎瑁椋欤澹唬洌澹妫酰-abg1a
  
 。猓纾病幔猓纾保底雍瘮(shù)省略
  
  (defunC:TL()
  
 。ǎ螅澹簦瘢幔簦欤欤椋螅簦睿椋欤簦欤螅欤洹澹幔簦欤帷澹簦欤螅欤洌睢澹薄澹鳎瑁椋欤保簦
  
 。ǎ螅澹簦瘢簦欤穑幔簦琛澹悖幔洌幔簦臁澹
  
 。ǎ穑颍铮恚簦稹澹埽罱o排水圖例程序
  —BERIS″)
  
  (whilewhil1
  
 。ǎ悖铮恚恚幔睿洹澹觯螅欤椋洌濉澹ǎ螅簦颍悖幔簦簦欤穑幔簦琛澹幔簦臁澹簦欤螅欤洌睿
  
 。ǎ椋睿椋簦纾澹簦保
  
  (setqpp(getpoint″\n請連續(xù)點取圖例,并點取〈確定〉″))
  
 。ǎ螅澹簦瘢瑁ǎ纾澹簦觯幔颉澹觯椋澹鳎螅椋濉澹
  
  (setqpcen(getvar″viewctr″))
  
  圖例繪制主程序
  
  賦初始值
  
  圖例圖塊路徑
  
  提示
  
  當(dāng)whil1為真執(zhí)行下面程序調(diào)出幻燈(幻燈名由三個變量連接而成,圖2為第一頁)
  
  不接受空值
  
  以下內(nèi)容同標(biāo)高標(biāo)注程序
  
 。ǎ螅澹簦瘢穑恚幔ǎ纾澹簦觯幔颉澹觯螅恚幔澹
  
 。ǎ螅澹簦瘢穑恚椋睿ǎ纾澹簦觯幔颉澹觯螅恚椋睢澹
  
 。ǎ螅澹簦瘢鳎*(/(-(carpmax)(carpmin))
  
 。-cadrpmax)(cadrpmin)))h))
  
  (setqpp0(list(-(carpcen)(*w0.44))
  
 。-(cadrpcen)(*h0.26))))
  
 。ǎ螅澹簦瘢穑穑保ǎ欤椋螅簦+(carpcen)(*w0.44))
  
 。+(cadrpcen)(*h0.44))))
  
  (setqdx(/(*w0.88)4)dy(/(*h0.7)8))
  
 。ǎ螅澹簦瘢穑ǎ悖幔颍穑穑穑ǎ悖幔洌颍穑穑
  
  (setqpx0(carpp0)py0(cadrpp0))
  
 。ǎ椋妫ǎ迹穑穑埃ǎ洌瘢玻ǎ洌瘢保
  
 。ǎ洌澹妫酰睿洌瘢保ǎǎ椋妫ǎ迹穑ǎ悖幔颍穑悖澹睿
  
 。ǎ螅澹簦瘢幔铮颍狻澹薄澹
  
 。ǎ螅澹簦瘢幔铮颍狻澹病澹
  
  (setqxh(fix(1+(/(-pypy0)dy))))
  
 。ǎ螅澹簦瘢猓欤耄睿幔恚
  
 。ǎ螅簦颍悖幔簟澹幔簦臁澹簦欤螅欤洌睿幔铮颍猓ǎ椋簦铮幔瑁
  
 。ǎ洌澹妫酰睿洌瘢玻ǎ
  
 。ǎ螅澹簦瘢瑁保ǎ妫椋ǎ+(/(-pxpx0)dx))))
  
 。ǎ悖铮睿洌ǎǎ剑瑁保保ǎ欤幔螅簦螅欤洌
  
  ((=xh12)(nexts
  
  
 。欤洌
  
 。ǎǎ剑瑁保常ǎ螅澹簦睿椋欤
  
 。ǎǎ剑瑁保矗ǎ螅澹簦铮耄
  
 。ǎ洌澹妫酰睿欤幔螅簦螅欤洌ǎ
  
 。ǎ洌澹妫酰睿睿澹簦螅欤洌ǎ
  
  (defunsetnil())
  
 。ǎ洌澹妫酰睿螅澹簦铮耄ǎ
  
  如點在上半部分運行dq1,否則運行dq2while;defun圖例主程序結(jié)束定義dq1子函數(shù)
  
  點落在左面aorb為1
  
  點在右面aorb為2;if
  
  計算縱向序號計算圖例圖塊名(由4部分連接組成)
  
 。洌瘢苯Y(jié)束
  
  定義dq2子函數(shù)
  
  計算橫向序號
  
  運行lastsld子函數(shù),向前翻頁
  
  運行nextsld子函數(shù),向后翻頁
  
  運行setnil子函數(shù),賦空退出
  
  運行setok子函數(shù),插入圖例
  
  定義lastsld子函數(shù),略
  
  定義nextsld子函數(shù),略
  
  定義setnil子函數(shù),略
  
  定義sitok子函數(shù),略
  
  
  

【給排水設(shè)計給排水CAD軟件開發(fā)實例】相關(guān)文章:

建筑給排水設(shè)計與環(huán)境保護(hù)探討08-19

建筑給排水設(shè)計與環(huán)境保護(hù)探討08-19

排水專業(yè)求職信08-25

給排水實習(xí)報告7篇08-25

站外排水問題報告08-23

排水施工合同04-06

給排水工作總結(jié)05-28

排水畫大班美術(shù)教案08-26

精選給排水的實習(xí)報告三篇06-18

精選給排水實習(xí)報告4篇03-29