明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: xuejiwang

寻找修改文字的超级格式刷

  [复制链接]
发表于 2006-4-10 22:03:00 | 显示全部楼层
  1. (load "xyp_lib.vlx") ;版本 V.20060314
  2. ;|下载和加载通用函数(可在签名栏直接下载后放到搜索路径下)
  3. 利用以下任何一种方式(首选第一种)即可加载和运行通用函数内的所有子程序:
  4. ★1·在acad.lsp中增加(load"xyp_lib")
  5. ■2·在每个程序内增加(load"xyp_lib")
  6. ■3·在command下,输入(load"xyp_lib")
  7. ■4·在菜单.mnl中增加(load"xyp_lib")
  8. ■5·将xyp_lib.vlx文件直接拽到cad屏幕
  9. [COLOR=red] ★通用函数下载地址:[/COLOR]
  10. [url]http://bbs.mjtd.com/forum.php?mod=viewthread&tid=37554[/url]
  11. |;
  12. (defun c:wbth (/ s1 ss tx1 s2)
  13.   (if (setq s1 (car (usel 0 "TEXT" "TEXT样板")))
  14.     (progn (princ "\n选择目标<退出>: ")
  15.     (setq ss  (ssget '((0 . "TEXT")))
  16.    tx1 (xyp-get-dxf 1 s1)
  17.    i   -1
  18.     )
  19.     (while (setq s2 (ssname ss (setq i (1+ i))))
  20.       (xyp-SubUpd s2 1 tx1)
  21.     )
  22.     )
  23.   )
  24.   (princ)
  25. )
发表于 2006-7-17 00:36:00 | 显示全部楼层

上面的lsp文件都有同样的一个问题

上面的lsp文件都有同样的一个问题,虽然都可以实现文字内容格式刷的功能,但如果刷错的话,想撤消就连同上一部操作一起撤消了,如:先执行旋转命令,后再刷文字,用undo撤消,就连旋转命令一起撤消了,就是说这个文字刷命令不做一个步骤处理。这样很容易造成误操作,有没高手能解惑一下。

发表于 2007-9-29 23:45:00 | 显示全部楼层
9楼朋友的就好用
发表于 2007-9-29 23:58:00 | 显示全部楼层
楼主的要求find命令就可以解决.
发表于 2009-3-26 23:01:00 | 显示全部楼层

kkkkkkkkkkkkkkkkkkkkkkkkkk

发表于 2011-4-25 14:37:37 | 显示全部楼层
这个里面的“刷内容”可以实现点选源文字后,点目标文字就改一次,是实时的,不会等你全部选择完成后再一次性更改,如何实现?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2011-4-25 15:06:40 | 显示全部楼层
本帖最后由 自贡黄明儒 于 2011-4-25 15:09 编辑

回复 xuejiwang 的帖子

版主Caoyin有一贴,仿office格式刷,用他的程序改一改就可实现你的要求。我就是这么做的。

;;刷子函数,此程序写得比较粗糙 by caoyin @ mjtd.com
;;刷子功能由用户自己定义,用于任何“匹配”功能需要动态显示刷子的程序
;;发一个刷文字内容的例子(动画)
;;____________________________________________________________________________________________________
;; ▓ (lt:match )
;; [功能] 模仿 MATCHPROP 刷子功能
;; [参数] pt-------刷子动态起始点
;;        col------表 (刷子颜色 选择框颜色)
;;        ssparm---表,选择参数。(命令行打印信息 图元属性过滤)
;;        fun------函数名
;; [返回]
;
; [测试]
(defun c:tt (/ EN PT TAG x y pt1)
  (setq EN (ENTSEL "\n选择源对象: "))
  (if EN
    (progn
      (setq pt (cadr en)
            EN (car EN)
            ss (lt:match pt '(4 6)
                 (list "\n选择直线: "
                       '((0 . "line")))
                       '(lambda (x) (vla-put-color (vlax-ename->vla-object x) 2)
                 )
               )
      )
    )
  )
  ss
)
(defun c:matxt (/ e ed ss) ;;  文字内容匹配
;(lt:error-init (list nil 0 nil nil))
  (setq e (lt:entsel "\n选择源文字对象: "
                     '((0 . "*TEXT,DIMENSION"))
                     '("\n对象必须是单行文字、多行文字或标注。" nil nil)
          )
  )
  (if (not e) (exit))
  (redraw (car e) 3)
  (setq ed (cons 1 (cdr (assoc 1 (entget (car e))))))
  (lt:match
    (cadr e)
    '(2 3)
    (list "\n选择目标文字对象: " '((0 . "*TEXT,DIMENSION")))
    '(lambda (x / ent)
       (setq ent (entget x))
       (entmod (subst ed (assoc 1 ent) ent))
     )
  )
;(lt:error-restore)
)


(defun lt:match (pt col ssparm fun / d_brush pickbox p2u len x y msg pt1 ss1 pt2 co i e ss)
  (defun d_brush (col x y len / a b c)
    (grvecs (list col (list (- x (setq A (* len 1.5))) (- y len))
                      (list (- x A) (setq B (- y (* len 7.5))))
                  col (list (- x (setq C (* len 0.5))) y)
                      (list (- x C) B)
                  col (list (+ x C) y)
                      (list (+ x C) B)
                  col (list (+ x A) (- y len))
                      (list (+ x A) B)
                  col (list (- x (setq A (* len 4.5))) B)
                      (list (+ x A) B)
                  col (list (- x A) B)
                      (list (- x (setq C (* len 6.5))) (- y (* len 9)))
                  col (list (+ x A) B)
                      (list (+ x C) (setq A (- y (* len 9))))
                  col (list (- x C) A)
                      (list (- x C) (setq B (- y (* len 17))))
                  col (list (+ x C) A)
                      (list (+ x C) B)
                  col (list (- x C) (setq A (- y (* len 10))))
                      (list (+ x C) A)
                  col (list (- x C) (setq A (- y (* len 11))))
                      (list (+ x C) A)
                  col (list (- x C) (setq A (- y (* len 13))))
                      (list (+ x C) A)
                  col (list (- x C) (setq A (- y (* len 14))))
                      (list (+ x C) A)
                  col (list (- x C) B)
                      (list (+ x C) B)
                  col (list (- x C) B)
                      (list (- x (* len 11)) (setq A (- y (* len 21.5))))
                  col (list (- x (* len 2)) B)
                      (list (- x (* len 6.5)) A)
                  col (list (+ x (* len 2)) B)
                      (list (- x (* len 2.5)) A)
                  col (list (+ x C) B)
                      (list (+ x (* len 2)) A)
                  col (list (- x (* len 11)) A)
                      (list (+ x (* len 3)) A)
            )
            (list (list 1 0 0 (* len 14))
                  (list 0 1 0 (* len -4)) '(0 0 1 0) '(0 0 0 1)
            )
    )
  )
  (defun pickbox (pt / si cv)
    (setq si (* (/ (getvar "pickbox") (cadr (getvar "screensize"))) (getvar "viewsize") 0.5)
          cv (list si si 0)
    )
    (list (mapcar '+ pt cv) (mapcar '- pt cv))
  )
  (defun p2u (pix) (* pix (/ (getvar "viewsize") (cadr (getvar "screensize")))))
  (or (setq co (cadr col)) (setq co 7))
  (or (setq col (car col)) (setq col 7))
  (or (setq msg (car ssparm)) (setq msg "\n选择目标对象: "))
  (setq ssparm (cadr ssparm) len (p2u 1) x (car pt) y (cadr pt))
  (princ msg)
  (while (/= (car pt1) 11)
    (redraw)
    (d_brush col x y len)
    (while (not (member (car (setq pt1 (grread T 12 2))) '(3 11)))
      (setq pt1 (cadr pt1))
      (if (vl-consp pt1)
        (progn
          (if (> (distance PT1 PT) (p2u (* 0.0001 (car (getvar "screensize")))))
            (progn
              (redraw)
              (setq len (p2u 1) x (car pt) y (cadr pt))
              (d_brush col x y len)
              (setq pt pt1)
            )
          )
        )
      )
    )
    (redraw)
    (if (and (= (car pt1) 3)
             (princ msg)
             (not (setq ss1 (apply 'ssget (append '("_c") (pickbox (cadr pt1)) (list ssparm)))))
        )
      (progn
        (princ "指定对角点: ")
        (setq pt1 (list (caadr pt1) (cadadr pt1)))
        (while (not (member (car (setq pt2 (grread T 12 1))) '(3 11)))
          (setq pt2 (list (caadr pt2) (cadadr pt2)))
          (if (vl-consp pt1)
            (progn
              (if (> (distance PT2 PT) (p2u (* 0.0001 (car (getvar "screensize")))))
                (progn
                  (redraw)
                  (setq len (p2u 1) x (car pt) y (cadr pt) co (abs co))
                  (if (> (car pt1) (car pt2)) (setq co (- co)))
                  (d_brush col x y len)
                  (grvecs (list co pt1 (list (car pt1) (cadr pt2))
                                co pt2 (list (car pt1) (cadr pt2))
                                co pt2 (list (car pt2) (cadr pt1))
                                co pt1 (list (car pt2) (cadr pt1))
                          )
                  )
                  (setq pt  pt2
                        ss1 (ssget (if (minusp co) "_c" "_w") pt1 pt2 ssparm)
                  )
                )
              )
            )
          )
        )
      )
    )
    (or ss (setq ss (ssadd)))
    (if ss1
    (repeat (setq i (sslength ss1))
      (setq e (ssname ss1 (setq i (1- i))))
      (ssadd e ss)
      (redraw e 3)
      (apply fun (list e))
    ))
    (setq ss1 nil)
  )
  (redraw)
  ss
)
发表于 2011-4-26 14:38:48 | 显示全部楼层
17楼的高手, (setq e (lt:entsel "\n选择源文字对象: "这句中(lt:entsel 未定义,怎么解决,我是小鸟,代码看不太懂,关于TT命令的还行,知道定义了lt:match并调用,
发表于 2011-6-5 16:10:06 | 显示全部楼层
非常好的代码.
发表于 2011-6-5 17:16:39 | 显示全部楼层
谢谢17楼!程序很好用!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-6-8 18:24 , Processed in 0.183554 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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