i was and still 发表于 2022-7-6 07:14:57

lisp的一些帮助

在离开这个行业多年后,我正在努力自学一些Lisp程序的语言。所以我有个问题。我想用一点宏语言和一点lisp创建一个工具栏宏。。。我有一点工作要做改变属性。这些都是非常标准的,只有一个默认值,块名始终是相同的。我想做的,并且已经做的是更改属性default。如果变化总是一样的,这相对容易。我希望能够将其更改为可变。。因此,我使用了简单的lisp语句。
我拥有的是:使用(setq a(getstring“what?”)将变量放在一起。。然后我尝试在适当的“更改为什么”提示下将其传递到-attedit命令中。。。但我无法获得获取变量的命令。我尝试了各种方法(“首先使用lisp位,然后尝试!变量在“change to”点”,“尝试将lisp放在“change to”点,尝试将整个内容放在lisp中,就像引号中的所有“命令和提示”一样),但我不知所措。。。任何帮助都将不胜感激。。
总结一下:如何在“更改为”提示符处将变量字符串传递给attedit命令。。

BIGAL 发表于 2022-7-6 07:49:08

您通常会编写一个lisp来完成整个过程,而不是使用-attedit来完成某种形式的实体更新过程。这里是一个更新标题块lisp作为一个例子,它是一个更大的开始,它提出问题,并读取布局名称作为块更新的一部分。感谢Lee mac解析代码。
 
; change the 410 to layout name
;;-------------------=={ Parse Numbers }==--------------------;;
;;                                                            ;;
;;Parses a list of numerical values from a supplied string. ;;
;;------------------------------------------------------------;;
;;Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;Arguments:                                                ;;
;;s - String to process                                     ;;
;;------------------------------------------------------------;;
;;Returns:List of numerical values found in string.       ;;
;;------------------------------------------------------------;;
(defun LM:ParseNumbers ( s )
(
   (lambda ( l )
   (read
       (strcat "("
         (vl-list->string
         (mapcar
             (function
               (lambda ( a b c )
               (if
                   (or
                     (< 47 b 58)
                     (and (= 45 b) (< 47 c 58) (not (< 47 a 58)))
                     (and (= 46 b) (< 47 a 58) (< 47 c 58))
                   )
                   b 32
               )
               )
             )
             (cons nil l) l (append (cdr l) (list nil))
         )
         )
         ")"
       )
   )
   )
   (vl-string->list s)
)
)

; update title block by BIGAL july 2012
;(defun ah:sheetupdate1 (ss1 lay plotabs tabname dwgname)
(defun ah:sheetupdate1 ()
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for lay (vla-get-Layouts doc)
(setq plotabs (cons (vla-get-name lay) plotabs))
)
(setq title "Please enter dwg number")
(ah:getval title)
(setq dwgname item)

(setq newstr4 (getstring "\nPlease enter version for all sheets <Cr> no change "))
(princ "0")
(setq len (length plotabs))
(setq x 0)
(setq bname "DA1DRTXT")
(repeat len
(setq tabname (nth x plotabs))
(if (/= tabname "Model")
   (progn
   (setvar "ctab" tabname)
   (setq ss1 (ssget "x"(list (cons 0 "INSERT") (cons 2 bname)(cons 410 tabname))))
   (setq dwgnum (Lm:parsenumbers tabname))
   (setq sheetnum (car dwgnum))
   (setq oldtag1 "SHT_NO") ;attribute tag name
   (setq newstr1 (rtos sheetnum 2 0))
   (setq oldtag2 "DRG_NO") ;attribute tag name
   (setq oldtag3 "PROJ_NO") ;attribute tag name
   (setq newstr3 dwgname)
   (setq oldtag4 "REV_NO") ;attribute tag name
; if less than 10
(if (< (car dwgnum) 10.0)
   (setq newstr2 (strcat dwgname "-D0"(rtos sheetnum 2 0)))
   (setq newstr2 (strcat dwgname "-D"(rtos sheetnum 2 0)))
)
   (foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS1 0 )) 'getattributes)
       (if (= oldtag1 (strcase (vla-get-tagstring att)))
       (vla-put-textstring att newstr1)
       ) ; end if
       (if (= oldtag2 (strcase (vla-get-tagstring att)))
       (vla-put-textstring att newstr2)
       ) ; end if
       (if (= oldtag3 (strcase (vla-get-tagstring att)))
       (vla-put-textstring att newstr3)
       ) ; end if
       (if (and (/= version nil) (= oldtag4 (strcase (vla-get-tagstring att))) )
       (vla-put-textstring att newstr4)
       ) ; end if
      ) ; end foreach
   ) ; end progn
) ; end if
(setq x (+ x 1))
) ; end repeat
(setq ss1 nil)
) ; end defun ah

(ah:sheetupdate1)
(princ)

DesignMan 发表于 2022-7-6 08:04:51

你好
 
是否有任何lisp例程可以更新图形文件中许多布局中的标题栏。
 
谢谢
 
DM公司

BIGAL 发表于 2022-7-6 08:22:41

这就是上面帖子中的代码所做的!2种方法进入每个布局并做一些事情,或者只做上述DWG中包含的所有事情。
页: [1]
查看完整版本: lisp的一些帮助