乐筑天下

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

[编程交流] 块溶解对象#039;s

[复制链接]

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:04:17 | 显示全部楼层 |阅读模式
你好
我有一个lisp,可以分解一个块,然后我可以编辑它。
我会把它扔到一个街区。
通过向下滑动block lisp制动器。
  1. (defun c:eb ( / wucs)
  2.                         
  3.   (setq wucs (getvar "WORLDUCS"))                 ; if it is not at WORLD UCS
  4.   (if (= wucs 0)
  5.      (command "_UCS" "W")                          ; set it to WORLD
  6.   ); end if
  7.   (if G_blname                                    ; if this variable exists
  8.      (redefinebl)                                 ; redfine the previously edited block
  9.      (editbl)                                     ; otherwise edit a block
  10.   ); end if
  11.   (if (= wucs 0)                                  ; if it was not at WORLD UCS
  12.      (command "_UCS" "v")                          ; set it to the previous UCS
  13.   ); end if
  14.   (princ)
  15. )
  16. ; error trapping - clears toggle variable on error or cancel
  17. ; the only trouble is that the "undo" command does not clear the toggle as well!
  18. (defun traperr (s)
  19. (if (or (/= s "Function cancelled")(= s "quit / exit abort") )
  20.    (progn
  21.       (if G_blname
  22.          (progn
  23.             (setq G_blname nil)
  24.          ); end progn
  25.       ); end if
  26.       (setq G_pt nil)
  27.       (princ)
  28.    ); end progn   
  29.    (princ (strcat "\nError: " s))
  30. )
  31. ) ;end traperr
  32. (defun editbl (/ ent entl pt pt1 b)
  33. (setq temperr *error*)
  34. (setq *error* traperr)
  35. (setq ent nil)                                   ; initialise
  36. (while (= ent nil)                               ; loop till a block is chosen
  37.    (while (= ent nil)                             ; loop to stop user clicking off the target entity and causing an error
  38.      (setq ent (entsel "\nWählen Sie einen Block zum Bearbeiten")) ; Sets ent to the selected entity
  39.      (if (= ent nil) (prompt "\nKein Objekt gewählt, versuchen Sie es nochmals."))
  40.    ); end while
  41.    (setq entl (entget (car ent)))                 ; Sets entl to the selected entity's association list of the chosen
  42. entity
  43.    (setq b (cdr (assoc 0 entl)))                  ; finds the entity type
  44.    (setq pt1 (cdr (assoc 10 entl)))               ; finds the insertion point
  45.    (if (/= b "INSERT")
  46.       (progn
  47.         (setq ent nil)                            ; re-set if not a block to loop again
  48.         (prompt "\nDas ist kein Block.")
  49.       ); end progn
  50.    )            
  51. ); end while
  52. (setq G_blname (cdr (assoc 2 entl)))             ; finds the block name & puts it in a global variable
  53. (setq pt (GETPOINT pt1 "\nCopy des Blocks für Bearbeitung: "))
  54. (command "_INSERT" G_blname pt 1.0 0.0 0.0)           ; inserts the block again for redefining
  55. (setq ent (entlast))                             ; Sets en to the name of the last entity in the drawing
  56. (setq entl (entget ent))                         ; Sets ed to the entity data of entity ent
  57. (setq G_pt (cdr (assoc 10 entl)))                ; finds the insertion point & puts it in a global variable
  58. (command "_EXPLODE" "_L" "")                     ; explodes this last entity
  59. (alert (strcat"\nDiese Copy vom "" G_blname "" würde Aufgelöst.\nRe-type: <EB> eingeben um den Block neu zu definieren nach Bearbeiten"))
  60. ;;(command "_scale")
  61. (setq *error* temperr)
  62. (princ)
  63. ); program ends
  64. (defun redefinebl ()
  65. (setq temperr *error*)
  66. (setq *error* traperr)
  67. (command "_-Block" G_blname "_y" G_pt)              ; the "Y" is because the commands asks if you want to re-define the block
  68. (setq G_blname nil)                              ; set to nil as this is used as a redefine/edit toggle
  69. (setq G_pt nil)                                  ; set to nil to free up memory
  70. (setq *error* temperr)
  71. )

你能帮助我吗?
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 15:14:49 | 显示全部楼层
我不理解这里是否需要Lisp程序
您能否在autocad中仅缩放块?
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:17:49 | 显示全部楼层
 
 
我将在不改变因子1的情况下缩放块
例如,当我在autocad中缩放块时,我取10,那么系数也是10,但我想要1
(因为我必须更改400个块的大小,但系数应为1)
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 15:27:41 | 显示全部楼层
400块在同一张图中吗?
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 15:32:38 | 显示全部楼层
我不确定你到底在寻找什么,但这是朝着正确方向迈出的一步。
它尽可能简单,并且可以轻松修改。
 
  1. [font=Times New Roman][font=Times New Roman](defun c:blsc (/ ss sslnt cnt nentlst entn ent blnam inpt plst)[/font]
  2. [font=Times New Roman](setq ss (ssget "_x" '((0 . "insert")(410 . "Model") )))[/font]
  3. [font=Times New Roman](setq sslnt (sslength ss))[/font]
  4. [font=Times New Roman](setq cnt 0)[/font]
  5. [font=Times New Roman](while (< cnt sslnt)[/font]
  6. [font=Times New Roman](setq entn (ssname ss cnt));_entity name[/font]
  7. [font=Times New Roman](setq ent(entget entn));_entity list[/font]
  8. [font=Times New Roman] (setq blnam (cdr(assoc 2 ent)));_block name[/font]
  9. [font=Times New Roman](setq inpt (cdr (assoc 10 ent)));_insert pt[/font]
  10. [font=Times New Roman](command "scale" entn "" inpt 10);_scale block[/font]
  11. [font=Times New Roman](setq plst (gtbox entn));_call to get bounging bos points[/font]
  12. [font=Times New Roman](command "explode" entn);_explode block[/font]
  13. [font=Times New Roman](setq nentlst (ssget "_W" (nth 0 plst)(nth 1 plst)));_all entities in the block[/font]
  14. [font=Times New Roman](command "-block" blnam "Y" inpt nentlst "");_remake block[/font]
  15. [font=Times New Roman](command "insert" blnam inpt "" "" "")[/font]
  16. [font=Times New Roman](setq cnt (1+ cnt))[/font]
  17. [font=Times New Roman]);_while[/font]
  18. [font=Times New Roman]  );_defun[/font]
  19. [font=Times New Roman](defun gtbox (aug1 / rect llc urc ) [/font]
  20. [font=Times New Roman](vla-GetBoundingBox (vlax-ename->vla-object aug1) 'minpt 'maxpt);_check for heigth /width[/font]
  21. [font=Times New Roman](setq[/font]
  22. [font=Times New Roman]llc (vlax-safearray->list minpt)[/font]
  23. [font=Times New Roman]urc (vlax-safearray->list maxpt)[/font]
  24. [font=Times New Roman]);_setq[/font]
  25. [font=Times New Roman](setq trlst (list urc llc));_return upper right and lower left corners[/font]
  26. [font=Times New Roman]  );_defun[/font]
  27. [/font]
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:35:03 | 显示全部楼层
你好,约翰·M
比例x=1
比例y=1
1、方块分解
2、比例尺10
3、再次阻断
比例x=1
Scaley=1
 
[/code]
(定义c:blsc(/ss sslnt cnt ENTLST entn ent blnam inpt plst)
(setq ss(ssget))
(setq sslnt(sslength ss))
(setq cnt 0)
(虽然(
(setq entn(ssname ss cnt))_实体名称
(setq ent(entget entn))_实体列表
(setq blnam(cdr(assoc 2 ent))_块名称
(setq输入(cdr(assoc 10 ent))_插入pt
(命令“_explode”entn)_分解块
(setq NTELST(ssget“_W”(第n个0 plst)(第n个1 plst))_块中的所有实体
(setq plst(gtbox entn))_致电获取bounging bos积分
(命令“_scale”entn“”输入10)_刻度块
(命令“_block”blnam“Y”inpt nentlst”“)_重做区块
(命令“_insert”blnam inpt“”“”)
(setq cnt(1+cnt))
);_虽然
);_德芬
(defun gtbox(aug1/rect llc urc)
(vla GetBoundingBox(vlax ename->vla object aug1)‘minpt’maxpt)_检查高度/宽度
(setq)
llc(vlax safearray->list minpt)
urc(vlax safearray->list maxpt)
);_setq公司
(setq trlst(list urc llc))_返回右上角和左下角
);_德芬
[/code]
 
丹克
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 15:41:51 | 显示全部楼层
您对gtbox的调用应该在(setq nentlst)之上,因为它返回setq nentlst使用的点
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:48:39 | 显示全部楼层
 
哈罗·约翰姆
不会退出
以下错误消息
之前:;Fehler:FehlerAfter Argumenttyp:VLA-OBJECT nil
 
  1. [/code]
  2. (定义c:blsc(/ss sslnt cnt ENTLST entn ent blnam inpt plst)
  3. (vl load com)
  4. (setq ss(ssget))
  5. (setq sslnt(sslength ss))
  6. (setq cnt 0)
  7. (同时(<cnt sslnt)
  8. (setq entn(ssname ss cnt))_实体名称
  9. (setq ent(entget entn))_实体列表
  10. (setq blnam(cdr(assoc 2 ent))_块名称
  11. (setq输入(cdr(assoc 10 ent))_插入pt
  12. (setq plst(gtbox entn))_致电获取bounging bos积分
  13. (命令“_explode”entn)_分解块
  14. (setq NTELST(ssget“_W”(第n个0 plst)(第n个1 plst))_块中的所有实体
  15. (命令“NU scale”nentlst“”inpt 10)_刻度块
  16. (命令“_block”blnam“Y”inpt nentlst”“)_重做区块
  17. (命令“_insert”blnam inpt“”“”)
  18. (setq cnt(1+cnt))
  19. );_虽然
  20. );_德芬
  21. (defun gtbox(aug1/rect llc urc)
  22. (vla GetBoundingBox(vlax ename->vla object aug1)‘minpt’maxpt)_检查高度/宽度
  23. (setq)
  24. llc(vlax safearray->list minpt)
  25. urc(vlax safearray->list maxpt)
  26. );_setq公司
  27. (setq trlst(list urc llc))_返回右上角和左下角
  28. );_德芬
  29. [code]

 
 
谢谢谢谢
回复

使用道具 举报

1

主题

10

帖子

9

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 15:58:03 | 显示全部楼层
哈罗·约翰姆
 
是吗
 
[code][/code]
(定义c:blsc(/ss sslnt cnt ENTLST entn ent blnam inpt plst)
(vl load com)
(setq ss(ssget))
(setq sslnt(sslength ss))
(setq cnt 0)
(虽然(
(setq entn(ssname ss cnt))_实体名称
(setq ent(entget entn))_实体列表
(setq blnam(cdr(assoc 2 ent))_块名称
(setq plst(gtbox entn))_致电获取bounging bos积分
(setq输入(cdr(assoc 10 ent))_插入pt
(命令“_explode”entn)_分解块
(setq NTELST(ssget“_W”(第n个0 plst)(第n个1 plst))_块中的所有实体
(命令“NU scale”nentlst“”inpt 2)_刻度块
(命令“_block”blnam“j”inpt NTELST”“)_重做区块
(命令“_insert”blnam inpt“”“”)
(setq cnt(1+cnt))
);_虽然
);_德芬
 
 
(defun gtbox(aug1/rect llc urc)
(vla GetBoundingBox(vlax ename->vla object aug1)‘minpt’maxpt)_检查高度/宽度
(setq)
llc(vlax safearray->list minpt)
urc(vlax safearray->list maxpt)
);_setq公司
(setq trlst(list urc llc))_返回右上角和左下角
);_德芬
 
 
 
1000 x谢谢
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 16:03:51 | 显示全部楼层
这在我的机器上很好用
我忘了在GTBOX DEFUN中杀死VARAIBLE trlst
你的这个,让我知道
 
  1. (defun c:blsc (/ ss sslnt cnt nentlst entn ent blnam inpt plst)
  2. (vl-load-com)
  3. (setq ss (ssget))
  4. (setq sslnt (sslength ss))
  5. (setq cnt 0)
  6. (while (< cnt sslnt)
  7. (setq entn (ssname ss cnt));_entity name
  8. (setq ent(entget entn));_entity list
  9. (setq blnam (cdr(assoc 2 ent)));_block name
  10. (setq inpt (cdr (assoc 10 ent)));_insert pt
  11. (setq plst (gtbox entn));_call to get bounging bos points
  12. (command "_explode" entn);_explode block
  13. (setq nentlst (ssget "_W" (nth 0 plst)(nth 1 plst)));_all entities in the block
  14. (command "_scale" nentlst "" inpt 10);_scale block
  15. (command "_block" blnam "Y" inpt nentlst "");_remake block
  16. (command "_insert" blnam inpt "" "" "")
  17. (setq cnt (1+ cnt))
  18. );_while
  19. );_defun
  20. (defun gtbox (aug1 / rect llc urc trlst )
  21. (vla-GetBoundingBox (vlax-ename->vla-object aug1) 'minpt 'maxpt);_check for heigth /width
  22. (setq
  23. llc (vlax-safearray->list minpt)
  24. urc (vlax-safearray->list maxpt)
  25. );_setq
  26. (setq trlst (list urc llc));_return upper right and lower left corners
  27. );_defun
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 21:12 , Processed in 0.375438 second(s), 72 queries .

© 2020-2025 乐筑天下

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