給排水系統圖實時窗口的CAD開發技術
許志芳 王耀才 黃樹成
(中國礦業大學,江蘇 徐州 221008)
摘 要:將多窗口技術應用于給排水CAD軟件包中,在主窗口進行管線平面布置,在副窗口實時形成其系統圖,這樣可以提高軟件的容錯性和設計效率。本文詳細討論了多窗口CAD系統的實現技術。
關鍵詞:建筑給排水; CAD; 軟件
中圖分類號: TP311
文獻標識碼: C
文章編號:1000-4602(2000)05-0036-03
Auto CAD提供的多窗口技術是建立在嚴格的投影原理基礎上的,故不能隨意修改、生成各窗口圖形。在建筑給排水工程CAD系統中,在一窗口進行管線平面圖設計,欲在另一窗口中實時生成剛布置管線的系統軸測圖,這樣就必須獲得所有窗口的控制權,即用戶在一窗口中進行操作,創建一個實體A,程序員利用實體A的圖形數據,在其他窗口中生成不同實體來表達實體A的不同形態。由于給排水平面圖的坐標系如圖1所示,而系統圖的坐標系如圖2所示,系統圖坐標系的獲得想通過用“VPOINT”設置視點是絕對不可能的,而且平面圖向系統圖轉化不是完全由投影關系決定的。因此,直接利用Auto CAD提供的窗口操作技術不能解決以上問題。
可見,改進Auto CAD的多窗口顯示技術是完善給排水CAD系統開發的一個重要課題 。在多窗口建筑消防CAD系統中,作者成功地改造了Auto CAD多窗口顯示技術,滿足了設計要求。
1 多視窗控制技術
改進多窗口顯示技術主要有兩種方法:
① 創建您自己的窗口。采用Auto CAD提供的ADS接口,用C編程,去創建自己獨立的窗口。然后,調用Auto CAD的繪圖、編輯命令或函數來繪圖。這種方法工作量很大,而且還要考慮到自己編制的窗口與Auto CAD的接口,影響了Auto CAD的使用效率,不太實用。
?、凇≈苯痈脑霢uto CAD的窗口。采用“MVIEW”窗口(注意一定不能采用“VPORTS”窗口,因為該窗口達不到您的目的),將每一窗口分成顯示層和非顯示層,凍結非顯示層,解凍顯示層。在程序中將對窗口的控制轉向對不同層的控制,這樣就把問題簡化了。但是,由于在任一窗口中都存在顯示層與非顯示層,在該窗口中想對非顯示層上的實體進行選取、編輯、控制就顯得有點力不從心了,好在Auto CAD提供了“CVPORT”這一系統變量,利用它就可以“遙控”每一窗口。到此,就較好地解決了多視窗中對每一窗口的控制技術。這種方法工作量小,全部采用內嵌的AUTOLISP編程,是Auto CAD的內部處理,較實用。而且,每一視窗中均可以直接利用Auto CAD的“ZOOM”、“PAN”進行局部縮放、漫游,視窗的大小調整、視窗搬移均可很簡單地由程序來控制實現,若干視窗還可以部分重疊,不必平行設置。
多視窗系統創建、控制的程序框圖如圖3所示。
2 多視窗系統窗口的調整
多視窗系統盡管具有直觀、形象的特點,但是由于該系統占用了窗口空間,使得主窗口變小、視圖變小,影響了視覺。因此,有時需要對副窗口進行搬移、大小調整,甚至將多窗口系統轉向單窗口系統。
?、佟〈翱诎嵋?br> 用“(VPORTS)”函數可以返回多視窗系統的窗口配置,其結果是一個復合表。如某系統窗口配置用“(VPORTS)”返回為下表:
((2 (0.0 0.0115385) (16.878 5.18077))
(3 (0.0 5.18077) (16.878 9.0))
(1 (0.0 0.0) (16.9589 9.0))
)
由上表可見,該多視窗系統返回了三個窗口句柄號。假設主窗口的句柄號為“2”,一副窗口為“3”,若要對副窗口“3”進行搬移,程序如下:
(defun c:movewin(/p pl)
(command “pspace”);進入紙空間
(setq p (getpoint “/n 請點取要移動的起始點:”));點取移動的基點
(while p
(setq pl (getpoint“/n 請點取移動的終止點:”));點取移動的終點
(command “move” “c”;用“CROSS”方式選取窗口
(caddr (assoc 3 (vports)));窗口右上角坐標
(caddr (assoc 3 (vports)));
“”p pl
)
(setq p(getpoint“/n 請點取要移動的起始點:”));若不滿意可再次搬移
);結束“while”循環
(command “mspace”);進入實體模型空間
(command “ucsicon”“all”“off”);將各窗口UCS圖標關閉
(princ)
)
② 窗口大小調整
再以上述多視窗系統為例,若要對窗口“3”大小作調整,程序如下:
(defun c:dragwin(/p pl)
(command “pspace”);進入紙空間
(setq pl (getcorner(cadr(assoc 3 (vports)))“/n 請拖動窗口到合適大小:”))
(while pl
(command“stretch”“c”;用“CROSS”方式選取窗口及拖動范圍
(list(-(car(setq p(caddr(assoc 3(vports)))))0.05)(-(cadr p)0.05))
(list(+(car p)0.05)(+(cadr p)0.05))
“”p pl
)
(setq pl(getcorner(cadr(assoc 3(vports)))“/n 請拖動窗口到合適大?。骸?)
);結束whiler循環
(command“mspace”);進入實體模型空間
(setvar“cvport”3);激活副窗口
(command“zoom”“e”)
(command“zoom”“0.8x”)
(command“ucsicon”“all”“off”);關閉UCS圖標
(princ)
)
?、邸我暣芭c多視窗轉化
利用“CVPORT”這一系統變量可以激活某窗口,利用“TILEMODE”可以進行單視窗與多視窗間相互轉化。如下程序可以實現由多視窗向單視窗轉化:
(defun c:mtos()
(setvar“cvport”2)
(setvar“tilemode”1)
(command“zoom”“e”)
(command“zoom”“0.8x”)
(princ)
)
3 結語
將多窗口技術應用于給排水CAD軟件包中,在主窗口進行管線平面布置,在副窗口形成其系統圖,即每布置一條管線,便同時在副窗口形成相應的系統圖,這樣可直觀、形象地反映出設計成果,減輕設計難度,而且若有錯誤能及時發現并修改,以防中途設計一步錯誤而引起大的返工,從而提高了設計效率。但是直接利用Auto CAD提供的窗口操作技術不能解決以上問題,在多窗口建筑消防CAD系統中,作者成功地改造了Auto CAD多窗口顯示技術,在副窗口實時形成管線的系統圖。因此將多窗口技術應用于給排水CAD較件包中,必將增強軟件的實用性。
電話:0516-3888951-2273
E-mail:zhfxu@cumt.edu.cn
收稿日期:1999-11-16
論文搜索
月熱點論文
論文投稿
很多時候您的文章總是無緣變成鉛字。研究做到關鍵時,試驗有了起色時,是不是想和同行探討一下,工作中有了心得,您是不是很想與人分享,那么不要只是默默工作了,寫下來吧!投稿時,請以附件形式發至 paper@h2o-china.com ,請注明論文投稿。一旦采用,我們會為您增加100枚金幣。