图形词典在建筑给排水CAD中的应用
来源:用户上传
作者:
摘要介绍了图形词典存储与查询的方式,并通过在给排水工程CAD中的几个应用实例,提出给排水工程CAD二次开发的一些新思路。
关键词 图形词典 扩展数据 二次开发
0引言
在现如今的设计行业,CAD的熟练使用几乎已经成为每一位设计师必须掌握的技能。在我国应用最为广泛的CAD工具是Autocad软件包,该软件包以其功能强大、易用,更兼异常灵活的扩展性,被广大设计师接受。在建筑给排水二次开发领域,国内已有多家知名软件公司推出软件,其软件经过多年开发已形成较为成熟的解决方案。然而在我国,由于大多数专业开发人员缺乏足够的给排水专业知识,或没有足够的工作经历,造成各专业软件大多只提供功能的解决方案,不注重软件的细节开发,从而限制了专业软件的实用性。笔者在多年的建筑给排水设计过程中,自行编写了一些实用的小程序,大大提高了工程设计效率,并弥补了部分专业的不足。开发过程中,通过使用图形词典,减少了代码量,并是程序结构清晰易懂。现介绍图形词典在建筑给排水CAD中的几个应用实例,以抛砖引玉,让更多专业设计师掌握这一实用的数据存储方式。
1 图形词典的优势
图形词典可用的数据类型相当丰富,几乎所有Autocad数据都可以使用,相关程序编写相当简单,几乎能做到用户怎么想,就可以怎么写数据结构。这是扩展数据所不能比拟的。另外,图形词典可以与图文件相关,也可以与某个实体相关(附加到实体上),一个图文件,可以并存许多个图形词典,一个图形词典可以并存许多个记录,并且非图形数据提取和定义简单明晰。在引入图形词典前,Autocad仅有”useri1”~”useri5”, ”userr1”~”userr5”少数几个系统变量可以存储用户非图形数据。
2 图形词典的存储与查询
VLISP提供了以下几个函数方便的进行图形词典数据的存储与查询:
(vlax-ldata-get dict key [default-data] [private]) 图形词典或对象中检索 LISP 数据
(vlax-ldata-put dict key data [private])存储图形词典或对象中的 LISP 数据
(vlax-invoke-method obj method arg [arg...]) 从图形词典中删除 LISP 数据
函数的具体应用可参见AutoCAD的帮助文档,在此不再详述。
3 图形词典在建筑给排水CAD中的应用
3.1 管道的标高存储
在建筑给排水CAD中,管道标高是一个非常重要的数据,也是一个基本数据,大多数建筑给排水CAD软件采用修改实体控制点Z值的方式存储标高,此方法的不利后果是导致多个CAD基本命令不能正常使用,譬如倒角命令等等。而且在编辑过程中,Z值会被不经意间改变,从而造成不易察觉的错误。而采用图形词典来存储标高信息,即可以解决上述问题,又可以方便的查询标高信息,并为后续的智能化制图带来方便。以一条标高为3.300管道为例,应用图形词典实例为:
(vlax-ldata-put
(vlax-ename->vla-object
(car (entsel "\n点取要修改标高的管道:"));;;点取管道
) ;;;变换为VLA实体
"GPY-GPS-z" ;;;词典名
3.300 ;;;标高值
)
以上程序可以在管道内存入标高信息。
(vlax-ldata-get
(vlax-ename->vla-object
(car (entsel "\n点取要修改标高的管道:"));;;点取管道
) ;;;变换为VLA实体
"GPY-GPS-z" ;;;词典名
)
以上程序可以获取管道内存储的标高信息。
(vlax-ldata-delete
(vlax-ename->vla-object
(car (entsel "\n点取要修改标高的管道:"));;;点取管道
) ;;;变换为VLA实体
"GPY-GPS-z" ;;;词典名
)
以上程序删除管道内的标高信息。
从以上程序代码可见,采用图形词典,代码量大大少于使用扩展数据的代码量,且程序结构清晰易懂。
3.2 配件管径、承压数据自动随管线
假设一条给水管,管径为DN50,承压1.6Mpa,并以表(DN50 1.6)的形式存储与图形词典中,现要插入一阀门,并使其管径、承压数据与给水管相同,程序为:
(defun c:PJ (/ ent pt0 blk)
(setq ent (entsel "\n点取管线:"))
(setq pt0 (cadr ent) ent (car ent))
(command ".insert" blk pt01 1 0)
(vlax-ldata-put
(vlax-ename->vla-object
(entlast) ;;;插入的配件
) ;;;变换为VLA实体
"GPY-GPS-dn" ;;;词典名
(vlax-ldata-get
(vlax-ename->vla-object
ent
) ;;;变换为VLA实体
"GPY-GPS-dn" ;;;词典名
)
)
)
执行以上程序,会在点取的管线处插入配件,并使其管径、承压数据与管线相同,便于后续的自动统计材料并生成材料表。从以上程序看出,图形词典不仅可以存储字符、数字数据,还可以存储表,而程序代码几乎可以不变,这就让程序编写者可以专注于功能的实现,而不需过多考虑数据结构的组织。
3.3 自动转换平面图块为系统轴测图块。
在建筑给排水CAD中,生成系统轴测图是一项非常重要的功能。现有专业建筑给排水软件,或是在程序里固定平面图块与系统轴测图快的对应关系从而限制了用户的扩展性,或是用附加的数据数据文件记录平面图块与系统轴测图快的对应关系从而增加了程序复杂性。其实采用图形词典,可以很容易的解决对应问题,程序为:
(defun c:xt (/ ent pt0 blk)
(setq ent (entsel "\n点取要变换成系统图的配件:"))
(setq pt0 (cdr (assoc 10 (entget ent))))
(command ".insert"
(vlax-ldata-get
(vlax-ename->vla-object
ent
) ;;;变换为VLA实体
"GPY-GPS-sys" ;;;词典名
);;;得到对应的系统轴测图块
pt0 1 1 0
);;;插入对应的系统图块
(entdel ent);;;删除平面图块
)
通过以上程序可知,建立好平面图块,并在图形字典中存入相应的系统轴测图块,就可以快速的实现平面图至系统轴测图块的变换。
3.4 快速整理整楼系统轴测图
有些专业软件提供了生成整楼给排水系统图的功能,该功能可以一次性生成所有立管的系统轴测图,大大减少了绘制系统轴测图的时间,但是管线比较多的时候会产生轴测图上管线的严重堆叠,若不处理,严重影响施工图的阅图。手工调整又非常浪费时间,甚至其所花的时间还可能多过手工绘制系统轴测图的时间。专业软件的一般处理方式是点取某一立管系统轴测图的其中一管段,通过递归选择关联的管段选择同立管的管线及配件,并移动其位置的方法来处理堆叠问题。该方法的最大问题是,由于管线堆叠众多,递归过程容易选择到不相关的管线及配件,从而导致移动错误。通过引入图形词典,可以较好的解决这个问题,步骤如下:
3.3.1 生成系统轴测图前预处理,通过平面图的的递归选择,在同一立管的平面支管及配件的图形词典中写入标记。
3.3.2 生成系统轴测图时,将管道及配件的图形词典数据传入系统轴测图;
3.3.3 发生堆叠时,通过移动具有相同标记的管道与配件来处理堆叠问题。
通过以上步骤,可较好的解决整理系统轴测图的堆叠问题。移动管道与配件程序为:
(defun c:MV (/ ents0 ents ent id c0)
(setq ents0 (ssget));;选择整楼系统图
(setq ent (car (entsel "\n点取要移动系统图的其中一个实体:")))
(setq id (vlax-ldata-get
(vlax-ename->vla-object
ent
) ;;;变换为VLA实体
"GPY-GPS-sys1" ;;;词典名
);;;得到对应的系统轴测图块
);;;得到标记
(setq ents (ssadd))
(setq c0 0)
(repeat (sslength ents0)
(setq ent (ssname ents0 c0))
(if (= (vlax-ldata-get
(vlax-ename->vla-object
ent
) ;;;变换为VLA实体
"GPY-GPS-sys1" ;;;词典名
);;;得到对应的系统轴测图块
id)
(setq ents (ssadd ent ents))
)
(setq c0 (1+ c0))
)
(command ".move" ents "" pause pause)
)
4 结语
图形词典的应用远不止于此,只要绘图过程中多想多写,设计师也可以写出专业软件所没有的功能,并弥补专业软件的不足,同时在最大限度符合自己制图习惯的情况下大大提高绘图效率。
转载注明来源:https://www.xzbu.com/2/view-601032.htm