乐筑天下

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

[编程交流] 从一个复制块属性

[复制链接]

2

主题

10

帖子

8

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:34:09 | 显示全部楼层 |阅读模式
标题栏。图纸
 
你好我希望有人能够帮助我实现从一个标题栏到另一个标题栏的复制和粘贴属性。
 
我发现一个lisp在一定程度上可以工作,但有两个问题:
[列表=1]
  • 您无法从布局1中的块复制和粘贴到布局2。
  • 我们的块有一些重复的属性名称,例如3xTitle和2xSite
    我附上了一张包含2个边框和lisp的dwg,以帮助解释。
     
    我理解,每个边界内的重复属性可能需要克服,但我们有很多不同任务的边界,如果我们不必将属性名称更改为例如标题1、标题2、标题3等,那就太好了。。。
     
    显然,如果这无法克服,但您可以跨各种布局复制属性,这本身就非常有利。
     
    干杯
    测验lsp
  • 回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

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

    铜币
    358
    发表于 2022-7-6 07:40:13 | 显示全部楼层
    这可能会对你有所帮助,所以去看看吧,伙计。
     
    1. (defun c:Action (/ ss ssObj ss1 ssObj1 ssTag1)
    2. ;;;; Tharwat 02. 03. 2011
    3. (vl-load-com)
    4. (if (eq (progn (initget "Copy Paste")
    5.                 (setq ops (getkword "\n What to do [Copy,Paste]:"))
    6.          )
    7.          "Copy"
    8.      )
    9.    (progn
    10.      (setq ss (car (nentsel "\n Select Block with Attributes: ")))
    11.      (setq ssObj (vlax-ename->vla-object ss))
    12.      (setq ssTag (vla-get-TextString ssObj))
    13.    )
    14.    (progn
    15.      (setq ss1 (car (nentsel "\n Select Block to change: ")))
    16.      (setq ssObj1 (vlax-ename->vla-object ss1))
    17.      (setq ssTag1 (vla-put-TextString ssObj1 ssTag))
    18.    )
    19. )
    20. (vla-regen (vla-get-activedocument (vlax-get-acad-object))
    21.             acActiveViewport
    22. )
    23. (princ)
    24. )
    Tharwat
    回复

    使用道具 举报

    2

    主题

    10

    帖子

    8

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-6 07:42:32 | 显示全部楼层
    嗨Tharwat
     
    谢谢你的代码。然而,我似乎无法运行它。我已经使用APPLOAD加载了它,但是当我关闭APPLOAD窗口时,我在命令行上得到了“错误:输入列表格式错误”。
    我试过输入“Action”,但它不起作用。我错过了一些简单的事情吗?
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 07:48:22 | 显示全部楼层
    嗨,Thorny,
     
    很高兴在这里看到其他几个英国人
     
    据我所知,您不能使用LISP手动选择不同布局中的块,因为在切换布局时,LISP会被取消。
     
    然而,这提供了另一种方法,允许您选择一个块并更新具有相同名称的所有块(希望它也适用于具有相同名称的多个标记的块)。
     
    使用“test”调用:
     
    关于,
     
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 07:53:49 | 显示全部楼层
    在VBA中几乎是一样的,它背后的原始想法是一个标题栏更改,无论有多少标题栏,额外的代码允许选择一个标识块名称的块,希望所有这些都有意义。只需运行add\u project\u number,它将与您的块一起工作,将DA1DRTXT更改为您的块名。
     
    1. Public Sub add_project_number()
    2. ' This Updates the project number
    3. Dim SS As AcadSelectionSet
    4. Dim Count As Integer
    5. Dim FilterDXFCode(1) As Integer
    6. Dim FilterDXFVal(1) As Variant
    7. Dim attribs, newtext As Variant
    8. Dim BLOCK_NAME As String
    9. 'On Error Resume Next
    10. Dim startCH As Double
    11. newtext = ThisDrawing.Utility.GetString(True, "Enter new project code : ")
    12. FilterDXFCode(0) = 0
    13. FilterDXFVal(0) = "INSERT"
    14. FilterDXFCode(1) = 2
    15. FilterDXFVal(1) = "DA1DRTXT"
    16. BLOCK_NAME = "DA1DRTXT"
    17. Set SS = ThisDrawing.SelectionSets.Add("issued")
    18. SS.Select acSelectionSetAll, , , FilterDXFCode, FilterDXFVal
    19. For Cntr = 0 To SS.Count - 1
    20.   attribs = SS.Item(Cntr).GetAttributes
    21.       
    22.       
    23.        attribs(1).TextString = newtext
    24.                attribs(1).Update
    25.         
    26. Next Cntr
    27. ThisDrawing.SelectionSets.Item("issued").Delete
    28. End Sub

     

    1. Function Getpitname(Newpitname As String) As String
    2. Dim PitNameSelect As AcadObject
    3. Dim pitattribs As Variant
    4. ThisDrawing.Utility.GetEntity PitNameSelect, basepnt, "pick pit name : "
    5. If PitNameSelect.ObjectName = "AcDbText" Then
    6. Getpitname = PitNameSelect.TextString
    7. End If
    8. If PitNameSelect.ObjectName = "AcDbBlockReference" Then
    9. pitblname = PitNameSelect.Name   ' RETURNS BLOCK NAME
    10. pitattribs = PitNameSelect.GetAttributes
    11. Getpitname = pitattribs(0).TextString
    12. End If
    13. End Function

     
    您需要更改线newtext=ThisDrawing。公用事业GetString(True,“输入新项目代码:”)到
     
    1. Dim PitNameSelect As AcadObject
    2. ThisDrawing.Utility.GetEntity PitNameSelect, basepnt, "pick pit name : "
    3. Newpitname = "1"  'dummy to pass then return changed
    4. pitname = Getpitname(Newpitname)
    5. 'Call Getpitname(pitname)
    6. MsgBox "pitname selected is " & pitname
    回复

    使用道具 举报

    63

    主题

    6297

    帖子

    6283

    银币

    后起之秀

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

    铜币
    358
    发表于 2022-7-6 07:55:54 | 显示全部楼层
     
    可以肯定的是,在将代码复制到Cad时,您错过了一个括号,我想这可能是最后一个括号了。
     
    再试一次,祝你好运
     
    塔瓦特
    回复

    使用道具 举报

    54

    主题

    3755

    帖子

    3583

    银币

    后起之秀

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

    铜币
    438
    发表于 2022-7-6 08:00:24 | 显示全部楼层
    可能有兴趣。。。
     
    http://www.cadtutor.net/forum/showthread.php?48397-复制所有属性。。。
    回复

    使用道具 举报

    2

    主题

    10

    帖子

    8

    银币

    初来乍到

    Rank: 1

    铜币
    10
    发表于 2022-7-6 08:04:43 | 显示全部楼层
    谢谢你的回复。不幸的是,虽然您提供的Lisp本身就很好,但没有什么可以专门满足我们的需要。不太有效的一点是从一个块复制和粘贴属性到另一个块(使用不同的名称),同时切换布局。切换布局总是终止LISP。我发现最接近常规的是http://www.cadtutor.net/forum/showthread.php?48397-复制所有属性。谢谢alanjt。在lisp中是否有在布局之间切换的方法?或者有没有一种方法可以全局更新属性(即使块具有不同的名称),类似于ATTEDIT命令,但不必选择块?
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 08:09:20 | 显示全部楼层
    多刺的
     
    Mine当前将更新相同名称的块,但您可以将其他块名称添加到过滤器:
     
    1. 5

     
    红色显示的是选定块的名称,绿色显示的是要更新的其他块。
    回复

    使用道具 举报

    54

    主题

    3755

    帖子

    3583

    银币

    后起之秀

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

    铜币
    438
    发表于 2022-7-6 08:10:36 | 显示全部楼层
     
    在我的应用程序中,当涉及到要更新的多个选择块时,您可以只键入“ALL”。当您不基于匹配的块名进行过滤时,这有点不稳定,如果有匹配的属性标记,则会更新。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-10 05:09 , Processed in 0.451470 second(s), 72 queries .

    © 2020-2025 乐筑天下

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