乐筑天下

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

[编程交流] 将宏脚本转换为lisp fo

[复制链接]

13

主题

56

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 16:17:37 | 显示全部楼层 |阅读模式
这样做的目的是从模板中插入“块1”。将dwg转换为当前图形中的0,0,0,并将其分解。我的搜索路径中有文件夹位置。
 
请帮助将此宏脚本转换为lisp。如果可能的话,允许超过1个街区的选择。意味着按下B1插入“块1”。。。。。按B2插入“块B2”。。。。。。等等
 
提前感谢
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:33:56 | 显示全部楼层
类似于此帖子http://www.cadtutor.net/forum/showthread.php?100855-LISP IF条件复制到现有图层
 
您可以只键入B1或b22 B345等,然后插入正确的块,这是一种返工反应器的情况,在这种情况下,它会查找前缀字符B或B。
 
你可以利用李的偷盗。Lisp程序
 
  1. (load "stealV1-6.lsp")
  2. (Steal "P:\\Autodesk\\c3d Templates\\XXXXG.dwt" (list (list "Blocks" "*")))
回复

使用道具 举报

13

主题

56

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 16:43:38 | 显示全部楼层
比格尔,这看起来很先进。
如果更简单的话,我可以满足于一个简单的lisp命令,它与第一篇文章中的宏脚本完全相同。
然后,我可以为不同的块创建多个lisp。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:50:45 | 显示全部楼层
就像另一篇文章一样,它是在键盘上键入速记,然后将其与块名匹配,这样你就可以在文本文件中得到b1=块名1等等。再仔细想想,将所有块wblock到一个目录中比在指定的dwg中更容易。此代码存在。我每天使用反应器,它有5个不同的函数。方法在第一个字符中,在你的情况下,第一个字符是B或B。例如,只要在f123开始处输入一个“F”,fillet函数就可以输入您喜欢的任何半径。f123没有宏/lisp,错误会计算出来并设置圆角半径。按原样试一试注意,小数点是“-”f1-25作为“作为命令的一部分读取,而不是小数,但您已经习惯了。
 
它的工作方式是,Autocad报告一个错误,例如类型b56,这是一个“无效命令”,代码查看b并获得56,因此它知道您要插入块“56”,这是“截止阀类型56”,它将依赖于两项文件,快捷方式和全名。
 
我这个周末有一些时间,所以将重写为一个全局风格的功能,允许用户自定义,但阅读文本文件的正确答案。
 
lee macs steal中的一个优点是,你可以为块名做*并从dwg中提取所有块。全部插入并清除你不想要的内容。我用它定制了一个区块列表,节省了大量的时间。
 
最后,简单地说,我认为你可以有26x2+10个变量。Aa-Zz 0-9
 
思考B27哦,错误的块,只需键入b26,就是这个。那有多快。
 
哦,是的,它甚至可以在不同的目录区域块2*一个目录3*另一个等等,我已经做了,但没有张贴。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 16:59:00 | 显示全部楼层
这是对我的一些其他代码的修改,它现在可以作为输入块的快捷方式,例如B1会说“Block1”。唯一的规则是你必须使用B或B作为第一个字符,你可以使用数字或字母,这无关紧要,你需要更改几件事目录名并创建一个新的lst。这是版本1,因此使用当前图形中的现有块,该图形预计将成为dwg模板。正如其他人所建议的那样,我会将所有块加载到当前的dwg中,并在以后使用lee mac steal时清除它们。lsp首先从dwg加载所有块。
 
  1. ; original code and methology by Alan H
  2. ; assistance and code that worked by Lee-Mac
  3. ; Insert blocks by shortcut June 2017
  4. (vl-load-com)
  5. (   (lambda nil
  6.        (foreach obj (cdar (vlr-reactors :vlr-command-reactor))
  7.            (if (= "Blk-reactor" (vlr-data obj))
  8.                (vlr-remove obj)
  9.            )
  10.        )
  11.        (vlr-command-reactor "Blk-reactor" '((:vlr-unknowncommand . Blk-reactor-callback)))
  12.    )
  13. )
  14. (defun blkins ( / blkname ans lst len acdoc x pt ptstr fname)
  15. (setq acdoc (vla-get-activedocument (vlax-get-acad-object))) ; open database
  16. (setq lst (list "1" "001" "2" "002" "3" "003" "4" "Northn")) ; test lst of blocks
  17. (setq len (length lst)) ; how many items in lst
  18. (setq ans  (substr com 2)) ; return the characters after B or b
  19. (setq x 0)
  20. (repeat len
  21. (if (= (nth x lst) ans)
  22. (setq blkname (nth (+ x 1) lst)) ; find blockname in lst can be improved with a while
  23. ) ; if
  24. (setq x (+ x 2)) ; lst is pairs
  25. ) ; repeat
  26. (setq pt (getpoint "Select insertion point"))
  27. (setq ptstr (strcat (rtos (car pt) 2 3) "," (rtos (cadr pt) 2 3))) ; convert pt to xy
  28. (setq fname "C:\\Alan\\blkins.scr") ; script filename
  29. (setq fo (open fname "w"))
  30. (write-line (strcat "-insert " blkname " " ptstr " 1 1 0") fo)
  31. (write-line "filedia 1" fo) ; turn dialouges abck on
  32. (close fo) ; close file
  33. (vla-sendcommand acdoc "filedia 0 ") ; turn off dialouges
  34. (vla-sendcommand acdoc "_.script C:\\Alan\\blkins.scr") ; run script file as insert will read entire line
  35. (vla-sendcommand acdoc (chr 13)) ; need a Cr press Enter
  36. )
  37. (defun Blk-reactor-callback ( obj com )
  38. (setq com (vl-string-translate "-" "." (strcase (car com)))) ; strcase so B or b
  39.    (cond   
  40.         (  (and
  41.            (wcmatch com "~*[~B.0-9]*")
  42.            (wcmatch com "B*")
  43.            (wcmatch com "~B*B*")
  44.            (wcmatch com "~*.*.*")
  45.            ) ; and
  46.            (blkins)
  47.         )
  48.    ) ; master cond
  49. ) ; defun

 
  1. ; make block list to file
  2. ; by Alan H june 2017
  3. (vl-load-com)
  4. (setq fo (open "c:\\alan\\block-names.txt" "w"))
  5. (setq doc (vla-get-activedocument (vlax-get-acad-object)))
  6. (vlax-for blk (vla-get-blocks doc)
  7. (write-line (vla-get-name blk) fo)
  8. (princ (vla-get-name blk))
  9. )
  10. (close fo)

编辑文件块名称。我粘贴到excel的txt已排序并删除了一些块名。第二遍将数字添加到块名,并使LST粘贴到代码中。
 
  1. 4
回复

使用道具 举报

13

主题

56

帖子

39

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-5 17:11:12 | 显示全部楼层
谢谢比格尔。让我研究一下。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:26:17 | 显示全部楼层
如果你卡住了就发帖子。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-14 21:07 , Processed in 0.379762 second(s), 66 queries .

© 2020-2025 乐筑天下

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