测品娱乐
您的当前位置:首页CAD LISP 程序

CAD LISP 程序

来源:测品娱乐
可编辑文档

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))

1/18

可编辑文档

)

(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)

)

;;选取需要测量的样条曲线、圆弧、直线、椭圆

2/18

可编辑文档

(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))

3/18

可编辑文档

(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

4/18

可编辑文档

(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))

5/18

可编辑文档

(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))

6/18

可编辑文档

)

(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))

7/18

可编辑文档

)

)

(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))

)

8/18

可编辑文档

(setq

pp2 (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))

9/18

可编辑文档

(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

10/18

可编辑文档

\"\"

(* (/ ang pi) 180)

(strcat \"\" (rtos dd 2))

\"\"

)

(setq i (1+ i))

)

(prin1)

)

(prompt \"\\n <>在图中直接写出长度\")

(prin1)

3.连续打断程序

(defun c:br1 ()

11/18

可编辑文档

(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)))

12/18

可编辑文档

(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)

)

13/18

可编辑文档

5 删除带颜色图元

以下程序在别人的贴子里贴过.为了说明问题,今天再贴一次.

改颜色的LISP程序

(defun c:c1()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"1\" \"\") (princ))

(defun c:c2()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"2\" \"\") (princ))

(defun c:c3()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"3\" \"\") (princ))

(defun c:c4()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"4\" \"\") (princ))

(defun c:c5()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"5\" \"\") (princ))

(defun c:c6()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"6\" \"\") (princ))

(defun c:c7()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"7\" \"\") (princ))

(defun c:c8()(ssget)(command \"chprop\" \"p\" \"\" \"c\" \"8\" \"\") (princ))

你用C1 命令就可以将图元改为红色了.其余类似.

删除红色图元

14/18

可编辑文档

(defun C:D1 (/ m A M)

(setq m:err *error* *error* *merr*)

(setvar \"cmdecho\" 0)

(command \"UNDO\" \"G\")

(prompt \"选择图形\")

(setq A (ssget '((62 . 1)) ))

(if (/= A nil)(progn

(setq M (sslength A))

(command \"erase\" A \"\")

(princ \"\\n共删除红色图元<\")(princ M)(princ \">个\")

))

(command \"UNDO\" \"E\")

(princ) )

15/18

可编辑文档

这样,键入 D1 命令,就可以删除红色的图元了.

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

16/18

可编辑文档

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

17/18

可编辑文档

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

(精选文档,可编辑word,整理文档不易,建议收藏)

18/18

因篇幅问题不能全部显示,请点此查看更多更全内容