当前位置: 首页 » 数控技术 » 综合技术 » 正文

AutoCAD的定制与开发


放大字体  缩小字体 发布日期:2020-04-20
在计算机技术飞速发展的今天,AutoCAD已成为世界上最成功的计算机辅助设计系列软件平台之一,该软件得到了极为广泛的应用。这不仅是因为它功能强、支持的平台多、外设广,更主要的原因是它具有开放的体系结构,AutoCAD允许用户和开发者在几乎所有方面对其进行扩充与修改(即进行定制与二次开发),能最大限度地满足用户的特殊要求。

    目前,介绍AutoCAD的基本命令及用法的普及型读物较多,而介绍AutoCAD定制与开发方法的提高型读物较少;AutoCAD是计算机辅助绘图软件,具有普遍性,可广泛适用于机械、电子、建筑等多种领域,再加上各个行业的自身特点,这就要求有针对性的对AutoCAD进行定制与开发,以满足不同领域和不同行业的需求。这篇文章以机械行业为例,与大家共同探讨AutoCAD定制与开发的具体方法(功能、图标、标准件库、尺寸公差库等),供读者学习和参考。

    一、AutoCAD的初始设置

    对于一幅完整的机械制图(零件图或装配图),需要有图幅大小、图幅比例、标题栏、明细栏、图层、尺寸标注、粗糙度符号、形位公差标注、基准符号、零件与标准件等的引线序列号等等,这些都需要特殊定制与开发的。由于文章涉及的具体命令多且杂,在此就不逐一介绍说明了。如果您有一定的AutoCAD操作基础,按下述步骤就可以编制本文所提到的功能。以AutoCAD2002为例(不同版本CAD的操作方法大同小异),具体的操作过程与程序内容如下:
    
    打开AutoCAD 2002(或R14),创建新图,设置好图层(例如:名称为01、颜色为青、线型为center)、图幅界限、文字样式、尺寸样式(保存于STANDARD中)等一些重要的设置,然后另存为*.dwt格式(自命名,如:acad.dwt),该格式的文件保存在C:Program FilesAutoCAD 2002Template下。这样,就建立了统一的模板文件。

    在该模板文件下,绘制您所需要的标题栏,然后在命令行输入ddattdef (回车),弹出属性定义对话框,输入相应的值。例如:

    1. MODE设置属性模式
    (1) Invisible控制为可见或不可见模式(选上)
    (2) Constant设置块插入后的属性常数为固定值
    (3) Verify在键入属性后会要求您确认一次键入值的正确性
    (4) Preset设置可以改变的固定值

    2. Attribute属性对话栏
    (1) Tag设置属性标签的名称
    (2) prompt设置提示的文字
    (3) Value设置提示文字的缺省值

    3. Text Options设置属性文字的类型
    (1) Justification设置文字的对齐方式
    (2) Text Style设置文字的字形
    (3) Height设置文字的高度
    (4) Rotation设置文字的旋转角度

    4、Pick Point直接使用鼠标在画面上选取位置,选用移动命令使该属性在理想的位置上将各个需要的属性按上述方法输入完毕后,接下来的操作是要将图形与属性结合为一个WBLOCK(块),在命令行下输入wblock回车,
    Command:wblock回车
    File Name:输入一个文件名(回车)
    Block Name:回车
    Insertion base Point:捕捉一个插入点(回车)
    selec Objects:选择您所绘制的图形与属性(回车)
    selec Objects:回车
    Command:oops回车

    至此标题栏的属性块就定义完成了。如果您确实理解了的话,按照上述步骤就可以定制出明细表、粗糙度符号、基准符号的属性块。
    
    下面该定义图幅的模板了,在统一的模板(acad.dwt)下,按国家标准绘制一幅图如A0,在命令行下输入ddinsert(回车)
    Command:ddinsert(回车)
    File Name:输入一个文件名(回车)注:即建属性块的文件名
    Insert point:在图幅上选择理想的位置(回车)
    X scale factor <1> / Corner / XYZ: (回车)
    Y scale factor (default=X): (回车)
    Rotation angle <0>:(回车)
    属性值(设置属性提示的文字):(一直回车)直到Command状态下,然后另存为图幅A0.dwt(自命名)。

    同样,建立A1、A2、A3、A4的图幅模板。
    在命令行下输入ddatte(回车)
    Command:ddatte(回车)
    selec block:选择标题栏
    在弹出编辑属性的对话框,输入相应的属性值,该属性值就可自动的填充到您所定义的相应的位置上。

    二、AutoCAD的程序及图标菜单、下拉菜单设置
    
    1. 介绍一下如何用LISP语言开发程序及程序中所涉及的函数的简要说明。新建一文本文件*.lsp(例如mycad.lsp),在该文件中输入下面的内容。
    (defun c:bscale(/ hk)   “定义图幅比例
    (setq hk (getdist "n 请输入图幅比例:"))
    (command "SCALE" "all" "" "0,0" (/ 1 hk))
    (command "DIMSCALE" (/ 1 hk))
    (command "ZOOM" "all" "")
    (setvar "HPNAME" "ANSI31")
    (setvar "HPSCALE" 1.5)
    (setvar "TEXTSIZE" (/ 4 hk))
    )
    打开C:ProgramFilesAuto CAD2002SUPPORTAutoCAD2000 doc.lsp(AcadR14.lsp),在该文件的倒数第二行输入(load "mycad.lsp" ""),保存该文件。(最好先把原文件做一个备份)。
    重新进入CAD,您所定义的功能就自动加载了,下面介绍一下这个功能的用法。打开一个标准的图幅模板如A1.dwg,在命令行下输入:
    Command:bscale(回车)
    请输入图幅比例:1/2(回车)
    注:如果建模板时,把该比例输入为1,那么A0~A4.dwt的图幅比例始终默认为1。输入图幅比例的优点在于您所使用的属性块(例如粗糙度符号等)的放大缩小比例与图幅比例相一致。
    
    2. 输入命令的方式即难记又麻烦,那么如何把上述命令变成图标或菜单的形式呢?回答是肯定的。
    打开C:ProgramFilesAuto CAD2002(R14)SUPPORTacad.mnu(或acad.mns),在相应的位置插入如下内容,并保存:

图1  定义下拉菜单

    (1)定义下拉菜单(插入在原有的下拉菜单之后)    
    ***POPx
     [自制CAD(&Z)]
     [图幅比例(&A)]^C^C_bscale
     [--]
    说明:
    1)设置第x个下拉菜单
    2)第x个下拉菜单的功能项名称,快捷键代码为Z
    3)下拉菜单的分项名称,^C^C执行二次中断操作然后执行后面的命令(功能中所定义的,如bscale)
    4)在下拉菜单中显示分隔符

图2  定义图标工具栏

    (2)定义图标工具栏(插入在原有的图标菜单之后)
    **MYCAD
    [_Toolbar("MYCAD", _Floating, _Show, 0, 1, 0)]
    [_Button("图幅比例", "bscale.bmp", "bscale.bmp")] ^C^C_bscale
    [--]    
    重新进入CAD,您就可以看到所编制的下拉菜单和图标标工具栏了。如果没有,请在Command状态下输入menu(回车),在弹出的对话框中选中您刚刚保存的acad.mun(或acad.mns),然后按确定按钮。另外,图标工具栏也可手工定制。在绘图环境下的任意图标上按鼠标右键,弹出菜单选择自定义,在自定义对话框中选择工具栏,按新建按钮,在工具栏名称中输入MYCAD,按确定按钮。再选择命令中的用户定义,按住鼠标左键拖动用户定义的按钮到MYCAD的工具栏中后,鼠标左键单击该按钮,在按钮特性中输入用户定义的按钮名称如“图幅比例” ,在与此按钮关联的宏中输入^C^C_bscale,然后选择编辑按钮,可以在按钮编辑器上直接画,也可打开bscale.bmp文件(如:用Photoshop绘画的),选中应用按钮。其余的图标定制方法以此类推。

    三、笔者开发的AutoCAD的功能及使用方法

    1.程序
    (1)定义对称线
    (defun c:dcx (/ ss1 dist p1 p2 p3 p4 p5 len pn pm pn1 pm1 ee ang1 sb)
    (setvar "orthomode" 1)
    (setq sb (getvar "osmode"))
    (setvar "osmode" 33)
    (setq ss1 (ssget)
    dist (getdist "n请输入平行线间的距离:")
    p1 (getpoint "n起始点或特征点:")
    len (getdist p1 "n终点或特征点或长度:")
    ee (entget (ssname ss1 0))
    p2 (cdr (assoc 10 ee))
    p3 (cdr (assoc 11 ee))
    ang1 (angtos (angle p2 p3) 0 1)
    )
    (command "_UCS" "_Z" ang1 "")
    (setq p4 (trans p1 0 1)
    p5 (trans p2 0 1)
    pn (list (car p4) (+ (cadr p5) (/ dist 2.0)))
    pm (list (car p4) (- (cadr p5) (/ dist 2.0)))
    pn1 (polar pn 0 len)
    pm1 (polar pm 0 len)
    )
    (setvar "osmode" 0)
    (command "line" pn pn1 "" "line" pm pm1 "")
    (command "_UCS" "_W" "")
    (setvar "osmode" sb)
    )
    (2)定义粗糙度
    (defun C:wbin (/ sa)
    (setq sa (getvar "osmode"))
    (setvar "osmode" 0)
    (setq sc (getvar "DIMSCALE"))
    (setvar "osmode" 512)
    (command "insert" "ccd" pause sc sc pause)
    (setvar "osmode" sa)
    )
    (3)定义序列号
    (defun C:bub1 (/ p1 p2 p3 sc hd hd1 k h sb )  
    (setq sb (getvar "osmode"))
    (setvar "osmode" 0)
    (setq h (getint "n序列号的个数:")
     p1 (getpoint "nFirstpoint:")
    )
    (setvar "osmode" 512)
    (setq p2 (getpoint p1 "nSecondpoint:")
     sc (getvar "DIMSCALE")
     hd (* 7 sc)
     hd1 (* 4 sc)
    )
    (setvar "osmode" 0)
    (command "LAYER" "S" "03" "" "donut" 0 sc p1 "" "line" p1 P2 "")
    (if (> (car p2) (car p1))
    (setq an1 0)
    )
    (if (< (car p2) (car p1))
    (setq an1 pi)
    )
    (setq p3 (polar p2 an1 hd))
    (command "line" p2 P3 "")
    (setq p0 p2
     k 2
    )
    (while (<= k h)
    (setq p2 (list  (car p2) (+ (* 8 sc) (cadr p2)))
     p3 (polar p2 an1 hd)  
    )
    (command "line" p2 P3 "")
    (setq k (1+ k))
    )
    (setq pt (list (/ (+ (car p2) (car p3)) 2) (+ (* 1.2 sc) (cadr p3))))
    (command "line" p0 P2 ""
     "LAYER" "S" "0" ""
     "dtext" "J" "C" pt hd1 0
     )
    (setvar "osmode" sb)
    )
    (4)定义形位公差
    (defun C:gc (/ pp1 pp2 pp3 pp4 s2 k1 k2 sb1 sb2 g1)
    (setq sb1 (getvar "ORTHOMODE")
    sb2 (getvar "OSMODE")
    )
    (setvar "ORTHOMODE" 1)
    (setvar "OSMODE" 512)
    (setq pp1 (getpoint "n请在实体上选一点:"))
    (setvar "OSMODE" 0)
    (setq pp2 (getpoint pp1 "n请确定引出线位置:")
    pp3 (getpoint pp2 "n请确定引出线终点:")
    s2 (getvar "DIMSCALE")
    g1 (angle pp1 pp2)
    k1 (* 1.5 s2)
    k2 (* 4.5 s2)

 
 
[ 免费发文

 

 
推荐图文
推荐数控技术
点击排行
网站首页 | 关于我们 | 升级会员 | 联系客服 | 广告合作 | 广告位图 | 使用协议 | 版权隐私 | 蜀ICP备2021024440号
Powered by DESTOON