乐筑天下

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

[编程交流] 拆分TTC lisp的帮助

[复制链接]

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 13:30:15 | 显示全部楼层 |阅读模式
您好,有时以前我正在寻找一个特定的lisp复制文本。。。最后,我在这里找到了非常有用的TTC lisp
https://www.cadtutor.net/forum/showthread.php?18016-Lisp-for-Coping-a-text-to-another-like-match-properties(奇怪的是,该链接不再有效)
lisp允许以多模式或成对模式选择文本的副本,但我想将其分为两个lisp,一个用于多模式,一个用于成对模式。
你能帮帮我吗?
提前谢谢你
 
回复

使用道具 举报

15

主题

315

帖子

361

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 13:58:24 | 显示全部楼层
很酷的脚本。我发出了两个命令
单粘贴命令TTCP
用于多次粘贴的命令TTCM
 
  1.         ;;;;Realization {Smirnoff}
  2. ;;; TTC - Text to Text copy. Copy text from DIMENSION, TEXT,
  3. ;;;MTEXT, ATTRIB, ATTDEF, ACAD_TABLE to one
  4.         ;; PAIR WISE
  5. (defun c:ttcp ( / )
  6.   (ttc "Pair-wise")
  7. )
  8.         ;; MULTIPLE
  9. (defun c:ttcm ( / )
  10.   (ttc "Multiple")
  11. )
  12.         (defun ttc (mymode / actDoc vlaObj sObj sText curObj oldForm
  13.         oType oldMode conFlag errFlag *error*)
  14.   (vl-load-com)
  15.       (setq actDoc(vla-get-ActiveDocument
  16.         (vlax-get-acad-object)))
  17.       (vla-StartUndoMark actDoc)
  18.   (defun TTC_Paste(pasteStr / nslLst vlaObj hitPt
  19.                    hitRes Row Column)
  20.     (setq errFlag nil)
  21.     (if
  22.      (setq nslLst(nentsel "\nPaste text >"))
  23.       (progn
  24.   (cond
  25.     (
  26.      (and
  27.        (= 4(length nslLst))
  28.        (= "DIMENSION"(cdr(assoc 0(entget(car(last nslLst))))))
  29.        ); end and
  30.      (setq vlaObj
  31.       (vlax-ename->vla-object
  32.         (cdr(assoc -1(entget(car(last nslLst)))))))
  33.      (if
  34.        (vl-catch-all-error-p
  35.          (vl-catch-all-apply
  36.      'vla-put-TextOverride(list vlaObj pasteStr)))
  37.          (progn
  38.          (princ "\n Can't paste. Object may be on locked layer. ")
  39.          (setq errFlag T)
  40.          ); end progn
  41.        ); end if
  42.      ); end condition #1
  43.     (
  44.      (and
  45.        (= 4(length nslLst))
  46.        (= "ACAD_TABLE"(cdr(assoc 0(entget(car(last nslLst))))))
  47.        ); end and
  48.      (setq vlaObj
  49.       (vlax-ename->vla-object
  50.         (cdr(assoc -1(entget(car(last nslLst))))))
  51.      hitPt(vlax-3D-Point(trans(cadr nslLst)1 0))
  52.      hitRes(vla-HitTest vlaObj hitPt
  53.         (vlax-3D-Point '(0.0 0.0 1.0)) 'Row 'Column)
  54.            ); end setq
  55.      (if(= :vlax-true hitRes)
  56.      (progn
  57.          (if
  58.      (vl-catch-all-error-p
  59.        (vl-catch-all-apply
  60.          'vla-SetText(list vlaObj Row Column pasteStr)))
  61.      (progn
  62.        (princ "\n Can't paste. Object may be on locked layer. ")
  63.        (setq errFlag T)
  64.        ); end progn
  65.      ); end if
  66.          ); end progn
  67.        ); end if
  68.      ); end condition # 2
  69.     (
  70.      (and
  71.        (= 4(length nslLst))
  72.        (= "INSERT"(cdr(assoc 0(entget(car(last nslLst))))))
  73.        ); end and
  74.      (princ "\nCan't paste to block's DText or MText. Select Attribute ")
  75.      (setq errFlag T)
  76.      ); end condition #3
  77.     (
  78.      (and
  79.        (= 2(length nslLst))
  80.          (member(cdr(assoc 0(entget(car nslLst))))
  81.            '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))
  82.        ); end and
  83.      (setq vlaObj
  84.       (vlax-ename->vla-object(car nslLst)))
  85.         (if
  86.      (vl-catch-all-error-p
  87.        (vl-catch-all-apply
  88.          'vla-put-TextString(list vlaObj pasteStr)))
  89.     (progn
  90.        (princ "\nError. Can't pase text. ")
  91.       (setq errFlag T)
  92.       ); end progn
  93.      ); end if
  94.      ); end condition #4
  95.     (T
  96.      (princ "\nCan't paste. Invalid object. ")
  97.      (setq errFlag T)
  98.      ); end condition #5
  99.     ); end cond
  100.              T
  101.       ); end progn
  102.             nil
  103.            ); end if
  104.     ); end of TTC_Paste
  105.             (defun TTC_MText_Clear(Mtext / Text Str)
  106.     (setq Text "")
  107.     (while(/= Mtext "")
  108.       (cond
  109.   ((wcmatch
  110.      (strcase
  111.        (setq Str
  112.         (substr Mtext 1 2)))
  113.                      "\\[\\{}`~]")
  114.    (setq Mtext(substr Mtext 3)
  115.          Text(strcat Text Str)
  116.    ); end setq
  117.   ); end condition #1
  118.   ((wcmatch(substr Mtext 1 1) "[{}]")
  119.     (setq Mtext
  120.      (substr Mtext 2))
  121.   ); end condition #2
  122.   (
  123.    (and
  124.    (wcmatch
  125.      (strcase
  126.        (substr Mtext 1 2)) "\\P")
  127.    (/=(substr Mtext 3 1) " ")
  128.     ); end and
  129.          (setq Mtext (substr Mtext 3)
  130.                Text (strcat Text " ")
  131.          ); end setq
  132.    ); end condition #3
  133.   ((wcmatch
  134.      (strcase
  135.        (substr Mtext 1 2)) "\\[LOP]")
  136.     (setq Mtext(substr Mtext 3))
  137.   ); end condition #4
  138.   ((wcmatch
  139.      (strcase
  140.        (substr Mtext 1 2)) "\\[ACFHQTW]")
  141.     (setq Mtext
  142.      (substr Mtext
  143.        (+ 2
  144.           (vl-string-search ";" Mtext))))
  145.   ); end condition #5
  146.   ((wcmatch
  147.      (strcase (substr Mtext 1 2)) "\\S")
  148.     (setq Str(substr Mtext 3 (- (vl-string-search ";" Mtext) 2))
  149.           Text(strcat Text (vl-string-translate "#^\" " " Str))
  150.           Mtext(substr Mtext (+ 4 (strlen Str)))
  151.    ); end setq
  152.    (print Str)
  153.   ); end condition #6
  154.   (T
  155.    (setq Text(strcat Text(substr Mtext 1 1))
  156.          Mtext (substr Mtext 2)
  157.    )
  158.   ); end condition #7
  159.       ); end cond
  160.     ); end while
  161.   Text
  162. ); end of TTC_MText_Clear
  163.           (defun TTC_Copy (/ sObj sText tType actDoc)
  164.    (if
  165.     (and
  166.      (setq sObj(car(nentsel "\nCopy text... ")))
  167.      (member(setq tType(cdr(assoc 0(entget sObj))))
  168.       '("TEXT" "MTEXT" "ATTRIB" "ATTDEF"))
  169.      ); end and
  170.     (progn
  171.       (setq actDoc(vla-get-ActiveDocument
  172.         (vlax-get-Acad-object))
  173.       sText(vla-get-TextString
  174.        (vlax-ename->vla-object sObj))
  175.       ); end setq
  176.       (if(= tType "MTEXT")
  177.   (setq sText(TTC_MText_Clear sText))
  178.   ); end if
  179.       ); end progn
  180.     ); end if
  181.     sText
  182.     ); end of TTC_Copy
  183.   (defun CCT_Str_Echo(paseStr / comStr)
  184.     (if(< 20(strlen paseStr))
  185.       (setq comStr
  186.        (strcat
  187.          (substr paseStr 1 17)"..."))
  188.       (setq comStr paseStr)
  189.       ); end if
  190.     (princ
  191.       (strcat "\nText = "" comStr """))
  192.     (princ)
  193.     ); end of CCT_Str_Echo
  194.     (defun *error*(msg)
  195.     (vla-EndUndoMark
  196.       (vla-get-ActiveDocument
  197.         (vlax-get-acad-object)))
  198.     (princ "\nQuit TTC")
  199.     (princ)
  200.     ); end of *error*
  201.     
  202.     (if(not ttc:Mode)(setq ttc:Mode "Multiple"))
  203.    
  204.     (initget "Multiple Pair-wise")
  205.     (setq
  206.       oldMode ttc:Mode
  207.       ;; ttc:Mode (getkword (strcat "\nSpecify mode [Multiple/Pair-wise] <" ttc:Mode ">: "))
  208.       ttc:Mode mymode
  209.       conFlag T
  210.       paseStr ""
  211.     ); end setq
  212.     (if(null ttc:Mode)(setq ttc:Mode oldMode))
  213.     (if(= ttc:Mode "Multiple")
  214.       (progn
  215.   (if(and(setq paseStr(TTC_Copy))conFlag)
  216.     (progn
  217.     (CCT_Str_Echo paseStr)
  218.     (while(setq conFlag(TTC_Paste paseStr))T
  219.       ); end while
  220.     ); end progn
  221.     ); end if
  222.   ); end progn
  223.       (progn
  224.   (while
  225.     (and conFlag paseStr)
  226.     (setq paseStr(TTC_Copy))
  227.     (if(and paseStr conFlag)
  228.       (progn
  229.     (CCT_Str_Echo paseStr)
  230.     (setq errFlag T)
  231.     (while errFlag
  232.     (setq conFlag(TTC_Paste paseStr))
  233.          );end while
  234.        ); end progn
  235.       ); end if
  236.     ); end while
  237.   ); end progn
  238.       ); end if
  239.    (vla-EndUndoMark actDoc)
  240.    (princ "\nQuit TTC")
  241.   (princ)
  242.   ); end c:ttc
  243. (princ "\n\t TTC - Text to Text copy. Copy text from DIMENSION, TEXT, MTEXT, ATTRIB, ATTDEF, ACAD_TABLE to one")
  244.          
  245.        

不是这一行要求用户输入:
  1.      ttc:Mode (getkword (strcat "\nSpecify mode [Multiple/Pair-wise] <" ttc:Mode ">: "))

我给函数ttc提供了一个参数mymode。我还没有仔细看过剧本的其余部分
 
 
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 14:23:07 | 显示全部楼层
我一周后试试!我回答你谢谢你!
回复

使用道具 举报

34

主题

110

帖子

86

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
160
发表于 2022-7-5 14:43:32 | 显示全部楼层
我什么都试过了,非常感谢!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-15 00:44 , Processed in 2.543181 second(s), 60 queries .

© 2020-2025 乐筑天下

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