【炫翔】快速标注(扩展)
(defun c:xx ( / p1 p2 p3 p4 p5 p6 p7 p8 p9 ss)
(coma)
(mapcar 'setvar '("cmdecho" "osmode")'(0 0))
(xx-VlaPu)
(if (ssget '((0 . "~DIMENSION")))
(progn
(setq SS(xx-cset)
P1(XX-SS-9PT SS 1)
P2(XX-SS-9PT SS 2)
P3(XX-SS-9PT SS 3)
P4(XX-SS-9PT SS 4)
P5(XX-SS-9PT SS 5)
P6(XX-SS-9PT SS 6)
P7(XX-SS-9PT SS 7)
P8(XX-SS-9PT SS 8)
P9(XX-SS-9PT SS 9)
)
(vl-cmdf "_.qdim" (ssget "c" P7 p2 '((0 . "~DIMENSION"))) "" (polar P4 pi 10))
(vl-cmdf "_.qdim" (ssget "c" P4 p9 '((0 . "~DIMENSION"))) "" (polar P8 (* PI 0.5) 10))
(vl-cmdf "_.qdim" (ssget "c" P9 p2 '((0 . "~DIMENSION"))) "" (polar P6 0 10))
(vl-cmdf "_.qdim" (ssget "c" P4 p3 '((0 . "~DIMENSION"))) "" (polar P2 (* PI 1.5) 10))
)
)
(comb)
)
(defun xx-ss-9pt (vlass mode / dx dy obj pt1 pt9 pts x1 x2 y1 y2)
(vlax-for obj vlass
(setq pts (cons (xx-box-p1p9 obj) pts))
)
(setq pts(xx-p-pts-P1P9 (apply 'append pts)))
(setq pt1 (car pts);最小点
pt9 (last pts);最大点
x1(car pt1)
x2(car pt9)
y1(cadr pt1)
y2(cadr pt9)
dx(* (- x2 x1) 0.5);到中点的距离
dy(* (- y2 y1) 0.5)
)
(cond ((= mode 1) pt1)
((= mode 2) (list (+ x1 dx) y1 0.0))
((= mode 3) (list x2 y1 0.0))
((= mode 4) (list x1 (+ y1 dy) 0.0))
((= mode 5) (list (+ x1 dx) (+ y1 dy) 0.0))
((= mode 6) (list x2 (+ y1 dy)0.0))
((= mode 7) (list x1 y2 0.0))
((= mode 8) (list (+ x1 dx) y2 0.0))
((= mode 9) pt9)
(t pt1)
)
)
(defun xx-box-p1p9 (obj / ll ur)
(vla-GetBoundingBox obj 'll 'ur)
(list
(vlax-safearray->list ll)
(vlax-safearray->list ur)
)
)
(defun xx-p-pts-P1P9 (pts)
(list
(apply 'mapcar (cons 'min pts))
(apply 'mapcar (cons 'max pts))
)
)
;********************************************
(defun xx-cset ()(vla-get-activeselectionset (xx-doc)));取得图形激活的选择集
;清除前一选择集
(defun xx-VlaPu (/ x)
(if(not(vl-catch-all-error-p(setq x(vl-catch-all-apply 'vla-item
(list (vla-get-selectionsets (vla-get-activedocument (xx-acad))) "CURRENT")))))
(vla-delete x)
)
(princ)
)
;提取系统变量
;(COMA)
(defun coma ()
(if (> (atof (getvar "acadver")) 15.)
(vl-load-com)
)
(defun *error* (msg);定义通用函数错了函数
(princ "输入通用函数错了 : ")
(princ msg)
(comb)
)
(setq *x-r*;提取系统变量
'("aunits" "auprec" "attdia" "blipmode"
"cecolor" "celtype" "clayer" "cmdecho"
"dimzin" "expert" "highlight" "lunits"
"luprec" "osmode" "orthomode" "textstyle"
"plinewid" "dimdec" "dimadec" "regenmode"
"pickbox"
)
)
(*x-ser*);处理保存系统变量
(vla-startundomark (xx-doc));标记开始
(princ)
)
(defun *x-ser* (/ sv)
(if (= 'list (type *error*));判断通用函数错了是否为表
(princ "输入通用函数错了:最后一个(*x-ser*)函数没有配对的(*x-rer*)!")
(progn
(setq *x-er* '())
(foreach sv *x-r*;循环将每一个系统变量的值提取
(setq *x-er* (cons (getvar sv) *x-er*))
)
(defun-q *error* (st) (*x-rer*));通用函数错了时还原系统变量
)
)
)
(defun xx-acad nil(eval (list 'defun 'xx-acad 'nil (vlax-get-acad-object)))(xx-acad))
(defun xx-doc nil(vla-get-activedocument (xx-acad)))
;----------------------------------------------------------------------------
;还原系统变量
;(COMB)
(defun comb ()
(vla-endundomark (xx-doc));标记结束
(*x-rer*);还原系统变量
(princ)
)
(defun *x-rer* ()
(if (= 'list (type *error*));为通用函数错了表时
(progn
(mapcar 'setvar *x-r* (reverse *x-er*));循环还原系统变量
(setq *error* nil)
)
)
)
(princ)
像这种标注一般用坐标标注 哈哈。。。炫版主厉害。。。
不过模具专业的一般不这样标数。。
引线拉太长容易看串了
不过还是支持一下源码。。 感谢 炫翔 版主,分享学习! 感谢大师分享,精神可嘉。! 模具一般不是坐标的吗 429014673 发表于 2014-5-22 20:21
模具一般不是坐标的吗
这个不谈专业,只说方法
很有用 谢谢楼主分享 (defun-q *error* (st) (*x-rer*))这句语法错误,什么原因? {:1_12:}很实用的功能....要是能够根据图层选定需要标注的图素图素就更好了(不在选定图层的图素即便选中也不会进行标注的功能) 选择对象: 指定对角点: 找到 9 个
选择对象:
原因:no function definition: XX-DOC 位置-> 行:71 列:47
命令:
感谢分享,谢谢楼主
感谢 炫翔 版主,分享学习! 感谢楼主 谢谢分享 谢谢分享!
页:
[1]
2