乐筑天下

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

[编程交流] 这个Lisp程序需要帮助

[复制链接]

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 23:46:16 | 显示全部楼层 |阅读模式
大家好!
我必须在现有块(RMELDER.dwg)的顶部放置一个块(BISATT.dwg)。
我在这个论坛上找到了一个lisp(FOO.lsp),它可以把一个块放在一个已有的块上。然而,它每次只能进行1次拦截。我想选择所有RMELDER块,运行lisp将BISATT块放在所有RMELDER块的顶部,接管块比例,并从激活块RMELDER复制属性(TAG1和HYPERLINK)
 
提前感谢
傅。lsp
测试。图纸
比萨特。图纸
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:51:17 | 显示全部楼层
pmxcad,
 
在这里,但要小心,因为在您的绘图中的每个块
将覆盖块BISATT。
 
ymg公司
 
  1. (defun c:test ()
  2.   ; Be careful with this routine as Every Block in your Drawing will be  ;
  3.   ; Overlayed with block BISATT                                          ;
  4.   (if (and (setq ss (ssget "_X" '((0 . "INSERT"))))
  5.            (findfile "BISATT.dwg")
  6.      )
  7.      (repeat (setq i (sslength ss))
  8.         (command "._-insert"  "BISATT" (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))) 1.0 1.0 0.0)
  9.      )  
  10.      (cond
  11.         (ss (prompt "\n** "BISATTdwg" cannot be found ** "))
  12.         (t  (prompt "\n** Nothing selected ** "))
  13.      )
  14.   )
  15. )  
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-5 23:53:23 | 显示全部楼层
好的,谢谢你的回答,但是。。。。。。。。
我只需要在所选块的顶部使用BISATT块,如果可能的话,可以将属性数据从BISATT块下的块复制到BISATT块。
 
提前感谢
 
Pmxcad
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-5 23:59:09 | 显示全部楼层
pmxcad,
 
当我在随附的图纸上运行它时,我确实在门的原点插入了bisatt块。
 
但是,图形中的任何块似乎都没有属性。
 
此外,似乎还有块的重影插入点,因为正在插入额外的bisatt。
 
所以给我们一个运行Lisp前后的图形,并给我们一些门的属性。
目前,Bissatt只有两个属性,其中一个是超链接
 
ymg公司
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-6 00:02:28 | 显示全部楼层
YMG,我画了3张图:
-之前=开始绘图
-之后=使用插入的BISATT块绘制。
-最终=关闭某个图层后的最终结果绘图。
 
最终的图纸是我喜欢的。
 
黄色/红色块是火灾探测器,在最终图纸中,该层已关闭。这些BIS-ATT块获得一个超链接,并链接到带有火灾报警系统的系统。我将图形打印为DWF。DWF显示在建筑系统中,在BIS-ATT广场上的监视器屏幕上显示闪烁的火灾图标。万一发生火灾。
 
 
谢谢
PmxCAD
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-6 00:05:17 | 显示全部楼层
当然还有图纸。。。。。。。。。。
之前图纸
之后图纸
最终的图纸
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:07:06 | 显示全部楼层
试试这个,
 
  1. ;; getblkename       by ymg                                                   ;
  2. ;;                                                                            ;
  3. ;; Original Code by Tim Wiley                                                 ;
  4. ;; Argument: Block Name                                                       ;
  5. ;;  Returns: list of enames Block in Drawing                                  ;
  6. (defun getblkename (blkname / blklst)
  7.   (vlax-for obj (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
  8.       (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
  9.                (= (vla-get-EffectiveName obj) blkname)
  10.           )
  11.          (setq blkLst (cons (vlax-vla-object->ename obj) blkLst))
  12.       )
  13.   )
  14. )
  15. (defun c:test (/ al bl el en pos stl svl)
  16. (setq bl (getblkename "RMELDER")
  17.        al nil
  18. )
  19. (foreach ent bl
  20.      (vl-cmdf "._-insert"  "BISATT" (cdr (assoc 10 (entget ent))) 100.0 100.0 0.0)
  21.      (setq al (cons (entlast) al))
  22. )
  23. (setq al (reverse al))
  24. (foreach e bl   
  25.     (setq en (entnext e)
  26.          svl nil
  27.          stl nil   
  28.     )   
  29.     (while (= (cdr (assoc 0 (setq el (entget en)))) "ATTRIB")      
  30.        (setq stl (cons (cdr (assoc 2 el)) stl)
  31.              svl (cons (cdr (assoc 1 el)) svl)
  32.               en (entnext en)            
  33.        )   
  34.     )
  35.     (setq en (entnext (car al))
  36.           al (cdr al)      
  37.     )   
  38.     (while (= (cdr (assoc 0 (setq el (entget en)))) "ATTRIB")
  39.        (if (setq pos (vl-position (cdr (assoc 2 el)) stl))
  40.           (entmod (subst (cons  1 (nth pos svl)) (assoc 1 el) el))           
  41.        )
  42.        (setq en (entnext en))   
  43.     )
  44. )
  45. )
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-6 00:10:42 | 显示全部楼层
是的。。。YMG。。。。。。。。几乎
 
这些是动态块,有自己的匿名名称。Lisp程序不需要所有的块,只有2个。这些是副本。
是否有方法更改lisp以使其与动态块配合良好,或者是否有可能更改lisp以影响选定的块?
如按图层或块名快速选择,在选择后运行lisp。
 
谢谢
 
PmxCAD
回复

使用道具 举报

0

主题

301

帖子

301

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 00:15:26 | 显示全部楼层
pmxcad,
 
函数GetBlkEname()通常返回给定动态块名的所有名称的列表。
 
当我运行它与您之前的绘图4“RMELDER”块被发现并替换。
 
所以,我不太明白你在说什么。
现在,如果您有不同于“RMELDER”的块,则需要指定它们。
 
ymg公司
回复

使用道具 举报

73

主题

261

帖子

195

银币

后起之秀

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

铜币
375
发表于 2022-7-6 00:18:44 | 显示全部楼层
嗨,YMG
 
这是之前lisp的结果。图纸。两个街区的顶部是比萨特。这些属性不会从bmelder块中获取/复制正确的数据。看起来很重要。
 
PmxCAD
Acad 2014
在_2之前。图纸
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

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

© 2020-2025 乐筑天下

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