塔兹,
以下是我使用assoc列表的意思。
- ;; platelist by ymg ;
- ;; Given a file location (full path) ;
- ;; Creates an assoc list of the contents ;
- (defun c:test (/ )
- (setq f (open "c:\\attlist.txt" "r"))
- (setq pllist nil)
- (while (setq line (read-line f))
- (setq pllist (cons (str2lst line ",") pllist))
- )
- (close f)
- ;; platelist is a list of list '((PlName Dimension)....) ;
- ;; Access with (cdr (assoc plname pllist)) -> Dimension ;
-
- (setq bl (getblkename "PLATE")
- al nil)
- (foreach e bl
- (setq en (entnext e)
- elist (entget en)
- )
- (while (= (cdr (assoc 0 elist)) "ATTRIB")
- (cond
- ((= (cdr (assoc 2 elist)) "A1") (setq plName (cdr (assoc 1 elist))
- desc (cadr (assoc plname pllist))
- bomlist (cons (list plname desc) bomlist)
- )
- )
- ((= (cdr (assoc 2 elist)) "A3") (entmod (subst (cons 1 desc) (assoc 1 elist) elist)))
- )
-
- (setq en (entnext en)
- elist (entget en)
- )
- )
- )
- ;; Attributes have now been inserted in all block ;
- ;; bomlist is a list of list '((plname description)... ) :
- ;; You need to count each occurrence of a given plate name ;
- (princ)
- )
- ;; str2lst by Gilles Chanteau ;
- ;; Transforme un chaine avec séparateur en liste de chaines ;
- ;; ;
- ;; Arguments ;
- ;; str : la chaine à transformer en liste ;
- ;; sep : le séparateur ;
- ;; ;
- ;; Exemples ;
- ;; (str2lst "a b c" " ") -> ("a" "b" "c") ;
- ;; (str2lst "1,2,3" ",") -> ("1" "2" "3") ;
- ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3) ;
- (defun str2lst (str sep / pos)
- (if (setq pos (vl-string-search sep str))
- (cons (substr str 1 pos)
- (str2lst (substr str (+ (strlen sep) pos 1)) sep)
- )
- (list str)
- )
- )
- ;; getblkename by ymg ;
- ;; ;
- ;; Original Code by Tim Wiley ;
- ;; Argument: Block Name ;
- ;; Returns: list of enames Block in Drawing ;
- (defun getblkename (blkname / blklst)
- (vlax-for obj (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
- (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
- (= (vla-get-EffectiveName obj) blkname)
- )
- (setq blkLst (cons (vlax-vla-object->ename obj) blkLst))
- )
- )
- )
测验图纸 |