乐筑天下

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

[编程交流] 从更新块属性

[复制链接]

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:07:59 | 显示全部楼层 |阅读模式
你好社区
 
在为我的“问题”寻找了许多小时的解决方案后,我不得不注册一个网站,在那里,编程技能远远超过我。我的问题并不新鲜,但我无法找到一个简单的解决方案。就是这个。。。我希望在加载任何适用的图形时,使用excel电子表格中的句柄更新具有不同属性的各个块。
 
我有,我有
 
句柄|块名|属性1 |属性2 |属性3 |等。
 
我发现李Mac的更新标题栏属性和(我认为)这是类似的,我在一个不同的形式后,然而,我可能是错的。。。!
 
有人能给我建议吗?
 
非常感谢。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:12:41 | 显示全部楼层
欢迎来到CADTutor。
 
我已经编写了这个例程,希望它能够满足您的需要,并被告知Excel文件必须具有扩展名。csv以允许代码选择它。
 
试试看,让我知道。
 
  1. (defun c:Test (/ Deconstruct_Strings f o st bks ss l)
  2. ;;    Author : Tharwat Al Shoufi        ;;
  3. ;;    Date   : 15. April. 2014        ;;
  4. (defun Deconstruct_Strings (string delimiter / pos lst)
  5.    (while (setq pos (vl-string-search delimiter string 0))
  6.      (progn (setq lst (cons (substr string 1 pos) lst))
  7.             (setq string (substr string (+ pos 2) (strlen string)))
  8.      )
  9.    )
  10.    (if string
  11.      (setq lst (cons string lst))
  12.    )
  13.    (setq lst (reverse lst))
  14. )
  15. (if (and (setq f (getfiled "Select Excel file to Update Attributes ..."
  16.                             (getvar 'DWGPREFIX)
  17.                             "csv"
  18.                             16
  19.                   )
  20.           )
  21.           (setq o (open f "r"))
  22.      )
  23.    (progn (while (setq st (read-line o))
  24.             (setq l (cons (Deconstruct_Strings st ";") l))
  25.           )
  26.           (setq bks
  27.                  (apply 'strcat
  28.                         (mapcar '(lambda (u) (strcat u ",")) (mapcar 'cadr l))
  29.                  )
  30.           )
  31.           (close o)
  32.    )
  33. )
  34. (if (and bks
  35.           (setq
  36.             ss (ssget "_X" (list '(0 . "INSERT") '(66 . 1) (cons 2 bks)))
  37.           )
  38.      )
  39.    ((lambda (i / sn h get e n)
  40.       (while (setq sn (ssname ss (setq i (1+ i))))
  41.         (setq h (cdr (assoc 5 (entget sn))))
  42.         (if (and l
  43.                  (vl-some '(lambda (x)
  44.                              (if (vl-some '(lambda (u) (eq u h)) x)
  45.                                (setq get x)
  46.                              )
  47.                            )
  48.                           l
  49.                  )
  50.             )
  51.           (progn
  52.             (setq n 1
  53.                   l (vl-remove get l)
  54.             )
  55.             (while
  56.               (/=
  57.                 (cdr (assoc 0 (setq e (entget (setq sn (entnext sn)))))
  58.                 )
  59.                 "SEQEND"
  60.               )
  61.                (if (eq (cdr (assoc 0 e)) "ATTRIB")
  62.                  (entmod (subst (cons 1 (nth (setq n (1+ n)) get))
  63.                                 (assoc 1 e)
  64.                                 e
  65.                          )
  66.                  )
  67.                )
  68.             )
  69.           )
  70.         )
  71.       )
  72.     )
  73.      -1
  74.    )
  75. )
  76. (princ)
  77. )(vl-load-com)
回复

使用道具 举报

6

主题

249

帖子

247

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-5 23:14:27 | 显示全部楼层
塔瓦,我可能做错了什么。我的区块是具有两个属性的关键项目。
我的csv文件如下:句柄,关键项,4-DI,100
现有块属性为6-PVC和400
执行lisp时,图形中没有任何更改。
当然,“句柄”是通过在完成csv文件之前“列出”块来获得的,以获得句柄名称。
提前感谢您的帮助。
史蒂夫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 23:19:34 | 显示全部楼层
Tharwat,请注意,CSV文件最常用逗号作为单元格分隔符(因此名为“逗号分隔值”);为了完全兼容,您需要考虑逗号和分号CSV分隔符(还要考虑这些分隔符或双引号字符是否在CSV单元格中显示为文字)。
 
另一方面,与其迭代图形数据库中给定名称的所有属性块,不如使用handent函数将句柄直接转换为块参照图元,从而处理所需的最小块数。
 
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:22:58 | 显示全部楼层
嗨,史蒂夫。
 
除了块属性的句柄和块名称之外,我不知道你的Excel文件的内容是什么,所以试着根据OP在Excel文件中的属性顺序来遵循帖子中的请求。
否则,您可能需要上载一个样例图形和一个样例Excel文件,用于为您检出它们。
 
猜测:尝试将例程中的分号替换为逗号,然后重试。
 
谢谢
 
 
 
我注意到分隔符会随着用户的变化而变化,但我仍然不知道何时需要考虑该分隔符,如果它是逗号或分号,尽管我在两个操作系统32和64上尝试了该代码,并且在两个系统中的结果是相同的,成功地完成了。
 
 
是的,这是个好主意
 
非常感谢。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:25:52 | 显示全部楼层
请注意,尽管名称不同,CSV格式将使用Windows区域设置中设置的列表分隔符作为分隔符。
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:30:04 | 显示全部楼层
这是正确的Mircea。
 
这是李在他的一个套路中写的。
 
  1. (vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")

 
既然我们已经讨论了注册表,那么在AutoLISP中我们可能需要哪些其他信息,以及如何获取这些信息?
 
谢谢
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-5 23:32:41 | 显示全部楼层
但不要忘记,您将从注册表中检索到的是当前工作站的环境,不一定与创建CSV文件时使用的环境相似。
回复

使用道具 举报

1

主题

7

帖子

6

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 23:34:20 | 显示全部楼层
先生们
 
感谢您的关注(李的案例“荣幸”!)特别感谢你的努力。不幸的是,正如Stevesfr所说,在加载lisp例程时,这一行显示“选择Excel文件以更新属性…”不会出现在命令行上以允许其操作。至于“为什么”和“为什么”的错综复杂之处,我只能把我的帽子扔回拳击场,向你们致敬。我没想到这会引起这么有趣的对话!
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 23:37:27 | 显示全部楼层
上载带有excel文件的样例图形。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-11 03:16 , Processed in 1.279529 second(s), 72 queries .

© 2020-2025 乐筑天下

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