乐筑天下

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

[编程交流] 在所有类型的文本中搜索f

[复制链接]

15

主题

64

帖子

49

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
75
发表于 2022-7-5 16:23:56 | 显示全部楼层 |阅读模式
大家好,
 
我需要一些帮助来修改我找到的lisp。我需要打开一个区域,让它找到所有多行文字、多重引线和维度,并查找强制文字颜色。如果它发现任何强制文本,只需将强制文本更改为另一种颜色。
 
下面的代码对于多行文字和多重引线非常有效,但我需要修改两件事:
 
[列表=1]
  • 我需要能够打开一个区域,目前我必须单独选择每个项目。我知道我需要从entsel到ssget,但无论如何设置ssget,我总是会遇到选择错误。
     
     
  • 我还需要在例程中包含维度文本。它目前不适用于维度。
    [/列表]
     
    任何帮助都将不胜感激。
     
    非常感谢。
     
    1. (defun c:test2        (/ en_ename en_obj en_txt)
    2. (vl-load-com)
    3. (if (and (setq en_ename (car (entsel "\nSelect Objects: ")))
    4. (setq en_obj (vlax-ename->vla-object en_ename))
    5. )
    6. (progn (setq en_txt (vla-get-TextString en_obj))
    7. (while (vl-string-search "\\C1;" en_txt) (setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt)))
    8. (vla-put-textstring en_obj en_txt)
    9. )
    10. )
    11. (princ)
    12. )
  • 回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-5 16:37:12 | 显示全部楼层
    一些提示,未经测试!
     
    1. (setq ss (ssget (list (cons 0 "Mtext,Leader,dimension"))))
    2. (repeat (setq x (sslength ss))
    3. (setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
    4. (setq en_txt (vla-get-TextString en_obj))
    5.    (if ( = (vl-string-search "\\C1;" en_txt) T)
    6.      (progn
    7.      (setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt))
    8.      (vla-put-textstring en_obj en_txt)
    9.      )
    10.    )
    11. ) ; end repeat
    回复

    使用道具 举报

    15

    主题

    64

    帖子

    49

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 16:42:32 | 显示全部楼层
    比加尔,
     
    非常感谢您提供的信息,有两件事。。。如果我将维度保留在:
     
    (setq ss(ssget(列表(cons 0“多行文字,引线,维度”)))
     
    我得到:选择对象:;错误:ActiveX服务器返回错误:未知名称:TextString
     
    如果我移除并离开:
     
    (setq ss(ssget(列表(cons 0“多行文字,前导”)))
     
    我没有收到错误,但它不起作用。。。。我在命令提示符下什么也没有得到。我会继续玩它,但任何帮助都将不胜感激。
     
    截至目前的代码:
    1. (defun c:test7        (/ en_ename en_obj en_txt)
    2. (vl-load-com)
    3. (setq ss (ssget (list (cons 0 "Mtext,multiLeader"))))
    4. (repeat (setq x (sslength ss))
    5.         (setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
    6.         (setq en_txt (vla-get-TextString en_obj))
    7.    
    8.                 (if ( = (vl-string-search "\\C1;" en_txt) T)
    9.                         (progn
    10.                         (setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt))
    11.                         (vla-put-textstring en_obj en_txt)
    12.                         )
    13.                 )
    14. )
    15. (princ)
    16. )
    回复

    使用道具 举报

    15

    主题

    64

    帖子

    49

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 16:47:03 | 显示全部楼层
    比加尔,
     
    好的,所以我发得有点快。很抱歉。通过将你的代码和我的代码结合起来,我解决了第二个问题。但我仍然需要一些尺寸方面的帮助。我认为这必须以不同的方式处理,因为我不确定维度中的文本是否被视为文本字符串。不过我只是在猜测。
     
    1. (defun c:test7        (/ en_ename en_obj en_txt)
    2. (vl-load-com)
    3. (setq ss (ssget (list (cons 0 "Mtext,multiLeader"))))
    4. (repeat (setq x (sslength ss))
    5.         (setq en_obj (vlax-ename->vla-object (ssname ss (setq x (- x 1)))))
    6.         (setq en_txt (vla-get-TextString en_obj))
    7.    
    8.                 (progn
    9.                        
    10.                         (setq en_txt (vla-get-TextString en_obj))
    11.                        
    12.                         (while (vl-string-search "\\C1;" en_txt)
    13.                                 (setq en_txt (vl-string-subst "\\C3;" "\\C1;" en_txt)))
    14.                         (vla-put-textstring en_obj en_txt)
    15.                 )
    16. )
    17. (princ)
    18. )
    回复

    使用道具 举报

    15

    主题

    64

    帖子

    49

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 16:54:54 | 显示全部楼层
    好吧,那么。。。这是我到目前为止所拥有的,它是有效的!!!某种程度上。
     
    我得到一个错误:;错误:错误的参数类型:VLA-OBJECT
     
    我能拼凑起来可能是因为我的选择集。我对选择集很陌生,我知道我这样做是不对的。我似乎不知道该怎么做才对。
     
    由于我需要处理不同于多行文字和多重引线的维度,如何通过窗口执行一个选择并设置两个单独的参数。
     
    现在,LiSP将要求我执行一个选择,然后执行另一个选择。
     
    1. (defun c:test11        (/ ss_mm ss_dm mm_obj mm_txt)
    2. (vl-load-com)
    3. (setq ss_mm (ssget (list (cons 0 "MTEXT,MULTILEADER"))))
    4. (setq ss_dm (ssget (list (cons 0 "DIMENSION"))))
    5. (repeat (setq x_mm (sslength ss_mm))
    6.         (setq mm_obj (vlax-ename->vla-object (ssname ss_mm (setq x_mm (- x_mm 1)))))
    7.         (setq mm_txt (vla-get-TextString mm_obj))
    8.        
    9.                 (progn
    10.                        
    11.                         (while (vl-string-search "\\C1;" mm_txt)
    12.                                 (setq mm_txt (vl-string-subst "\\C3;" "\\C1;" mm_txt)))
    13.                         (vla-put-textstring mm_obj mm_txt)
    14.                 )
    15. )
    16. (repeat (setq x_dm (sslength ss_dm))
    17.         (setq dm_obj (vlax-ename->vla-object (ssname ss_dm (setq x_dm (- x_dm 1)))))
    18.         (setq dm_txt (vla-get-textoverride dm_obj))
    19.      
    20.                 (progn
    21.                                                        
    22.                         (while (vl-string-search "\\C1;" dm_txt)
    23.                                 (setq dm_txt (vl-string-subst "\\C3;" "\\C1;" dm_txt)))
    24.                         (vla-put-textoverride dm_obj dm_txt)
    25.                 )
    26.      
    27.   )
    28. (vla-delete ss_dm)
    29. (vla-delete ss_mm)
    30. (princ)
    31. )
    回复

    使用道具 举报

    66

    主题

    1552

    帖子

    1514

    银币

    后起之秀

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

    铜币
    325
    发表于 2022-7-5 17:06:22 | 显示全部楼层
    1. (defun C:test11        ( / fBIGAL SS i o s )
    2. ; (fBIGAL s "\\C1;" "\\C3;")
    3. (defun fBIGAL ( s sr su ) (while (vl-string-search sr s) (setq s (vl-string-subst su sr s)) ) )
    4. (if (setq SS (ssget "_:L-I" (list (cons 0 "MTEXT,MULTILEADER,DIMENSION"))))
    5.    (repeat (setq i (sslength SS))
    6.      (if (setq o (vlax-ename->vla-object (ssname SS (setq i (1- i)))))
    7.        (or
    8.          (and  
    9.            (vlax-property-available-p o 'TextString)
    10.            (setq s (fBIGAL (vla-get-TextString o) "\\C1;" "\\C3;"))
    11.            (vla-put-TextString o s)
    12.          )
    13.          (and
    14.            (vlax-property-available-p o 'TextOverride)
    15.            (setq s (fBIGAL (vla-get-TextOverride o) "\\C1;" "\\C3;"))
    16.            (vla-put-TextOverride o s)
    17.          )
    18.        ); or
    19.      ); if
    20.    ); repeat
    21. ); if SS
    22. (princ)
    23. ) (vl-load-com) (princ)
    回复

    使用道具 举报

    15

    主题

    64

    帖子

    49

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 17:11:33 | 显示全部楼层
    吼叫声
     
    非常感谢!!我已经玩了好几天了。它工作得很好。这个周末我会仔细分析一下,看看你是怎么做到的。再次感谢!!
    回复

    使用道具 举报

    106

    主题

    1万

    帖子

    101

    银币

    顶梁支柱

    Rank: 50Rank: 50

    铜币
    1299
    发表于 2022-7-5 17:22:57 | 显示全部楼层
    Cylis0509当您试图找到正确的名称以及在顶层可以直接访问哪些属性时,这个lisp是您最好的朋友。在某些情况下,当您沿着对象数据树向下时,可以继续转储。还可以查看SSGET提供的一些选项,如X W F和http://www.lee-mac.com有一个关于各种其他选项的很好的教程,比如“L-I”
     
    重新剖析(ssname SS(setq i(1-i k)а)])项目编号从总数中减去1的原因是选择集从零开始,而不是从1开始。
     
    1. ;;; Dump all methods and properties for selected objects              ;
    2. ;;;===================================================================;
    3. ;;; DumpIt                                                            ;
    4. ;;;-------------------------------------------------------------------;
    5. ;;;===================================================================;
    6. (defun C:DumpIt ( / ent)
    7. (while (setq ent (entsel))
    8.    (vlax-Dump-Object
    9.      (vlax-Ename->Vla-Object (car ent)) T
    10.    )
    11. )
    12. (textpage)
    13. (princ)
    14. )
    回复

    使用道具 举报

    15

    主题

    64

    帖子

    49

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    75
    发表于 2022-7-5 17:27:31 | 显示全部楼层
    比加尔,
     
    非常感谢!这Lisp程序是无价之宝。非常感谢。
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-8-20 23:35 , Processed in 1.771368 second(s), 70 queries .

    © 2020-2025 乐筑天下

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