炫翔 发表于 2014-5-21 17:09:25

【炫翔】快速标注(扩展)



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

lucas3 发表于 2014-5-21 18:56:48

像这种标注一般用坐标标注

ysq101 发表于 2014-5-21 22:08:17

哈哈。。。炫版主厉害。。。
不过模具专业的一般不这样标数。。
引线拉太长容易看串了   
不过还是支持一下源码。。

yoyoho 发表于 2014-5-22 07:14:54

感谢 炫翔 版主,分享学习!

434939575 发表于 2014-5-22 19:50:57

感谢大师分享,精神可嘉。!

429014673 发表于 2014-5-22 20:21:37

模具一般不是坐标的吗

炫翔 发表于 2014-5-23 09:40:24

429014673 发表于 2014-5-22 20:21
模具一般不是坐标的吗

这个不谈专业,只说方法

fjb54007 发表于 2014-11-14 20:19:48

很有用 谢谢楼主分享

543628024 发表于 2018-1-15 21:58:59

(defun-q *error* (st) (*x-rer*))这句语法错误,什么原因?

一灯即明 发表于 2018-2-12 11:34:37

{:1_12:}很实用的功能....要是能够根据图层选定需要标注的图素图素就更好了(不在选定图层的图素即便选中也不会进行标注的功能)

ivyco 发表于 2018-9-13 17:17:26

选择对象: 指定对角点: 找到 9 个
选择对象:
原因:no function definition: XX-DOC 位置-> 行:71 列:47
命令:

lg328084985 发表于 2018-11-2 08:49:56

感谢分享,谢谢楼主

hn10183051 发表于 2019-1-10 13:55:49


感谢 炫翔 版主,分享学习!

1028882406@qq.c 发表于 2020-3-29 18:03:23

感谢楼主   谢谢分享

bigchenrui 发表于 2020-3-31 19:57:49

谢谢分享!
页: [1] 2
查看完整版本: 【炫翔】快速标注(扩展)