<ul id="6mmiq"></ul>
<fieldset id="6mmiq"></fieldset>
  • <strike id="6mmiq"><input id="6mmiq"></input></strike>
  • <ul id="6mmiq"></ul>
    您當前位置:首頁 > 新聞頻道 > 技術動態 > 正文
    給排水設計給排水CAD軟件開發探討
    【摘要】本文介紹了用戶幻燈菜單及功能和開發方法,并給出了標高標注和圖例繪制程序的開發方法以及程序注解。  

    1用戶幻燈菜單簡介用戶幻燈菜單(下文簡稱幻燈菜單)是在AutoCAD平臺上開發的一種高效實用的用戶圖形界面,由幻燈和相應的AutoLISP實用程序組成。其功能及用法類似于AutoCAD的圖標菜單。調用時幻燈菜單屏幕上出現一幅幻燈,幻燈顯示不同圖形界面,由幻燈和相應的AutoCAD實用程序組成。其功能及用法的功能區域,每個區域對應相應的功能,用鼠標點取即可調用該功能。  

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

    下面以我院開發的標高標注程序為例介紹幻燈菜單的功能:在command:狀態下從下拉菜單中點取“標高標注1”后屏幕上出現如圖1所示幻燈,用鼠標在某一標高種類格中點擊后幻燈消失,恢復前一圖面,在提示行中提示“請輸入起點”,給點后又提示:“標高值”,輸入數值后自動按選擇的種類畫好標高符號并寫好標高值;然后重復提示“請輸入起點”標注下一個,回車則回到圖1幻燈重復使用,點EXIT退出。  

    2幻燈菜單的特點  

    幻燈菜單可以實現AutoCAD的圖標菜單的各項功能,并且有如下優點:  

    a.制作、修改效率高。制作圖標菜單時,要實現的功能數與幻燈數及菜單項的數量相同。而制作一個幻燈菜單只需要作一個幻燈,幻燈數量大幅減少,修改也容易得多。  

    b.使用效率高。為了提高軟件效率,盡量減少擊鍵次數是今后軟件的發展方向。幻燈菜單可以將多種形式的選擇以圖形形式直觀地顯示出來,以供選擇。以標高標注為例,以前的方法是先問標高符號形式,再問方向,而使用幻燈菜單只需點取一次即可。  

    c.界面美觀,制作靈活多樣,使用方便。幻燈菜單在一幅幻燈中劃分的功能區數量不限,并且可以根據需要制作成方格、橫格、豎格、扇型格、圓環格等多種形式,甚至可以達到可編程序對話框的很多功能。  

    d.適用性強,移植方便。幻燈菜單適用于R9.0版以上的各種中、西文AutoCAD版本。使用幻燈菜單時,由于它包含在用ADS或AutoLISP等語言編制的程序中,所以只要能運行程序即可調出幻燈菜單,版本升級時不必改變新的菜單文件。而圖標菜單的菜單項必須逐條加入到新的菜單文件中。  

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

    3幻燈菜單的制作  

    幻燈菜單的原理是:將AutoCAD繪圖區分為若干規則的圖形區域,每一區域可以對應一組功能,在程序調用幻燈菜單時,要求用戶根據需要在某一圖形區域中選取一點,然后程序自動計算出該點所在的區域位置,從而調用所對應的程序功能。  

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

    a.獲取下列AutoCAD系統變量:  

    viewsize-當前繪圖區高,用繪圖單位計算;  

    viewctr-當前繪圖區中心點坐標值;  

    vsmax、vsmin-虛擬屏幕的左下角及右上角點坐標值,可以用來求繪圖區寬高比,從而求出繪圖區寬度。  

    b.根據橫向和豎向分格數,求出每格的寬和高。  

    c.由點的坐標值分別求出點所在格的橫向和豎向序號。  

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

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

    4實例一———標高標注程序  

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

    abg.lsp程序包括主程序abg和15個標高標注子函數,子函數abgl至abg15類似,本文只列出abgl子函數程序。  

    5實例二———圖例繪制軟件本軟件由用戶在6頁幻燈菜單中連續選取圖例,給出一個插入圖例的左上角點后,程序自動將所選擇的圖例按順序逐項向下排列連續繪出。軟件由Au toLISP程序atl.lsp和6頁幻燈以及近百個圖塊組成。幻燈文件為atl1~atl6.sld。圖塊名為atlabc.dwg,atl為前綴,a代表幻燈頁序號,為1~6;b代表幻燈菜單左右代碼,左面為1,右面為2;c代表幻燈菜單中上下序號,分別為1~8。  

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

    lastsld子函數對幻燈名字符串進行運算,求出上一頁幻燈名;  

    nextsld子函數對幻燈名字符串進行運算,求出下一頁幻燈名;  

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

    setok子函數對被選擇的圖例表進行處理,并逐項連續插入圖例。  

    6小結  

    a.標高標注程序是利用幻燈菜單調出相應的標高標注子程序。  

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

    c.圖例幻燈菜單分兩個大區,上面是圖例區,下面是幻燈菜單的操作區,可見幻燈菜單能做成復雜高效的菜單。  

    7程序清單  

    a.abg.lsp程序及注解;  

    (defunC:BGBZ()  

    (setqwhil1t)  

    (whilewhil1)  

    (command″vslide″″acd1″)  

    (if(setqpp(getpoint″請點取標高種類″))  

    (progn  

    (redraw)  

    (setqh(getvar″viewsize″)  

    pcen(getvar″viewsize″)  

    pmax(getvar″vsmax″)  

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

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

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

    (setqpp0(list(-(carpcen)(/w3))  

    (-(cadrpcen(  

    /h3))))  

    (setqpp1(list(+(carpcen)(/w3))  

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

    (setqdx(/w6)dy(/h6))  

    (setqlx(carpp)ly(cadrpp))  

    (setqplx(carpp0)ply(cadrpp0))  

    (setplx(-lxplx)ly(-lyply))  

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

    (setqy(fix(1+(/(-pypy0)dy))))  

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

    (cond((=nn14)(abg1))  

    ((=nn13)(abg2))  

    ((=nn12)(abg3))  

    ((=nn11)(abg4))  

    主程序BGBZ開始  

    設whil1值為真  

    當whil1為真時執行下列程序  

    顯示幻燈在幻燈菜單中選點  

    重畫恢復原畫面  

    繪圖區高  

    繪圖區中心點  

    虛擬屏幕右上角  

    共獲取系統變量  

    求繪圖區寬  

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

    有效區右上角  

    每格寬和高  

    PP點的X和Y坐標  

    左下角點坐標  

    PP點和PP0點X和Y坐標差;  

    X方向格序號  

    Y方向格序號  

    將X和Y連接  

    多項選擇條件函數  

    nn=13時運行abe2子函數  

    ((=nn24)(abg5))  

    ((=nn23)(abg6))  

    ((=nn22)(abg7))  

    ((=nn21)(abg8))  

    ((=nn34)(abg9))  

    ((=nn33)(abg10))  

    ((=nn32)(abg11))  

    ((=nn31)(abg12))  

    ((=nn44)(abg13))  

    ((=nn43)(abg14))  

    ((=nn42)(abg15))  

    ((=nn41)(setqwhil1nil))  

    );cond)  

    )));progn;if;while;defun  

    (defunabg1()  

    (while(setqp1(getpoint″輸入起點″))  

    (initget1)  

    (setqs1(getreal″標高值:″))  

    (setqp2(polarp108))  

    (setqp3(polarp2(/pi4)3.2))  

    (setqp4(list(+(carp2)0)(+(cadrp2)2.9)))  

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

    (command″line″p1″@14<0″″″″line″p3p2  

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

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

    b.atl.lsp程序及注解  

    為11-44格規定功能,即每一格對應一個子函數  

    主程序BGBZ結束  

    定義abg1子函數  

    標高符號起點  

    不接受空值  

    標高值  

    計算各點位置  

    標高為0時加“±”  

    畫標高符號  

    寫標高值command  

    while;defun-abg1a  

    bg2~abg15子函數省略  

    (defunC:TL()  

    (setqatllistniltlsld″atla″tlsldn″1″whil1t)  

    (setqtlpath″/cad/atl″)  

    (promtp″\n給排水圖例程序
    —BERIS″)  

    (whilewhil1  

    (command″vslide″(strcattlpath″atl″tlsldn))  

    (initget1)  

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

    (setqh(getvar″viewsize″))  

    (setqpcen(getvar″viewctr″))  

    圖例繪制主程序  

    賦初始值  

    圖例圖塊路徑  

    提示  

    當whil1為真執行下面程序調出幻燈(幻燈名由三個變量連接而成,圖2為第一頁)  

    不接受空值  

    以下內容同標高標注程序  

    (setqpmax(getvar″vsmax″))  

    (setqpmin(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))  

    (setqpx(carpp)py(cadrpp))  

    (setqpx0(carpp0)py0(cadrpp0))  

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

    (defundq1()(if(<px(carpcen))  

    (setqaorb″1″)  

    (setqaorb″2″))  

    (setqxh(fix(1+(/(-pypy0)dy))))  

    (setqblkname  

    (strcat″atl″tlsldnaorb(itoaxh))))  

    (defundq2()  

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

    (cond((=xh11)(lastsld))  

    ((=xh12)(nexts  

       
    ld))  

    ((=xh13)(setnil))  

    ((=xh14)(setok))))  

    (defunlastsld())  

    (defunnextsld())  

    (defunsetnil())  

    (defunsetok())  

    如點在上半部分運行dq1,否則運行dq2while;defun圖例主程序結束定義dq1子函數  

    點落在左面aorb為1  

    點在右面aorb為2;if  

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

    dq1結束  

    定義dq2子函數  

    計算橫向序號  

    運行lastsld子函數,向前翻頁  

    運行nextsld子函數,向后翻頁  

    運行setnil子函數,賦空退出

    運行setok子函數,插入圖例  

    定義lastsld子函數,略  

    定義nextsld子函數,略  

    定義setnil子函數,略  

    定義sitok子函數,略 
    關鍵字:水利
    About Us - 關于我們 - 服務列表 - 付費指導 - 媒體合作 - 廣告服務 - 版權聲明 - 聯系我們 - 網站地圖 - 常見問題 - 友情鏈接
    Copyright©2014安裝信息網 www.zqccq.com. All rights reserved.
    服務熱線:4000-293-296 聯系電話:0371-61311617 傳真:0371-55611201 QQ: 郵箱:zgazxxw@126.com 豫ICP備18030500號-4
    未經過本站允許,請勿將本站內容傳播或復制
    安全聯盟認證
    主站蜘蛛池模板: 老司机国内精品久久久久| 国产精品视频免费一区二区| 久久精品国产影库免费看| 四虎精品影库4HUTV四虎| 2021久久国自产拍精品| 精品人体无码一区二区三区| 69SEX久久精品国产麻豆| 久久精品国产精品亜洲毛片| 第一福利永久视频精品| 亚洲精品白浆高清久久久久久| 2021国产成人精品久久| 国产亚洲精品a在线无码| 四虎国产精品永久在线看| 大胸国产精品视频| 国产精品视频白浆免费视频 | 无码人妻精品一区二区三区99不卡 | 久久er99热精品一区二区| 亚洲国产精品日韩专区AV| 99视频在线观看精品| 亚洲国产精品无码一线岛国| 国产午夜亚洲精品理论片不卡| 精品国产91久久久久久久| 久久久无码精品亚洲日韩按摩| 日韩精品无码Av一区二区| 久久99精品久久久久久不卡| 国产精品无码久久四虎| 日本精品中文字幕| 99在线精品视频在线观看| 久久综合久久自在自线精品自| 亚洲日韩欧美制服精品二区| 日韩精品欧美| 免费看污污的网站欧美国产精品不卡在线观看 | 日韩福利视频精品专区| 欧美精品高清在线xxxx| 久久久久久久亚洲精品| 日韩精品一二三区| 无码国内精品久久人妻麻豆按摩| 欧洲精品码一区二区三区免费看| 欧美XXXX黑人又粗又长精品| 香蕉依依精品视频在线播放 | 欧美精品黑人粗大欧|