文档库 最新最全的文档下载
当前位置:文档库 › 关于AutoCAD中的LISP病毒

关于AutoCAD中的LISP病毒

关于AutoCAD中的LISP病毒
关于AutoCAD中的LISP病毒

关于AutoCAD中的LISP病毒

目前CADr14有一种lisp代码具备病毒的特征,有一定危害

具体情况如下:

在有DWG文件里如果带有ACAD.LSP双击打开DWG文件,就会自动加载这个lisp,

此lisp的功能是:

加载后炸开命令外部引用等命令失效。并且可传染:

加载后在你SUPPORT目录下生成一个ACADAPP.slp,在ACAD添加(LOAD "ACADAPP") (PRINC)

这样以后你打开acad就自动加载了ACADAPP,它在你每个操作过的acad图形文件的文件夹下生成带恶意

代码的ACAD.LSP

这样如果你复制整个文件夹,或者通过局域网打开图形,就会导致在不同的机器内传染。

问题现象:

EXPLODE命令失效(同时还有XREF、XBIND);

每个编辑过dwg文件的目录下面都会有一个acad.lsp;

保存至另一目录时也同时产生acad.lsp;

打开别人的文件时,如果该目录下有acad.lsp,那么你必中招。

解决办法一: Autocad\\support\\下建立一个acad.lsp的空白文件,并将文件属性置为只读,你自己不会具有二次

传染性,可以阻止病毒的扩散.如果中毒就删掉图形目录下的acad.lsp,最好进行网络全体搜索清除清除。

解决方法二:

用.Explode(在命令前加小数点“.”)可以分解;

删除所有这些acad.lsp文件。

解决方法三:

有个免疫设置的方法,将support目录下的ACAD.lsp设为只读,如果有ACADAPP.lsp就清空后也将其设

为只读。

为什么每次保存cad图形后总要自动生成一个acad.lsp文件?

我用的是Auto2004版本的cad,有什么办法解决吗?

你好,其实你可以修改以前的问题,而不用重新提问题。就你的问题,解决方法如下: 1.关闭cad。2.用windows 的文件搜索功能搜索整个电脑,包括移动硬盘和u盘,查出所有的acad.lsp文件,然后全部删除。再启动cad就没问题了。3.以后拷贝别人图纸的时候,注意别把它拷贝过来。最好别在别人的当地文件夹内打开图纸。其实,这是恶作剧者搞的小伎俩。由于lisp是人工智能语言,而cad又是开放的,于是有些人会点lisp语言,又爱出风头,就对acad.lsp 做了手脚,每次存图时都在图纸目录下生成个acad.lsp。由于acad.lsp是自动加载的,所以每次打开图纸,它又能进入cad,于是就这样它不停的传播。如果转移图纸的时候把它也拷贝走了,它就传播到其他的机器上去了。估计你是拷贝别人的图纸文件的时候拷贝来的。一般情况下,它没有什么大的危害,但可能会屏蔽某些命令,如explode,trim 等。在cad2000以上版本,acad.lsp已经没有什么用处,但为了向下兼容,还保留了它的特权(自动加载),所以删除它就行了。该回答在4月14日10:50由回答者修改过

中了病毒"ASL.Bursted.A"病毒之解決方案

我的電腦昨日中毒

諾頓掃描後顯示說

D:\RECYCLER\S-1-5-21-299502267-2139871995-726345543-1003\Dd44.rar感染ASL.Bursted.A病毒我從網路上各網站找沒有確切的方案有的說刪掉該檔案<有的提供出殺毒小軟件但均無法刪除

但我從各論壇的的二次開發看到一段很重要的話

ACAD有个很大的优点就是开放性它有很多开放的接口

这给用户自定义以及第三方二次开发提供了极大的方便。

ACAD用户化门槛不算高只要有兴趣、有些耐心你总可以亲自动手不同程度地进行自定义。

马上要讨论的是关于启动自动化的AUTOLISP接口,这个接口现在被人用来搞了点恶作剧。

我花了1天的結果,找出解決方案了試驗如下必須對症下藥-

1.卸載AUTO CAD及其相關軟體

2.使用"Always Right"清理移除軟體及接口之軟體來清除

上述清除工作完成再重新按裝auto cad軟體

再行掃描已無中毒情形了

AutoLISP-程序创建过程

AutoCAD开发VisualLISP程序 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCAD中的加载和运行的方法。 首先来创建一个最简单的LISP程序—-“Hello.lsp”,在AutoCAD2002中加载并运行该程序,将会在命令行出现-“Hello,VisualLISP!”。 VisualLISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 实例:最简单的LISP程序——“Hello.lsp” Step1创建新文件 (1)运行AutoCAD2002系统,以“acadiso.dwt”为样板创建图形文件,并调用“vlisp”命令进入VisualLISP环境。

(2)单击“Standard(标准)”工具栏中的按钮,新建一个LISP文件。Step2输入代码并保存文件 (1)在编辑窗口中输入源文件“Hello.lsp”的代码。程序清单如下:;;;* Hello.lsp – Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量“ipt” (setq hgt 15) ;给变量“hgt”赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!"); 调用“Commnad”函数与AutoCAD进行通信 (2)单击“Standard(标准)”工具栏中的按钮,以“Hello.lsp”为名保存该文件。 Step3运行LISP程序 (1)确认编辑窗口处于前台状态,选择菜单【Tools(工具)】→【LoadTextinEditor(加载编辑器中的文字)】,则该程序被加载并运行。系统将返回AutoCAD窗口,并提示用户选择一点,并以指定点为基点来绘制文字。结果如图36-4所示。 (2)如果用户退出VisualLISP环境并返回AutoCAD系统窗口,则需要对该程序进行加载后,才能运行。选择菜单【Tools(工具)】→【LoadAppcation…(加载应用程序)】,弹出“Load/UnloadApplications(加载/卸载应用程序)”对话框,如图

AutoLisp极速入门视频教程笔录

大家好,您现在看到的是CAD高手网为大家奉献的CAD二次开发视频教程,尽管网站已经上传了一些lisp的视频教程,但是有很多新手朋友还是不得要领,这主要原因是因为我们的专业是设计而不是计算机编程。很荣幸,今天再次受CAD高手网站长剑王之邀,为大家制作本节lisp极速入门教程。 这节课的主要内容有: 一、认识CAD二次开发(lisp程序)及其作用 因为我们的专业是设计,为了真正达到极速入门的目的,这里我们不讲编辑语言的理论知识,理论知识可以到我们网站(https://www.wendangku.net/doc/4f9778626.html,)的二次开发扫盲专题去详细了解,下面我们直接通过一个演示来对二次开发的作用做一个感性的认识。 二、lisp程序框架基本格式 (defun函数名称(变量声明)(……程序内容……)) 我们看到该框架以括号开始并以括号结束,这就是lisp语言最基本的语法规则之一,lisp程序的所有表达式都必须包括的括号以内,且左、右括号必须一一对称,成双成对。其中各部分的意义如下: defun内置功能函数,用于定义新的指令或新的功能函数。(我们甚至也可以将其看作是lisp语言的一个固定格式,因为这个函数比较特殊,我们无论是定义一个函数或是开发一个程序命令都将要用到它。) 函数名称新定义的函数名称,这完全取决于你的个人意愿可以是任何字符,如果该名称被定义为“c:”开头,则此函数即可做为CAD的一条新命令,反之则为一个功能函数,待下面实例详细讲解。 变量声明变量的声明分为全局变量或局部变量,可以省略但必须保留其在框架格式中的位置,即保留其位置的括号“()”,关于全局变量或局部变量将会在以后的课程中一一详解。 程序内容定义程序的所有表达式的集合,即该括号内可以嵌套任一多个括号(表达式) 三、lisp程序实例探密 1、利用lisp程序定义“左手键”(快捷键)

CAD lisp 实用小程序(源代码)

CAD lisp实用小程序(源代码) 一、圆自动同心 (defun c:TX(/qi aa ec center v_c) (vl-load-com) (princ"圆自动同心:") (setq aa(ssget));;获取圆的图元名 (setq center(getpoint"选取点位置:")); (setq center(vlax-3D-point center)); (setq qi0);初始序号 (repeat(sslength aa);对象个数 (setq ec(ssname aa qi));选择第一个图元 (setq v_c(vlax-ename->vla-object ec));将圆的图元名转换为VLA对象 (vla-put-center v_c center);更新圆中心点 (setq qi(+qi1)) );repeat (princ"修改成功:") );defun 二、图层快速修改 (princ"快速修改图层编程-TC") (defun C:TC(/) (vl-load-com) (setq SET_ZJTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择基准图层:"))))) (WHILE(NOT SET_ZJTC)(setq SET_ZJTC(vla-get-Layer(vlax-ename->vla-object(car(entsel "\n基准图层为空,重新选择!:")))))) (setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择修改图层:"))))) (WHILE(NOT SET_XGTC)(setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car (entsel"\n修改图层为空,重新选择!:")))))) (vlax-for VLA_MSP(vla-get-ModelSpace(vla-get-ActiveDocument(vlax-get-Acad-Object))) (IF(=(vla-get-Layer VLA_MSP)SET_XGTC)(vla-put-Layer VLA_MSP SET_ZJTC))) (princ"\n快速修改图层编程-TC:") (princ) );DEFUN 三、字高自动修改 (princ"快速修改字高编程-ZG") (defun C:ZG(/) (vl-load-com) (setq SET_ZTGD(vla-get-Height(vlax-ename->vla-object(car(entsel"\n选择基准字高:"))))) (WHILE(NOT SET_ZJTC)(setq SET_ZJTC(vla-get-Height(vlax-ename->vla-object(car (entsel"\n基准字高为空,重新选择!:")))))) (setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car(entsel"\n选择修改图层:"))))) (WHILE(NOT SET_XGTC)(setq SET_XGTC(vla-get-Layer(vlax-ename->vla-object(car (entsel"\n修改图层为空,重新选择!:"))))))

超经典CAD lisp程序集锦、CAD快捷键大全

超经典CAD lisp程序集锦 如果您使用 AutoCAD,下面的内容对您一定有帮助。在某些方面能大大提高 您的工作效率。下面的程序均以源程序方式给出,您可以使用、参考、修改它。 bg.lsp --- 表格自动生成 asc.lsp --- 将文本文件内容写入图中,字符是单个的 wf.lsp --- 将图中字符写入磁盘 exstr.lsp --- 将字符串分解成单字 pgtxt.lsp --- 将字符合成字符串 pb.lsp --- 通过给出长度将字符串分成两个串 cht.lsp --- 直接修改文字内容或块属性 ct.lsp --- 对数字串进行加减 chh.lsp --- 直接修改文字高度 chhw.lsp --- 直接修改文字高宽比(针对PKPM软件将字符定位点改为左下角) chst.lsp --- 直接修改文字字体 txt.shx --- 修改后的标准txt.shx文件。(kuozhan.sld为增强的内容幻灯片) tiao.lsp --- 配合修改过的标准字体文件,将中文字符调大 tiao1.lsp --- 配合修改过的标准字体文件,将英文字符调小 untiao.lsp --- 上两个程序的复原 sht.lsp --- 在图中查找字符串 zhuang.lsp --- 桩点及钎探号绘制(勘测图) dim.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:1) dimm.lsp --- 配合JT.DWG将尺寸标注调成适合建筑结构设计(1:100)

di1.lsp~di8.lsp --- 直接连续标注尺寸(用于1:1的图) di100.lsp~di800.lsp --- 直接连续标注尺寸(用于1:100的图) 详细内容及附件下载请浏览北纬服务论坛 https://www.wendangku.net/doc/4f9778626.html,/thread-2724-1-1.html

autocad lisp教程

Lisp教程 一.Lisp基础知识 二.对话框基础 一.基本知识 第1节 -------------------------------------------------------------------------------- 基本知识 AutoLISP是一种针对扩充及自订AutoCAD函数机能而产生,以LISP为基础的程序设计语言.LISP本身于50

目的是令使用者充份利用AutoCAD进行开发,直接增加及修改AutoCAD指令. AutoLisp语言建基于普通的LISP语言上,并扩充了许多适用于CAD的特殊功能而形成. 是一种能以直译方式(不须先行编译)亦可于AutoCAD内部执行的直译性程序语言. 程序容易学习及撰写,程序即使出错亦不会对操作系统(如DOS,WINDOWS)有不良影响. 数据及程序均统一以串行(List)结构表示. 可直接调用几乎全部的AutoCAD命令. 既具备一般高级语言的基本结构和功能,亦有一般高级语言没有的强大图形处理能力. 内建于AutoCAD应用程序,不须另行购买;亦不须使用特定的编辑器或开发环境. 可配合AutoCAD提供的PDB,建立DCL(Dialog Control Language)文件创建对话框. 缺点: 执行速度较ObjectArx(旧称ARX,以C或C++程序开发,取代以前的ADS)程序慢;原程序不易保护;对低阶的硬件数据不易存取. 第2节 -------------------------------------------------------------------------------- 函数(Function) 在AutoLISP程序语言中所有的成份都是以函数的形式出现,AutoLISP程序就是顺序执行连串的函数.函数的运行过程就是对函数的求值(结果)过程;函数的基本语法如下: (函数名称参数1 参数2....) e.g. (PRINC "AutoLISP Programming") 每一个完整的函数必须包在一对小括号( )内,左边为开括号,右边为关括号;如有若干数量的开括号,则一定有同等数量的关括号对应. 左边开括号后紧随函数名称. 函数名称与参数之间,或参数与参数之间须最少留一个空格. 函数可有一个或多个参数(也可能没有参数),视该函数而定. 函数名称不分大小写,即大小写字母视为相同. 第3节 -------------------------------------------------------------------------------- 数据型态(Data Type) 整数(INT) 没有小数字的数值,32位有号数,范围从+2,147,483,647到-2,147,483,648 实数(REAL) 带小数字的数值,以倍精度浮点格式储存(最少14位小数) e.g. 12.5 当数值在1与-1之间时,必须加上前导零 e.g. 0.05 可以科学记号表示: 在E或e后加上次方值 e.g. 4.1e-6 字符串(STR) 一般文字,其前后必须加上双引号" e.g. "AutoCAD" 控制字符或脱逸码必须为小写,且须在字符前加上反斜线\ e.g. "\AutoCAD" 像素名称(ENAME) 是指定给图文件内对象的指针(Pointer,为16进位的数字卷标) e.g. 像素名称在图文件内是唯一的,不会重复 对象的像素名称只在目前作业中有效,再开启图档时,会指定新的像素名称予该对象 档案(FILE) 以OPEN函数所开启档案的指针,作为其它函数(读写该档案)的自变量 选集(PICKSET)

LISP函数大全

AutoLisp函数 一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l、 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值 1数值 2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1就是否等于式2,适用数值及字符串 2.2 (/= 表达式1 表达式2)比较表达式1就是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1就是否<小于表达式2 2.4(<= 表达式1 表达式2)比较表达式1就是否<一小于等于表达式2 2.5(>表达式1 表达式2) 比较表达式1就是否>大于表达式2 2.6(>= 表达式1 表达式2) 比较表达式1就是否大于等于表达式2 2.7 (~数值)返回:数值的位 not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算AutoLisp函数2/8 2.10(eq 表达式1 表达式2)比较表达式1与表达式2就是否相同,适用列表比较(实际 相同) 2.11(equal 表达式 1表达式 2[差量])比较表达式 1与表达式 2就是否相同,差量可省 略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值

CADLISP程序

1.计算所有线段总长度(加载后只需框选所有线段便可得出这些线段的总长度) (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.标注所有线段(加载后只需框选所有线段便可得标注这些线段) (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)

LISP语言教程

LISP语言教程 作者:牛魔王 — 上次修改时间: 2007-03-22 13:13 Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。Scheme 语言概要 Author:宋国伟吉林省德惠市信息中心 Date:2003 年12 月01 日 Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。 作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具。本文分为上、下两部分来介绍scheme 语言。一.Scheme语言的特点

Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。 它是一个小巧而又强大的语言,作为一个多用途的编程语言,它可以作为脚本语言使用,也可以作为应用软件的扩展语言来使用,它具有元语言特性,还有很多独到的特色,以致于它被称为编程语言中的"皇后"。 下面是洪峰对Scheme语言的编程特色的归纳: ?词法定界(Lexical Scoping) ?动态类型(Dynamic Typing) ?良好的可扩展性 ?尾递归(Tail Recursive) ?函数可以作为值返回 ?支持一流的计算连续 ?传值调用(passing-by-value) 术运对 ?算算相独立 本文的目的是让有编程基础(那怕是一点点)的朋友能尽快的掌握Scheme语言语规则读发现经Scheme语言了,那么我的的法,如果您在完本文后,自己已会用 目的就达到了。

lisp功能函数

一、数学运算功能函数 1.l(十数值数值…)返回:累计实数或整数数值 1.2(一数值数值…)返回:差值 1.3(* 数值数值…)返回:所有数值乘积 1.4(/ 数值数值…)返回:第一个数值除以第二个以后数值的商 1.5(l十数值)返回:数值十l l. 6(1—数值)返回:数值一l l.7(abs 数值)返回:数值的绝对值 1.8(atan 数值)返回:反正切值 1.9(cos 角度)返回:角度的余弦值,角度值为弧度 1.10(exp 数值)返回:数值的指数 1.11(expt 底数指数)返回:底数的指数值 1.12(fix 数值)返回:将数值转换为整数值 1.14(gcd 数值1 数值2)返回:两数值的最大公因数 1.15(log 数值)返回:数值的自然对数值 1.16(max 数值数值…)返回:数值中的最大值 1.17(min 数值数值…)返回:数值中的最小值 1.18 pi 常数∏,其值约为3.1415926 1.19(rem 数值1数值2)返回:M数值的相除的余数 l.20(sin 角度)返回:角度的正旋值,角度值为弧度 1.21(sqrt 数值)返回:数值的平方根 二、检验与逻辑运算功能函数 2.l(= 表达式1 表达式2)比较表达式1是否等于式2,适用数值及字符串2.2 (/= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.3(<表达式1 表达式2) 比较表达式1是否<小于表达式2

2.4(<= 表达式1 表达式2)比较表达式1是否<一小于等于表达式2 2.5(>表达式1 表达式2)比较表达式1是否>大于表达式2 2.6(>= 表达式1 表达式2)比较表达式1是否大于等于表达式2 2.7 (~数值)返回:数值的位not值,(1的补码) 2.8 (and 表达式1 表达式2…)返回:逻辑and的结果 2.9(boole 函数整数整数…)返回:位式布尔运算 2.10(eq 表达式1 表达式2)比较表达式1与表达式2是否相同,适用列表比较(实际相同) 2.11(equal 表达式1表达式2[差量])比较表达式1与表达式2是否相同,差量可省略(内容相同) 三、转换运算功能函数 3.l(angtof 字符串[模式])返回:角度值的字符串转成实数 3.2(angtos 角度[模式[精度]])返回:角度转成的字符串值 3.3(atof 字符串)返回:字符串转成实数值 3.4 (atoi 字符串)返回:字符串转成整数值 3.5 (cvunit 数值原始单位转换单位)返回:数值转换单位后的值转换根据acad.nut文件 3.6(distof 字符串[模式])返回:根据模式将字符串转成实数值 3.7(itoa 整数)返回:整数转成字符串 3.8(rtos 数值模式[精度])返回:实数转成字符串 3.9 (trans 点原位置新位置[位移])返回:转换坐标系统值 四、列表处理功能函数 4.1 (append 列表列表……)结合所有列表成一个列表 4.2(assoc 关键元素联合列表)根据关键元素找寻联合列表中关系信息 4.3 (car 列表)返回列表中的第一个元素,通常用来求X坐标

在AutoCAD中基于LISP程序简易标注粗糙度

在AutoCAD中基于AutoLISP程序简易标注粗糙度 陕西关中工具制造有限公司(陕西凤翔 721400)张科岐王建卫 对经常使用AutoCAD绘制二维机械图的用户来说,标注表面粗糙度是一件烦琐的事情。常用的方法是先画好粗糙度的符号,再将粗糙度值定义为属性,最后将符号和粗糙度定义为块。标注时插入这个块,按提示输入粗糙度值完成。笔者结合自己在工作中的实际经验,利用AutoCAD提供的AutoLISP程序二次开发功能编写了一个粗糙度标注程序。使用该程序标注粗糙度,操作简单、快捷、准确、美观。现将程序内容及使用方法介绍如下,供大家参考。 程序全文如下: (defun rad->deg(rad) (/ (* rad 180.0) pi) ) (defun Deg->Rad(Deg) (* pi (/ Deg 180.0)) ) (defun rgh() (setvar "CMDECHO" 1) (setq svar_old (getvar "osmode" )) (setq svar_new 0) (setvar "osmode" svar_new) (setq pos_pt (getpoint"\n标注位置:")) (setq sym_dir (getpoint"\n符号方向:")) (setq sym_hgt (getreal"\n符号高度<5>:")) (setq txt (getstring"\n数值大小<3.2>:")) (if (= txt "") (setq txt "3.2") ) (setq txt_hgt(getreal"\n字符高度<2.5>:")) (if (= txt_hgt nil) (setq txt_hgt 2.5) ) (if (= sym_hgt nil) (setq sym_hgt 5.0) ) (setq sym_lgt (/ sym_hgt (cos (/ pi 6.0)))) (setq sym_angle (angle pos_pt sym_dir)) (setq sym_pt1 (polar pos_pt (+ (/ pi 3.0) sym_angle) (* 0.5 sym_lgt)))

AutoLISP详细讲解

AutoLISP详细讲解 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 1.加法 格式(+ num1 num2 num3…) 此函数(+)计算加号(+)右边所有数字的和(+ num1 num2 num3…)。这些数字可以是整数或实数。如果均为整数,则和为整数;如果均为实数,则和为实数。但是如果既有整数又有实数,则和为实数。如下所示,在前两个例子中,所有数字均为整数,所以结果是

LISP语言教程

LISP语言教程 作者:牛魔王—上次修改时间: 2007-03-22 13:13 Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。 Scheme 语言概要 Author: 宋国伟吉林省德惠市信息中心 Date: 2003 年 12 月 01 日 Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。 作为Lisp 变体,Scheme 是一门非常简洁的计算语言,使用它的编程人员可以摆脱语言本身的复杂性,把注意力集中到更重要的问题上,从而使语言真正成为解决问题的工具。本文分为上、下两部分来介绍 scheme 语言。 一.Scheme语言的特点 Scheme 语言是LISP语言的一个方言(或说成变种),它诞生于1975年的MIT,对于这个有近三十年历史的编程语言来说,它并没有象C++,java,C#那样受到商业领域的青睐,在国内更是显为人知。但它在国外的计算机教育领域内却是有着广泛应用的,有很多人学的第一门计算机语言就是Scheme语言。 它是一个小巧而又强大的语言,作为一个多用途的编程语言,它可以作为脚本语言使用,也可以作为应用软件的扩展语言来使用,它具有元语言特性,还有很多独到的特色,以致于它被称为编程语言中的"皇后"。 下面是洪峰对Scheme语言的编程特色的归纳: ?词法定界(Lexical Scoping) ?动态类型(Dynamic Typing) ?良好的可扩展性 ?尾递归(Tail Recursive) ?函数可以作为值返回 ?支持一流的计算连续

AUTOLISP 程序命令(精校版本)

1.+ (加)返回所有数的和 2.– (减)将第一个数减去其他数的和并返回差值 3.* (乘)返回所有数的乘积 4./ (除)将第一个数除以其他数的乘积并返回商 5.= (等于)比较参数是否相等 6./= (不等于)比较参数是否值不相等 7.< (小于)如果每个参数值都小于它右边的参数则返回 T,否则返回 nil 8.<= (小于或等于)如果每个参数值都小于或等于它右边的参数则返回 T, 否则返回 nil 9.> (大于)如果每个参数值都大于它右边的参数则返回 T,否则返回 nil 10.>= (大于或等于)如果每个参数值都大于或等于它右边的参数则返回 T, 否则返回 nil 11.~ (按位非)返回参数的按位非(即 1 的补码) 12.1+ (增1)将参数加 1 13.1– (减1)将参数减 1 14.abs返回参数的绝对值 15.acad_colordlg显示标准的 AutoCAD 颜色选择对话框 16.acad_helpdlg启动帮助工具(已废弃) 17.acad-pop-dbmod恢复 DBMOD 系统变量的值到最近用 acad-push-dbmod 保存的值 18.acad-push-dbmod储存 DBMOD 系统变量的当前值 19.acad_strlsort以ASCII码字母顺序对字符串表进行排序 20.acad_truecolorcli从命令行中选择 AutoCAD 真彩色 21.acad_truecolordlg显示 AutoCAD 真彩色选择对话框 22.acdimenableupdate控制关联标注的自动更新 23.acet-layerp-mode查询和设置 LAYERPMODE 配置 24.acet-layerp-mark放置图层先前记录的开始和结束标记 25.acet-laytrans转换图形中的图层为其它图形或标准文件中所定义的标 准 26.acet-ms-to-ps从模型空间单位转换实数值到图纸空间单位 27.acet-ps-to-ms从图纸空间单位转换实数值到模型空间单位 28.action_tile为某一对话框控件指定一个动作表达式,用户在对话框中选 中这个控件时,就会执行该动作表达式 29.add_list在当前激活的对话框的列表框中增加一个字符串或修改其中的 一个字符串 30.alert显示一个警告框,其中显示一条出错或警告信息 31.alloc设置段长度以供 expand 函数使用 32.and返回表达式的逻辑与 (AND) 运算结果 33.angle以弧度为单位返回两点之间连线与当前 UCS 下 X 轴之间的夹角 34.angtof将表示角度的字符串转换为实数(浮点数)形式的弧度值 35.angtos将一个以弧度为单位的角度值转换成字符串 36.append将任意多个表组合成一个表 37.apply将参数表传给指定的函数

CAD创建Lisp程序步骤

使用Visual LISP创建简单的LISP应用程序 作者:佚名点击数:1523 更新:2007-2-2 7:08:10 热★★★ 【字体:小大】 a> 本节通过一个简单的实例来讲述LISP程序的创建过程,介绍编制LISP程序的一些基本步骤,以及LISP程序在AutoCA D中的加载和运行的方法。首先来创建一个最简单的LISP程序—-―Hello.lsp‖,在AutoCAD 2002中加载并运行该程序,将会在命令行出现-―Hello, Visual LISP!‖。 36.2.1 Visual LISP与AutoCAD的通信 用户可以直接在AutoCAD命令行中键入AutoLISP表达式。AutoCAD通过括号来确认AutoLISP表达式。AutoCAD每当发现一个左括号,就确认为AutoLISP表达式,并由AutoLISP求表达式的值后返回AutoCAD,AutoCAD使用返回结果并继续进行其他工作。 注意在AutoLISP表达式中,左、右括号必须配对,否则AutoCAD将给出提示符n>,n表示右括号丢失数目。 此外,在AutoCAD中调用并执行AutoLISP程序。在AutoLISP程序中采用COMMAND函数来与AutoCAD命令程序处理器通信,COMMAND从AutoLISP获得命令并将其传给AutoCAD。 36.2.2 实例1 最简单的LISP程序——―Hello.lsp‖ Step 1 创建新文件 (1) 运行AutoCAD 2002系统,以―acadiso.dwt‖为样板创建图形文件,并调用―vlisp‖命令进入Visual LISP环境。 (2) 单击―Standard(标准)‖工具栏中的按钮,新建一个LISP文件。 Step 2 输入代码并保存文件 (1) 在编辑窗口中输入源文件―Hello.lsp‖的代码,如图36-3所示。程序清单如下: ;;;* Hello.lsp –Visual LISP文件实例 (prompt "Pick point:") ;指定运行时的提示信息 (setq ipt (getpoint)) ;在屏幕上指定一点并将其坐标值赋予变量―ipt‖ (setq hgt 15) ;给变量―hgt‖赋值 (Command "_.TEXT" "_S" "STANDARD" ipt hgt 0 "Hello, Visual LISP!") ;调用―Commnad‖函数与AutoCAD进行通信

autolisp教程

第十四章 AutoLISP 14.1 关于AutoLISP AutoLISP是由Autodesk公司开发的一种LISP程序语言(LISP是List Processor的缩写)。第一篇关于LISP的参考文献是由John McCarthy 在1960年4月的《ACM通讯》中发表的。 除了FORTRAN和COBOL,大多数在六十年代早期开发出来的语言都过时了,可是LISP 却生下来,并且已经成为人工智能(AI)的首选程序序言。AutoLISP解释程序位于AutoCAD 软件包中,然而AutoCAD R2.17及更低版本中并不包含AutoLISP解释程序,这样,只有通过AutoCAD R2.18及更高版本才可以使用AutoLISP语言。 AutoCAD软件包中包含大多数用于产生图形的命令,但仍有某些命令末被提供。例如,AutoCAD中没有在图形文本对象内绘制矩形及作全局改变的命令。通过AutoLISP,你可以使用AutoLISP程序语言编制能够在图形文本对象内绘制矩形或作全局选择性改变的程序。事实上,可以用AutoLISP编制任何程序,或把它嵌入到菜单中,这样定制你的系统会取得更高的效率。 现在,已经有数以百计的第三方软件开发人员使用AutoLISP语言编制各种应用程序软件包,例如,本文作者开发了一个名为SMLayout的软件包,用它可以产生各种复杂几何图形的平面布局图,这些几何图形包括管道的交叉部、过渡都、圆柱、弯管接头、圆锥以及罐顶。目前社会上非常需要AutoLISP程序员为应用软件及客户菜单的开发提供顾问。 在本章中,我们假定读者已经熟悉了AutoCAD命令及AutoCAD的系统变量。但是,在开始学习AutoLISP时,却并不需要你是一位AutoCAD或编程专家。同时,本章还假定读者并无编程方面的知识。如果你熟悉任何一种编程语言,那么学习AutoLISP就会很容易。对各种函数的评细探讨以及对例题的逐步讲解会使你学起来很有兴趣。本章讨论常用的AutoLISP函数以及它们S程序编制中的应用。对于本章中未涉及的函数,请参阅Autodesk 公司的《AutoLISP程序员参考手册》。AutoLISP对硬件没有任何特殊要求。如果系统能够运行AutoCAD,那么同样也可以运行AutoLISP。AutoLISP程序可以使用任何文本编辑器进行编制。 14.2 数学运算 任何编程语言都提供数学函数。在AutoLISP中,同样提供了编程以及数学计算所需的大部分数学函数,你可以使用AutoLISP对数字进行加、减、乘、除运算,还可以得到以弧度表示的角度的正弦值、余弦值及反正切值等。使用AutoLISP还可以进行许多其他计算。这一节主要讨论AutoLISP程序语言支持的常用数学函数。 269

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

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

相关文档