乐筑天下

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

[编程交流] 计算给定文本的数字

[复制链接]

10

主题

8258

帖子

8335

银币

初来乍到

Rank: 1

铜币
31
发表于 2022-7-6 10:56:13 | 显示全部楼层
请考虑更改您的个人资料,以反映您实际使用的软件。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:00:39 | 显示全部楼层
这可能会有更多帮助。。。
 
我不久前为另一个请求写了这篇文章,并且刚刚对其进行了更新,使其更快。
[列表]
  • 选择要报告的文本
  • 程序将搜索图纸并编译报告
  • 报告显示在表格中
    这段代码还将统计属性中找到的文本(但不确定动态块)。
     
    1. (defun c:tsel (/ *error* unique BPT CATT CNT DOC ENT I ITM J
    2.                      K LST OBJ OLST SPC SS TBLOBJ TSS UFLAG)
    3. ;; by Lee McDonnell (Lee Mac)
    4. (vl-load-com)
    5. (defun *error* (msg)
    6.    (and uFlag (vla-EndUndoMark doc))
    7.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
    8.        (princ (strcat "\n** Error: " msg " **")))
    9.    (princ))
    10. (defun unique (lst / result)
    11.    (reverse
    12.      (while (setq itm (car lst))
    13.        (setq lst (vl-remove itm lst) result (cons itm result)))))
    14.      
    15. (setq doc (vla-get-ActiveDocument (vlax-get-Acad-Object))
    16.       
    17.        spc (if (zerop (vla-get-activespace doc))
    18.              (if (= (vla-get-mspace doc) :vlax-true)
    19.                (vla-get-modelspace doc)
    20.                (vla-get-paperspace doc))
    21.              (vla-get-modelspace doc)) i 2)
    22. (cond (  (eq 4 (logand 4 (cdr (assoc 70 (tblsearch "LAYER" (getvar "CLAYER"))))))
    23.           (princ "\n<< Current Layer Locked >>"))
    24.       
    25.        (t (if (and (setq k -1 ss  (ssget '((0 . "TEXT,MTEXT"))))
    26.                    (setq bPt (getpoint "\nSelect Point for Table: ")))
    27.             (progn
    28.               (setq uFlag (not (vla-StartUndoMark doc)))
    29.               (while (setq ent (ssname ss (setq k (1+ k))))
    30.                 (setq lst (cons (cdr (assoc 1 (entget ent))) lst)))
    31.               
    32.               (foreach Str (unique lst)
    33.                 (setq cnt 0)
    34.                
    35.                 (if (setq j -1 tss (ssget "_X" (list '(-4 . "<OR")
    36.                                                        '(-4 . "<AND")
    37.                                                          '(0 . "TEXT,MTEXT")
    38.                                                           (cons 1 str)
    39.                                                        '(-4 . "AND>")
    40.                                                        '(-4 . "<AND")
    41.                                                          '(0 . "INSERT")
    42.                                                          '(66 . 1)
    43.                                                        '(-4 . "AND>")
    44.                                                      '(-4 . "OR>"))))
    45.                   
    46.                   (while (setq ent (ssname tss (setq j (1+ j))))
    47.                     (setq Obj (vlax-ename->vla-object ent))
    48.                     (cond (  (eq "AcDbBlockReference" (vla-get-ObjectName Obj))
    49.                              (foreach Att (append
    50.                                             (vlax-safearray->list
    51.                                               (vlax-variant-value
    52.                                                 (vla-getAttributes Obj)))
    53.                                             (if
    54.                                               (not
    55.                                                 (vl-catch-all-error-p
    56.                                                   (setq cAtt
    57.                                                     (vl-catch-all-apply 'vlax-safearray->list
    58.                                                       (list
    59.                                                         (vlax-variant-value
    60.                                                           (vla-getConstantAttributes Obj))))))) cAtt))
    61.                                (if (eq Str (vla-get-TextString Att)) (setq cnt (1+ cnt)))))
    62.                           (t (setq cnt (1+ cnt))))))
    63.                
    64.                (setq oLst (cons (cons str cnt) oLst)))
    65.               
    66.              (setq tblObj
    67.                (vla-addTable spc
    68.                  (vlax-3D-point bPt) (+ 2 (length olst)) 2 (* 1.5 (getvar "DIMTXT"))
    69.                    (* (apply 'max
    70.                         (mapcar 'strlen
    71.                           (append '("String")
    72.                             (apply 'append
    73.                               (mapcar (function (lambda (x) (list (car x) (itoa (cdr x))))) olst)))))
    74.                       2.0 (getvar "DIMTXT"))))
    75.               
    76.              (vla-setText tblObj 0 0 "String Counter")
    77.                (vla-setText tblObj 1 0 "String")              
    78.                  (vla-setText tblObj 1 1 "Count")
    79.               
    80.              (foreach x (vl-sort olst (function (lambda (a b) (< (car a) (car b)))))
    81.                (vla-setText tblObj i 0 (car x))
    82.                  (vla-setText tblObj i 1 (itoa (cdr x)))
    83.                    (setq i (1+ i)))
    84.               
    85.              (setq uflag (vla-EndUndoMark doc))))))
    86.               
    87. (princ))
    88.             

     
     
    编辑:对单个动态块的快速测试我有。。。表明它似乎有效。
  • 回复

    使用道具 举报

    1

    主题

    8

    帖子

    7

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 11:02:38 | 显示全部楼层
    你好
    太棒了,谢谢你。
    有没有办法使表只返回大于1的数字?
    谢谢
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:04:36 | 显示全部楼层
     
    是的,我想澄清一下,你的意思是大于1,还是大于或等于1?
     
    回复

    使用道具 举报

    1

    主题

    8

    帖子

    7

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 11:08:37 | 显示全部楼层
    大于1。
     
    由于lisp将在动态块中搜索,但不允许我从中选择要搜索的文本,因此我已经放置了一个包含我希望它搜索的每个可能数字/字母的文本实体。这样的话,模型空间中的每件事都有1个+实际数。
    所以我真的认为最好的事情是,如果例程每隔负1返回一次。这将删除等于1的内容,并给出我需要的正确值。
    我说得通吗?
    我真的很感谢你的帮助,谢谢
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:10:56 | 显示全部楼层
    如果我允许用户选择要添加到要搜索的文本字符串中的块,会更容易吗?
     
    或者,如果代码只是在图形中的每个文本字符串上生成一个报告呢?
    回复

    使用道具 举报

    1

    主题

    8

    帖子

    7

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 11:16:21 | 显示全部楼层
    嗯,是的,我想这两种方法都可以。也许选择block值得一试。这对动态块有效吗?
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:19:28 | 显示全部楼层
     
    如果上述代码适用于动态块,那么是的,希望如此
    回复

    使用道具 举报

    114

    主题

    1万

    帖子

    1万

    银币

    中流砥柱

    Rank: 25

    铜币
    543
    发表于 2022-7-6 11:22:05 | 显示全部楼层
    试试这个:
     
    1. 5
    回复

    使用道具 举报

    1

    主题

    8

    帖子

    7

    银币

    初来乍到

    Rank: 1

    铜币
    5
    发表于 2022-7-6 11:25:43 | 显示全部楼层
    非常感谢。
    这就是工作。那会帮我节省很多时间
    干杯
    快乐的克林波
    J
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-6 21:30 , Processed in 0.371743 second(s), 70 queries .

    © 2020-2025 乐筑天下

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