![2autocad2009-建筑圖學(xué)基礎(chǔ)隨書光盤3.01g ch14n_第1頁](http://file4.renrendoc.com/view/26eed16545fe727eb07582a24eebed46/26eed16545fe727eb07582a24eebed461.gif)
![2autocad2009-建筑圖學(xué)基礎(chǔ)隨書光盤3.01g ch14n_第2頁](http://file4.renrendoc.com/view/26eed16545fe727eb07582a24eebed46/26eed16545fe727eb07582a24eebed462.gif)
![2autocad2009-建筑圖學(xué)基礎(chǔ)隨書光盤3.01g ch14n_第3頁](http://file4.renrendoc.com/view/26eed16545fe727eb07582a24eebed46/26eed16545fe727eb07582a24eebed463.gif)
![2autocad2009-建筑圖學(xué)基礎(chǔ)隨書光盤3.01g ch14n_第4頁](http://file4.renrendoc.com/view/26eed16545fe727eb07582a24eebed46/26eed16545fe727eb07582a24eebed464.gif)
![2autocad2009-建筑圖學(xué)基礎(chǔ)隨書光盤3.01g ch14n_第5頁](http://file4.renrendoc.com/view/26eed16545fe727eb07582a24eebed46/26eed16545fe727eb07582a24eebed465.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、建筑設(shè)計14.1墻 的 繪 制在本節(jié)中將帶領(lǐng)讀者畫出一個如圖 14-1 所示的墻。按【Enter】鍵后 光標線所在就是墻心線光標線圖 14-1 本程序的畫墻功能完成圖本例將主要用到幾個程序,其中:vwall 為主程序,midvpt詳細講述它們的功能以及程序設(shè)計的技巧。本范例完成文件:vwall.lsp(見本書范例光盤)為子程序。接下來主程序 vwall作用:畫雙線墻(1)(defun c:vwall (/wallsidesp ep halfthk ang angp90 angm90tang ws lone l2 l3 l4 wal&midp temp sv_osmodemsgwa4 msgwa
2、5 wallthk)(2)()(3)(if *acadObject* (4)()(5)(setq *acadObject* (vlax-get-acad-object)(6)258向右(向下)模式向左(向上)模式【Enter】模式的右邊,則 墻線將向右 位移 12將光標定在 光標線的左邊,則 墻線將向左 位移 12將光標定在 (7)(if *acad (8)()(9)(setq *acad (10)(11)(if *mSpace*(12)()* (vla-get-Active*acadObject*)(13)(setq *mSpace* (vla-get-M (14)(15)(if *Util
3、*(16)()Space *acad*)(17)(setq *Util* (vla-get-Utility *acad (18)(19)(if *Layers* (20)()(21)(setq *Layers* (vla-get-layers *acad (22)(23)(setq curla(vla-get-ActiveLayer *acad*)*)*);獲取當(dāng)前的圖層,并將之在變量curla 中(24)(setq lalen(vla-get-count *Layers*) (25)i 0(26)existwalla n) (27)(while ( i lalen)(28)(if (= (v
4、la-get-name(vla-item *Layers* i) wall) (29)(setq existwalla y)(30) )(31)(setq i (1+ i) (32)(33)(if (= existwalla y) (34)()(35)(setq walla(vla-add *Layers* wall)(36)259建筑設(shè)計如果圖層“ WALL” 不存在,那么就再增加一個。這是因為在設(shè)計上這個墻必須繪于“ WALL” 圖層上,以與其他用 LINE 或 PLINE 指令畫的線區(qū)隔開。這樣,當(dāng)后續(xù)有程序還要用來編輯墻線時,就不會再去使用所有圖層里的一大堆線來判斷,而延誤執(zhí)行的時間。
5、(37)(vla-put-activelayer *acad* walla);將當(dāng)前圖層設(shè)定為“WALL”(38)(setvar cmdecho 0)(39)(setq sv_osmode (getvar osmode) (40)(setvar osmode 0);設(shè)定一些需要暫時關(guān)閉的系統(tǒng)變量(41)(VL-CMDF fillet r 0);設(shè)定圓角半徑為 0,即欲實現(xiàn)無半徑修交角(42)(setq wallthk 12.0);設(shè)定墻厚為 12.0,并存在變量 wallthk 中(43)(prompt 請輸入墻厚: );顯示墻厚并提示輸入(43)(setq temp (getreal)260
6、(44)(if temp(45)(setq wallthk temp) (46);如果使用者輸入其他數(shù)值,則將該值存入 wallthk 變量中(47)(setq sp (getpon 請點取墻起點:);提示輸入墻起始點(48)(setqy);設(shè)定變量來判斷是否第一根墻線(49)(while (setq ep (getposp n 請點取墻端點:);當(dāng)輸入墻的第二點非 nil(即空白)時,執(zhí)行以下程序段(50)(setq vl3 (vla-addline *mSpace* (vlax-3d-posp) (vlax-3d-poep);畫出墻線(51)l3 (vlax-vla-object-enam
7、e vl3);將墻線轉(zhuǎn)換為 ename(實體名稱)vl3midp (midvpt (vlax-3d-posp) (vlax-3d-poep)l3midp(vlax-safearray-list vl3midp);求得墻線中點并將其轉(zhuǎn)換為表的形式(54) )(55) (setq wal&midp (list l3 l3midp)261建筑設(shè)計;將實體名稱和中點作為一個表在wal&midp 變量中(56)halfthk(/ wallthk 2.0) ;一半墻厚 (57)ang(angle sp ep)angp90(+ ang (/ pi 2)angm90(- ang (/ pi 2);計算直線的角
8、度及加 pi/2 和減 pi/2 的角度值,以備偏移使用(60)ws (getpo“n 請點取要以墻的哪邊作為標準,按【Enter】鍵則以墻中心為準畫墻”);提示輸入另一條墻線位置,以點輸入(61)(62)(if (= ws nil) (63)(setq wallside c);如果使用者按下【Enter】鍵,則將“c”存入 wallside 變量中(64)(progn (setq tang (- (angle ep ws) (angle ep sp) (65)(if (or (and ( tang 0) ( tang pi) ( tang (* -1 pi)(setq wallside r)
9、(setq wallside l) (68)(69) )(70);如果使用者沒有按下【Enter】鍵,則判斷使用者所點取的點是在原墻線的左邊或右邊(cond (= wallside c)(vl-cmdf offset(73)halfthk262(74)(75)(76)(77)(78)(79)(80)(81)(82)(83)(84)(85)(86)(87)wal&midp(polar sp angp90 halfthk) )(setq l4 (entlast)(vl-cmdfoffset halfthk wal&midp(polar sp angm90 halfthk)(setq l3 (ent
10、last)(vl-cmdf erase wal&midp );如果墻在墻線中間,則如圖 14-1 所示在其兩邊進行偏移(offset)1/2 墻厚,并刪除中線(88)(89)(90)(91)(= wallside l)(vl-cmdf offset wallthk wal&midp ws ) (setq l4 (entlast);如果點取的是左邊,則向左偏移一個墻厚(92)(93)(94)(95)(96)(97) )(= wallside r)(vl-cmdf offset wallthk wal&midp ws ) (setq l4 l3)(setq l3 (entlast);如果點取的是右
11、邊,則向右偏移一個墻厚263建筑設(shè)計(98)(setvar osmode sv_osmode)(99)(if (=n)(100)(vl-cmdf fillet lone l3 fillet l2 l4) (101);如果不是第一條墻線,則兩條墻線交接處就要修一個半徑為 0 的圓角(即修交角)(102)(setqn)(103)(setq sp ep (104)lone l3(105) l2 l4 (106)(107);之后,將lone 設(shè)為l3,l2 設(shè)為l4,它們將與另 2畫出的墻線l3 和l4 修交角(108)(vla-put-activelayer *acad* curla);畫完墻后,將
12、當(dāng)前圖層恢復(fù)回程序執(zhí)行前的狀態(tài)(109)(princ)(110)子程序 midvpt作用:計算并獲取兩點的中點。(defun midvpt (vpt1 vpt2 / pt1x pt1y pt1z pt2x pt2y pt2z mptx mptymptz mpt)(setq pt1x (vlax-safearray-geement (vlax-variant-value vpt1) 0)pt1y (vlax-safearray-ge pt1z (vlax-safearray-ge pt2x (vlax-safearray-ge pt2y (vlax-safearray-gept2z (vlax-
13、safearray-geement (vlax-variant-value vpt1) 1) ement (vlax-variant-value vpt1) 2) ement (vlax-variant-value vpt2) 0) ement (vlax-variant-value vpt2) 1)ement (vlax-variant-value vpt2) 2)264(setq mptx (/ (+ pt1x pt2x) 2) mpty (/ (+ pt1y pt2y) 2) mptz (/ (+ pt1z pt2z) 2)(setq mpt (vlax-variant-value vp
14、t1)(vlax-safearray-pu (vlax-safearray-pu (vlax-safearray-pu (eval mpt)ement mpt 0 mptx) ement mpt 1 mpty)ement mpt 2 mptz)本范例的執(zhí)行步驟假設(shè) vwall.lsp 被置于:AutoCAD 設(shè)計院/NO.7Sles 目錄下,如果您將這些文件放在另外的目錄里,那么本范例中有關(guān)存取這些文件的路徑也要更改(請參考 2.5 節(jié))。然后,再按如下步驟執(zhí)行。在 AutoCAD 指令提示號后輸入(參考圖 2.22 也可以):指令: (load vwall.lsp) 請輸入墻厚:(按【Ent
15、er】或輸入數(shù)值)請點取墻起點:(點取一點) 請點取墻端點:(點取另一點)請點取要以墻的哪邊作為標準,按【Enter】鍵則表以墻中心為準畫墻請點取墻端點:.請點取墻端點:【Enter】14.2窗 的 繪 制265建筑設(shè)計本范例將畫出一個如圖 14-2 所示的窗。本例將主要用到幾個程序,其中:Hwindows 為主程序,drawswing、getthk、dtr、rtd、distvp、midvpt、svar 與 rvar 等為子程序。接下來計的技巧。詳細講述它們的功能以及程序設(shè)二扇推拉窗 三扇推拉窗 四扇推拉窗 圖 14-2 本程序的畫窗功能完成圖本范例完成文件:Hwindow.lsp(本書范例光
16、盤)本范例配合文件:winblk1.dwg(本書范例光盤) winblk2.dwgwinblk3.dwg winblk4.dwgwinblk5.dwg主程序 Hwindows作用:在 14.1 節(jié)所畫的墻中水平方向的窗。(1)(defun c:Hwindow (/ temp ipt refpt rang sang p1 p2 p3 p4 wdpth rblk s1 s2 s3 s4 pm12 pm34w1 w2 nalnth existopenla lalen i openla mdubs mstr vp1 vp2 vp3 vp4 curla walla ila vwb vp31 vp41 m
17、tempvbwb)(2)()(3)(if *acadObject*(4)()266推開窗固定窗(5)(setq *acadObject* (vlax-get-acad-object)(6)(7)(if *acad (8)()(9)(setq *acad (10)(11)(if *mSpace*(12)()* (vla-get-Active*acadObject*)(13)(setq *mSpace* (vla-get-M (14)(15)(if *Util*(16)()Space *acad*)(17)(setq *Util* (vla-get-Utility *acad (18)(19)(i
18、f *Selsets* (20)()(21)(setq *Selsets* (vla-get-SelectionSets *acad (22)(23)(if *Layers* (24)()(25)(setq *Layers* (vla-get-layers *acad(26)*)*)*);獲取當(dāng)前的圖層,并將之在整體變量layers 中(27)(setq lalen (vla-get-count *Layers*) (28)i 0(29)existopenla n (30)(31)(while ( (strlen winblk) 9) (57)(setq winblk (substr winb
19、lk 1 9)(58);設(shè)定以角度為 0,窗寬度為 120 來水平窗268(59)(setq refpt T)(60)(While (member refpt (T W)(61)(Prompt n 請點取欲安放窗的參考點位置或 : (62);提示使用者輸入點(63)(setvar osmode 544);設(shè)定圖形鎖點方式(64)(initget W T) (65)(setq refpt (getpo ) (66)(cond(67)(= refpt T);先定義W(設(shè)窗寬)與T(窗類型),準備讓使用者選擇(68)(prompt n 請選擇窗型式 :(69)(70)(initget 1 2 3 4
20、 5) (71)(setq temp (getkword) (72)(cond(73)(= temp 1) (setq winblk winblk1.dwg)(74)(= temp 2) (setq winblk winblk2.dwg)(75)(= temp 3) (setq winblk winblk3.dwg)(76)(= temp 4) (setq winblk winblk4.dwg)(77)(= temp 5) (setq winblk winblk5.dwg)(78)(79);根據(jù)使用者的選擇,而賦值對應(yīng)的圖塊名稱269建筑設(shè)計(80)(= refpt W)(81)(82)(83
21、)(84)(85)(86)(87)(88)(prompt 請輸入窗寬 :)(setq temp (getreal) (if (eval temp)(setq wwdth temp);使用者如輸入W,則提示其輸入窗的寬度(89) (= refpt nil) (exit) (90)(91);如果使用者鍵入空的(nil),則跳出程序(92)(setvar osmode 0)(93)(setvar cmdecho 0)(94)(setvar orthomode 1) (95)(setq rang (dtr ang) (96)(setq ipt refpt) (97)(setqvb (vla-Inser
22、tBlock (98)*mSpace*(99)(vlax-3d-porefpt)winblkwwdth (102) 12.0(103) 1(104) 0(105) )270(106);設(shè)計窗圖塊時的預(yù)覽影像(107)(prompt n 請將之平移到窗的實際位置上:);提示使用者將窗移到適當(dāng)位置上(108)(setvar dragmode 2)(109)(setvar osmode 544);設(shè)定需要的系統(tǒng)變量(110)(setq rblk (vlax-vla-object-ename vb);將圖塊轉(zhuǎn)換為圖元名稱(111)(d move rblk refpt pause);移動圖塊至適當(dāng)位置(
23、112)(setq p1 (getvar lastpo );取得窗圖塊的最后位置(113)(setq vp1 (vlax-3d-pop1)(114)(d erase rblk );刪除窗的輔助圖塊。(115)(setq sang (+ rang (/ pi 2)(116)(setq vp2 (vla-PolarPo*Util* vp1 rang wwdth) (117)(setq pm12 (midvpt vp1 vp2)271建筑設(shè)計(118)(setq wallthk (getthk pm12 sang)(119)(setq vp3 (vla-PolarPo*Util* vp1 sang
24、wallthk)(120) vp4 (vla-PolarPo*Util* vp3 rang wwdth) (121)(122)(setq pm34 (midvpt vp3 vp4)計算獲取個點 vp1,vp2,vp3,vp4 及 vp1,vp2 和 vp3,vp4 的中點。其中的兩個中點用于選取墻線。(123)(if sset (124)(vla-clear sset) (125)(126)(vla-Selec Po sset pm12 mdubs mstr) (127)(vla-Selec Po sset pm34 mdubs mstr) (128)(setq wlone (vla-item
25、 sset 0)(129)(setq wl2 (vla-item sset 1)(130)(setq ewlone (vlax-vla-object-ename wlone) (131)ewl2 (vlax-vla-object-ename wl2)(132)(133)(setq p2 (vlax-safearray-list (vlax-variant-value vp2)p3 (vlax-safearray-list (vlax-variant-value vp3)p4 (vlax-safearray-list (vlax-variant-value vp4) (136)(137)(set
26、q curla (vla-get-Activelayer *acad(138) walla(vla-get-layer wlone) (139)(140)(setq lalen (vla-get-count *Layers*)(141) ila 0 (142)(143)(while ( ila lalen)*)(144)(if (= walla (vla-get-name (vla-item *Layers* ila)(145)(vla-put-Activelayer *ACAD* (vla-item *Layers* ila)272(146) )(147)(setq ila (1+ ila)
27、 (148)(149)(d break ewlone p2 p1 break ewl2 p4 p3)(150)(vla-addline *mSpace* vp1 vp3)(151)(vla-addline *mSpace* vp2 vp4);執(zhí)行斷開墻線并聯(lián)結(jié)vp1,vp3 及vp2,vp4(152)(if (= wallthk 15.0);如果墻的厚度小于或等于 15 的話,就執(zhí)行下面的程序段(153)(progn (setq wdpth wallthk)(154)(setq vp31 (vla-PolarPo*Util* vp1 sang wdpth)(155)(156)vp41 (vla
28、-PolarPo*Util* vp2 sang wdpth)(157)(setq vwb (vla-InsertBlock *mSpace* vp1 winblk wwdth wdpth 1 (rtd rang)(158);窗圖塊(159)(vla-put-layer vwb open);設(shè)定窗所在的圖層。(160)(if (= winblk winblk4.dwg) (161)(drawswing)(162)(163)如果窗類型為 4,則調(diào)用子程序(drawswing)來繪圖。如果墻厚超過 15.0,則執(zhí)行以273建筑設(shè)計下代碼:(164)(progn(setq wdpth 12.0)(se
29、tqvp31 (vla-PolarPo*Util* vp1 sang 12)(167)(168) )vp41 (vla-PolarPo*Util* vp2 sang 12)(setq bwline (vla-addline *mSpace* vp3 vp4)(setq vbwb (vla-InsertBlock*mSpace*vp1winblkwwdthwdpth(176) 1(177) (rtd rang)(178) )(179) )(vla-put-layer vbwb open)(if (= winblk winblk4.dwg)(182)(183) )(drawswing)(initg
30、et y n)(prompt n 要不要將窗換到墻的另一邊?;提示是否窗的方向要改變(186) )(setq temp (getkword)(if (= temp y);如果要改變,就執(zhí)行以下程序段:274(189) (progn(190)(191)(192)(193)(194)(setq mbwline (vla-mirror bwline(midvpt vp1 vp3) (midvpt vp2 vp4);鏡像原窗(setq mtemp bwline wbwline mbwline mbwline mtemp)(vla-delete mbwline);刪除原窗(197) (setq mvbw
31、b (vla-mirror vbwb (midvpt vp1 vp3) (midvpt vp2 vp4);鏡像窗線(setq mtemp vbwb vbwb mvbwb mvbwb mtemp)(vla-delete mvbwb)(200) );刪除窗線(201) (if (= winblk winblk4.dwg);如果為第 4 類窗,就執(zhí)行以下程序段:(progn(setq mwarc (vla-mirror warc (midvpt p1 p3) (midvpt p2 p4);鏡像窗中的弧(setq mtemp warc warc mwarc mwarc mtemp)(vla-delet
32、e mwarc)275建筑設(shè)計;鏡像窗中的線(setq mwline (vla-mirror wline (midvpt p1 p3) (midvpt p2 p4)(setq mtemp wline wline mwline mwline mtemp)(vla-delete mwline)(209) )(210) )(211) )(212) )(213) ) (214)(rvar) (215)(princ)(216) )子程序 drawswing作用:畫第類型的窗。(defun drawswing (/ jw ss rs es image pm13 pm24 mwarc mwline warc
33、 pm13 pm24 temp wline ) (setq jw (* 0.03 wwdth)(setq ss (polar (polar p1 rang jw) (+ rang (/ pi 2) (/ wdpth 2) (setq rs (- wwdth (* jw 2)(setq es (polar ss (+ rang (dtr 30) rs);計算一些需要的數(shù)值(d arc c ss (polar ss rang rs) es);畫弧(setq s3 (entlast)(setq warc (vlax-ename-vla-object s3) (vla-put-layer warc o
34、pen)276;將弧轉(zhuǎn)換為 vla 對象(setq wline (vla-addline *mSpace* (vlax-3d-poss) (vlax-3d-poes)(vla-put-layer wline open);畫線(setq pm13 (midvpt (vlax-3d-pop1) vp31) pm24 (midvpt (vlax-3d-pop2) vp41);計算用于鏡像所需的兩個中點(setq temp nilimage 1)(while (/= temp y) (initget y n)(prompt n 以上所畫的正確嗎?(Y/N) 按 【ENTER】 鍵就會上下左右對調(diào)!);
35、提示使用者是否要改變方向(setq temp (getkword) (setq image (* image -1) (if (/= temp y)(if (= image -1) (progn(setq mwarc (vla-mirror warc pm12 pm34) (setq mtemp warc warc mwarc mwarc mtemp) (vla-delete mwarc)(setq mwline (vla-mirror wline pm12 pm34) (setq mtemp wline wline mwline mwline mtemp)(vla-delete mwline
36、)277建筑設(shè)計)(progn(setq mwarc (vla-mirror warc pm13 pm24) (setq mtemp warc warc mwarc mwarc mtemp) (vla-delete mwarc)(setq mwline (vla-mirror wline pm13 pm24) (setq mtemp wline wline mwline mwline mtemp) (vla-delete mwline);設(shè)計讓使用者以按【Enter】來切換這 4 種模式,直到按下【Y】鍵來結(jié)束程序為止子程序 getthk作用:根據(jù)輸入的點和給定角度來尋找與另一條墻線之間的距離
37、。從 fixp 點開始畫一條線,與另一條墻線交于 otht,然后計算 fixp 與 otht 之間的距離,也就是墻的厚度。如果兩條墻線之間的距離大于 40,則程序?qū)⒁筮x擇另一條墻線,以再計算兩個點的距離。(defun getthk (fixp schd / p1 p2 ip ps pe temp num aline tl1 tl2) (setq p1 (vla-PolarPo*Util* fixp schd 3)p2 (vla-PolarPo*Util* fixp schd 40)(if sset(vla-clear sset)(setq sset (vla-add *Selsets* pt
38、set)(vla-select sset acSelectionSetCrossing p1 p2 mdubs mstr)(setq len (vla-get-count sset)278(while (/= len 1)(prompt n 請點取另一條墻線:) (if sset(vla-clear sset)(vla-SelectOnScreen sset mdubs mstr) (setq len (vla-get-count sset)(setq tl (vla-addline *mSpace* p1 p2) tl2 (vla-item sset 0)(setq otht (vla-er
39、sectWith tl tl2 acExtendThisEntity) (if tl(vla-delete tl)(distvp fixp otht)子程序 dtr作用:將角度量轉(zhuǎn)換成弧度量。(defun dtr (deg) (* (/ deg 180.0) pi)子程序 rtd作用:將弧度量轉(zhuǎn)換成角度量。(defun rtd (rad) (* (/ ri) 180)子程序 distvp作用:計算并返回二點的距離。(defun distvp (vpt1 vpt2 / pt1x pt1y pt1z pt2x pt2y pt2z)(setq pt1x (vlax-safearray-geement
40、 (vlax-variant-value vpt1) 0)279建筑設(shè)計pt1y (vlax-safearray-ge pt1z (vlax-safearray-ge pt2x (vlax-safearray-ge pt2y (vlax-safearray-ge pt2z (vlax-safearray-ge)ement (vlax-variant-value vpt1) 1) ement (vlax-variant-value vpt1) 2) ement (vlax-variant-value vpt2) 0) ement (vlax-variant-value vpt2) 1)ement
41、 (vlax-variant-value vpt2) 2)(sqrt (+ (expt (- pt1x pt2x) 2) (expt (- pt1y pt2y) 2) (expt (- pt1z pt2z) 2)子程序 midvpt作用:計算并返回二點的中點。(defun midvpt (vpt1 vpt2 / pt1x pt1y pt1z pt2x pt2y pt2z mptx mpty mptz mpt)(setq pt1x (vlax-safearray-geement (vlax-variant-value vpt1) 0)pt1y (vlax-safearray-ge pt1z (v
42、lax-safearray-ge pt2x (vlax-safearray-ge pt2y (vlax-safearray-gept2z (vlax-safearray-geement (vlax-variant-value vpt1) 1) ement (vlax-variant-value vpt1) 2) ement (vlax-variant-value vpt2) 0) ement (vlax-variant-value vpt2) 1)ement (vlax-variant-value vpt2) 2)(setqmptx (/ (+ pt1x pt2x) 2) mpty (/ (+
43、 pt1y pt2y) 2) mptz (/ (+ pt1z pt2z) 2)(setq mpt (vlax-variant-value vpt1)(vlax-safearray-pu(vlax-safearray-pu (vlax-safearray-puement mpt 0 mptx)ement mpt 1 mpty) ement mpt 2 mptz)280(vlax-make-variant mpt)子程序 svar作用:設(shè)定執(zhí)行此程序所需要的整體變量值。(defun svar ()(setq *z_orth* (getvar orthomode)*z_osmo* (getvar o
44、smode)*z_snap* (getvar snapmode)*z_cmde* (getvar cmdecho)子程序 rvar作用:恢復(fù)未執(zhí)行此程序前的系統(tǒng)變量設(shè)定值。(defun rvar ()(setvar orthomode *z_orth*) (setvar osmode *z_osmo*) (setvar snapmode *z_snap*) (setvar cmdecho *z_cmde*)本范例的執(zhí)行步驟假設(shè) Hwindow.lsp 被置于:AutoCAD 設(shè)計院/NO.7Sles 目錄下,如果您將這些文件放在另外的目錄里,那么本范例中有關(guān)存取這些文件的路徑也要更改(請參考
45、2.5 節(jié))。然后,再按如下步驟執(zhí)行。在 AutoCAD 指令提示號后輸入(參考圖 2-22 也可以)指令:(load hwindow.lsp)后按【Enter】鍵。參考圖 14-3 所示執(zhí)行操作。281建筑設(shè)計當(dāng)還是孩子的時候,要盡自己做孩子的本份,努力充實自己,不要“ 人丑就怪父母” ;當(dāng)身為父母時,盡教育的職責(zé),處處以身作則,不要“ 子女不好就怪命苦” ;當(dāng)身為社會的支柱時,就更應(yīng)明白是非之道,黑白之理,從自身做起社會才能發(fā)展!動物園應(yīng)征暑期工讀生,跑去應(yīng)征,恰好動物園里的猩猩病了,于是就請阿呆扮演猩猩在園里蕩來蕩去表演給游客看,結(jié)果一個不就蕩到隔壁的區(qū)去了,眼一步一步地,正想大呼救命,
46、忽然開口說:“ 學(xué)弟不要怕,我是學(xué)長”。點取欲安放窗的參考點位置或圖 14-3 畫窗程序的執(zhí)行操作282將之平移到窗的實際位置上:點取欲安放窗的參考點位置或:t選擇窗型式:214.3門 的 繪 制本范例將畫出一個如圖 14-4 所示的門。圖 14-4 本程序的畫門功能完成圖本例將主要用到幾個程序,其中:Hdoor 為主程序,insertdoor、getthk、dtr、rtd、distvp、midvpt、svar 與 rvar 等為子程序。以下部分技巧。本范例完成文件:Hdoor.lsp (本書范例光盤)本范例配合文件:doorblks90.dwg (本書范例光盤)詳細來講述它們的功能以及程序設(shè)
47、計的主程序 Hdoor作用:在 14.1 節(jié)所畫的墻中水平方向的門。(1)(defun c:Hdoor(/ temp dblk refpt)(2)()(3)(if *acadObject* (4)()(5)(setq *acadObject* (vlax-get-acad-object)(6) )(7)(if *acad(8)()*283建筑設(shè)計(9)(setq *acad(10) )(11)(if *mSpace* (12)()* (vla-get-Active*acadObject*)(13)(setq *mSpace* (vla-get-M(14) ) (15)(if *Util* (1
48、6)()Space *acad*)(17)(setq *Util* (vla-get-Utility *acad(18) )(19)(if *Selsets* (20)()(21)(setq *Selsets* (vla-get-SelectionSets *acad(22) )(23)(if *Layers* (24)()(25)(setq *Layers* (vla-get-layers *acad(26) )*)*)*)在整體變量 Layers 中;獲取當(dāng)前的圖層,并將之(27)(28)(29)(setq lalen(vla-get-count *Layers*) i 0existope
49、nla n)(30)(while ( i lalen)(31)(if (= (vla-get-name(vla-item *Layers* i) open)(32)(setq existopenla y) (33)(34)(setq i (1+ i)(35) )(36)(if (= existopenla y)(37) ()(38) (progn284(39)(40)(41)(42)(setq openla(vla-add *Layers* open)(vla-p)olor openla acRed);如果圖層“open”不存在,那就新增一個,并設(shè)該圖層的顏色為紅色(setq mdubs(vl
50、ax-make-safearray vlax-vb eger (0 . 1)(vlax-safearray-fill mdubs (0 8)(setq mstr(vlax-make-safearray vlax-vbVariant (0 . 1)(46) (vlax-safearray-filtr (line wall);設(shè)定選擇過濾要放置窗的墻線一定要在“wall”圖層上(47)(svar);調(diào)用子程序 (svar)(48)(setq ang 0.0tiaoff 5.0opngw 90.0) (51)(setq thldw 8.0) (52)(if (= thld nil) (53)(set
51、q thld No)(54) );設(shè)定一些變量的初始值(55)(setq dblk doorblks90.dwg);設(shè)定門的圖塊名稱285建筑設(shè)計(56)(setq refpt W)(57)(while (member refpt (W T) (58)(setvar osmode 544) (59)(initget W T)(60)(prompt n 門檻寬 = )(61)(princ thldw)(62)(prompt , 要不要門檻 = ) (63)(princ thld)(64)(prompt n 請選取門參考點或 :);提示輸入點或改變門的寬度或指定是否需要門檻(65)(setq re
52、fpt (getpo );如果使用者選擇了(W),就執(zhí)行以下程序段:(66)(cond (67)(68)(69)(70)(71)(72)(73)(74)(75)(76)(= refpt W) (prompt n 門寬 : )(setq temp (getreal) (if (eval temp)(setq opngw temp)(= refpt T);如果使用者選擇了(T),就執(zhí)行以下程序段:(77)(78)(79)(if (= thld No)(setq thld Yes) (setq thld No)286thld 變量即代表是否需要門檻。于此設(shè)計讓使用者經(jīng)過連續(xù)按下【T】鍵來切換“Yes
53、”與“ No”。(80)(81)(82)(83)(84)(= refpt nil) (exit)(85)(insertdoor typ dblk ang open);調(diào)用insertdoor 子程序來于“open”圖層上門(86)(rvar);調(diào)用子程序(rvar)(87)(princ)(88)子程序 insertdoor(defun insertdoor (typ drblk ang la / sang wang ipt rang dwth wla pctr pm12 pm34 wset i w1 w2 p1 p2 p3 p4)(setq rang (dtr ang) (setvar cmd
54、echo 0)(setvar orthomode 1) (setq dwth opngw)(setq vdb(vla-InsertBlock *mSpace* (vlax-3d-porefpt) drblk dwth dwth 1 ang)edb(vlax-vla-object-ename vdb)(prompt n 請平移到實際的門位置上:)287建筑設(shè)計(setvar dragmode 2)(d move edb refpt pause) (setq p1 (getvar lastpo )vp1 (vlax-3d-pop1) d erase edb )(setq wang rang) (s
55、etq vpctr vp1vp2 (vla-polarpo*util* vp1 wang opngw)vpm12 (midvpt vp1 vp2)()(setq sang (- wang (/ pi 2) wallthk (getthk vpm12 sang)(setq vp3 (vla-polarpo*util* vp1 sang wallthk) vp4 (vla-polarpo *util* vp3 wang opngw)vpm34 (midvpt vp3 vp4)(if sset(vla-clear sset)(vla-Selec Po sset vpm12 mdubs mstr) (
56、vla-Selec Po sset vpm34 mdubs mstr) (setq wlone (vla-item sset 0)wl2 (vla-item sset 1)ewlone(vlax-vla-object-ename wlone) ewl2(vlax-vla-object-ename wl2) (setq wala(vla-get-layer wl2)(setq p1(vlax-safearray-list(vlax-variant-value vp1) p2(vlax-safearray-list(vlax-variant-value vp2) p3(vlax-safearray
57、-list(vlax-variant-value vp3)p4(vlax-safearray-list(vlax-variant-value vp4)(setq svar_pickbox(getvar pickbox)288(setvar pickbox 1)(d break ewlone p3 p4 break ewl2 p1 p2)(setvar pickbox svar_pickbox)(setq dwlone(vla-addline *mSpace* vp1 vp3) dwl2(vla-addline *mSpace* vp2 vp4)(vla-put-layer dwlala)(vl
58、a-put-layer dwl2 wala) (if (= thld Yes)(progn(setq vp1 (vla-polarpo*util* vp3 (+ sang pi) thldw) vp2 (vla-polarpo*util* vp4 (+ sang pi) thldw)(setq dtlone(vla-addline *mSpace* vp1 vp2) dtl2(vla-addline *mSpace* vp3 vp4) (vla-put-layer dtlone la)(vla-put-layer dtl2 la)(setq vdb(vla-InsertBlock *mSpac
59、e* vpctr drblk dwth dwth 1 ang) (vla-put-layer vdb la)子程序:svar作用:設(shè)定執(zhí)行此程序所需要的系統(tǒng)變量值。(defun svar ()(setq *z_orth* (getvar orthomode)*z_osmo* (getvar osmode)*z_snap* (getvar snapmode)*z_cmde* (getvar cmdecho)289建筑設(shè)計子程序:rvar作用:恢復(fù)未執(zhí)行此程序前的整體變量設(shè)定值。(defun rvar ()(setvar orthomode *z_orth*) (setvar osmode *z_
60、osmo*) (setvar snapmode *z_snap*) (setvar cmdecho *z_cmde*)子程序:midvpt作用:計算并返回二點的中點。(defun midvpt (vpt1 vpt2 / pt1x pt1y pt1z pt2x pt2y pt2z mptx mpty mptz mpt)(setq pt1x (vlax-safearray-ge pt1y (vlax-safearray-ge pt1z (vlax-safearray-ge pt2x (vlax-safearray-ge pt2y (vlax-safearray-ge pt2z (vlax-safe
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年五年級數(shù)學(xué)下冊 五 分數(shù)除法練習(xí)五說課稿 北師大版001
- Unit 3 Amazingt animals Part A Letters and sounds(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- Unit 3 Weather B learn(說課稿)-2023-2024學(xué)年人教PEP版英語四年級下冊
- 2023八年級數(shù)學(xué)上冊 第15章 數(shù)據(jù)的收集與表示15.1數(shù)據(jù)的收集 1數(shù)據(jù)有用嗎說課稿 (新版)華東師大版
- 2023八年級道德與法治上冊 第二單元 遵守社會規(guī)則 第三課 社會生活離不開規(guī)則第2課時 遵守規(guī)則說課稿 新人教版
- 2024八年級英語下冊 Unit 1 Spring Is ComingLesson 4 The Spring City說課稿(新版)冀教版
- 17 要是你在野外迷了路(說課稿)-2023-2024學(xué)年統(tǒng)編版語文二年級下冊
- 2025回遷房買賣合同模板
- 2025勞動合同書的范本
- Unit 8 What's his job單元整體(說課稿)-2024-2025學(xué)年接力版(2024)英語三年級上冊
- 綠色能源項目融資計劃書范文
- 《造血干細胞移植護理》課件
- 課題申報參考:全齡友好視角下的社區(qū)語言景觀評估及空間優(yōu)化研究
- 中央2025年公安部部分直屬事業(yè)單位招聘84人筆試歷年參考題庫附帶答案詳解
- 五年級下冊語文四大名著??贾R點
- 光伏發(fā)電項目施工組織設(shè)計方案及技術(shù)措施
- 2025年1月日歷表(含農(nóng)歷-周數(shù)-方便記事備忘)
- 《人工智能發(fā)展史》課件
- 2024年同等學(xué)力人員申請碩士學(xué)位英語試卷與參考答案
- 臨床用血管理培訓(xùn)
- 介入手術(shù)室護理風(fēng)險
評論
0/150
提交評論