resullins 发表于 2022-7-6 10:14:05

@李:你真棒!这正是我需要它做的!你是最棒的。
 
很高兴我找到了这个论坛!

Lee Mac 发表于 2022-7-6 10:17:46

非常欢迎你们,我希望我激发了你们对LISP的兴趣

resullins 发表于 2022-7-6 10:20:55

你真的有。事实上,我将看看是否可以修改您的代码以删除其中的一个输入选项。我们总是需要更改一个特定的标签,所以我想我可以去掉这个提示。

Lee Mac 发表于 2022-7-6 10:22:25

祝你好运如果你需要帮助,就喊出来

resullins 发表于 2022-7-6 10:26:33

好的,李:这个Lisp程序的编辑有问题。我似乎做得不对。我试图更新上面的LISP,使其始终更改名为LINE#的属性,并使数字长度的默认值为3。但我似乎总是把事情搞砸。(幸运的是,我足够聪明,可以保留一份我一直要回去的原件。)有什么提示吗?

mathew21 发表于 2022-7-6 10:29:40

试试教程。。我知道他们帮了我。。在学习过程中,您可能需要重读几次(我重读了大约20次我发出的4行命令)
这些是李·麦克推荐我去看AfraLISP或JeffreySanders的教程

Lee Mac 发表于 2022-7-6 10:32:07

只需删除这些参数的提示即可:
 

(defun c:AttNum ( / *error* _StartUndo _EndUndo _PadLeft doc ss lst len ) (vl-load-com)
;; © Lee Mac 2010

(defun *error* ( msg )
   (if doc (_EndUndo doc))
   (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
       (princ (strcat "\n** Error: " msg " **")))
   (princ)
)

(defun _StartUndo ( doc ) (_EndUndo doc)
   (vla-StartUndoMark doc)
)

(defun _EndUndo ( doc )
   (if (= 8 (logand 8 (getvar 'UNDOCTL)))
   (vla-EndUndoMark doc)
   )
)

(defun _PadLeft ( str cha len )
   (if (< (strlen str) len)
   (_PadLeft (strcat cha str) cha len)
   str
   )
)

(setq doc(vla-get-ActiveDocument (vlax-get-acad-object)))

(setq *tag "LINE#" len 3)

(setq *pre (getstring t "\nSpecify Prefix <None> : "))

(setq *num
   (1-
   (cond
       (
         (getint
         (strcat "\nSpecify Starting Number <"
             (itoa
               (setq *num
               (1+
                   (cond ( *num ) ( 0 ))
               )
               )
             )
             "> : "
         )
         )
       )
       ( *num )
   )
   )
)

(if (ssget "_:L" '((0 . "INSERT") (66 . 1)))
   (progn      
   (vlax-for o (setq ss (vla-get-ActiveSelectionSet doc))
       (setq lst
         (cons
         (cons (vlax-get o 'InsertionPoint) o) lst
         )
       )
   )
   (vla-delete ss)

   (_StartUndo doc)

   (mapcar
       (function
         (lambda ( block )
         (mapcar
             (function
               (lambda ( attrib )
               (if (eq *tag (strcase (vla-get-TagString attrib)))
                   (vla-put-TextString attrib
                     (strcat *pre
                     (_PadLeft (itoa (setq *num (1+ *num))) "0" (cond ( len ) ( 0 )))
                     )
                   )
               )
               )
             )
             (vlax-invoke (cdr block) 'GetAttributes)
         )
         )
       )
       (vl-sort lst
         (function
         (lambda ( a b ) (< (caar a) (caar b)))
         )
       )
   )

   (_EndUndo doc)
   )
)

(princ)
)
 
但未经测试。

resullins 发表于 2022-7-6 10:37:01

好的,我这么做是希望有人能进一步帮助我。
 
我需要修改Lisp程序,就像LeeMac在这个线程中提供的那样。我只需要删除一些用户输入,并将其默认为我指定的属性。但是我能找到的关于如何学习LISP的唯一方法是关于AutoLisp的。有什么东西不需要我花18年的时间去学习吗?

SLW210 发表于 2022-7-6 10:38:12

试试AFRALISP。

BlackBox 发表于 2022-7-6 10:42:21

 
这完全取决于你,学生眨眼:
页: 1 [2]
查看完整版本: LISP例程:如何。