akira2k1 发表于 2022-7-5 18:52:11

Lisp例程帮助!Can#039;t

对不起,我对扩展数据很陌生,Xrecords&dictionaries,我从AfraLisp网站上获得了一些代码,我正试图修改它以满足我的需要。我将在Xrecords中存储多个“Part”字典信息。然后我想将这些字典附加到一个实体(下面只显示一个字典,但将来我将有“PartL1,PartL2,PartL3”,它们都将应用于一个实体).然后沿着这条路走下去,我将制作一个lisp,它将更改每个的“PartNum”、“QTY”和“Spacing”的值。
 
问题是我无法将Xrecord字典附加到实体的字典中。在我找到这行代码之前,一切都很好:

(dictadd ent "PartL1" adict)

 
我不知道我的格式是正确的还是引用错误。请帮帮我,我已经做了研究,我过不了这关。
 
 

(defun c:applyassem (/ vars varlist)

;;retrieve XRecord "PartL1" from dictionary "WSI_DICT"
;;which in turn calls both functions below
(setq vars (get-or-make-Xrecord))

;;get dictionary were "PartL1" is stored
(setq adict (cdr (car (dictsearch (namedobjdict) "WSI_DICT"))))

;;get entity to app
(setq ent (car (entsel)))

(dictadd ent "PartL1" adict)

(princ)

)

(defun get-or-create-Dict (/ adict)

;;test if "WSI_DICT" is already present in the main dictionary
(if (not (setq adict (dictsearch (namedobjdict) "WSI_DICT")))

   ;;if not present then create a new one and set the main dictionary as owner
   (progn
   
   (setq adict (entmakex '((0 . "DICTIONARY")(100 . "AcDbDictionary"))))

   ;;if succesfully created, add it to the main dictionary
   (if adict (setq adict (dictadd (namedobjdict) "WSI_DICT" adict)))
   )

   ;;if present then just return its entity name
   (setq adict (cdr (assoc -1 adict)))
   )
);defun

(defun get-or-make-Xrecord(/ adict anXrec)

(cond

   ;;first get our dictionary. make here in case it doesn't exit
   ((setq adict (get-or-create-Dict))

    (cond

      ;;if "WSI_DICT" is now valid then look for "PartL1" Xrecord
      ((not (setq anXrec (dictsearch adict "PartL1")))

;;if "PartL1" was not found then create it
(setq anXrec (entmakex '((0 . "XRECORD")
                       (100 . "AcDbXrecord")
                       (7 . "PART#")                ;will be part number
                       (90 . 1)                 ;will be default qty of part
                       (91 . 16)                ;will be spacing in inches
                       )
                     );entmakex
      );setq anXrec

;;if creation succeeded then add it to our dictionary
(if anXrec (setq anXrec (dictadd adict "PartL1" anXrec)))
);not

      
      ;;if it's already present then just return its entity name
      (setq anXrec
(cdr (assoc -1(dictsearch adict "PartL1")))
);setq anxrex

      );cond

    );setq adict

   );cond

);defun

akira2k1 发表于 2022-7-5 20:45:27

或者更简单一点,我如何才能让这段代码工作:
 

(defun c:assemapply (/ ent xname datalist)

(setq ent (car (entsel)))

(setq datalist (append (list '(0 . "XRECORD")
                       '(100 . "AcDbXrecord"))
                       '((1 . "PartL1") (7 . "PART#") (90 . 1) (91 . 16))))
(setq xname (entmakex datalist))

(dictadd ent "PartL1" xname)
);defun
页: [1]
查看完整版本: Lisp例程帮助!Can#039;t