乐筑天下

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

[编程交流] 按顺序编号bl中的文本

[复制链接]

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:17:38 | 显示全部楼层 |阅读模式
我想修改下面的lisp例程以满足我的需要。它当前对文本进行顺序编号。但我希望能够对块属性进行编号。此外,我想指定多少位数字。我有一个属性,它由一个详图索引编号和一个我想要更新的属性组成。请帮忙。谢谢
 
(defun*错误*(MSG)
(普林斯消息)
(princ“\n函数已取消”)
(普林斯)
)
(提示“\n加载序列…”)
(定义C:SEQN(/SEQN ENT)
(if(not*SEQN)(setq*SEQN 1));设置默认值
(setvar“cmdecho”0)
(princ“\n起始编号
(原理*序号)
(setq SEQN(getint“>:”)
(如果(非序列号)
(setq序列号*序列号)
(setq*SEQN SEQN)
)
(图表)
(setq)
ENT(entget)
(汽车
(entsel)
“\n选择要按顺序编号的文本:”
)
)
)
)
(耳鼻喉科时)
(程序
(如果(=(cdr(assoc 0 ENT))“文本”)
(程序
(entmod)
(subst
(缺点1(itoa-SEQN))
(assoc 1 ENT)
耳鼻喉科
)
)
(setq-SEQN(1+SEQN));提前违约
)
(原则“\指数必须是文本”)
)
(普林斯)
(原则)
(setq)
ENT(entget(car(entsel)-选择文本:))
)
) ;结束程序
(setq*SEQN(1+SEQN));设置供下次使用
) ;如果结束(princ)
) ;结束顺序N。lsp
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 10:26:25 | 显示全部楼层
嗨,cadsultantI稍微改变了这个程序,
请试一试(仅在2005年测试)
 
  1.    
  2. (defun *error* (msg)
  3. (princ msg)
  4. (princ "\nFunction cancelled")
  5. (princ)
  6. )
  7. (prompt "\nLoading SEQN...")
  8. (defun C:SQA (/ *seqn atd atq en ent seqn sset)     
  9. (setq atd (getvar "attdia"))
  10. (setq atq (getvar "attreq"))
  11. (setvar "attdia" 0)
  12. (setvar "attreq" 0)
  13. (setvar "cmdecho" 0)
  14. (princ "\nStarting Number < ")
  15. (princ *seqn)
  16. (setq seqn (getint "> : "))
  17. (if (not seqn)
  18. (setq seqn *seqn)
  19. (setq *seqn seqn)
  20. )
  21. (while
  22. (if (setq sset (ssget "_:S" (list (cons 0 "INSERT");|(cons 2 block_name)|;(cons 66 1))))
  23.    (progn
  24.      (setq ent (ssname sset 0)
  25.        en (entnext ent)
  26.      )   
  27. (while (= "ATTRIB" (cdr (assoc 0 (entget en))))
  28.          (entmod (subst (cons 1 (itoa seqn))
  29.                 (assoc 1 (entget en)) (entget en)))
  30.          (setq en (entnext en))
  31.          )
  32.        (entupd ent)
  33.      )
  34. )
  35. (setq seqn (1+ seqn))
  36. )
  37. (command "regen")
  38. (setvar "attdia" atd)
  39. (setvar "attreq" atq)
  40. (setvar "cmdecho" 1)
  41. (princ)
  42. )

~'J'~
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 10:32:35 | 显示全部楼层
必须学会更快地键入(或调试)。。。。。
 
我刚刚完成了VBA例程。非常基本,依赖于“on Error resume next”退出,但在某种程度上可行,前提是块中只有一个属性。用“VBASTMT”“IncAtt”命名
 
  1. Public Sub IncAtt()
  2. Dim myEntity As AcadObject
  3. Dim basePnt(0 To 2) As Double
  4. Dim myAttrib As Variant
  5. Dim i As Integer
  6. Dim myString As String
  7. Dim ExitFlag As Boolean
  8. ExitFlag = False
  9. On Error Resume Next
  10. myString = ThisDrawing.Utility.GetString(0, "Start Number ")
  11. i = Val(myString)
  12. If myString = "" Then i = 1
  13. Do
  14. ThisDrawing.Utility.GetEntity myEntity, basePnt, "Select an object"
  15. If Err <> 0 Then
  16. ExitFlag = True
  17. Else
  18. If myEntity.EntityName = "AcDbBlockReference" Then
  19.    myAttrib = myEntity.GetAttributes
  20.        If UBound(myAttrib) = 0 Then
  21.        myAttrib(0).TextString = Str$(i)
  22.        i = i + 1
  23.        Else
  24.        MsgBox "Must have only 1 attribute"
  25.        End If
  26.    End If
  27. End If
  28. Loop Until ExitFlag
  29. End Sub

 
刚刚对其进行了编辑,以消除一些未记录的功能。
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 10:33:46 | 显示全部楼层
这是第二个版本:
 
  1. (defun C:sqa (/ *error* alist atd atq  att att_ent pkx seqn)
  2.    
  3. (defun *error* (msg)
  4. (if
  5.    (vl-position
  6.      msg
  7.      '("console break"
  8.    "Function cancelled"
  9.    "quit / exit abort"
  10.       )
  11.    )
  12.     (princ "Error!")
  13.     (princ msg)
  14. )
  15. (while (> (getvar "cmdactive") 0) (command))
  16. (setvar "cmdecho" 1)   
  17. (command "._undo" "_end")
  18. (setvar "attdia" atd)
  19. (setvar "attreq" atq)
  20. (setvar "pickbox" pkx)
  21. (princ)
  22. )
  23. (setvar "cmdecho" 0)
  24. (command "._undo" "_end")
  25. (command "._undo" "_mark")
  26. (setq atd (getvar "attdia"))
  27. (setq atq (getvar "attreq"))
  28. (setq pkx (getvar "pickbox"))
  29. (setvar "attdia" 0)
  30. (setvar "attreq" 0)
  31. (setvar "pickbox" 6)
  32. (setq seqn (getint "\n\tEnter start number <1> : "))
  33. (if (not seqn)
  34.    (setq seqn 1)
  35. )
  36. (while
  37.    (setq att_ent (nentsel "\nSelect an attribute, do not miss \n"))
  38.     (if (eq (cdr (assoc 0
  39.             (setq alist (entget
  40.                       (setq att (car att_ent))
  41.                     )
  42.             )
  43.          )
  44.         )
  45.         "ATTRIB"
  46.     )
  47.       (progn
  48.     (entmod (subst (cons 1 (itoa seqn)) (assoc 1 alist) alist))
  49.     (entupd att)
  50.     (setq seqn (1+ seqn))
  51.       )
  52.       (progn
  53.     (princ "\nThere is not an attribute, you missed, buddy\n")
  54.     (exit)
  55.       )
  56.     )
  57. )
  58. (command "._regen")
  59. (*error* nil)
  60. (princ)
  61. )
  62. (prompt "\n           | Programm loaded.\n")
  63. (prompt "           | Type SQA to execute.")
~(J)~
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 10:39:40 | 显示全部楼层
好的,这是我的第二个版本。
  1. Public Sub IncAtt()
  2. Dim myEntity As AcadObject
  3. Dim basePnt(0 To 2) As Double
  4. Dim myAttrib As Variant
  5. Dim i As Integer
  6. Dim myString As String
  7. Dim ExitFlag As Boolean
  8. Dim PickedPoint As Variant, TransMatrix As Variant, ContextData As Variant
  9. ExitFlag = False
  10. On Error Resume Next
  11. myString = ThisDrawing.Utility.GetString(0, "Start Number ")
  12. i = Val(myString)
  13. If myString = "" Then i = 1
  14. Do
  15. ThisDrawing.Utility.GetSubEntity myEntity, basePnt, TransMatrix, ContextData, "Select an object"
  16. If Err <> 0 Then
  17. ExitFlag = True
  18. Else
  19. If myEntity.EntityName = "AcDbAttribute" Or myEntity.EntityName = "AcDbText" Then
  20.    myEntity.TextString = Str$(i)
  21.    i = i + 1
  22.    Else
  23.    MsgBox "You must select an Attribute or Text"
  24.    End If
  25. End If
  26. Loop Until ExitFlag
  27. End Sub

 
这一次,您可以选择文本或属性。这并不完全正确,因为即使你选择了一行,数字也会不断增加,但没关系,这是一个开始。
回复

使用道具 举报

2

主题

5

帖子

3

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 10:43:53 | 显示全部楼层
Fatty&Dbroada,
 
非常感谢你们的帮助。这正是我想要的。你们太棒了!
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 10:48:50 | 显示全部楼层
大家好!
 
我的问题真的很愚蠢。很抱歉我已经安装了LISP,我应该键入哪个命令来启动它?
 
非常感谢。
克洛埃
回复

使用道具 举报

VVA

1

主题

308

帖子

308

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 10:55:57 | 显示全部楼层
如何在此存档中使用LISP例程
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 11:00:59 | 显示全部楼层
非常感谢。
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-6 11:02:55 | 显示全部楼层
这在上面的代码中是什么?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-6 21:03 , Processed in 0.558035 second(s), 72 queries .

© 2020-2025 乐筑天下

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