工程項(xiàng)目管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 工程項(xiàng)目管理軟件 | 裝飾管理系統(tǒng) | 簽約案例 | 購買價(jià)格 | 在線試用 | 手機(jī)APP | 產(chǎn)品資料
X 關(guān)閉
工程管理軟件

當(dāng)前位置:工程項(xiàng)目OA系統(tǒng) > 建筑OA系統(tǒng) > 工程管理軟件

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

申請免費(fèi)試用、咨詢電話:400-8352-114

  「摘要」本文介紹了用戶幻燈菜單及功能和開發(fā)方法,并給出了標(biāo)高標(biāo)注和圖例繪制程序的開發(fā)方法以及程序注解。

  1用戶幻燈菜單簡介

用戶幻燈菜單(下文簡稱幻燈菜單)是在AutoCAD平臺上開發(fā)的一種高效實(shí)用的用戶圖形界面,由幻燈和相應(yīng)的AutoLISP實(shí)用程序組成。其功能及用法類似于AutoCAD的圖標(biāo)菜單。調(diào)用時(shí)幻燈菜單屏幕上出現(xiàn)一幅幻燈,幻燈顯示不同圖形界面,由幻燈和相應(yīng)的AutoCAD實(shí)用程序組成。其功能及用法的功能區(qū)域,每個(gè)區(qū)域?qū)?yīng)相應(yīng)的功能,用鼠標(biāo)點(diǎn)取即可調(diào)用該功能。

  幻燈菜單可以用于開發(fā)本部門使用的工具軟件或是商業(yè)化的CAD軟件,可以大大提高開發(fā)效率以及設(shè)計(jì)繪圖速度。

  下面以我院開發(fā)的標(biāo)高標(biāo)注程序?yàn)槔榻B幻燈菜單的功能:在command:狀態(tài)下從下拉菜單中點(diǎn)取“標(biāo)高標(biāo)注1”后屏幕上出現(xiàn)如圖1所示幻燈,用鼠標(biāo)在某一標(biāo)高種類格中點(diǎn)擊后幻燈消失,恢復(fù)前一圖面,在提示行中提示“請輸入起點(diǎn)”,給點(diǎn)后又提示:“標(biāo)高值”,輸入數(shù)值后自動按選擇的種類畫好標(biāo)高符號并寫好標(biāo)高值;然后重復(fù)提示“請輸入起點(diǎn)”標(biāo)注下一個(gè),回車則回到圖1幻燈重復(fù)使用,點(diǎn)EXIT退出。

  2幻燈菜單的特點(diǎn)

  幻燈菜單可以實(shí)現(xiàn)AutoCAD的圖標(biāo)菜單的各項(xiàng)功能,并且有如下優(yōu)點(diǎn):

  a.制作、修改效率高。制作圖標(biāo)菜單時(shí),要實(shí)現(xiàn)的功能數(shù)與幻燈數(shù)及菜單項(xiàng)的數(shù)量相同。而制作一個(gè)幻燈菜單只需要作一個(gè)幻燈,幻燈數(shù)量大幅減少,修改也容易得多。

  b.使用效率高。為了提高軟件效率,盡量減少擊鍵次數(shù)是今后軟件的發(fā)展方向?;脽舨藛慰梢詫⒍喾N形式的選擇以圖形形式直觀地顯示出來,以供選擇。以標(biāo)高標(biāo)注為例,以前的方法是先問標(biāo)高符號形式,再問方向,而使用幻燈菜單只需點(diǎn)取一次即可。

  c.界面美觀,制作靈活多樣,使用方便。幻燈菜單在一幅幻燈中劃分的功能區(qū)數(shù)量不限,并且可以根據(jù)需要制作成方格、橫格、豎格、扇型格、圓環(huán)格等多種形式,甚至可以達(dá)到可編程序?qū)υ捒虻暮芏喙δ堋?/p>

  d.適用性強(qiáng),移植方便?;脽舨藛芜m用于R9.0版以上的各種中、西文AutoCAD版本。使用幻燈菜單時(shí),由于它包含在用ADS或AutoLISP等語言編制的程序中,所以只要能運(yùn)行程序即可調(diào)出幻燈菜單,版本升級時(shí)不必改變新的菜單文件。而圖標(biāo)菜單的菜單項(xiàng)必須逐條加入到新的菜單文件中。

  e.可以作成定型模塊重復(fù)使用,從而大大提高編程效率。

  3幻燈菜單的制作

  幻燈菜單的原理是:將AutoCAD繪圖區(qū)分為若干規(guī)則的圖形區(qū)域,每一區(qū)域可以對應(yīng)一組功能,在程序調(diào)用幻燈菜單時(shí),要求用戶根據(jù)需要在某一圖形區(qū)域中選取一點(diǎn),然后程序自動計(jì)算出該點(diǎn)所在的區(qū)域位置,從而調(diào)用所對應(yīng)的程序功能。

  點(diǎn)的定位是幻燈菜單制作編程的關(guān)鍵所在,以矩形格幻燈菜單為例,其步驟是:

  a.獲取下列AutoCAD系統(tǒng)變量:

  viewsize-當(dāng)前繪圖區(qū)高,用繪圖單位計(jì)算;

  viewctr-當(dāng)前繪圖區(qū)中心點(diǎn)坐標(biāo)值;

  vsmax、vsmin-虛擬屏幕的左下角及右上角點(diǎn)坐標(biāo)值,可以用來求繪圖區(qū)寬高比,從而求出繪圖區(qū)寬度。

  b.根據(jù)橫向和豎向分格數(shù),求出每格的寬和高。

  c.由點(diǎn)的坐標(biāo)值分別求出點(diǎn)所在格的橫向和豎向序號。

  d.橫向和豎向序號連接即可獲得該格的區(qū)域代碼。

  后文將給出我院開發(fā)的標(biāo)高標(biāo)注和圖例繪制兩個(gè)實(shí)例,以下程序均在AutoCADR10至13各版本下順利運(yùn)行,并已非常成熟。需要指出的是,為了簡化程序,突出重點(diǎn),刪去了一些諸如容錯(cuò)或裝飾性的語句,但不影響程序運(yùn)行。

  4實(shí)例一———標(biāo)高標(biāo)注程序

  由程序abg.lsp和幻燈文件acdl.sld文件組成,使用說明已在前面敘述,標(biāo)題7a給出abg.lsp程序清單及注解

  abg.lsp程序包括主程序abg和15個(gè)標(biāo)高標(biāo)注子函數(shù),子函數(shù)abgl至abg15類似,本文只列出abgl子函數(shù)程序。

  5實(shí)例二———圖例繪制軟件

本軟件由用戶在6頁幻燈菜單中連續(xù)選取圖例,給出一個(gè)插入圖例的左上角點(diǎn)后,程序自動將所選擇的圖例按順序逐項(xiàng)向下排列連續(xù)繪出。軟件由AutoLISP程序atl.lsp和6頁幻燈以及近百個(gè)圖塊組成?;脽粑募閍tl1~atl6.sld.圖塊名為atlabc.dwg,atl為前綴,a代表幻燈頁序號,為1~6;b代表幻燈菜單左右代碼,左面為1,右面為2;c代表幻燈菜單中上下序號,分別為1~8.

  本軟件設(shè)計(jì)的核心思想是通過點(diǎn)的定位計(jì)算出的所對應(yīng)的圖例圖塊名,然后插入圖例,多重選擇由表處理語句來完成。本文中第7節(jié)的b部分給出atl.lsp中與幻燈菜單有關(guān)的程序清單及注解。后面還有幾個(gè)子函數(shù),由于篇幅有限本文不詳細(xì)列出程序,只做簡單介紹:

  lastsld子函數(shù)對幻燈名字符串進(jìn)行運(yùn)算,求出上一頁幻燈名;

  nextsld子函數(shù)對幻燈名字符串進(jìn)行運(yùn)算,求出下一頁幻燈名;

  setnil子函數(shù)對各變量(必須包括whill)賦空值,并退出程序:

  setok子函數(shù)對被選擇的圖例表進(jìn)行處理,并逐項(xiàng)連續(xù)插入圖例。

  6小結(jié)

  a.標(biāo)高標(biāo)注程序是利用幻燈菜單調(diào)出相應(yīng)的標(biāo)高標(biāo)注子程序。

  b.圖例程序是利用幻燈菜單給圖例名稱賦值,然后運(yùn)用字符串處理和表處理技術(shù)求得圖例名稱的列表,從而連續(xù)逐項(xiàng)插入被選中的圖例。

  c.圖例幻燈菜單分兩個(gè)大區(qū),上面是圖例區(qū),下面是幻燈菜單的操作區(qū),可見幻燈菜單能做成復(fù)雜高效的菜單。

  7程序清單

  a.abg.lsp程序及注解;

 ?。╠efunC:BGBZ()

 ?。╯etqwhil1t)

 ?。╳hilewhil1)

 ?。╟ommand″vslide″″acd1″)

 ?。╥f(setqpp(getpoint″請點(diǎn)取標(biāo)高種類″))

 ?。╬rogn

 ?。╮edraw)

  (setqh(getvar″viewsize″)

  pcen(getvar″viewsize″)

  pmax(getvar″vsmax″)

  pmim(getvar″vsmin″)虛擬屏幕左下角)

 ?。╯etqw(*(/(-(carpmax)(carpmin))

  (-(cadrpmax)(cadrpmin)))h))

 ?。╯etqpp0(list(-(carpcen)(/w3))

  (-(cadrpcen(

 ?。痟3))))

 ?。╯etqpp1(list(+(carpcen)(/w3))

  (+(cadrpcen)(/h3))))

 ?。╯etqdx(/w6)dy(/h6))

  (setqlx(carpp)ly(cadrpp))

 ?。╯etqplx(carpp0)ply(cadrpp0))

 ?。╯etplx(-lxplx)ly(-lyply))

  (setpx(fix(1+(/(-pxpx0)dx))))

 ?。╯etqy(fix(1+(/(-pypy0)dy))))

  (setqnn(strcat(itoax)(itoay)))

 ?。╟ond((=nn14)(abg1))

 ?。ǎǎ絥n13)(abg2))

 ?。ǎǎ絥n12)(abg3))

  ((=nn11)(abg4))

  主程序BGBZ開始

  設(shè)whil1值為真

  當(dāng)whil1為真時(shí)執(zhí)行下列程序

  顯示幻燈在幻燈菜單中選點(diǎn)

  重畫恢復(fù)原畫面

  繪圖區(qū)高

  繪圖區(qū)中心點(diǎn)

  虛擬屏幕右上角

  共獲取系統(tǒng)變量

  求繪圖區(qū)寬

  有效區(qū)左下角,(有效區(qū)寬和高占繪圖寬和高的三分之二)

  有效區(qū)右上角

  每格寬和高

  PP點(diǎn)的X和Y坐標(biāo)

  左下角點(diǎn)坐標(biāo)

  PP點(diǎn)和PP0點(diǎn)X和Y坐標(biāo)差;

  X方向格序號

  Y方向格序號

  將X和Y連接

  多項(xiàng)選擇條件函數(shù)

  nn=13時(shí)運(yùn)行abe2子函數(shù)

  ((=nn24)(abg5))

  ((=nn23)(abg6))

 ?。ǎǎ絥n22)(abg7))

  ((=nn21)(abg8))

 ?。ǎǎ絥n34)(abg9))

 ?。ǎǎ絥n33)(abg10))

 ?。ǎǎ絥n32)(abg11))

 ?。ǎǎ絥n31)(abg12))

  ((=nn44)(abg13))

 ?。ǎǎ絥n43)(abg14))

 ?。ǎǎ絥n42)(abg15))

 ?。ǎǎ絥n41)(setqwhil1nil))

 ?。?;cond)

 ?。籶rogn;if;while;defun

 ?。╠efunabg1()

 ?。╳hile(setqp1(getpoint″輸入起點(diǎn)″))

  (initget1)

 ?。╯etqs1(getreal″標(biāo)高值:″))

 ?。╯etqp2(polarp108))

 ?。╯etqp3(polarp2(/pi4)3.2))

 ?。╯etqp4(list(+(carp2)0)(+(cadrp2)2.9)))

  (if(=s10)(setps2″%%p0.00″)(setqs2(rtoss122)))

 ?。╟ommand″line″p1″@14<0″″″″line″p3p2

  ″@3.2<135″″@12.8<0″″″

  ″text″p42.80s2)));……

  b.atl.lsp程序及注解

  為11-44格規(guī)定功能,即每一格對應(yīng)一個(gè)子函數(shù)

  主程序BGBZ結(jié)束

  定義abg1子函數(shù)

  標(biāo)高符號起點(diǎn)

  不接受空值

  標(biāo)高值

  計(jì)算各點(diǎn)位置

  標(biāo)高為0時(shí)加“±”

  畫標(biāo)高符號

  寫標(biāo)高值command

  while;defun-abg1a

  bg2~abg15子函數(shù)省略

 ?。╠efunC:TL()

 ?。╯etqatllistniltlsld″atla″tlsldn″1″whil1t)

  (setqtlpath″/cad/atl″)

 ?。╬romtp″\n給排水圖例程序—BERIS″)

 ?。╳hilewhil1

 ?。╟ommand″vslide″(strcattlpath″atl″tlsldn))

  (initget1)

  (setqpp(getpoint″\n請連續(xù)點(diǎn)取圖例,并點(diǎn)取〈確定〉″))

  (setqh(getvar″viewsize″))

 ?。╯etqpcen(getvar″viewctr″))

  圖例繪制主程序

  賦初始值

  圖例圖塊路徑

  提示

  當(dāng)whil1為真執(zhí)行下面程序調(diào)出幻燈(幻燈名由三個(gè)變量連接而成,圖2為第一頁)

  不接受空值

  以下內(nèi)容同標(biāo)高標(biāo)注程序

 ?。╯etqpmax(getvar″vsmax″))

 ?。╯etqpmin(getvar″vsmin″))

  (setqw(*(/(-(carpmax)(carpmin))

 ?。?cadrpmax)(cadrpmin)))h))

  (setqpp0(list(-(carpcen)(*w0.44))

 ?。?(cadrpcen)(*h0.26))))

  (setqpp1(list(+(carpcen)(*w0.44))

 ?。?(cadrpcen)(*h0.44))))

  (setqdx(/(*w0.88)4)dy(/(*h0.7)8))

 ?。╯etqpx(carpp)py(cadrpp))

 ?。╯etqpx0(carpp0)py0(cadrpp0))

  (if(<pypy0)(dq2)(dq1))))

 ?。╠efundq1()(if(<px(carpcen))

 ?。╯etqaorb″1″)

  (setqaorb″2″))

 ?。╯etqxh(fix(1+(/(-pypy0)dy))))

 ?。╯etqblkname

 ?。╯trcat″atl″tlsldnaorb(itoaxh))))

 ?。╠efundq2()

  (setqxh1(fix(1+(/(-pxpx0)dx))))

 ?。╟ond((=xh11)(lastsld))

  ((=xh12)(nexts

  ld))

 ?。ǎǎ絰h13)(setnil))

  ((=xh14)(setok))))

 ?。╠efunlastsld())

  (defunnextsld())

 ?。╠efunsetnil())

 ?。╠efunsetok())

  如點(diǎn)在上半部分運(yùn)行dq1,否則運(yùn)行dq2while;defun圖例主程序結(jié)束定義dq1子函數(shù)

  點(diǎn)落在左面aorb為1

  點(diǎn)在右面aorb為2;if

  計(jì)算縱向序號計(jì)算圖例圖塊名(由4部分連接組成)

  dq1結(jié)束

  定義dq2子函數(shù)

  計(jì)算橫向序號

  運(yùn)行l(wèi)astsld子函數(shù),向前翻頁

  運(yùn)行nextsld子函數(shù),向后翻頁

  運(yùn)行setnil子函數(shù),賦空退出

  運(yùn)行setok子函數(shù),插入圖例

  定義lastsld子函數(shù),略

  定義nextsld子函數(shù),略

  定義setnil子函數(shù),略

  定義sitok子函數(shù),略

課程推薦

  • 優(yōu)惠不斷,施工技能課程五折
  • 【超值預(yù)售】施工前期準(zhǔn)備技能匯總
  • 施工現(xiàn)場總平面布置要點(diǎn)詳解
發(fā)布:2007-11-13 18:07    編輯:泛普軟件 · xiaona    [打印此頁]    [關(guān)閉]
相關(guān)文章:

泛普工程管理軟件其他應(yīng)用

項(xiàng)目管理工具 禪道項(xiàng)目管理軟件 夢龍項(xiàng)目管理軟件 微軟項(xiàng)目管理軟件 裝飾管理系統(tǒng) 裝修預(yù)算軟件 項(xiàng)目計(jì)劃軟件 項(xiàng)目進(jìn)度管理軟件 軟件項(xiàng)目管理工具 材料管理軟件 工程項(xiàng)目管理軟件系統(tǒng) 項(xiàng)目管理系統(tǒng) 施工管理軟件 建筑工程項(xiàng)目管理軟件 工程管理軟件