2024-01-12 03:36来源:m.sf1369.com作者:宇宇
(defun princA (txt)
(princ
(strcat
\n【炫翔CAD插件】---
txt
功能
QQ:2363673534
)
)
)
;(xx-princB txt1 txt2);txt1为要显示功能 txt2为要显示命令
;(xx-princB 标注 AD)
;字符表的方法
(defun princB (txt1 txt2 / txt)
(princ
(strcat
\n【炫翔CAD插件】---功能:
txt1
,(命令:
txt2
),作者:【炫翔】,QQ:2363673534
)
)
(princ)
)
(princ)
(defun c:qq (/ d ent f i lst m2 obj pt ss txt x y)
(defun maketext (txt pt); 生成文字子函数
(entmake (list '(0 . text) (cons 62 1) (cons 10 pt) (cons 40 10) (cons 1 txt) '(41 . 0.8)));;写文字,0表示字体,62表示颜色1红,10表示坐标点,40表示高度,1表示;;文字内容,41表示文字宽度比例
)
(setvar cmdecho 0);;关闭命令行提示
(vl-load-com);;加载vlax扩展函数
(setq ss (ssget) ent (entlast));;选择对象并记录最后一个形成的对象
(command .region ss );;封闭图形变为面域
(setq ss (ssadd) lst nil);;建立一个新选择集
(while (setq ent (entnext ent));;循环计算并取得最后一个对象
(if (= (cdr (assoc 0 (entget ent))) region);;如果是面域
(setq obj (vlax-ename->vla-object ent) pt (vlax-safearray->list (vlax-variant-value (vla-get-centroid obj)));;转换直线为vla对象并取得质心点
m2 (rtos (vla-get-area obj) 2 2) d (rtos (vla-get-perimeter obj) 2 2) lst (cons (list pt m2 d) lst);;取得面积平方毫米,长度毫米,并建立一个列表
)
)
)
(command .undo );;返回上一步,也就是把面域变回原来的图形
(setq lst (vl-sort lst (function (lambda (x y)(< (car (car x)) (car (car y)))))));;根据给定的比较函数来对表中的元素排序
(setq lst (vl-sort lst (function (lambda (x y)(> (cadr (car x)) (cadr (car y)))))))
(setq f (getfiled 指定输出文件路径 xls 1) f (open f w));;建立文本
(write-line 编号\t周长(mm)\t面积(㎡) f);;写入内容
(setq i 1);;文字编号
(foreach x lst
(setq pt (car x) m2 (cadr x) d (caddr x));;每一个元素按顺序对应
(maketext (strcat a (itoa i)) (list (car pt) (+ (cadr pt) 20)));;通过子程序;;写文字编号
(maketext (strcat l= d m) pt);;通过子程序写长度这个m应当为mm
(maketext (strcat s= m2 ㎡) (list (car pt) (- (cadr pt) 14)));;面积㎡应;;;当为mm²
(write-line (strcat (strcat a (itoa i)) \t d \t m2) f);;3个字符串写入文本
(setq i (1+ i));;编号递增
)
(close f);;关闭文本
(princ);;沉默结束
)
快捷命令为md
关闭命令返显内容。
打开点号值的excel文件
设置初始值,总点数、点号、坐标值
循环重复输入点值,显示在cad中