乐筑天下

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

[编程交流] 检索文本或随机属性

[复制链接]

41

主题

301

帖子

265

银币

后起之秀

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

铜币
209
发表于 2022-7-6 15:08:31 | 显示全部楼层 |阅读模式
你好
 
基本上,我已经厌倦了我们使用的旧Lisp程序。
我对它进行了编辑,这样它可以处理任何单个或多个文本。
但我希望能够选择块中的数字,或属性中随机出现的数字,因为我只知道如果你知道属性名称,这是可能的,而我只想选择一个。
所以你们这些聪明人的任何帮助都会很棒
 
干杯花
 
 
 
 
 
 
 
  1. ; tot allows user to select numbers on a drawing and it will add them all up and give you a total.
  2. ; The numbers must be in text format (not attributes or blocked) and can be selected with a window
  3. ; This is useful for summing up masses of components listed in a parts list.
  4. ;
  5. ; by FPr  Sept-1996
  6. ;edited by flower 15 jan
  7. ;;;*===========================================================
  8. (defun initerr ()
  9. (graphscr)
  10. (setq oldlayer (getvar "clayer"))
  11. (setq oldsnap (getvar "osmode"))
  12. (setq oldpick (getvar "pickbox"))
  13. (setq temperr *error*)
  14. (setq *error* trap)
  15. (command "dimsah" "off")
  16. (command "dimse2" "off")
  17. (command "dimblk2" "")
  18. (princ)
  19. )                    ;defun
  20. ;;;*===========================================================
  21. (defun trap (errmsg)
  22. (command nil nil nil)
  23. (if (not (member errmsg '("console break" "Function Cancelled"))
  24.      )
  25.    (princ (strcat "\nError: " errmsg))
  26. )                    ;                 
  27. (setvar "clayer" oldlayer)
  28. (setvar "blipmode" 0)
  29. (setvar "menuecho" 0)
  30. (setvar "highlight" 1)
  31. (setvar "osmode" oldsnap)
  32. (setvar "pickbox" oldpick)
  33. (command "dimsah" "off")
  34. (command "dimse2" "off")
  35. (command "dimblk2" "")
  36. (princ "\nError Resetting Enviroment ")
  37. (terpri)
  38. (setq *error* temperr)
  39. (princ)
  40. )                    ;defun
  41. ;;;*===========================================================
  42. (defun reset ()
  43. (setq *error* temperr)
  44. (setvar "clayer" oldlayer)
  45. (setvar "blipmode" 0)
  46. (setvar "menuecho" 0)
  47. (setvar "highlight" 1)
  48. (setvar "osmode" oldsnap)
  49. (setvar "pickbox" oldpick)
  50. (princ)
  51. )   
  52. (defun c:tot (/ CT IN NM ST SM)
  53. (initerr)
  54. (setq ST (ssget))
  55. (setq CT 0)
  56. (setq SM 0)
  57. (while (< CT (sslength ST))
  58.    (setq NM(ssname ST CT))
  59.    (COND (OR (= "TEXT") (=  "MTEXT")) (cdr (assoc 0(entget NM)))
  60.      (princ)
  61.      (progn
  62.        (ssdel NM ST)
  63.        (setq CT(1- CT))
  64.      )
  65.    )
  66.    (setq CT(1+ CT))
  67. )
  68. (setq CT 0)
  69. (if (= nil ST)
  70.    (princ)
  71.    (while (< CT (sslength ST))
  72.      (setq NM(ssname ST CT))
  73.      (setq IN (atoi (cdr (assoc 1 (entget NM)))))
  74.      (princ IN)
  75.      (setq SM (+ IN SM))
  76.      (princ "\n")(princ)
  77.      (setq CT(1+ CT))
  78.    )
  79. )
  80. (princ (strcat "Total = " (rtos SM)))
  81. (princ)
  82. )
  83.                ;defun
  84. ;;;*===========================================================
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 15:21:49 | 显示全部楼层
我的理解:
 
[列表]
  • 您希望能够选择一个或多个块,并检索块属性中某些数字的总和。
    [/列出]一些问题:
     
    [列表]
  • 属性是否仅为数字(或同一属性中是否有其他文本?)
  • 块是否只有一个属性?
  • 您知道所涉及属性的名称吗?它是否总是相同的?
  • 您想要什么输出(即文本插入、打印到命令行、警报框?)
    谢谢
     
  • 回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 15:31:00 | 显示全部楼层
    对不起,我睡眠不足,新生儿+嘈杂的叫声=僵尸
     
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 15:36:38 | 显示全部楼层
    不确定这是否有帮助
     
    1在块读取属性或其文本的情况下,可以选择文本或块的对象。
     
    2现在你有了答案,把它写到另一个区块。
     
    3没问题,我现在这样做。
     
    好的,我现在使用VBA进行块操作,好的是属性编号没有标签,即attrib(0)attrib(1)atrrib(2)等,块是唯一的,除非重新创建,否则属性总是相同的数字。
     
    因此,我选择文本或块并阅读答案,然后找到我想要更改的块并将答案写入其中。
     
    1. Newpitname = "1"   'dummy to pass then return changed
    2. pitname = Getpitname(Newpitname)
    3. 'Call Getpitname(pitname)
    4. MsgBox "pitname selected is " & pitname
    5. Function Getpitname(Newpitname As String) As String
    6. Dim PitNameSelect As AcadObject
    7. Dim pitattribs As Variant
    8. ThisDrawing.Utility.GetEntity PitNameSelect, basepnt, "pick pit name : "
    9. If PitNameSelect.ObjectName = "AcDbText" Then
    10. Getpitname = PitNameSelect.TextString
    11. End If
    12. If PitNameSelect.ObjectName = "AcDbBlockReference" Then
    13. pitblname = PitNameSelect.Name   ' RETURNS BLOCK NAME
    14. pitattribs = PitNameSelect.GetAttributes
    15. Getpitname = pitattribs(0).TextString
    16. End If
    17. End Function

     
    现在选择一个块获取其属性或插入一个新块并更新属性(这是在圣诞节前的论坛中)
     
    1. attribs(7).TextString = pitsurfRL
    2. attribs(.TextString = pitILin
    3. attribs(.Update
    4. attribs(7).Update

     
    我仍然对你到底想做什么感到困惑,但希望我已经指出了如何做到这一点。
    回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 15:43:14 | 显示全部楼层
    兄弟,谢谢你的帮助,但很遗憾我对vba一无所知。
    所以我甚至不能操纵它
     
    希望这会有所帮助。
     
    我希望它的答案是17,。。。。。3 + 1 + 8 + 5.
    幻影线是我的选择菜单。
    160832sk4yhllly44kk2kk.jpg
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 15:46:14 | 显示全部楼层
    所以带数字的文本(实际上是不可靠的文本…)我可以忽略它。
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-6 15:53:44 | 显示全部楼层
    是的,这不是一个问题,只要选取所有对象,检查它们是什么,然后将它们的值作为数字加在一起。小心这些积木。
     
    根据Lee Mac的观点,如果你选择一段包含数字的文本,那么找到数字将是一项更大的工作(请看我上一篇关于层代码的文章,几乎就在那里),默认情况下,如果它是任何类型的文本,因此没有使用,那么只需转换为数字,答案为false。
     
    这里有大量的lisp示例,它们要求进行选择,并将该对象拉开,找到需要的值,即块多行文字文本子例程。可能需要一点搜索尝试“选择集”,很可能有一个集可以完成这一切。
    回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 16:07:45 | 显示全部楼层
     
    你是说那个说“我能看到4”
    是的,这是可以忽略的。只留下3、1、8、5供阅读。
     
     
    Bigal,所以你说你发布的代码可以做到这一点??
    (抱歉,这是一个漫长的一周)
     
    干杯伙计们
    回复

    使用道具 举报

    41

    主题

    301

    帖子

    265

    银币

    后起之秀

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

    铜币
    209
    发表于 2022-7-6 16:14:00 | 显示全部楼层
    有点意外,我仍然没有找到解决这个问题的方法。
     
    有人看到了吗?
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-4 19:24 , Processed in 1.058500 second(s), 72 queries .

    © 2020-2025 乐筑天下

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