乐筑天下

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

[编程交流] 根据t填充属性

[复制链接]

18

主题

66

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:16:40 | 显示全部楼层
你好
由于一些我不知道的原因,我无法附上示例dwg,所以我制作了pdf。希望这足以让事情变得更清楚。
每个SP——它是一个名为EMBED的块(所有块都有相同的名称“EMBED”)
每个块有3个属性:
标签:板(示例:SP100)
标签:(例如:2)
标记:描述(由LISP填写)
此外,请在附件中找到带有铭牌名称和说明的txt文件。
这两个文件都将在P:/JOB123/PRODUCTION中
谢谢你的帮助
附件.pdf
收件人列表。txt文件
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:20:58 | 显示全部楼层
塔兹,
 
以下是我使用assoc列表的意思。
 
  1. ;; platelist         by ymg                                                   ;
  2. ;; Given a file location (full path)                                          ;
  3. ;; Creates an assoc list of the contents                                      ;
  4. (defun c:test (/ )
  5. (setq f (open "c:\\attlist.txt" "r"))
  6. (setq pllist nil)
  7. (while (setq line (read-line f))
  8.     (setq pllist (cons (str2lst line ",") pllist))
  9. )
  10. (close f)
  11. ;; platelist is a list of list '((PlName Dimension)....)                    ;
  12. ;; Access with (cdr (assoc plname pllist)) -> Dimension                     ;
  13. (setq bl (getblkename "PLATE")
  14.        al nil)
  15. (foreach e bl      
  16.     (setq en (entnext e)
  17.        elist (entget en)
  18.     )      
  19.     (while (= (cdr (assoc 0 elist)) "ATTRIB")
  20.        (cond
  21.            ((= (cdr (assoc 2 elist)) "A1") (setq plName (cdr (assoc 1 elist))
  22.                                                    desc (cadr (assoc plname pllist))
  23.                                                 bomlist (cons (list plname desc) bomlist)
  24.                                            )
  25.            )
  26.            ((= (cdr (assoc 2 elist)) "A3") (entmod (subst (cons  1 desc) (assoc 1 elist) elist)))
  27.        )
  28.       
  29.        (setq  en (entnext en)         
  30.            elist (entget  en)
  31.        )   
  32.     )
  33. )
  34. ;; Attributes have now been inserted in all block                           ;
  35. ;; bomlist is a list of list  '((plname description)... )                   :
  36. ;; You need to count each occurrence of a given plate name                  ;
  37. (princ)
  38. )
  39. ;; str2lst           by Gilles Chanteau                                       ;
  40. ;; Transforme un chaine avec séparateur en liste de chaines                   ;
  41. ;;                                                                            ;
  42. ;; Arguments                                                                  ;
  43. ;; str : la chaine à transformer en liste                                     ;
  44. ;; sep : le séparateur                                                        ;
  45. ;;                                                                            ;
  46. ;; Exemples                                                                   ;
  47. ;; (str2lst "a b c" " ") -> ("a" "b" "c")                                     ;
  48. ;; (str2lst "1,2,3" ",") -> ("1" "2" "3")                                     ;
  49. ;; (mapcar 'read (str2lst "1,2,3" ",")) -> (1 2 3)                            ;
  50. (defun str2lst (str sep / pos)
  51. (if (setq pos (vl-string-search sep str))
  52.    (cons (substr str 1 pos)
  53.          (str2lst (substr str (+ (strlen sep) pos 1)) sep)
  54.    )
  55.    (list str)
  56. )
  57. )
  58. ;; getblkename       by ymg                                                   ;
  59. ;;                                                                            ;
  60. ;; Original Code by Tim Wiley                                                 ;
  61. ;; Argument: Block Name                                                       ;
  62. ;;  Returns: list of enames Block in Drawing                                  ;
  63. (defun getblkename (blkname / blklst)
  64.   (vlax-for obj (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  65.       (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
  66.                (= (vla-get-EffectiveName obj) blkname)
  67.           )
  68.          (setq blkLst (cons (vlax-vla-object->ename obj) blkLst))
  69.       )
  70.   )
  71. )

004434yzsg02zo5pzrq5bo.png
004436jwin75nrwknhobzi.png
测验图纸
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 00:23:31 | 显示全部楼层
YMG可能会添加更多,从块板开始,作为1x1 sq,其中一个属性SP101填充,其他两个可以为空,运行时,从1/2x8x8大小的板中拉出细节,然后在X和Y中重新缩放块,以显示正确的8x8形状。
 
如果这样做,最好将文本更改为SP100,板3/8“x4”x6“现在是SP100,板3/8,4,6,很快添加“返回”。做一个额外的defun。变量板厚L W str2lst看起来像它将作为个人完成。只需对每个变量使用n。
 
  1. (setq platetype (nth str 0))
  2. (setq thick (nth str 1))
  3. (setq L (nth str 2))
  4. (setq W (nth str 3)
  5. )
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:28:38 | 显示全部楼层
比加尔,
 
问题是,我不得不从帽子里拿出示例dwg。
OP从未发布过。
 
现在正在发生的是:
 
1) 读取文件列表。txt并从中创建和关联列表,“PLLIST”
 
2) 调用子例程“GETBLKENAME”并获取列表“bl”,其中包含块“PLATE”每次出现的名称
 
3) 通过读取属性来处理列表“bl”。
如果我们有属性A1,我们从“plist”中获取描述,并将A1和描述保存在“bomlist”中
如果我们有属性A3,则更新该属性。
 
4) 我们完成了,剩下的就是做“波姆利斯特”的计数
 
至于尺寸和所有这些,我真的不知道OP有什么。
他需要贴一张画。
 
ymg公司
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:31:00 | 显示全部楼层
将其添加到程序末尾以获取计数
每个项目和排序的bomlist:
  1. ;; Attributes have now been inserted in all block                           ;
  2. ;; bomlist is a list of list  '((plname description)... )                   :
  3. ;; You need to count each occurrence of a given plate name                  ;
  4. (setq count (countItems bomlist))
  5. (setq bomlist nil)
  6. (foreach item count
  7.     (setq bomlist (cons (list (caar item) (cdr item) (cadar item)) bomlist))
  8. )         
  9. (setq bomlist (vl-sort bomlist (function (lambda (a b) (< (car a) (car b))))))

 
您还需要此子程序:
  1. ;; Count Items  -  Lee Mac                                                    ;
  2. ;; Returns a list of dotted pairs detailing the number of                     ;
  3. ;; occurrences of each item in a supplied list.                               ;
  4. (defun countItems ( l / c x )
  5.    (if (setq x (car l))
  6.        (progn
  7.            (setq c (length l)
  8.                  l (vl-remove x (cdr l))
  9.            )
  10.            (cons (cons x (- c (length l))) (countItems l))
  11.        )
  12.    )
  13. )

 
随附更新代码。
 
ymg公司
盘子LSP
回复

使用道具 举报

18

主题

66

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:34:23 | 显示全部楼层
你好
正如我在你的附件中看到的那样,最终的结果非常好。
你的Lisp程序超出了我的要求,我对此表示感谢。
我的方块很简单,只有3个属性,周围没有任何边界。
明天早上我会测试这个Lisp程序,让你知道它是如何工作的。
不知道我们之间的时间差所以。。。“新年快乐”
非常感谢。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:36:26 | 显示全部楼层
我添加了一个表生成例程,并将其名称更改为开始将例程设置为PLATE。
 
完成后,将在屏幕中央生成BOM表。移动命令在已选择表格的情况下激活,等待您选择目标点。
 
我没有试图调整这列的宽度。选择表格并进行调整后,只需使用夹点即可。
 
新年快乐!!
 
ymg公司
004438q9no3imcsyn3s7iy.jpg
盘子LSP
回复

使用道具 举报

18

主题

66

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:40:07 | 显示全部楼层
你好
我用这个Lisp程序有困难。由于我无法上传我的属性示例,如果您同意的话,您可以上传用于测试lisp的cad文件。我想这可能是我们用属性定义这个块的方式不同。起初,我收到一条消息,如:“错误:参数类型错误:file nil”,但现在我只能插入表的标题。
你能帮我做这件事吗?
非常感谢。
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:42:13 | 显示全部楼层
塔兹,
 
你来了!
 
顺便说一句,已经有一些帖子了。
 
块非常简单,只是一个具有属性A1、A2和A3的矩形。
 
您可能遇到问题的另一个原因是attlist。txt文件应为c:\,
否则,更新程序中文件的名称。
 
ymg公司
测验图纸
回复

使用道具 举报

18

主题

66

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
90
发表于 2022-7-6 00:46:26 | 显示全部楼层
Ymg,
谢谢,这个Lisp程序很好用。
现在,为了向您提出更多挑战,您能否改进此LIsp,使其能够:
-将A3设为多行属性(现在仅当A3为单行时有效);
-加载多个txt文件作为引用,并能够输入我需要的txt文件(因为作业123中的SP100与作业456中的SP100不同)
再次感谢你的Lisp程序和抽出时间。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 21:22 , Processed in 0.371075 second(s), 72 queries .

© 2020-2025 乐筑天下

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