明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 半听可乐

谁有交换单行文字内容的程序?

  [复制链接]
发表于 2012-7-15 00:04:58 | 显示全部楼层
啥时把院长的通用函数给搞出来,那样伪的也成真的了。
回复

使用道具 举报

发表于 2012-12-20 14:24:57 | 显示全部楼层
  1. ;**************文本内容刷/对换
  2. (defun c:2 nil (CopyorSwapText nil))
  3. (defun c:22 nil (CopyorSwapText t))
  4. (defun CopyorSwapText
  5.               (swap     /       *error*   _StartUndo
  6.                _EndUndo     _UnFormat _AllowsFormatting
  7.                doc     entity       ms1         ms2
  8.                mstr     o1       o2         ostr
  9.                regexp     ss       string    ts1
  10.                ts2     tstr
  11.               )
  12.   (vl-load-com)
  13.   (setq    *retain* (cond (*retain*)
  14.                ("Yes")
  15.          )
  16.   )
  17.   ;;------------------------------------------------------------;;
  18.   ;;                     Local Functions                        ;;
  19.   ;;------------------------------------------------------------;;
  20.   (defun *error* (msg)
  21.     (LM:ReleaseObject RegExp)
  22.     (if    doc
  23.       (_EndUndo doc)
  24.     )
  25.     (or    (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
  26.     (princ (strcat "\n** Error: " msg " **"))
  27.     )
  28.     (princ)
  29.   )
  30.   ;;------------------------------------------------------------;;
  31.   (defun _StartUndo (doc)
  32.     (_EndUndo doc)
  33.     (vla-StartUndoMark doc)
  34.   )
  35.   ;;------------------------------------------------------------;;
  36.   (defun _EndUndo (doc)
  37.     (if    (= 8 (logand 8 (getvar 'UNDOCTL)))
  38.       (vla-EndUndoMark doc)
  39.     )
  40.   )
  41.   ;;------------------------------------------------------------;;
  42.   (defun _UnFormat
  43.      (regex entity textstring mtextstring / *error* _Replace)
  44.     (defun _Replace (new old string)
  45.       (vlax-put-property regex 'pattern old)
  46.       (vlax-invoke regex 'replace string new)
  47.     )
  48.     (
  49.      (lambda (string)
  50.        (if (_AllowsFormatting entity)
  51.      (mapcar
  52.        (function
  53.          (lambda (x)
  54.            (setq string (_Replace (car x) (cdr x) string))
  55.          )
  56.        )
  57.        '(
  58.          ("" . "\\\\\\\")
  59.          (" " . "\\\\P|\\n|\\t")
  60.          ("$1"
  61.           .
  62.           "\\\\(\\\\[ACcFfHLlOopQTW])|\\\\[ACcFfHLlOopQTW][^\\\\;]*;|\\\\[ACcFfHLlOopQTW]"
  63.          )
  64.          ("$1$2/$3" . "([^\\\\])\\\\S([^;]*)[/#\\^]([^;]*);")
  65.          ("$1$2" . "\\\\(\\\\S)|[\\\\](})|}")
  66.          ("$1" . "[\\\\]({)|{")
  67.         )
  68.      )
  69.      (setq string
  70.         (_Replace "" "%%[OoUu]" (_Replace "" "\\\" string))
  71.      )
  72.        )
  73.        (set mtextstring
  74.         (_Replace "\\\"
  75.               ""
  76.               (_Replace    "\\$1$2$3"
  77.                 "(\\\\[ACcFfHLlOoPpQSTW])|({)|(})"
  78.                 string
  79.               )
  80.         )
  81.        )
  82.        (set textstring (_Replace "\" "" string))
  83.      )
  84.       (LM:GetTextString entity)
  85.     )
  86.     nil
  87.   )
  88.   ;;------------------------------------------------------------;;
  89.   (defun _Selectif (pred func str keyW / e result)
  90.     (while
  91.       (progn (setvar 'ERRNO 0)
  92.          (if keyW
  93.            (initget keyW)
  94.          )
  95.          (setq e (func str))
  96.          (cond
  97.            ((= 7 (getvar 'ERRNO))
  98.         (princ "\n** 未选择, 请重新选择对象 **")
  99.            )
  100.            ((and keyW (eq 'STR (type e)))
  101.         (not (setq result e))
  102.            )
  103.            ((vl-consp e)
  104.         (if (and pred (not (pred (car e))))
  105.           (princ "\n** 无效的物体被选择 **")
  106.           (not (setq result (car e)))
  107.         )
  108.            )
  109.          )
  110.       )
  111.     )
  112.     result
  113.   )
  114.   ;;------------------------------------------------------------;;
  115.   (defun _AllowsFormatting (entity / object)
  116.     (or    (wcmatch (cdr (assoc 0 (entget entity)))
  117.          "MTEXT,MULTILEADER"
  118.     )
  119.     (and
  120.       (eq "ATTRIB" (cdr (assoc 0 (entget entity))))
  121.       (vlax-property-available-p
  122.         (setq object (vlax-ename->vla-object entity))
  123.         'MTextAttribute
  124.       )
  125.       (eq :vlax-true (vla-get-MTextAttribute object))
  126.     )
  127.     )
  128.   )
  129.   ;;------------------------------------------------------------;;
  130.   ;;                      Main Function                         ;;
  131.   ;;------------------------------------------------------------;;
  132.   (setq RegExp (vlax-get-or-create-object "VBScript.RegExp"))
  133.   (mapcar
  134.     (function
  135.       (lambda (x) (vlax-put-property RegExp (car x) (cdr x)))
  136.     )
  137.     (list (cons 'global actrue)
  138.       (cons 'ignorecase acfalse)
  139.       (cons 'multiline actrue)
  140.     )
  141.   )
  142.   (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
  143.   (cond
  144.     (
  145.      swap
  146.      (while
  147.        (and
  148.      (progn
  149.        (while
  150.          (and (princ (strcat "\n--> Formatting Retained: " *retain*))
  151.           (setq    o1
  152.              (_Selectif
  153.                (lambda (entity)
  154.                  (wcmatch (cdr (assoc 0 (entget entity)))
  155.                       "*TEXT,ATTRIB,MULTILEADER"
  156.                  )
  157.                )
  158.                nentsel
  159.                "\nSelect Text to Swap [Settings/Exit] <Exit>: "
  160.                "Settings Exit"
  161.              )
  162.           )
  163.           (eq 'STR (type o1))
  164.           (not (eq "Exit" o1))
  165.          )
  166.           (initget "Yes No")
  167.           (setq *retain*
  168.              (cond
  169.                (
  170.             (getkword
  171.               (strcat "\nRetain MText Formatting [Yes/No] <"
  172.                   *retain*
  173.                   "> : "
  174.               )
  175.             )
  176.                )
  177.                (*retain*)
  178.              )
  179.           )
  180.        )
  181.        o1
  182.      )
  183.      (setq o2
  184.         (_Selectif
  185.           (lambda (entity)
  186.             (wcmatch (cdr (assoc 0 (entget entity)))
  187.                  "*TEXT,ATTRIB,MULTILEADER"
  188.             )
  189.           )
  190.           nentsel
  191.           "\nAnd Text to Swap it With [Exit] <Exit>: "
  192.           "Exit"
  193.         )
  194.      )
  195.      (not (eq "Exit" o2))
  196.        )
  197.     (_StartUndo doc)
  198.     (setq s1 (LM:GetTextString o1)
  199.           s2 (LM:GetTextString o2)
  200.     )
  201.     (_Unformat RegExp o1 'ts1 'ms1)
  202.     (_Unformat RegExp o2 'ts2 'ms2)
  203.     (apply
  204.       (function
  205.         (lambda (retain MText1 MText2)
  206.           (setq o1 (vlax-ename->vla-object o1)
  207.             o2 (vlax-ename->vla-object o2)
  208.           )
  209.           (cond
  210.         (
  211.          (and MText1 MText2)
  212.          (vla-Put-TextString
  213.            o1
  214.            (if retain
  215.              s2
  216.              ms2
  217.            )
  218.          )
  219.          (vla-Put-TextString
  220.            o2
  221.            (if retain
  222.              s1
  223.              ms1
  224.            )
  225.          )
  226.         )
  227.         (
  228.          MText1
  229.          (vla-Put-TextString o1 ms2)
  230.          (vla-Put-TextString o2 ts1)
  231.         )
  232.         (
  233.          MText2
  234.          (vla-Put-TextString o1 ts2)
  235.          (vla-Put-TextString o2 ms1)
  236.         )
  237.         (
  238.          t
  239.          (vla-Put-TextString
  240.            o1
  241.            (if retain
  242.              s2
  243.              ts2
  244.            )
  245.          )
  246.          (vla-Put-TextString
  247.            o2
  248.            (if retain
  249.              s1
  250.              ts1
  251.            )
  252.          )
  253.         )
  254.           )
  255.         )
  256.       )
  257.       (cons    (eq "Yes" *retain*)
  258.         (mapcar '_AllowsFormatting (list o1 o2))
  259.       )
  260.     )
  261.     (_EndUndo doc)
  262.      )
  263.     )
  264.     (t
  265.      (if
  266.        (progn
  267.      (while
  268.        (and    (princ (strcat "\n--> Formatting Retained: " *retain*))
  269.         (setq o1
  270.                (_Selectif
  271.              (lambda (entity)
  272.                (wcmatch (cdr (assoc 0 (entget entity)))
  273.                     "*TEXT,ATTRIB,MULTILEADER"
  274.                )
  275.              )
  276.              nentsel
  277.              "\nSelect Source Object [Settings/Exit] <Exit>: "
  278.              "Settings Exit"
  279.                )
  280.         )
  281.         (eq 'STR (type o1))
  282.         (not (eq "Exit" o1))
  283.        )
  284.         (initget "Yes No")
  285.         (setq *retain*
  286.            (cond
  287.              (
  288.               (getkword
  289.             (strcat    "\nRetain MText Formatting [Yes/No] <"
  290.                 *retain*
  291.                 "> : "
  292.             )
  293.               )
  294.              )
  295.              (*retain*)
  296.            )
  297.         )
  298.      )
  299.      o1
  300.        )
  301.     (progn
  302.       (setq ostr (LM:GetTextString o1))
  303.       (_Unformat RegExp o1 'tstr 'mstr)
  304.       (if (eq "Yes" *retain*)
  305.         (set (if (_AllowsFormatting o1)
  306.            'mstr
  307.            'tstr
  308.          )
  309.          ostr
  310.         )
  311.       )
  312.       (_StartUndo doc)
  313.       (terpri)
  314.       (while
  315.         (and
  316.           (setq o2
  317.              (_Selectif
  318.                (lambda (entity)
  319.              (wcmatch (cdr (assoc 0 (entget entity)))
  320.                   "*TEXT,ATTRIB,MULTILEADER"
  321.              )
  322.                )
  323.                nentsel
  324.                "\rSelect Destination Object [多个<M>/Exit] <Exit>: "
  325.                "Multiple Exit"
  326.              )
  327.           )
  328.           (not (eq "Exit" o2))
  329.         )
  330.          (cond
  331.            (
  332.         (eq "Multiple" o2)
  333.         (if
  334.           (setq    ss
  335.              (ssget    "_:L"
  336.                 '(
  337.                   (-4 . "<OR")
  338.                   (0 . "TEXT,MTEXT,MULTILEADER")
  339.                   (-4 . "<AND")
  340.                   (0 . "INSERT")
  341.                   (66 . 1)
  342.                   (-4 . "AND>")
  343.                   (-4 . "OR>")
  344.                  )
  345.              )
  346.           )
  347.            (
  348.             (lambda (i / _type e)
  349.               (while (setq e (ssname ss (setq i (1+ i))))
  350.             (cond
  351.               (
  352.                (eq "INSERT"
  353.                    (setq _type (cdr (assoc 0 (entget e))))
  354.                )
  355.                (mapcar
  356.                  (function
  357.                    (lambda (attrib)
  358.                  (vla-put-TextString
  359.                    attrib
  360.                    (if
  361.                      (and
  362.                        (vlax-property-available-p
  363.                      attrib
  364.                      'MTextAttribute
  365.                        )
  366.                        (eq :vlax-true
  367.                        (vla-get-MTextAttribute attrib)
  368.                        )
  369.                      )
  370.                       mstr
  371.                       tstr
  372.                    )
  373.                  )
  374.                    )
  375.                  )
  376.                  (vlax-invoke
  377.                    (vlax-ename->vla-object e)
  378.                    'GetAttributes
  379.                  )
  380.                )
  381.               )
  382.               (t
  383.                (vla-put-TextString
  384.                  (vlax-ename->vla-object e)
  385.                  (if (_AllowsFormatting e)
  386.                    mstr
  387.                    tstr
  388.                  )
  389.                )
  390.               )
  391.             )
  392.               )
  393.             )
  394.              -1
  395.            )
  396.         )
  397.         t
  398.            )
  399.            ((vla-put-TextString
  400.           (vlax-ename->vla-object o2)
  401.           (if (_AllowsFormatting o2)
  402.             mstr
  403.             tstr
  404.           )
  405.         )
  406.            )
  407.          )
  408.       )
  409.       (_EndUndo doc)
  410.     )
  411.      )
  412.     )
  413.   )
  414.   (LM:ReleaseObject RegExp)
  415.   (princ)
  416. )
  417. ;;--------------------=={ Get TextString }==------------------;;

  418. (defun LM:GetTextString    (object)
  419.   ;;  Lee Mac 2010
  420.   (
  421.    (lambda (entity / _type elist)
  422.      (cond
  423.        (
  424.     (wcmatch
  425.       (setq    _type
  426.          (cdr
  427.            (assoc 0
  428.               (setq    elist
  429.                  (entget entity)
  430.               )
  431.            )
  432.          )
  433.       )
  434.       "TEXT,*DIMENSION"
  435.     )
  436.     (cdr (assoc 1 elist))
  437.        )
  438.        (
  439.     (eq "MULTILEADER" _type)
  440.     (cdr (assoc 304 elist))
  441.        )
  442.        (
  443.     (wcmatch _type "ATTRIB,MTEXT")
  444.     (
  445.      (lambda (string)
  446.        (mapcar
  447.          (function
  448.            (lambda (pair)
  449.          (if (member (car pair) '(1 3))
  450.            (setq string (strcat string (cdr pair)))
  451.          )
  452.            )
  453.          )
  454.          elist
  455.        )
  456.        string
  457.      )
  458.       ""
  459.     )
  460.        )
  461.      )
  462.    )
  463.     (if    (eq 'VLA-OBJECT (type object))
  464.       (vlax-vla-object->ename object)
  465.       object
  466.     )
  467.   )
  468. )
  469. ;;------------------=={ Release Object }==--------------------;;
  470. (defun LM:ReleaseObject    (obj)
  471.   (vl-load-com)
  472.   ;;  Lee Mac 2010
  473.   (and obj
  474.        (eq 'VLA-OBJECT (type obj))
  475.        (not (vlax-object-released-p obj))
  476.        (not
  477.      (vl-catch-all-error-p
  478.        (vl-catch-all-apply
  479.          (function vlax-release-object)
  480.          (list obj)
  481.        )
  482.      )
  483.        )
  484.   )
  485. )
  486. (princ)
回复

使用道具 举报

发表于 2015-12-8 10:08:05 | 显示全部楼层
hao3ren 发表于 2012-7-13 12:36
(defun C:hh (/ a b a1 b1)
  (setq a (entget (car (entsel "\n选择第一个文本"))))
  (setq b (entget  ...

高人
回复

使用道具 举报

发表于 2015-12-8 13:05:03 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-12-24 09:57 , Processed in 0.170274 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表