用AutoLISP程序提高绘图效率的几个实例

合集下载

AutoLISP实用编程四例

AutoLISP实用编程四例

AutoLISP实用编程四例-------------------------------------------------- 江苏崔华明AutoCAD是一个功能强大的通用图形设计软件,其内嵌的AutoLISP语言为用户进行二次开发提供了方便。

下面就介绍几则用AutoLISP编写的实用程序,这些程序相当于新增的AutoCAD命令,可以弥补AutoCAD本身的一些不足,为日常使用带来方便。

1(快速更改文本的大小在标准的AutoCAD中,要更改已有文本的大小,需要使用Change命令。

该命令的缺陷是:即使只更改文本的大小,也要重新确认文本的插入点、字型、倾斜角等一系列参数。

也就是说,除输入文本的新高度值外,还需要按5次回车键才能完成一个文本的更改~而且每次只能修改一个文本。

这对于同时更改多个文本的大小非常不便。

本文的AutoLISP程序使这一工作变得十分方便和快捷。

使用方法如下:在AutoCAD的Command提示下,打入命令:cthAutoCAD将提示“Selectobjects:”,这时可以使用AutoCAD允许的任意方式选择目标。

对于有多个文本需要更改的情况,使用窗口选择比较方便,而且你不用担心选择窗口中包含了非文本目标,程序能够自动在选择的目标中查找出文本实体,并只对文本进行更改。

选择目标后,AutoCAD提示“Newtextheight:”,这时输入一个新的文本高度值然后回车,则所有选中的文本被更改成新设定的高度。

2(延伸直线的长度在实际使用中,常常要将一条直线延伸指定的长度。

通常的做法是:在需要延伸的直线的端点画一个辅助圆,圆的半径等于直线要延伸的长度,然后使用Extend命令将直线延伸到与圆相交,最后删除辅助圆。

本文的AutoLISP程序将使你非常容易地实现这一点。

你只需选择要延伸的直线并输入要延伸的长度即可,其余的工作由程序自动完成。

使用方法如下:在AutoCAD的Command提示下,打入命令:stl然后根据提示选择要延伸的直线(选择点要靠近直线需要延伸的端点),并输入延伸的长度。

用AutoLISP程序提高绘图效率的几个实例

用AutoLISP程序提高绘图效率的几个实例

用AutoLISP程序提高绘图效率的几个实例
张雪娥
【期刊名称】《科技广场》
【年(卷),期】2007(000)012
【摘要】AutoLISP是AutoCAD内置的编程语言.具有其强大的开发功能,运用AutoLISP编写程序可以方便快捷的绘制一些简单的平面图形.还可以绘制例如三维螺旋线这样的复杂三维图形.通过几个实例程序应用,提高图形绘制中的工作效率.【总页数】3页(P254-256)
【作者】张雪娥
【作者单位】江西财经大学电子学院,江西,南昌,330013
【正文语种】中文
【中图分类】TP311.56
【相关文献】
1.利用AutoLISP提高绘图效率的方法 [J], 米双山;张锡恩
2.应用 AutoLISP进行二次开发提高绘图效率的讨论 [J], 高广洲
3.利用AutoLISP程序提高水泥厂建筑设计效率 [J], 施增新
4.AutoLisp语言程序设计中几个常见问题的探析 [J], 王立军
5.AutoLISP程序在建筑设计中的应用实例 [J], 孙煜;王浩
因版权原因,仅展示原文概要,查看原文内容请购买。

应用Autolisp语言实现圆锥齿轮参数化自动绘图

应用Autolisp语言实现圆锥齿轮参数化自动绘图
} :boxed-column{label = ”确定图纸幅面”; / / 对话 框标签 initial-focus = ”a3”;/ / 初始的焦点 :toggle{label = ”垂直放置”;key = ”ver”;}/ / 切换开 关 :boxed- radio- row{label = ”幅面规格”; / / 加框互锁 行标签 :radio- button{label = ”A0”;key = ”a0”;mnemonic = ” 0”;}/ / 按钮 A0 :radio- button{label = ”A1”;key = ”a1”;mnemonic = ” 1”;}/ / 按钮 A1 :radio- button{label = ”A2”;key = ”a2”;mnemonic = ” 2”;}/ / 按钮 A2 :radio- button{label = ”A3”;key = ”a3”;mnemonic = ” 3”;}/ / 按钮 A3 :radio- button{label = ”A4”;key = ”a4”;mnemonic = ” 4”;}/ / 按钮 A4 :radio- button{label = ”A5”;key = ”a5”;mnemonic = ” 5”;}/ / 按钮 A5
引言
Autolisp 是一种面向对象的人工智能语言 ,是 Au2 toCAD 内嵌的编程工具 ,应用 Autolisp 语言并结合 Au2 toCAD 的绘图命令及相关内部函数就可以用来编写用 户自己的应用程序[1] 。在工程设计中齿轮的设计与制 图是一项繁琐且重复性大的工作 ,传统的人工设计费 时费力 ,而且容易出错 ,花在创 造性设计的时间大大减少 ,导 致产品开发周期长 ,产品质量 差 ,市场竞争力弱 。如何在机 械设计中快捷地使用齿轮 ,最 有效的途径就是利用 Autolisp 语言 进 行 AutoCAD 的 二 次 开 发 ,实现参数化绘图程序设计 , 可使工程设计人员减少不必要 的重复劳动 ,把更多的时间投 图 1 参数化绘图程序设

基于Auto LISP的参数化绘图技术与实例分析

基于Auto LISP的参数化绘图技术与实例分析

基于Auto LISP的参数化绘图技术与实例分析摘要:AutoCAD 是一款通用的绘图软件,Auto LISP是嵌入AutoCAD的二次开发工具,参数化绘图是其典型的应用。

文章探讨了参数化绘图设计原理及步骤,并以轴承参数化绘图为例,介绍了Auto LISP的参数化绘图技术。

关键词:参数化;AutoCAD;Auto LISPAutoCAD是由Autodesk公司发行的一款应用于多领域的设计辅助和图形处理软件。

在机械行业得到了广泛应用。

AutoCAD虽然功能强大,但在专业应用上还是有不足之处,如何让通用的CAD系统更适合行业需要,必须对其要进行二次开发。

AutoCAD在30多年时间里相继推出了Auto LISP、ADS、Visual LISP、VBA、Object ARX、几种不同层次的二次开发工具。

“其中Auto LISP是唯一的一种以解释方式运行于AutoCAD内部的解释性程序设计语言,Auto LISP把数据和程序统一表达为表结构,所以它既可以把程序当作数据来处理,还可以把数据当作程序来执行”。

其语言规则简单,直接针对AutoCAD,易学易用,AutoCAD的绝大多数命令可直接调用,参数化绘图是其典型的应用之一。

1 参数化绘图设计原理及步骤所谓参数化就是将图形的有关几何关系、约束关系有机地结合起来,从而构成一个完整的参数化模型。

当设计人员改变图形的某一参数时,模型能根据尺寸及几何约束等自动计算出满足约束关系的工程图形。

参数化编程方法的实质,就是将图形信息记录在程序中。

它用一组变量记录图形的几何参数,用一些约束条件或者赋值语句来表达几何参数与结构参数之间的关系,再用一些绘图语句来表述图形的拓扑关系。

参数化方法快捷、高效,参数化绘图程序编写步骤是:①先进行图形结构特征分析,一般绘制一个零件的图样,需要很多尺寸,这就需要我们分析这个零件,确定图形中的关健几何尺寸及图形对象之间的依赖关系。

②从设计角度具体分析,确立不仅能体现零件的结构特征,又可以推导出其它尺寸的基本尺寸作为图形参数,并明确尺寸与图形参数之间的关系。

使用CAD进行程序化绘图的方法与示例

使用CAD进行程序化绘图的方法与示例

使用CAD进行程序化绘图的方法与示例CAD(计算机辅助设计)软件是现代工程设计中不可或缺的工具之一。

它可以大幅提高工作效率,提供精确的设计模型和绘图输出。

在CAD中,程序化绘图技术可以进一步提高设计工作的效率和准确性。

本文将介绍使用CAD进行程序化绘图的方法与示例。

在CAD中,我们可以通过编写脚本或使用宏来实现程序化绘图。

常见的CAD软件如AutoCAD、SolidWorks和CATIA等都提供了编程接口和相关的编程语言,如AutoLISP、VBA和C#等。

下面我们将以AutoCAD为例,介绍使用AutoLISP进行程序化绘图的方法与示例。

AutoLISP是AutoCAD的内置编程语言,它与AutoCAD的各种功能紧密结合,可以实现从基本绘图操作到自定义功能的自动化。

以下是使用AutoLISP进行程序化绘图的几个示例:1. 绘制矩形:我们可以使用AutoLISP编写一个简单的程序来绘制矩形。

下面是一个示例程序:```(defun c:draw-rectangle (/ p1 p2)(setq p1 (getpoint "\nEnter the first corner point: "))(setq p2 (getcorner p1 "\nEnter the opposite corner point: "))(command "RECTANG" p1 p2)```在AutoCAD中,我们可以运行该程序的命令`draw-rectangle`,然后按照提示,输入第一个和第二个角点,即可绘制一个矩形。

2. 绘制圆形:类似地,我们可以使用AutoLISP编写一个程序来绘制圆形。

下面是一个示例程序:```(defun c:draw-circle (/ center radius)(setq center (getpoint "\nEnter the center point: "))(setq radius (getdist "\nEnter the radius: "))(command "CIRCLE" center radius))```在AutoCAD中,我们可以运行该程序的命令`draw-circle`,然后按照提示,输入圆心和半径,即可绘制一个圆形。

最新AutoLISP绘图程序设计

最新AutoLISP绘图程序设计

7
二、几个基本概念
1.常数 PI——数学中的π(3.1415929…) T——逻辑真,即成立。
NIL——逻辑假,即不成立。还代表空,即无值。 注意:(1)大小写等效;(2)它们不能作为变量。 2.原子 是程序处理中最小的数据单元。 3.表达式 原子和表的统称。 如:(setq P '(12.36 -26.58))
❖以表形式描述数据处理过程,程序执行过 程就是函数求值过程;
❖每段程序都是一个函数; ❖具有交互处理功能,边解释边执行; ❖采用模块化设计方法。
2020/12/14
3
2.AutoLISP的数据类型
(1)整型数(INT):是由0、1、2…9、+、-组成的。
(2)实型数(REAL):如0.4(0不能少)、-1.23、 0.526E9(0.526×109)。
(5)表(LIST):带有一对括号、有若干元素 组成。(元素1 元素2 … 元素n)
如:(2 4 f)
◇元素的个数叫表的长度。
◇元素也可以是表,如(45 (3 6) 7),这 叫嵌套。
◇元素之间必须用“空格” 隔开。
◇表的定义方式:(LIST 5 6);’(5 6); 还可以用defun定义(后面讲)。
(3)符号(SYM):除(、)、*、‘、”、;之外的字 符序列,并且不能全部是数字。
符号常用着变量,如:
Command:(setq X 12)
;整型数
Command:(setq X 12.0) ;实型数
Command:(setq X “12”) ;字符串
2020/12/14
4
(4)字符串(STR):如:“ABC”、“abc”、 “457”等。
(setq as (+ as 1) n (+ n 20))

五个实用的AutoCAD的lisp程序

五个实用的AutoCAD的lisp程序

五个实用的AutoCAD的lisp程序1、计算CAD图形中所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度)(defun c:LL ()(setvar "cmdecho" 1)(setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0)(setq ll 0)(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(setq ll (+ dd ll))(setq i (1+ i)))(princ "所选线条总长为:")(princ ll)(princ))2、标注CAD图形中所有线段(加载后只需框选所有线段便可得标注这些线段)(defun c:LLL ()(COMMAND "UCS" "")(setvar "cmdecho" 1)(SETVAR "OSMODE" 0)(setq AcadObject (vlax-get-acad-object)AcadDocument (vla-get-ActiveDocument Acadobject)mSpace (vla-get-ModelSpace Acaddocument));;选取需要测量的样条曲线、圆弧、直线、椭圆(setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))(setq i 0);;获取系统参数textsize(setq shh (getvar "textsize"))(setq str_hh (strcat "\n文字高度 <" (rtos shh 2) ">: "))(setq hh (getdist str_hh))(while hh(setvar "textsize" hh)(setq hh nil));;输入标注文字高度;;循环开始(repeat (sslength en)(setq ss (ssname en i))(setq endata (entget ss))(command "lengthen" ss "")(setq dd (getvar "perimeter"))(princ (strcat "\n长度=" (rtos dd 2)));;寻找代表图层的字符串(setq aa (assoc 0 endata));;获取图层名称(setq aa1 (cdr aa));;判断线条种类(cond((= aa1 "SPLINE");;如果是spline(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss))(setq startPnt1 (vla-get-ControlPoints arcObj))(setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))((= aa1 "LWPOLYLINE");;如果是LWPOLYLINE(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-Coordinates arcObj)) (setq p1(vlax-safearray->list (vlax-variant-value startPnt1)) )(setq x1 (car p1))(setq y1 (cadr p1))(setq z1 (caddr p1))(setq pp1 (list x1 y1 z1))(repeat (- (/ (length p1) 3) 1);;循环,寻找最后一个控制点(setq p1 (cdddr p1))(setq x2 (car p1))(setq y2 (cadr p1))(setq z2 (caddr p1)))(setq pp2 (list x2 y2 z2))))(t;;如果是其他种类线条(progn(setq arcObj (VLAX-ENAME->VLA-OBJECT ss)) (setq startPnt1 (vla-get-StartPoint arcObj));;获取起点(setq endPnt1 (vla-get-EndPoint arcObj));;获取终点(setq pp1(vlax-safearray->list (vlax-variant-value startPnt1)))(setqpp2 (vlax-safearray->list (vlax-variant-value endPnt1)) ))))(setq x1 (car pp1))(setq y1 (cadr pp1))(setq z1 (caddr pp1))(setq x2 (car pp2))(setq y2 (cadr pp2))(setq z2 (caddr pp2))(setq x (/ (+ x1 x2) 2))(setq y (/ (+ y1 y2) 2))(setq z (/ (+ z1 z2) 2))(setq pt (list x y z));;取得线段两端的中点(setq ang (angle pp1 pp2));;获取角度(if (> (* (/ ang pi) 180) 180)(setq ang (+ ang pi)))(command "text""j""bc"pt""(* (/ ang pi) 180)(strcat "" (rtos dd 2))"")(setq i (1+ i)))(prin1))(prompt "\n <>在图中直接写出长度") (prin1)3、连续打断程序(defun c:br1 ()(command "break" pause "f" pause "@"))4、将CAD文字导入Excel表格(defun c:Q2()(setq ffn (getfiled "写出文件" "" "xls" 1))(princ "\n选取文字...")(setq ss (ssget))(setq ff (open ffn "w"))(setq i 0)(repeat (sslength ss)(setq ssn (ssname ss i))(setq ssdata (entget ssn))(setq sstyp (cdr (assoc 0 ssdata)))(if (or (= sstyp "TEXT") (= sstyp "MTEXT"))(progn(setq txt (cdr (assoc 1 ssdata)))(princ txt ff)(princ "\n" ff)))(setq i (1+ i)))(close ff)(princ (strcat "\n写出文件: " ffn))(prin1))5、删除带颜色图元以下程序在别人的贴子里贴过.为了说明问题,今天再贴一次。

AutoLISP在测绘图形处理中的应用

AutoLISP在测绘图形处理中的应用

文章编号:100926825(2007)1220362203AutoL ISP 在测绘图形处理中的应用收稿日期:2006211214作者简介:李朝阳(19742),男,工程师,郑州市水利建筑勘测设计院,河南郑州 450006苏振辉(19822),男,助理工程师,郑州市水利建筑勘测设计院,河南郑州 450006李朝阳 苏振辉摘 要:介绍了AutoL ISP 语言的特点和优点,阐述了AutoL ISP 语言在测绘图形处理中的应用,说明了该语言对于批量处理图形和数据方面的几种典型应用,并分析了相应的思路和方法,从而为测绘事业做出更多的贡献。

关键词:AutoL ISP 语言,应用,测绘图形,图纸资料中图分类号:TP391.3文献标识码:A 近年来,测绘领域内机助制图的研究取得了飞速发展,通过绘图机输出的图形从过去简单的工程制图到现在的各种比例尺的地形图、地藉图、宗地图,以及非常复杂的小比例尺土地利用现状图等。

在众多的绘图系统中,人们普遍采用的基础绘图软件是美国Autodesk 公司的AutoCAD ,因为该软件不仅具有丰富的绘图命令,还具有强大的图形编辑功能,而且软件运行相当稳定。

但是熟悉AutoCAD 的人都知道,要用好AutoCAD ,不但要熟练掌握其各项命令,而且要熟练掌握AutoCAD 提供的数据交换文件SCR ,DXF 和嵌入AutoCAD 内部的高级语言———AutoL ISP 语言,这样使您对各种图形,尤其对复杂的图形更加得心应手。

AutoL ISP 是一种人工智能语言,是嵌入AutoCAD 内部的COMMON L ISP 的一个子集。

在AutoCAD 的二次开发工具中,它是唯一的一种解释型语言,使用AutoL ISP 可直接调用几乎所有的AutoCAD 命令。

AutoL ISP 具有以下优点:1)语言规则十分简单,易学易用;2)直接针对AutoCAD ,易于交互;3)解释执行,立竿见影。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2007.12
科技广场
254
工程中经常要绘制各种弹簧和螺纹连接件,在AutoCAD中没有专门绘制弹簧和螺纹的命令,弹簧和螺纹在AutoCAD中都可用平面图形通过相应螺旋线拉伸而成,所以绘制螺旋线就是解决问题的关键。

如果用常规的3dpoly命令绘制三维螺旋线,需要输入大量精确数据,才能一点一点地画出螺旋线,做法非常麻烦。

现在提供AutoLISP程序,即可解决绘制螺旋线的问题。

然后通过相应平面图形的拉伸,就可以完成弹簧、螺纹等零件的绘制。

根据圆台螺旋线的形成原理(一动点M绕圆台的母线AB作等速直线运动,而该母线AB又绕圆台的轴线O1O2作等角速旋转时,点M的运动轨迹即为圆台的螺旋线,如图二所示。

圆柱螺旋线是圆台螺旋线的特例,故可通过圆台螺旋线程序做相应的变动,即可得到),动点M(x,y,z)的参数方程如下:
图二园台螺旋线
X=[r0+hg *α/(2π)]*cosα
Y=[r0+hg *α/(2π)] *sinα
Z=±vg *α/(2π)
其中,r0为圆台下面的半径,α为螺旋线角,vg为导程(单线螺旋线螺距(弹簧的节距)等于导程),hg为点M沿水平半径方向上增加的距离(hg=|(r1-r0)m|求得,m为螺旋线的圈数)。

下面提供圆台螺旋线的AutoLISP程序清单:
(defun c:luoxc(/)
(setq b1 (getpoint" 指定基点:"))
(setq r1 (getreal "指定初始半径:"))
(setq disp (getreal "指定节距:"))
(setq angtg (getreal "输入锥形角:"))
(setq m (getint"输入圈数:"))
(setq n (getint"输入每圈细化段数<36>:"))
(cond ((null n )(setq n 36)))
(setq delta (/ (* 2.0 pi ) n))
(setq j (/ disp n))
(setq bb (caddr b1))
(setq tg (*(/ angtg 180) pi))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r1 0 0))
(repeat (* m n)
(setq k(+ k 1))
(setq ang(+ delta ang))
(setq r (- r1 (* (+ 0(* j k))(/ (sin tg )(costg)))))
(setq pt2 (list (* r(cos ang))(* r(sin ang))(+ 0(* j k))))
(command pt2)

(command "")

根据圆台螺旋线的形成原理,如果圆锥角为0度时,即可形成圆柱螺旋线。

圆柱螺旋线程序清单如下:
(defun c:luoxc(/)
(setq b1 (getpoint" 指定基点:"))
(setq r (getreal "指定初始半径:"))
(setq vg (getreal "指定节距:"))
(setq m (getint"输入圈数:"))
(setq n (getint"输入每圈细化段数<36>:"))
(cond ((null n )(setq n 36)))
(setq delta (/ (* 2.0 pi ) n))
(setq j (/ disp n))
(setq bb (caddr b1))
(setq ang 0)
(setq k 0)
(command "ucs" "o" b1)
(command "3dpoly" (list r 0 0))
255
2007.12
科技广场
256。

相关文档
最新文档