乐筑天下

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

[编程交流] 在中时获取属性值

[复制链接]

13

主题

50

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 14:20:38 | 显示全部楼层 |阅读模式
我开始发展Lisp程序,但我意识到这是一个有点出马联盟,所以我需要一些帮助。这是所需的工作流程。我需要插入一个名为roomtag的特定块。此块具有名为roomnumber的属性。当我插入此块时,需要提示我选择房间号。房间编号可以是文字、多行文字或其他属性。选中后,该实体的值应成为roomnumber属性值。有什么想法吗?
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
209
发表于 2022-7-6 14:33:08 | 显示全部楼层
对不起,我的无知,你不是在问什么吗?
 
或者你有很多属性,只想编辑一个?
 
  1. (defun c:pen ()
  2. (defun attget (ss1 / en edata)
  3. (if ss1
  4.   (progn
  5.    (setq en (ssname ss1 0))
  6.    (setq edata (entget en))
  7.    (setq blockdata nil)
  8.    (setq edata (entget (entnext (cdr (assoc -1 edata)))))
  9.    (while (not(= (cdr (assoc 0 edata)) "SEQEND"))
  10.     (setq blockdata (cons (cons  (cdr (assoc 2 edata)) (cdr (assoc 1 edata))) blockdata))
  11.     (setq edata (entget (entnext (cdr (assoc -1 edata)))))
  12.     )
  13.   )
  14.   (progn
  15.    (alert "Their is no block")
  16.    (exit)
  17.   )
  18. )
  19. )
  20. (defun attput (ss1 / en edata)
  21. (setq en (ssname ss1 0))
  22. (setq edata (entget en))
  23. (setq edata (entget (entnext (cdr (assoc -1 edata)))))
  24. (while (not(= (cdr (assoc 0 edata)) "SEQEND"))
  25.    (entmod (subst (cons 1 (cdr (assoc (cdr (assoc 2 edata)) blockdata)))(assoc 1 edata) edata))
  26.    (setq edata (entget (entnext (cdr (assoc -1 edata)))))
  27. )
  28. )
  29. (setq InPoint (getpoint "\nSelect insetion point :"))
  30. (Setq TheString (getstring "\nWhat is the room number :"))
  31. (setq TheScale (getint "What is the scale of insertion? :"))
  32. (setvar "attdia" 0)
  33. ;What is the one that turns it off completly?
  34. (command "_.Insert" "roomtag" InPoint TheScale TheScale 0)
  35. (setq TheEntity (ssget (entlast)))
  36. (attget TheEntity)
  37. (setq blockdata (subst (cons "roomnumber" TheString) (assoc "roomnumber" blockdata) blockdata))
  38. (attput TheEntity)
  39. (princ Block Created)
  40. (princ)
  41. )
回复

使用道具 举报

13

主题

50

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 14:34:53 | 显示全部楼层
我有两个属性,但我只想更新一个。
回复

使用道具 举报

13

主题

50

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 14:43:28 | 显示全部楼层
也许我没有解释“选择”是什么意思。当提示我输入房间号时,我想选择文字、多行文字或其他属性来获取我的房间号属性的值。
回复

使用道具 举报

41

主题

301

帖子

265

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
209
发表于 2022-7-6 14:53:06 | 显示全部楼层
啊,我现在明白了,对不起,现在公共汽车在叫我,上面的代码也没有用
这应该会帮助你(将文本输出)
Nm=实体数据
 
  1. (cdr (assoc 1 (entget NM)))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:55:43 | 显示全部楼层
试试这个伴侣:
 
  1. (defun c:RmNo (/ doc spc str pt Blk gr dat ent)
  2. (vl-load-com)
  3. (setq doc (vla-get-ActiveDocument
  4.              (vlax-get-Acad-Object))
  5.        spc (if (zerop (vla-get-activespace doc))
  6.              (if (= (vla-get-mspace doc) :vlax-true)
  7.                (vla-get-modelspace doc)
  8.                (vla-get-paperspace doc))
  9.              (vla-get-modelspace doc))   str "")
  10. (if (or (tblsearch "BLOCK" "roomtag")
  11.          (findfile "roomtag.dwg"))
  12.    (if (setq pt (getpoint "\nSpecify Point for Block: "))
  13.      (progn
  14.        (setq Blk
  15.          (vla-insertblock spc
  16.            (vlax-3D-point pt) "roomtag.dwg" 1. 1. 1. 0.))
  17.        (princ "\nSelect or Specify Room Number: ")
  18.        (vl-catch-all-apply
  19.          (function
  20.            (lambda ( )
  21.              (while
  22.                (progn
  23.                  (setq gr (grread t 15 2) dat (cadr gr))
  24.                  (cond
  25.                    ((and (= 3 (car gr)) (listp dat))
  26.                     (if (setq ent (car (nentselp dat)))
  27.                       (if (vl-position
  28.                             (cdr (assoc 0 (entget ent)))
  29.                               '("TEXT" "MTEXT" "ATTRIB"))
  30.                         (progn
  31.                           (setq str
  32.                             (vla-get-TextString
  33.                               (vlax-ename->vla-object ent))) nil)
  34.                         (princ "\n** Invalid Object Selected **"))
  35.                       (princ "\n** Nothing Selected **")))
  36.                    ((= 2 (car gr))
  37.                     (cond ((<= 32 dat 126)
  38.                            (princ (chr dat))
  39.                            (setq str (strcat str (chr dat))))
  40.                           ((= 8 dat)
  41.                            (and (< 0 (strlen str))
  42.                                 (princ (strcat (chr  (chr 32) (chr ))
  43.                                 (setq str (substr str 1 (1- (strlen str))))))
  44.                           ((= dat 13) nil)))
  45.                    ((= 25 (car gr)) nil)
  46.                    (t t)))))))
  47.        (foreach att
  48.          (append
  49.            (if
  50.              (not
  51.                (vl-catch-all-error-p
  52.                  (setq atArr
  53.                    (vl-catch-all-apply
  54.                      'vlax-safearray->list
  55.                      (list
  56.                        (vlax-variant-value
  57.                          (vla-GetAttributes Blk))))))) atArr)
  58.            (if
  59.              (not
  60.                (vl-catch-all-error-p
  61.                  (setq caArr
  62.                    (vl-catch-all-apply
  63.                      'vlax-safearray->list
  64.                      (list
  65.                        (vlax-variant-value
  66.                          (vla-GetConstantAttributes Blk))))))) caArr))
  67.          (if (eq "ROOMNUMBER"
  68.                  (strcase
  69.                    (vla-get-TagString att)))
  70.            (vla-put-TextString att str))))
  71.      (princ "\n<< No Point Specified >>"))
  72.    (princ "\n<< Block Not Found >>"))
  73. (princ))
回复

使用道具 举报

13

主题

50

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 15:07:15 | 显示全部楼层
 
我试过了,但我收到了这个消息
我放了房间标签。带有roomtag块的dwg文件位于一个文件夹中,我将其放在选项中的支持文件夹中。也许我错了。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:11:27 | 显示全部楼层
 
如果是房间标签。dwg包含roomtag块-然后将出现自参考问题。
 
你可以打开房间标签。dwg,分解其中的块,然后WBLOCK它来生成块-一种更好的方法来处理事情。
回复

使用道具 举报

13

主题

50

帖子

37

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
65
发表于 2022-7-6 15:14:45 | 显示全部楼层
谢谢你,伙计。很有魅力!
你太牛了
这是我的Lisp程序联盟的出路。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:23:22 | 显示全部楼层
 
很乐意帮助伙计-别担心,这是唯一的练习
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 03:14 , Processed in 1.163315 second(s), 72 queries .

© 2020-2025 乐筑天下

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