1、Autocad 二次开发在钢结构深化设计中的应用摘要:目前,在厂房等钢结构的细化过程中广泛采用 Autocad进行绘图。本文在 Autocad基础上,利用其自带的扩展模块 Autolisp对其进行二次开发,在 AutoCAD的绘图环境中建立零件的数据库。重点介绍了开发的过程,数据的存储格式,以及与数据相关的操作函数,给出了关键代码等。 关键词: 钢结构深化设计 二次开发链表 DCL 中图分类号:TU291 文献标识码:A 前言 Autocad 是美国欧特克公司开发的大型绘图软件,该软件因其强大的图形绘制及图形编辑功能而广泛的应用于建筑,机械,化工等各个行业。在厂房等钢结构的深化设计过程中,也广
2、泛采用该软件进行放样。但是,该软件属于通用的绘图软件,并非专业为钢结构放样设计。通过对其进行二次开发,可以在 AutoCAD中形成有利于深化设计的环境。如在对钢结构完成深化设计后,经常有生成材料明细表,材料的统计(如统计某种型号钢材的使用量)等工作。以上过程都会涉及零件信息的录入、整理、列表,零件图形的绘图等的内容。由于 AutoCAD中没有相应的模块,人工操作起来费时费力,效率低,并且容易出错。解决办法是,在 AutoCAD中建立统一的零件数据库,当需要时可以直接的调用。 Autolisp 是 Autocad自带的二次开发软件。LISP 语言具有语法简单,编写程序便捷、灵活,数据类型丰富等特
3、点,适用于大多数初学者。利用 Autolisp可对 Autocad的数据库进行修改,也可用于绘制复杂的图形。本文利用 Autolisp对 Autocad进行二次开发,在 Autocad中形成一个零件的数据库。以这个数据库为基础,可以完成零件清单的自动生成,零件图形的自动绘制等工作。 关键技术 Autocad 图元 在 Autocad中,最基本的图形对象叫图元,图元是以图元表的形式存在于进程中。图元表记录着图元的名字、类型、几何数据、图层、颜色等信息。如直线在内存中存储的格式为:(-1 . )(0 . “LINE“) (330 . ) (5 . “4E6F“)(100 . “AcDbEntity
4、“)(67 . 0)(410 . “Model“)(8 . “0“) (100 . “AcDbLine“) (10 -14068.7 18786.4 0.0) (11 -2194.93 21807.6 0.0) (210 0.0 0.0 1.0)。其中,代码 8表示图元位于 0图层,代码 10和 11分别给出了直线的起点及终点信息,代码 100表示图元的类型为直线。关于各个组码所代表的意义,可以在 AutoCAD DXF参考手册查到。通过修改或创建图元表,可以实现编辑或生成图元。 Xrecord 数据 Xrecord 是 Autocad提供给用户的另外一种图元形式,和其他类型的图元相同,该类型
5、的图元在内存中也是以数据表的形式进行存储。但是该类型的数据不依附于任何图形对象,独立的存在于当前 DWG进程中。用户可以根据自己的需要,借助 Xrecord数据,描述自己需要的数据类型。创建这样的 Xrecord需要有两部分:规范部分和用户部分。规范结构部分,必须是 AutoCAD能够接受的内容,一般来说要有对象名和数据子集名。例如:(0 . “XRECORD“)(100 . “AcDbXrecord“) 用户数据部分就比较随意了,可以是任何 VLISP能够处理的数据。为了能够用函数建立这些数据,又能被顺利提取和编辑,应当按照 AutoCAD对象数据表的结构组建,并按照 DXF组码以及配套的数
6、据类型填写。DXF 组码的可用范围是 1-369,原则上一个组码只能出现一次。 AutoCAD 词典对象 AutoCAD 词典对象(AcDbDictionary)是另外一种不依附于任何图形的图元对象,Xrecord 数据必须托付于某个词典对象才能存在于进程中,因此 AutoCAD词典对象可以看作 Xrecord数据的集合。和 Xrecord数据不同,AutoCAD 词典对象没有用户数据部分,用户可以创建或根据名称找到某个 AutoCAD词典对象,但是不能加入任何的用户数据。 数据架构的提出 钢结构的生产主要由下料、组立和拼装等步骤组成,即利用剪板机、切割机等将原料(如钢板、角钢、工字钢等)加工
7、成所需规格后,再到拼装平台上组装成钢构件。根据生产的实际需要,在图纸完成分解后,要将零件的加工图、钢架图(零件的组装图)交由不同的工段。为了便于以后的生产,通常要将零件进行编号。零件的编号主要由零件号码及钢架号码(零件的归属,可以看作零件的集合)组成。根据两种数据的不同特点,零件宜采用 Xrecord数据,钢架宜采用 AutoCAD词典对象。 建立钢架的词典。 本程序将为绘图中的每一榀钢架建立单独的 Autocad词典对象,该词典对象采用钢架的名称进行命名。不同的钢架词典之间采用单向链表形式相联系,通过在上一个词典中记录链表中下一词典对象的句柄建立链表。链表的起始单元为 Frame_list_
8、start,终止单元为Frame_list_end,链表中除了表头及表尾以外的其余元素均按字母的ASCII码进行排列。 由于 Autocad词典对象本身不具备数据扩展的功能,钢架的名称、数量,以及指向下一链表单元的指针(即下一词典对象的句柄)均存在于以“index”为索引的 Xrecord数据中。链表的结构如图一所示。 图 1 建立零件信息的 Xrecord数据 钢结构加工中的零件一般由各种型钢(如钢板、角钢、槽钢,工字钢等)经切割、钻孔等工艺加工而成,因此形状一般比较简单,用原料的规格、零件的长度,零件的厚度等参数即可完成表述。在本程序中,每个 Xrecord数据代表一个零件。通过对 DXF
9、组码设定不同的意义,完成零件信息的表述。关于不同 DXF组码在本程序中代表的意义,可以在图表一中详细的查到。 为了便于零件的查询、删除等操作, 不同的零件在 Autocad词典中采用单向链表相联系。其中表头元素part_list_start,及表尾元素 part_list_end在建立钢架词典的时候同时建立。指向指针存在于组码为 105的表中。 表格 1 数据类型 代表意义 0 字符串 子类标记 1 字符串 零件名称 2 字符串 材料类型 3 字符串 零件规格 5 字符串 图元句柄 40 双精度浮点值 长度 41 双精度浮点值 宽度 42 双精度浮点值 厚度 60 整数值 数量 105 句柄值
10、的字符串 指向指针 关键代码 在本程序中,不同的钢架词典之间以及不同零件(在同一钢架中的)之间采用链表相互联系,因此程序的核心在于链表的操作。本文将重点对如何在链表中插入、删除元素进行说明。 将新建钢架词典加入链表中 (defun insert_frame_to_frame_list(obj_name/ )(setq this_beam “frame_list_start“)(setq next_beam (get_next_frame_name this_beam)(while (not (or (vla-object(handent (cdr (assoc 105 (dictsearch(
11、cdr (assoc -1 (dictsearch (namedobjdict) name_of_this) “index“ ) ) 从链表中删除钢架 (defun delete_frame_from_list( obj_name/)(setq x1 “frame_list_start“)(setq x(get_next_frame_name x1)(while (not (or (= x obj_name) (= x “frame_list_end“)(setq x1 x)(setq x(get_next_frame_name x) ) (if (= x “frame_list_end“)(
12、princ“未在列表中找到要删除的元素!n“)(prong(setq x1_handel_next(get_next_frame_handel x)(change_handel_next x1 x1_handel_next)(dictremove (namedobjdict) x) ) ) ) 建立用户界面 为了方便用户建立和修改数据,本程序采用了对话框的形式。对话框可以采用 DCL语言进行书写。由于篇幅有限,关于对话框的相关代码就不在给出。用户可在对话框中完成钢架、零件等信息的建立和修改,以及表格的绘制等操作。图二,和图三给出了主要的对话框。 图 2 图 3 结束语 本文通过在 AutoCAD中建立零件数据库,提出相关的操作函数,实现了生成零件的明细表等其他功能。通过实践中的应用表明,在使用本程序后,大大提高了数据操作的准确性,提升了工作的效率,并取得良好的经济效益。 参考文献 1 Autolisp 语言程序设计;北京:化学工业出版社,2008 2,AutoCAD Activex 二次开发技术;北京:国防工业出版社,2005
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。