乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 98|回复: 1

[编程交流] Lisp例程帮助!Can#039;t

[复制链接]

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

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

 
我不知道我的格式是正确的还是引用错误。请帮帮我,我已经做了研究,我过不了这关。
 
 
  1. (defun c:applyassem (/ vars varlist)
  2. ;;retrieve XRecord "PartL1" from dictionary "WSI_DICT"
  3. ;;which in turn calls both functions below
  4. (setq vars (get-or-make-Xrecord))
  5. ;;get dictionary were "PartL1" is stored
  6. (setq adict (cdr (car (dictsearch (namedobjdict) "WSI_DICT"))))
  7. ;;get entity to app
  8. (setq ent (car (entsel)))
  9. (dictadd ent "PartL1" adict)
  10. (princ)
  11. )
  12. (defun get-or-create-Dict (/ adict)
  13. ;;test if "WSI_DICT" is already present in the main dictionary
  14. (if (not (setq adict (dictsearch (namedobjdict) "WSI_DICT")))
  15.    ;;if not present then create a new one and set the main dictionary as owner
  16.    (progn
  17.      
  18.      (setq adict (entmakex '((0 . "DICTIONARY")(100 . "AcDbDictionary"))))
  19.      ;;if succesfully created, add it to the main dictionary
  20.      (if adict (setq adict (dictadd (namedobjdict) "WSI_DICT" adict)))
  21.      )
  22.    ;;if present then just return its entity name
  23.    (setq adict (cdr (assoc -1 adict)))
  24.    )
  25. );defun
  26. (defun get-or-make-Xrecord(/ adict anXrec)
  27. (cond
  28.    ;;first get our dictionary. make here in case it doesn't exit
  29.    ((setq adict (get-or-create-Dict))
  30.     (cond
  31.       ;;if "WSI_DICT" is now valid then look for "PartL1" Xrecord
  32.       ((not (setq anXrec (dictsearch adict "PartL1")))
  33. ;;if "PartL1" was not found then create it
  34. (setq anXrec (entmakex '((0 . "XRECORD")
  35.                          (100 . "AcDbXrecord")
  36.                          (7 . "PART#")                ;will be part number
  37.                          (90 . 1)                 ;will be default qty of part
  38.                          (91 . 16)                ;will be spacing in inches
  39.                          )
  40.                        );entmakex
  41.       );setq anXrec
  42. ;;if creation succeeded then add it to our dictionary
  43. (if anXrec (setq anXrec (dictadd adict "PartL1" anXrec)))
  44. );not
  45.       
  46.       ;;if it's already present then just return its entity name
  47.       (setq anXrec
  48. (cdr (assoc -1(dictsearch adict "PartL1")))
  49. );setq anxrex
  50.       );cond
  51.     );setq adict
  52.    );cond
  53. );defun
回复

使用道具 举报

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 20:45:27 | 显示全部楼层
或者更简单一点,我如何才能让这段代码工作:
 
  1. (defun c:assemapply (/ ent xname datalist)
  2. (setq ent (car (entsel)))
  3. (setq datalist (append (list '(0 . "XRECORD")
  4.                          '(100 . "AcDbXrecord"))
  5.                          '((1 . "PartL1") (7 . "PART#") (90 . 1) (91 . 16))))
  6. (setq xname (entmakex datalist))
  7. (dictadd ent "PartL1" xname)
  8. );defun
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 13:58 , Processed in 0.681701 second(s), 56 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表