给排水系统图实时窗口的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的使用效率,不太实用。
② 直接改造Auto CAD的窗口。采用“MVIEW”窗口(注意一定不能采用“VPORTS”窗口,因为该窗口达不到您的目的),将每一窗口分成显示层和非显示层,冻结非显示层,解冻显示层。在程序中将对窗口的控制转向对不同层的控制,这样就把问题简化了。但是,由于在任一窗口中都存在显示层与非显示层,在该窗口中想对非显示层上的实体进行选取、编辑、控制就显得有点力不从心了,好在Auto CAD提供了“CVPORT”这一系统变量,利用它就可以“遥控”每一窗口。到此,就较好地解决了多视窗中对每一窗口的控制技术。这种方法工作量小,全部采用内嵌的AUTOLISP编程,是Auto CAD的内部处理,较实用。而且,每一视窗中均可以直接利用Auto CAD的“ZOOM”、“PAN”进行局部缩放、漫游,视窗的大小调整、视窗搬移均可很简单地由程序来控制实现,若干视窗还可以部分重叠,不必平行设置。
多视窗系统创建、控制的程序框图如图3所示。
2 多视窗系统窗口的调整
多视窗系统尽管具有直观、形象的特点,但是由于该系统占用了窗口空间,使得主窗口变小、视图变小,影响了视觉。因此,有时需要对副窗口进行搬移、大小调整,甚至将多窗口系统转向单窗口系统。
① 窗口搬移
用“(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)
)
③ 单视窗与多视窗转化
利用“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:[email protected]
收稿日期:1999-11-16
论文搜索
月热点论文
论文投稿
很多时候您的文章总是无缘变成铅字。研究做到关键时,试验有了起色时,是不是想和同行探讨一下,工作中有了心得,您是不是很想与人分享,那么不要只是默默工作了,写下来吧!投稿时,请以附件形式发至 [email protected] ,请注明论文投稿。一旦采用,我们会为您增加100枚金币。