pmxcad 发表于 2022-7-5 16:39:15

incatt公司

大家好,
我有一个Lisp程序的作品完美。但我想给它添加一个函数。
现在的Lisp程序通过选择块来计算/增加属性。
添加我想要的功能是房间号。这将同时将数字放入块/属性中。这不算,但保持不变。
因此,如果我运行lisp,他会要求输入房间号(“房间编号”标记)和一个带递增的数字(“TEXT1”标记)。
我对lisp了解不多。我确实知道:(setq room=nr(getString T“room number”))来获得房间号,我想通过(setq o(ssget“_+:E:S:L”'((0。“INSERT”)(66.1)))部分获得块选择。
我在Lee Mac的网站上查看了属性LISP,但我不知道应该在哪里以及如何放置它们。
 
 
 
 
;;                                                                        ;;
;;Made By ...... TaeEun12/10/07                                       ;;
;;------------------------------------------------------------------------;;
;;Contact me ... arin9916@naver.com                                     ;;
;;             ... http://cafe.naver.com/ptelisp                        ;;
;;------------------------------------------------------------------------;;
;;Ver 1.0 ...... Design & Created                                       ;;
;;      1.1 ...... Add StringCal Function                                 ;;
;;------------------------------------------------------------------------;;
;;Client ....... CADTUTOR                                             ;;
;;------------------------------------------------------------------------;;
(defun c:INCATT
   ( / f str i f tag num pre post OOv
   
;      *StartStr121007
;      *IncreaseN121007
   
       HUE:DivideNum
       HUE:memoVar
       HUE:stringsubst
       HUE:StringCal
       HUE:start
       HUE:end
   
       _divideStr
   
   )
   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:DivideNum ( str / lst s m v1 v2 i j c _NumP _Cal)
       (defun _NumP ( x ) (<= 48 x 57))
       (defun _Cal ( ty v )
         (set v (cons (vl-list->string (reverse (eval ty))) (eval v)))
         (set ty nil)
       )
   
       (setq lst (vl-string->list str) i -1 j -1)
   
       (repeat (length lst)
         (setq c (nth (setq i (+ i 1)) lst))
         
         (cond
               (    (_NumP c)
                   (setq s (cons c s) ) (cond ( m (_Cal 'm 'v1) (setq j (+ 1 j)))))
            
               (    (and (= c 46) (> i 0) (_NumP (nth (- i 1) lst)) (_NumP (nth (+ i 1) lst)))
                   (setq s (cons c s))
               )
               (t(setq m (cons c m))
                   (cond ( s (_Cal 's 'v1) (setq v2 (cons (setq j (+ 1 j)) v2))))
               )
         )
       )
       (cond
         ( m (_Cal 'm 'v1))
         ( t (_Cal 's 'v1) (setq v2 (cons (setq j (+ 1 j)) v2)))
       ) (list (reverse v1) (reverse v2))
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:memoVar ( va f m s / v )
       (setq v (if (member (eval va) '(nil "")) s(eval va)))
       (mapcar 'princ (list "\n" m " <" v "> : "))
       (set va ( f ))
       (if (member(eval va) '(nil "")) (set va v)) (eval va)
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:stringsubst ( new old str / l i ) (setq l (strlen new) i 0)
       (while (setq i (vl-string-search old str i))
         (setq str (vl-string-subst new old str i) i (+ i l))
       ) str
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:StringCal ( str f n / _GetPP data1 data2 num i DIMZIN )
       (defun _GetPP ( str / lst l post pre flag )
         (setq lst(vl-remove45 (vl-string->list str))
               post (if (setq l (member 46 lst)) (- (length l) 1) 0)
               pre(if (setq l (member 46 (reverse lst))) (- (length l) 1) (length lst))
               flag (minusp (atof str))
         ) (list pre post flag)
       )
   
       (setq DIMZIN (getvar 'DIMZIN))
   
       (setvar 'DIMZIN 0)
       (setq data1 (_GetPP str)
             num   (vl-string->list (rtos (f (atof str) n) 2 (cadr data1)))
             data2 (_GetPP (vl-list->string num))
             num   (vl-remove 45 num)
       )
       (setvar 'DIMZIN DIMZIN)
       (if (< 0 (setq i (- (cardata1) (cardata2))))
         (repeat i (setq num (cons 48 num)))
       )
       (if (< 0 (setq i (- (cadr data1) (cadr data2))))
         (repeat i (setq num (append num '(48))))
       )
       (if (caddr data2) (setq num (cons 45 num)))
       (vl-list->string num)
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:start( lst )
       (vla-startundomark (HUE:end nil))
       (list lst (mapcar 'getvar lst))
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun HUE:end ( d / doc )
       (setq doc (vla-get-activedocument (vlax-get-acad-object)))
       (and (cadr d) (mapcar 'setvar (car d) (cadr d)))
       (if (= 8 (logand 8 (getvar 'UNDOCTL))) (vla-endundomark doc)) doc
   )

   ;-------------------------------------------------------------------------
   ; Sub Function
   ;-------------------------------------------------------------------------
   (defun _divideStr ( str / data i j k pre post )
       (setq data (HUE:DivideNum str)
             k    (last (cadr data))
             j    0
             pre""
             post ""
       )
   
       (foreach s (car data)
         (cond
               (    (< j k) (setq pre (strcat pres)))
               (    (> j k) (setq post(strcat post s)))
               (    (= j k) (setq i s))
         )
         (setq j (+ 1 j))
       )
       (list pre i post)
   )

   ;-------------------------------------------------------------------------
   ; Error Function
   ;-------------------------------------------------------------------------
   (defun *error* (s)
       (if OOv (HUE:End OOv)) (princ s)
   )
   ;-----------------------------------------------------------------------------------
   ; Main Function                                                                  
   ;-----------------------------------------------------------------------------------

   (setq str(HUE:MemoVar '*StartStr121007getstring "StartString" "A1")
         i    (HUE:MemoVar '*IncreaseN121007 getreal   "Increase Num " 1.)
         OOv(HUE:Start '(DIMZIN))
   )

   (and
       (vl-string-search "," str)
       (setq str (HUE:StringSubst "." "," str)f t)
   )

   (mapcar 'set '(pre num post) (_DivideStr str))

   (setq tag"TEXT1"
         num(HUE:StringCal num - i)
   )

   (setvar 'ERRNO 0)
   (setvar 'DIMZIN

   (while (= 0 (getvar 'ERRNO))
       (and
         (setq o (ssget "_+.:E:S:L" '((0 . "INSERT") (66 . 1))))
         (vl-some
               '(lambda ( att )
                   (if (= tag (vla-get-tagstring att))
                     (progn
                           (setq num (HUE:StringCal num + i)
                                 str (strcat pre num post)
                           )
                           (if f (setq str (HUE:StringSubst "," "." str)))
                           (vla-put-textstring att str)
                     )
                   )
               ) (vlax-invoke (vlax-ename->vla-object (ssname o 0)) 'getattributes)
         )
       )
   )
   (HUE:End OOv)
   (princ)
)(vl-load-com)
 
提前感谢您,
 
Jaap M公司
页: [1]
查看完整版本: incatt公司