问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个简单的AutoLISP程序实例

发布网友 发布时间:2022-04-26 01:02

我来回答

2个回答

热心网友 时间:2022-04-27 18:13

初来乍到,向各位奉上本人自编的一些实用的AutoLisp程序,希望对大家有用。
其中命令包括:
c:/ ;格式刷
c:0 ;自定义坐标系
c:00 ;世界坐标系
c:csh ;图层及标注样式初始化
c:cx ;x方向复制
c:cy ;y方向复制
c:j ;水平标注
c:k ;绘制圆引线序号球
c:kk ;绘制方引线序号球
c:kkk ;绘制连续序号球
c:kkkk ;填充连续序号
c:lf ; 关闭选中对象图层
c:lg ; 关闭选中对象图层外的其他图层
c:ln ; 设置选中对象图层为当前图层
c:mx ;x方向移动
c:my ;y方向移动

以下是程序,欢迎大家指正:

;;; 图层管理程序==》

(defun c:csh () ; 初始化图层和标注样式
(setvar 'cmdecho 0)
(sztc1)
(szbz1)
(setvar 'cmdecho 1)
)

(defun c:ln () ; 设置选中对象图层为当前图层
(setq e1 (entget (car (entsel "\n选择一个对象:"))))
; (entget (entlast))
(setq layer1 (assoc 8 e1))
(setq layername (cdr layer1))
(command "-layer" "s" layername "")
(prin1 layername)
)

(defun c:lf () ; 关闭选中对象图层
(setq e1 (entget (car (entsel "\n选择一个对象:"))))
; (entget (entlast))
(setq layer1 (assoc 8 e1))
(setq layername (cdr layer1))
(command "-layer" "off" layername "")
(princ)
)

(defun c:lg () ; 关闭选中对象图层外的其他图层
(setq e1 (entget (car (entsel "\n选择一个对象,其余图层将被关闭:"))))
;
(setq layer1 (assoc 8 e1))
(setq layername (cdr layer1))
(command "-layer" "off" "*" "y" "on" layername "s" layername "")
(princ)
)

;;; 《==图层管理程序

;;; 作图/标注程序==》

(defun c:a3 () ; 插入a3图框
(setq p1 (getpoint "\n放置点:"))
(command
"-insert"
"*C:\\Program Files\\AutoCAD 2007\\Support\\A3.dwg"
p1 ""
""
)
(princ)
)

(defun c:a4 () ; 插入a4图框
(setq p1 (getpoint "\n放置点:"))
(command
"-insert"
"*C:\\Program Files\\AutoCAD 2007\\Support\\A4.dwg"
p1 ""
""
)
(princ)
)

(defun c:00 () ; 自定义坐标
(command "ucs")
(princ)
)

(defun c:0 () ; 设置系统坐标
(command "ucs" "")
(princ)
)

(defun c:/ () ; 格式刷
(command "'_matchprop")
(princ)
)

(defun c:j () ; 直线标注
(command "-layer" "s" "6标注" "")
(command "_dimlinear")
(princ)
)

(defun c:jj () ; 圆或圆弧标注
(command "-layer" "s" "6标注" "")
(setq e1 (entget (car (entsel "选择圆或圆弧:"))))
(if (= (cdr (assoc 0 e1)) "ARC")
(command "_dimradius")
(command "_dimdiameter")
)
(princ)
)

;;; 序号球==》

(defun drawline (pt1 zh)
(if (= zh "h")
(progn (command "rectang"
(list (+ (car pt1) 8) (cadr pt1) (caddr pt1))
"@8,8"
)
(command "-array" "last" "" "r" "1" "10" "8")
)
(progn (command "rectang"
(list (car pt1) (- (cadr pt1) 8) (caddr pt1))
"@8,-8"
)
(command "-array" "last" "" "r" "10" "1" "-8")
)
)
)

(defun deleteline (pt1 zh)
(if (= zh "h")
(ssget "_w"
pt1
(list (+ (car pt1) 88) (+ (cadr pt1) 8) (caddr pt1))
'((0 . "LWPOLYLINE"))
)
(ssget "_w"
pt1
(list (+ (car pt1) 8) (- (cadr pt1) 88) (caddr pt1))
'((0 . "LWPOLYLINE"))
)
)
(command "erase" "p" "")
)

(defun c:k () ; 画引线序号球
(command "-layer" "s" "6标注" "")
(setq old_os (getvar 'osmode))
(setq zh (getstring "\n横向<h>?纵向<z>? <h>:"))
(if (= zh "")
(setq zh "h")
)
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq pt1 p2)
(drawline pt1 zh)
(while p1
(setq s (getstring "\n输入注释文字:"))
(setq dis (distance p1 p2))
(setq ang (angle p1 p2))
(setq p3 (polar p1 ang (- dis 3.5)))
(setvar 'osmode 0)
(command "line" p1 p3 "")
(command "circle" p2 "3.5")
(setq th (getvar 'dimtxt))
(command "text" "j" "mc" p2 th "" s "")
(setvar 'osmode old_os)
(setq p1 (getpoint "\n基点:"))
(if (= p1 nil)
(progn
(deleteline pt1 zh)
(princ
"\n命令<k>画圆引线序号球 <kk>画方引线序号球 <kkk>画序号球 <kkkk>填写序号"
)
(exit)
(princ)
)
)
(setq p2 (getpoint "\n第二点:"))
)
)

(defun c:kk () ; 画方引线序号球
(command "-layer" "s" "6标注" "")
(setq old_os (getvar 'osmode))
(setq zh (getstring "\n横向<h>?纵向<z>? <h>:"))
(if (= zh "")
(setq zh "h")
)
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq pt1 p2)
(drawline pt1 zh)
(while p1
(setvar 'osmode 0)
(setq s (getstring "\n输入注释文字:"))
(if (> (car p2) (car p1))
(if (> (cadr p2) (cadr p1))
(progn (setq p3 (list (- (car p2) 3.5) (- (cadr p2) 3.5) (caddr p2)))
(command "rectang" p3 "@7,7")
)
(progn (setq p3 (list (- (car p2) 3.5) (+ (cadr p2) 3.5) (caddr p2)))
(command "rectang" p3 "@7,-7")
)
)
(if (> (cadr p2) (cadr p1))
(progn (setq p3 (list (+ (car p2) 3.5) (- (cadr p2) 3.5) (caddr p2)))
(command "rectang" p3 "@-7,7")
)
(progn (setq p3 (list (+ (car p2) 3.5) (+ (cadr p2) 3.5) (caddr p2)))
(command "rectang" p3 "@-7,-7")
)
)
)
(command "line" p1 p3 "")
(setq th (getvar 'dimtxt))
(command "text" "j" "mc" p2 th "" s "")
(setvar 'osmode old_os)
(setq p1 (getpoint "\n基点:"))
(if (= p1 nil)
(progn
(deleteline pt1 zh)
(princ
"\n命令<k>画圆引线序号球 <kk>画方引线序号球 <kkk>画序号球 <kkkk>填写序号"
)
(exit)
(princ)
)
(setq p2 (getpoint "\n第二点:"))
)
)
)

(defun c:kkk () ; 画序号球
(command "-layer" "s" "6标注" "")
(setq old_os (getvar 'osmode))
(setq n (getint "\n设置起始值<1>"))
(if (= n nil)
(setq n 1)
)
(setvar 'osmode 32)
(setq p1 (getpoint "\n基点:"))
(while p1
(setq p2 (list (- (car p1) 5) (- (cadr p1) 5) (caddr p1)))
(setvar 'osmode 0)
(command "circle" p2 "3.5")
(command "text" "j" "mc" p2 "" "" n "")
(setq n (1+ n))
(setvar 'osmode 32)
(setq p1 (getpoint "\n下一基点:"))
)
(setvar 'osmode old_os)
(princ
"\n命令<k>画圆引线序号球 <kk>画方引线序号球 <kkk>画序号球 <kkkk>填写序号"
)
(princ)
)

(defun c:kkkk () ; 填写序号
(command "-layer" "s" "6标注" "")
(setq old_os (getvar 'osmode))
(setq n1 (getint "\n设置起始值<1>"))
(if (= n1 nil)
(setq n1 1)
)
(setq n2 (getint "\n设置结束值<10>"))
(if (= n2 nil)
(setq n2 10)
)
(setvar 'osmode 32)
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n下一点:"))
(setq p3 (list (/ (+ (car p1) (car p2)) 2)
(/ (+ (cadr p1) (cadr p2)) 2)
(caddr p1)
)
)
(setvar 'osmode 0)
(while (< n1 (1+ n2))
(command "text" "j" "mc" p3 "" "" n1 "")
(setq p3 (list (car p3)
(+ (cadr p3) (- (cadr p2) (cadr p1)))
(caddr p1)
)
)
(setq n1 (1+ n1))
)
(setvar 'osmode old_os)
(princ
"\n命令<k>画圆引线序号球 <kk>画方引线序号球 <kkk>画序号球 <kkkk>填写序号"
)
(princ)
)

;;; 《==作图/标注程序

;;; 移动复制程序==》

(defun c:mx ()
(setq ss (ssget))
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq p3 (list (car p2) (cadr p1) (caddr p1)))
(command "move" ss "" p1 p3)
(princ)
)

(defun c:my ()
(setq ss (ssget))
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq p3 (list (car p1) (cadr p2) (caddr p1)))
(command "move" ss "" p1 p3)
(princ)
)

(defun c:cx ()
(setq ss (ssget))
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq p3 (list (car p2) (cadr p1) (caddr p1)))
(command "copy" ss "" p1 p3)
(princ)
)

(defun c:cy ()
(setq ss (ssget))
(setq p1 (getpoint "\n基点:"))
(setq p2 (getpoint "\n第二点:"))
(setq p3 (list (car p1) (cadr p2) (caddr p1)))
(command "copy" ss "" p1 p3)
(princ)
)

;;; 《==移动复制程序

;;;以下为自定义函数:
;;;_____________________________________________________________________________
;;; ((setvar 'measurement 1))

(defun sztc1 () ; 自动设置图层函数==>>
(setq l1 "0"
l2 "1中心线"
l3 "2粗实线"
l4 "3细实线"
l5 "4剖面线"
l6 "5虚线"
l7 "6标注"
l8 "7轮廓线"
) ; 设置图层名称
(setq c1 33
c2 1
c3 7
c4 6
c5 2
c6 4
c7 40
c8 5
) ; 设置图层颜色
(setq lt1 "Continuous"
lt2 "CENTER2"
lt3 "Continuous"
lt4 "Continuous"
lt5 "Continuous"
lt6 "DASHED2"
lt7 "Continuous"
lt8 "Dividex2"
) ; 设置图层线形
(setq lw1 0.13
lw2 0.13
lw3 0.30
lw4 0.13
lw5 0.13
lw6 0.13
lw7 0.13
lw8 0.13
) ; 设置图层线宽
; (command "-linetype" "l" "center2"
; "")
; (command "-linetype" "l" "dashed2"
; "")
; (command "-linetype" "l"
; "acad_is005w100" "")
(command "-layer" "n" l1 "c" c1 l1 "l" lt1 l1 "lw" lw1 l1 "")
(command "-layer" "n" l2 "c" c2 l2 "l" lt2 l2 "lw" lw2 l2 "")
(command "-layer" "n" l3 "c" c3 l3 "l" lt3 l3 "lw" lw3 l3 "")
(command "-layer" "n" l4 "c" c4 l4 "l" lt4 l4 "lw" lw4 l4 "")
(command "-layer" "n" l5 "c" c5 l5 "l" lt5 l5 "lw" lw5 l5 "")
(command "-layer" "n" l6 "c" c6 l6 "l" lt6 l6 "lw" lw6 l6 "")
(command "-layer" "n" l7 "c" c7 l7 "l" lt7 l7 "lw" lw7 l7 "")
(command "-layer" "n" l8 "c" c8 l8 "l" lt8 l8 "lw" lw8 l8 "")
(princ "\n图层设置完毕!")
(princ)
)
;;; <<==自动设置图层函数

(defun szbz1 () ; 设置标注样式
(setvar 'dimadec 0) ; 角度小数位数
(setvar 'dimalt 0) ; 选定的换算单位
(setvar 'dimaltd 3) ; 换算单位小数位数
(setvar 'dimaltf 0.0394) ; 换算单位比例因子
(setvar 'dimaltrnd 0) ; 换算单位舍入值
(setvar 'dimalttd 3) ; 换算公差小数位数
(setvar 'dimalttz 0) ; 换算公差消零
(setvar 'dimaltu 2) ; 换算单位
(setvar 'dimaltz 0) ; 换算单位消零
(setvar 'dimapost "") ; 替换文字的前缀和后缀
(setvar 'dimarcsym 0) ; 弧长符号
(setvar 'dimasz 2.5) ; 箭头大小
(setvar 'dimatfit 3) ; 箭头和文字调整
(setvar 'dimaunit 0) ; 角度单位格式
(setvar 'dimazin 2) ; 角度消零
(setvar 'dimblk "") ; 箭头块名
(setvar 'dimblk1 "") ; 第一个箭头块名
(setvar 'dimblk2 "") ; 第二个箭头块名
(setvar 'dimcen 3) ; 圆心标记大小
(setvar 'dimclrd 0) ; 尺寸线和引线颜色
(setvar 'dimclre 0) ; 尺寸界线颜色
(setvar 'dimclrt 0) ; 标注文字颜色
(setvar 'dimdec 2) ; 小数位数
(setvar 'dimdle 0) ; 尺寸线
(setvar 'dimdli 3.75) ; 尺寸线间距
(setvar 'dimdsep ".") ; 小数分隔符
(setvar 'dimexe 1.25) ; 尺寸界线在尺寸线上
(setvar 'dimexo 0) ; 尺寸界线原点偏移
(setvar 'dimfrac 0) ; 分数格式
(setvar 'dimfxl 1) ; 固定的尺寸界线
(setvar 'dimfxlon 0) ; 启用固定的尺寸界线
(setvar 'dimgap 0.625) ; 尺寸线和文字的间距
; (setvar 'dimjogang 46)
; 半径标注折弯角度
(setvar 'dimjust 0) ; 尺寸线上的文字对正
(setvar 'dimldrblk "") ; 引线块名
(setvar 'dimlim 0) ; 生成标注界限
(setvar 'dimltex1 ".") ; 线型尺寸界线 1
(setvar 'dimltex2 ".") ; 线型尺寸界线 2
(setvar 'dimltype ".") ; 标注线型
(setvar 'dimlunit 2) ; 线性单位格式
(setvar 'dimlwd -2) ; 尺寸线和引线线宽
(setvar 'dimlwe -2) ; 尺寸界线线宽
(setvar 'dimpost "") ; 标注文字的前缀和后缀
(setvar 'dimrnd 0) ; 舍入值
(setvar 'dimsah 0) ; 独立的箭头块
(setvar 'dimscale 1) ; 全局比例因子
(setvar 'dimsd1 0) ; 隐藏第一条尺寸线
(setvar 'dimsd2 0) ; 隐藏第二条尺寸线
(setvar 'dimse1 0) ; 隐藏第一条尺寸界线
(setvar 'dimse2 0) ; 隐藏第二条尺寸界线
(setvar 'dimsoxd 0) ; 隐藏外侧尺寸线
(setvar 'dimtad 1) ; 文字位于尺寸线上方
(setvar 'dimtdec 2) ; 公差小数位数
(setvar 'dimtfac 1) ; 公差文字高度比例因子
(setvar 'dimtfill 0) ; 文字背景已启用
(setvar 'dimtfillclr 0) ; 文字背景颜色
(setvar 'dimtih 0) ; 尺寸界线内侧的文字水平放置
(setvar 'dimtix 0) ; 将文字放置于尺寸界线内侧
(setvar 'dimtm 0) ; 下偏差
(setvar 'dimtmove 0) ; 文字移动
(setvar 'dimtofl 1) ; 强制在尺寸界线内侧画尺寸线
(setvar 'dimtoh 1) ; 外侧文字水平放置
(setvar 'dimtol 0) ; 公差标注
(setvar 'dimtolj 0) ; 公差垂直对齐
(setvar 'dimtp 0) ; 上偏差
(setvar 'dimtsz 0) ; 标记大小
(setvar 'dimtvp 0) ; 文字垂直位置
(setvar 'dimtxt 3.5) ; 文字高度
(setvar 'dimtzin 8) ; 公差消零
(setvar 'dimupt 0) ; 用户定位的文字
(setvar 'dimzin 8) ; 消零
(command "-style" "1 长仿宋体" "gbeitc.shx,gbcbig.shx"
"" "0.7" "" ""
""
)
(setvar 'dimtxsty "1 长仿宋体") ; 标注文字样式
(setq n (getreal "\n尺寸比例?<1>"))
(if (= n nil)
(setvar 'dimlfac 1)
(setvar 'dimlfac n)
) ; 线性单位比例因子
(command "-dimstyle" "s" "1 长仿宋体标注")
(princ)
)

参考资料:http://www.jxcad.com.cn/read.php?tid=745607

热心网友 时间:2022-04-27 19:31

工具,自定义,程序参数autocad.pgp文件打开后,把*L *LINE,把前面的L改为XX就行了,很简单。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
四开大门要多少宽度 四开大门尺寸多少 大门四开门尺寸是多少 秦昊新剧《亲爱的小孩》网上褒贬不一,你觉得这部剧是否符合现实呢? 《亲爱的小孩》妻子产后失禁,丈夫嫌弃反复洗手,你怎么看? 求推荐一个安卓手机文档管理工具吧,手机实在太乱了,也没有介绍的? 手机文件管理器哪个好用 隐私文件夹app哪个好用 泰山茶年产600吨品牌近40个销售额达5亿元 山东茶叶品牌 山东茶叶厂家 山东有哪些茶叶品牌【品牌库】 从广延路到真如中学如何走? 夏令营时间是 什么意思? 夏令营一般最长时间是多久呢?期限是多久 三月夏令营时间 如何利用lisp程序一次性提取CAD中点的坐标(不要点击每个点,太多了麻烦) 夏令营什么时间开班呢? 夏令营几月份开始? 怎么用lisp代码提取cass属性 夏令营开营时间是什么时候啊? 怎么把CAD里面的标注导入到EXCEL里面 夏令营多少天? cad里(princ ff)什么意思? 请问保研夏令营及推免都是什么时候?两者都应该做什么准备呢? 移动lisp 什么是夏令营时间 lisp cad求助高手实现选取指点终点! 求一个cad lisp命令! 我有PRINC2证书,公司投标,可以作为项目经理证书使用吗? Excel函数中,cumprinc函数的cum和princ分别是什么意思,是什么单词的缩写 错误: 参数类型错误: (or stringp symbolp): nil CAD lisp中的princ 如何用lisp语言画椭圆 夏令营需要的时间? 参加夏令营需要多长时间? 如何选择军事夏令营的时间长度 什么时间报名夏令营比较合适? 夏令营什么时间结束 暑期夏令营多长时间? 参加什么时间的夏令营比较合适? 夏令营一般从什么时候开始? 各名校保研夏令营什么时候开始报名?有开始的了吗? 我国四大民间传说是什么? 四大民间传说,你知道什么? 写给日本领导和同事的感谢信 感谢疫情援助的感谢信简短 我国民间四大传说是指哪四本? 中国四大民间传说是 我想给日本老师写封简单的感谢信 急急 中国四大民间传说是指? 回国后写给日本公司领导及帮助过我的组合里老师们的感谢信,急 跪求 给日本地震勇士写封感谢信 用日语写 300字左右 语法简单些 谢谢了