明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 品茗新秀

求文字格式刷lsp程序

  [复制链接]
发表于 2012-9-24 18:31:27 | 显示全部楼层
楼主,不知道有vba您同意吗?我自己对lisp几乎一窍不通,就会些基础很常用,像vl函数都不会.............
vba还可以,应该用lisp能做的,vba应该也都能做吧
回复

使用道具 举报

 楼主| 发表于 2012-9-24 18:36:37 | 显示全部楼层
sscylh 发表于 2012-9-24 18:31
楼主,不知道有vba您同意吗?我自己对lisp几乎一窍不通,就会些基础很常用,像vl函数都不会.............
vba还 ...

    谢谢你,发过来看看,我是lsp初学者,如果能学习这方面的东东才更好                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
回复

使用道具 举报

发表于 2012-9-25 14:57:07 | 显示全部楼层
哈哈,来晚了,已经解决了

点评

不晚,还有一个留给你了  发表于 2012-9-25 16:42
回复

使用道具 举报

发表于 2012-10-27 17:50:21 | 显示全部楼层
楼主是不是想得太多了。做成块或参照改一个对应图层其他的块不就都改了。
回复

使用道具 举报

发表于 2012-10-27 17:52:31 | 显示全部楼层
文本就设成属性,属性值可以不同。

点评

属性值同预设格式,详见楼1中的网址,  发表于 2012-10-27 20:44
回复

使用道具 举报

发表于 2013-5-25 23:21:59 | 显示全部楼层
附上源码:
  1. (defun c:chta(/ e la ss bllst lst spwx spyx czwx czyx tp10 ssline
  2.                 dist sstext mycad doc fuzz ssline dist)
  3.   (vl-load-com)  
  4.   (vla-startUndoMark (setq doc(vla-get-ActiveDocument (setq mycad(vlax-get-acad-object)))))
  5.   (setq e(car(clh-entsel  "\n选择单行文字:"  ""   '((0 . "TEXT"))  "\n所选对像不是单行文本,请重新选择!"))
  6.         s(entget e)
  7.         ang(cdr(assoc 50 s))
  8.         )
  9.   (setq lst(gettextatt e))
  10.   (setq fuzz 5)
  11.   (if(not(assoc 62 lst))
  12.     (setq lst (cons '(62 . 256)lst))
  13.     )
  14.   (setq lst(vl-sort lst '(lambda(x y)(<(car x)(car y)))))
  15.   (setq tp10(cdr(assoc 10 s)))
  16.   (setq ssline(ssget "x" (list '(0 . "line")(assoc 8 s))))
  17.   (if ssline(setq dist(minpath_p2line tp10 ssline)))
  18.   (cond((and(or (not dist)(> dist 100)) (or (equal ang 0.0 0.1)(equal(rem ang 3.1415)0.0 0.1))) (setq dist 0)(setq spwx "1"))
  19.        ((and(or (not dist)(> dist 100)) (or (equal ang 1.5708 0.1)(equal(rem ang 1.5708)0.0 0.1))) (setq dist 0)(setq czwx "1"))
  20.        ((and(< dist 100) (or (equal ang 0.0 0.1)(equal(rem ang 3.1415)0.0 0.1))) (setq spyx "1"))
  21.        ((and(< dist 100) (or (equal ang 1.5708 0.1)(equal(rem ang 1.5708)0.0 0.1))) (setq czyx "1"))
  22.        )
  23.   (setq sstext(ssget "X" (list '(0 . "TEXT")(assoc 8 s))))
  24.   (setq ss(ssadd))
  25.   (dlg)
  26.   (vla-zoomall mycad)
  27.   (cond
  28.     ((= spwx "1")     
  29.      (repeat (setq n(sslength sstext))
  30.        (setq tp10(cdr(assoc 10 (entget(setq e(ssname sstext (setq n(1- n))))))))
  31.        (if (and(not(ssget "c" tp10 (list (- (car tp10)dist fuzz)(cadr tp10) 0.0)
  32.                   (list '(0 . "line")(assoc 8 s))
  33.                   )
  34.                )
  35.               (not(ssget "c" tp10 (list (+ (car tp10)dist fuzz)(cadr tp10) 0.0)
  36.                   (list '(0 . "line")(assoc 8 s))
  37.                   )
  38.                )
  39.               )
  40.          (ssadd e ss)
  41.          )
  42.        )
  43.      )
  44.     ((= czwx "1")
  45.      (repeat (setq n(sslength sstext))
  46.        (setq tp10(cdr(assoc 10 (entget(setq e(ssname sstext (setq n(1- n))))))))
  47.        (if (and(not(ssget "c" tp10  (list (car tp10)(- (cadr tp10)dist fuzz) 0.0)
  48.                   (list '(0 . "line")(assoc 8 s))
  49.                   )
  50.                )
  51.               (not(ssget "c" tp10  (list (car tp10)(+ (cadr tp10)dist fuzz) 0.0)
  52.                   (list '(0 . "line")(assoc 8 s))
  53.                   )
  54.                )
  55.               )
  56.          (ssadd e ss)
  57.          )
  58.        )
  59.      )
  60.     ((= spyx "1")
  61.      (repeat (setq n(sslength sstext))
  62.        (setq tp10(cdr(assoc 10 (entget(setq e(ssname sstext (setq n(1- n))))))))
  63.        (if (or(ssget "c" tp10 (list (- (car tp10)dist fuzz)(cadr tp10) 0.0)
  64.                   (list '(0 . "line")(assoc 8 s))
  65.                   )
  66.               (ssget "c" tp10 (list (+ (car tp10)dist fuzz)(cadr tp10) 0.0)
  67.                   (list '(0 . "line")(assoc 8 s))
  68.                   )
  69.               )
  70.          (ssadd e ss)
  71.          )
  72.        )
  73.     )
  74.    ((= czyx "1")
  75.      (repeat (setq n(sslength sstext))
  76.        (setq tp10(cdr(assoc 10 (entget(setq e(ssname sstext (setq n(1- n))))))))
  77.        (if (or(ssget "c" tp10  (list (car tp10)(- (cadr tp10)dist fuzz) 0.0)
  78.                   (list '(0 . "line")(assoc 8 s))
  79.                   )
  80.               (ssget "c" tp10 (list (car tp10)(+(cadr tp10)dist fuzz) 0.0)
  81.                   (list '(0 . "line")(assoc 8 s))
  82.                   )
  83.               )
  84.          (ssadd e ss)
  85.          )
  86.        )
  87.     )
  88.    )
  89.   (sssetfirst nil ss)  
  90.   (cond((= std -1)(sssetfirst ss ss))
  91.        ((= std 0)(changetextatt ss)(sssetfirst nil nil))      
  92.   )
  93.   (vla-ZoomPrevious mycad)
  94.   (vla-endUndoMark doc)
  95.   (princ)
  96.   )
  97. (defun gettextatt(e / s  attlst lst)
  98.   (if e
  99.     (progn
  100.       (setq s(entget e)
  101.             attlst  '(1   7   40  41  50   51  62    71)
  102.             )
  103.       (foreach x s (if (member (car x)attlst)(setq lst(cons x lst))))
  104.       )
  105.     )
  106.   lst
  107.   )
  108. (defun changetextatt(ss / n m e s)
  109.   (if ss
  110.     (progn
  111.       (repeat (setq n(sslength ss))
  112.         (setq e (ssname ss (setq n(1- n)))
  113.               s (entget e)
  114.               )
  115.         (if(not(assoc 62 s))
  116.            (setq s (cons '(62 . 256)s))
  117.         )
  118.         (setq m 0)
  119.         (repeat (length bllst)
  120.           (if (= (eval (nth m bllst))"1")
  121.             (progn
  122.             (setq s(subst(nth m lst)(assoc (car (nth m lst))s)s))
  123.             (entmod s)
  124.             (entupd e)
  125.             )
  126.             )
  127.           (setq m(1+ m))
  128.           )
  129.         )
  130.       )
  131.     )
  132.   )
  133. (defun setla()
  134.           (new_dialog "wzxx" id "" screenpt)
  135.           (SET_TILE "zfc" zfc)
  136.           (SET_TILE "yangsi" yangsi)
  137.           (SET_TILE "zg" zg)
  138.           (SET_TILE "zk" zk)
  139.           (SET_TILE "xzj" xzj)
  140.           (SET_TILE "qxj" qxj)
  141.           (SET_TILE "yanse" yanse)
  142.           (SET_TILE "scbz" scbz)
  143.           (SET_TILE "spwx" spwx)
  144.           (SET_TILE "spyx" spyx)
  145.           (SET_TILE "czwx" czwx)
  146.           (SET_TILE "czyx" czyx)
  147.           (action_tile "zfc" "(setq zfc $value)")
  148.           (action_tile "yangsi" "(setq yangsi $value)")
  149.           (action_tile "tc" "(setq tc $value)")
  150.           (action_tile "zk" "(setq zk $value)")
  151.           (action_tile "zg" "(setq zg $value)")
  152.           (action_tile "xzj" "(setq xzj $value)")
  153.           (action_tile "qxj" "(setq qxj $value)")
  154.           (action_tile "yanse" "(setq yanse $value)")
  155.           (action_tile "scbz" "(setq scbz $value)")
  156.           (action_tile "spwx" "(setq spwx $value)")
  157.           (action_tile "spyx" "(setq spyx $value)")
  158.           (action_tile "czwx" "(setq czwx $value)")
  159.           (action_tile "czyx" "(setq czyx $value)")
  160.           (action_tile "accept" "(setq screenpt(done_dialog))")
  161.           (action_tile "cancel" "(setq screenpt(done_dialog -1))")
  162.           (setq std(START_DIALOG))
  163.         )
  164. (DEFUN DLG(/ n fn lsdcl id )   
  165.     (setq bllst'(zfc yangsi zg zk xzj qxj yanse scbz))
  166.     (foreach x bllst(if (not (eval x))(set x "0")))
  167.     (if (not spwx)(setq spwx "0"))
  168.     (if (not spyx)(setq spyx "0"))
  169.     (if (not czwx)(setq czwx "0"))
  170.     (if (not czyx)(setq czyx "0"))
  171.     (setq fn (open (setq lsdcl (VL-FILENAME-MKTEMP "tmp" "" ".dcl")) "w"))
  172.         (write-line "wzxx:dialog{" fn)
  173.         (write-line "   label="文字选项";" fn)
  174.         (write-line "   :column{" fn)
  175.         (write-line "   :boxed_row{" fn)
  176.         (write-line "   label="匹配选项";" fn)
  177.         (write-line "   :column{" fn)
  178.         (write-line "        :toggle{label="匹配字内容";key="zfc";}" fn)
  179.         (write-line "        :toggle{label="匹配字样式";key="yangsi";}" fn)
  180.         (write-line "        :toggle{label="匹配字高度";key="zg";}" fn)
  181.         (write-line "        :toggle{label="匹配字宽度";key="zk";}" fn)
  182.         (write-line "        }" fn)
  183.         (write-line "   :column{" fn)
  184.         (write-line "        :toggle{label="匹配旋转角";key="xzj";}" fn)
  185.         (write-line "        :toggle{label="匹配倾斜角";key="qxj";}" fn)
  186.         (write-line "        :toggle{label="匹配字颜色";key="yanse";}" fn)
  187.         (write-line "        :toggle{label="匹配字方向";key="scbz";}" fn)
  188.         (write-line "        }" fn)
  189.         (write-line "        }" fn)
  190.         (write-line "   :boxed_row{" fn)
  191.         (write-line "   label="线字组合选项";" fn)
  192.         (write-line "   :column{" fn)
  193.         (write-line "        :radio_button{label="水平无线";key="spwx";}" fn)
  194.         (write-line "        :radio_button{label="水平有线";key="spyx";}" fn)
  195.         (write-line "        :radio_button{label="垂直无线";key="czwx";}" fn)
  196.         (write-line "        :radio_button{label="垂直有线";key="czyx";}" fn)
  197.         (write-line "        }" fn)
  198.         (write-line "        }" fn)
  199.         (write-line "   :row{" fn)
  200.         (write-line "        :button{label="确定";key="accept";is_default=true;}" fn)
  201.         (write-line "        :button{label="取消";key="cancel";is_cancel=true;}" fn)
  202.         (write-line "        }" fn)
  203.         (write-line "        }" fn)        
  204.         (write-line "        }" fn)
  205.         (close fn)
  206.         (setq id (LOAD_DIALOG lsdcl))
  207.         (setla)
  208.         (unload_dialog id)
  209.         (VL-FILE-DELETE lsdcl)
  210.    )
  211. (defun clh-entsel (msg key fil ermsg / el ss)
  212. (while
  213.   (and (setvar "errno" 0)
  214.        (not
  215.         (and (setq el (apply '(lambda (msg key) (initget key) (entsel msg))
  216.                              (list msg key)
  217.                       )
  218.              )
  219.              (if (= (type el) 'str)
  220.               el
  221.               (if (setq ss (ssget (cadr el) fil))
  222.                ss
  223.                (progn (princ ermsg) (setq ss nil))
  224.               )
  225.              )
  226.         )
  227.        )
  228.        (/= (getvar "errno") 52)
  229.   )
  230. )
  231. el
  232. )
  233. (defun minpath_p2line(point ssent / n jllst dis)
  234.   (repeat (setq n(sslength ssent))
  235.     (setq jllst(cons (list (distance point (vlax-curve-getclosestpointto (setq e(ssname ssent (setq n(1- n)))) point))e) jllst))
  236.     )
  237.   (setq dis(caar(vl-sort jllst '(lambda(x y)(<(car x)(car y))))))
  238. )
  239.             
  240.       
  241.    
回复

使用道具 举报

发表于 2013-5-26 17:42:29 | 显示全部楼层
有个框选选项就好,有时不一定要全部改变的
回复

使用道具 举报

发表于 2013-7-17 17:10:31 | 显示全部楼层
顶一个
回复

使用道具 举报

发表于 2013-9-29 11:01:59 | 显示全部楼层
yjr111 发表于 2013-5-25 23:21
附上源码:

怎么选择文字后就退出了  。。。。
回复

使用道具 举报

发表于 2014-10-18 11:23:38 | 显示全部楼层
同上同上同上同上同上
cad2010、64位。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-27 14:32 , Processed in 0.172664 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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