长风(尚品) 发表于 2015-3-7 13:15:25

自动增减块编号求助

如图,在网上无意看到有这么一个东东。求方法?

429014673 发表于 2015-3-7 13:57:09

不会玩,用不上

lrd1861 发表于 2015-3-7 15:25:08

http://lee-mac.com/autolabelattributes.html

长风(尚品) 发表于 2015-3-7 16:34:11

lrd1861 发表于 2015-3-7 15:25 static/image/common/back.gif
http://lee-mac.com/autolabelattributes.html

不会用。能说说怎么用这个吗?

dbqtju 发表于 2015-3-7 17:33:31

别人的程序,找不到原来的网页介绍了。加载lisp程序,然后输入znno命令。保存后,再打开就不好用了。

ysq101 发表于 2015-3-7 20:56:08

LEE大神的程序   很强大。。。
你可以将他的函数改为子函数
GET POINT 时再小修改一下就好了

长风(尚品) 发表于 2015-3-8 08:41:54

ysq101 发表于 2015-3-7 20:56 static/image/common/back.gif
LEE大神的程序   很强大。。。
你可以将他的函数改为子函数
GET POINT 时再小修改一下就好了

我不会。能帮我改一个吗?

香田里浪人 发表于 2015-3-8 09:00:52

长风(尚品) 发表于 2015-3-8 08:41 static/image/common/back.gif
我不会。能帮我改一个吗?

LEE大神的程序-----智能编号
;;;智能编号
(defun MakeBlock-no-DXF ()
(if (not (tblsearch "Style" "Standard"))
(progn
;;;entmake *** "STYLE" *** object:
(entmake (list
    '(0 . "STYLE")
    '(100 . "AcDbSymbolTableRecord")
    '(100 . "AcDbTextStyleTableRecord")
    '(2 . "Standard")
    '(70 . 0)
    '(40 . 0.0)
    '(41 . 0.8)
    '(50 . 0.0)
    '(71 . 0)
    '(42 . 3.0)
    '(3 . "txt")
    '(4 . "")
         )
    )
);End Progn
);End IF

(if (not (tblsearch "Layer" "0"))
(progn
;;;entmake *** "LAYER" *** object:
(entmake (list
    '(0 . "LAYER")
    '(100 . "AcDbSymbolTableRecord")
    '(100 . "AcDbLayerTableRecord")
    '(2 . "0")
    '(70 . 0)
    '(62 . 7)
    '(6 . "Continuous")
    '(290 . 1)
    '(370 . -3)
      )
    )
);End Progn
);End IF

(if (not (tblsearch "Block" "no"))
(progn
;;;entmake *** "BLOCK" *** object:
(entmake (list
    '(0 . "BLOCK")
    '(100 . "AcDbEntity")
    '(67 . 0)
    '(8 . "0")
    '(100 . "AcDbBlockBegin")
    '(70 . 2)
    '(10 0.0 0.0 0.0)
    '(2 . "no")
    '(1 . "")
      )
    )

;;;entmake *** "ATTDEF" *** object:
(entmake (list
    '(0 . "ATTDEF")
    '(100 . "AcDbEntity")
    '(67 . 0)
    '(8 . "编号")
    '(62 . 3)
    '(100 . "AcDbText")
    '(10 -0.5 -1.5 0.0)
    '(40 . 0.8);;;字体大小
    '(1 . "1")
    '(50 . 0.0)
    '(41 . 0.8)
    '(51 . 0.0)
    '(7 . "Standard")
    '(71 . 0)
    '(72 . 4)
    '(11 1.77636e-015 0.0 0.0)
    '(210 0.0 0.0 1.0)
    '(100 . "AcDbAttributeDefinition")
    '(3 . "no")
    '(2 . "AAA")
    '(70 . 0)
    '(73 . 0)
    '(74 . 0)
      )
    )

;;;entmake *** "CIRCLE" *** object:
(entmake (list
    '(0 . "CIRCLE")
    '(100 . "AcDbEntity")
    '(67 . 0)
    '(8 . "编号")
    '(62 . 1)
    '(100 . "AcDbCircle")
    '(10 0.0 0.0 0.0)
    '(40 . 0.8);;;半径大小
    '(210 0.0 0.0 1.0)
      )
    )

;;;entmake *** "ENDBLK" *** object:
(entmake (list
    '(0 . "ENDBLK")
    '(100 . "AcDbEntity")
    '(100 . "AcDbBlockEnd")
      )
    )

(entupd (tblobjname "Block" "no"))
);End Progn
);End IF


)
;$$$$$$$$$$$$$$$$$$$$$$$
(DEFUN C:Znbh( )
(SETVAR "CMDECHO" 0)
(SETVAR "OSMODE" 0);关闭捕捉
(MakeBlock-no-DXF )

(COMMAND "_INSERT" "no" (getpoint "\n编号插入点:") 1 1 0)
(COMMAND "REGEN")
;;

(setq *blockname* "no";; 更新块名
      *blocktag*"aaa"    ;; 更新属性
)
(defun ObjectReactorCallback:RenumberBlocks ( object reactor params )
    (setq *reactor* reactor)
    (vlr-command-reactor "temp" '((:vlr-commandended . CommandReactorCallback:RenumberBlocks)))
    (vlr-removereactor)
    (princ)
)

(defun CommandReactorCallback:RenumberBlocks ( reactor params / e f i l n s )
    (if reactor (vlr-remove reactor))
    (if
      (and
            (not *undoflag*)
            (setq s (ssget "_X" *filter*))
      )
      (progn
            (setq n 0)
            (repeat (setq i (sslength s))
                (if (eq *blockname*
                        (AutoLabel:EffectiveName
                            (setq o (vlax-ename->vla-object (setq e (ssname s (setq i (1- i))))))
                        )
                  )
                  (progn
                        (setq e (entnext e)
                              l (entgete)
                              f nil
                        )
                        (while (and (not f) (eq "ATTRIB" (cdr (assoc 0 l))))
                            (if (eq *blocktag*(strcase (cdr (assoc 2 l))))
                              (setq f (entmod (subst (cons 1 (itoa (setq n (1+ n)))) (assoc 1 l) l)))
                            )
                            (setq e (entnext e)
                                  l (entgete)
                            )
                        )
                        (if (and *reactor* (not (member o (vlr-owners *reactor*))))
                            (vlr-owner-add *reactor* o)
                        )
                  )
                )
            )
      )
    )
    (if *reactor*
      (progn (vlr-add *reactor*) (setq *reactor* nil))
    )
    (princ)
)


(defun CommandReactorCallback:UndoCheck ( reactor params )
    (setq *undoflag* (wcmatch (strcase (car params)) "*U,*UNDO"))
    (princ)
)

(defun CommandReactorCallback:BlockInserted ( reactor params / e l )
    (if
      (and
            (not *undoflag*)
            (wcmatch (strcase (car params)) "*I,*INSERT,*EXECUTETOOL")
            (setq e (entlast))
            (setq l (entget e))
            (eq "INSERT" (cdr (assoc 0 l)))
            (= 1 (cdr (assoc 66 l)))
            (eq *blockname* (AutoLabel:EffectiveName (vlax-ename->vla-object e)))
      )
      (AutoLabel:GetNewNumber e)
    )
    (princ)
)

(defun AutoLabel:GetNewNumber ( ent / e f i l n r s )
    (if (setq s (ssget "_X" *filter*))
      (progn
            (setq n 0)
            (repeat (setq i (sslength s))
                (if (eq *blockname*
                        (AutoLabel:Effectivename
                            (vlax-ename->vla-object (ssname s (setq i (1- i))))
                        )
                  )
                  (setq n (1+ n))
                )
            )
            (setq e (entnext ent)
                  l (entget e)
            )
            (while (and (not f) (eq "ATTRIB" (cdr (assoc 0 l))))
                (if (eq *blocktag*(strcase (cdr (assoc 2 l))))
                  (setq f (entmod (subst (cons 1 (itoa n)) (assoc 1 l) l)))
                )
                (setq e (entnext e)
                      l (entgete)
                )
            )
            (if
                (setq r
                  (vl-some
                        (function
                            (lambda ( r ) (if (eq *reacdata* (vlr-data r)) r))
                        )
                        (cdar (vlr-reactors :vlr-object-reactor))
                  )
                )
                (vlr-owner-add r (vlax-ename->vla-object ent))
            )                           
      )
    )
    (princ)
)

;;------------------------------------------------------------;;

(defun AutoLabel:EffectiveName ( obj )
    (strcase
      (if (vlax-property-available-p obj 'effectivename)
            (vla-get-effectivename obj)
            (vla-get-name obj)
      )
    )
)

;;------------------------------------------------------------;;
;;                   Loading Expressions                      ;;
;;------------------------------------------------------------;;

(vl-load-com)

(
    (lambda ( / i s l o )
      (setq
            *blocktag*(strcase *blocktag*)
            *blockname* (strcase *blockname*)
            *reacdata*"AutoBlockLabel"
            *reactor*   nil
            *undoflag*nil
      )
      (foreach r1 (vlr-reactors)
            (foreach r2 (cdr r1)
                (if (eq *reacdata* (vlr-data r2)) (vlr-remove r2))
            )
      )
      (if
            (setq s
                (ssget "_X"
                  (setq *filter*
                        (list
                           '(0 . "INSERT")
                           '(66 . 1)
                            (cons 2 (strcat "`*U*," *blockname*))
                            (cons 410 (getvar 'CTAB))
                        )
                  )
                )
            )
            (progn
                (repeat (setq i (sslength s))
                  (if (eq *blockname*
                            (AutoLabel:EffectiveName
                              (setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
                            )
                        )
                        (setq l (cons o l))
                  )
                )
                (CommandReactorCallback:RenumberBlocks nil nil)
                (vlr-object-reactor l *reacdata*
                  (list
                        (cons :vlr-erased   'ObjectReactorCallback:RenumberBlocks)
                        (cons :vlr-copied   'ObjectReactorCallback:RenumberBlocks)
                        (cons :vlr-unerased 'ObjectReactorCallback:RenumberBlocks)
                  )
                )
                (vlr-command-reactor *reacdata*
                  (list
                        (cons :vlr-commandwillstart 'CommandReactorCallback:UndoCheck)
                        (cons :vlr-commandended   'CommandReactorCallback:BlockInserted)
                  )
                )
            )
      )
    )
)
(COMMAND "REGEN")
(princ)
)
;;------------------------------------------------------------;;
;;                         End of File                        ;;
;;------------------------------------------------------------;;

长风(尚品) 发表于 2015-3-8 11:37:45

本帖最后由 长风(尚品) 于 2015-3-8 13:11 编辑

香田里浪人 发表于 2015-3-8 09:00 static/image/common/back.gif
LEE大神的程序-----智能编号
;;;智能编号
(defun MakeBlock-no-DXF ()

非常感谢。正需要这个 能不能改一个数字可以加前后缀。将圆改为方形
页: [1]
查看完整版本: 自动增减块编号求助