乐筑天下

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

[编程交流] 插入选定的块';n

[复制链接]

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 12:26:50 | 显示全部楼层 |阅读模式
我觉得我有点懒。。。
 
现在我觉得我也许可以做这个常规。。。但如果有人解决它会更好。。。
 
正在选择一组选定的块。。。我想在他们自己的插入点插入他们的名字(使用当前的样式和高度)。
 
我有两个密码,一个是Alan J。。。另一个来自我。。。但如果我们摆脱了拾取插入点,我们可以自动完成这一切,我认为。。。
 
有人能帮忙吗?
 
 
  1. (defun c:BlockName (/ #Ent #Point)
  2. (and
  3.    (setq #Ent (car (entsel "\nSpecify block: ")))
  4.    (eq "INSERT" (cdr (assoc 0 (entget #Ent))))
  5.    (setq #Point (getpoint "\nSpecify placement point for MText: "))
  6.    (entmake (list
  7.               '(0 . "MTEXT")
  8.               '(100 . "AcDbEntity")
  9.               '(100 . "AcDbMText")
  10.               (cons 7 (getvar "textstyle"))
  11.               (cons 10 (trans #Point 1 0))
  12.               (cons 1 (cdr (assoc 2 (entget #Ent))))
  13.             ) ;_ list
  14.    ) ;_ entmake
  15. ) ;_ and
  16. (princ)
  17. ) ;_ defun

 
  1. (defun c:bn ()
  2. (setq obj (car (entsel "\nPick Block...")))
  3. (setq bname (cdr (assoc 2 (entget obj))))
  4. (setq txt (strcat "" bname ""))
  5. (setq p1 (getpoint "\nPick text location: "))
  6. (command "text" p1 "" "" (strcat "" bname "") )
  7. (command "change" "l" "" "" "" "" "" "" txt)
  8. )

 
此外,我还有一个例程的这一部分,用于从选择中过滤块。。
  1.    (progn
  2.      (prompt "\nSelect all the Blocks to be exported: ")
  3.      (setq #SSET (ssget (list (cons 0 "INSERT")))))))

 
 
并抓住它们的插入点
  1.      (setq #CNT (sslength #SSET)
  2.            #IDX 0)
  3.      (while (/= #IDX #CNT)
  4.        (setq #ENT (entget (ssname #SSET #IDX))
  5.              #PT  (cdr (assoc 10 #ENT))

 
但是,如何将这一切混合在一起呢?
回复

使用道具 举报

20

主题

344

帖子

325

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
100
发表于 2022-7-6 12:42:09 | 显示全部楼层
看起来你需要的东西都有了。我建议写一个函数来完成一次,然后写一个函数来创建一个选择集,对于选择集中的每个项目,调用第一个函数。
 
请记住,可以通过将变量放在函数定义的正斜杠之前,将变量传递给函数,如下所示:
 
  1. (defun function(passedVar / )
  2. (princ passedVar)
  3. )

 
然后查看ssnamex函数(可以在LISP帮助菜单中找到),以获取选择集并将其转换为实体名称列表。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 12:53:49 | 显示全部楼层
这应该给你一些思考的东西。。。
 
  1. (defun c:BlockNames (/ #SS)
  2. (cond
  3.    ((setq #SS (ssget '((0 . "INSERT"))))
  4.     (or *AcadDoc*
  5.         (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object)))
  6.     ) ;_ or
  7.     (vlax-for x (setq #SS (vla-get-activeselectionset *AcadDoc*))
  8.       (AT:Mtext (vla-get-insertionpoint x)
  9.                 (if (vlax-property-available-p x 'EffectiveName)
  10.                   (vla-get-effectivename x)
  11.                   (vla-get-name x)
  12.                 ) ;_ if
  13.                 0
  14.                 (vla-get-layer x)
  15.                 5
  16.       ) ;_ AT:Mtext
  17.     ) ;_ vlax-for
  18.     (vla-delete #SS)
  19.    )
  20. ) ;_ cond
  21. (princ)
  22. ) ;_ defun

您将需要此接头:
  1. ;;; Add MText to drawing
  2. ;;; #InsertionPoint - MText insertion point
  3. ;;; #String - String to place in created MText object
  4. ;;; #Width - Width of MText object (if nil, will be 0 width)
  5. ;;; #Layer - Layer to place Mtext object on (nil for current)
  6. ;;; #Justification - Justification # for Mtext object
  7. ;;;             1 or nil= TopLeft
  8. ;;;             2= TopCenter
  9. ;;;             3= TopRight
  10. ;;;             4= MiddleLeft
  11. ;;;             5= MiddleCenter
  12. ;;;             6= MiddleRight
  13. ;;;             7= BottomLeft
  14. ;;;             8= BottomCenter
  15. ;;;             9= BottomRight
  16. ;;; Alan J. Thompson, 05.23.09
  17. (defun AT:MText (#InsertionPoint #String #Width #Layer #Justification / #Width
  18.                 #Space #Insertion #Object
  19.                )
  20. (or #Width (setq #Width 0))
  21. (or *AcadDoc*
  22.      (setq *AcadDoc* (vla-get-activedocument (vlax-get-acad-object)))
  23. ) ;_ or
  24. (setq #Space     (if (or (eq acmodelspace
  25.                               (vla-get-activespace *AcadDoc*)
  26.                           ) ;_ eq
  27.                           (eq :vlax-true (vla-get-mspace *AcadDoc*))
  28.                       ) ;_ or
  29.                     (vla-get-modelspace *AcadDoc*)
  30.                     (vla-get-paperspace *AcadDoc*)
  31.                   ) ;_ if
  32.        #Insertion (cond
  33.                     ((vl-consp #InsertionPoint) (vlax-3d-point #InsertionPoint))
  34.                     ((eq (type #InsertionPoint) 'variant) #InsertionPoint)
  35.                     (T nil)
  36.                   ) ;_ cond
  37. ) ;_ setq
  38. ;; create MText object
  39. (setq #Object (vla-addmtext #Space #Insertion #Width #String))
  40. ;; change layer, if applicable
  41. (and #Layer
  42.       (tblsearch "layer" #Layer)
  43.       (vla-put-layer #Object #Layer)
  44. ) ;_ and
  45. ;; change justification & match insertion point with new justification
  46. (cond ((member #Justification (list 1 2 3 4 5 6 7 8 9))
  47.         (vla-put-attachmentpoint #Object #Justification)
  48.         (vla-move #Object
  49.                   (vla-get-InsertionPoint #Object)
  50.                   #Insertion
  51.         ) ;_ vla-move
  52.        )
  53. ) ;_ cond
  54. #Object
  55. ) ;_ defun
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 13:09:21 | 显示全部楼层
 
 
你是根纽斯。。。
 
该职位无需进一步协助。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:20:16 | 显示全部楼层
 
很乐意帮忙。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 13:32:31 | 显示全部楼层
哎呀,忘了考虑动态块。以上更新。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:10 , Processed in 0.441620 second(s), 75 queries .

© 2020-2025 乐筑天下

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