明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2535|回复: 6

[已解答] 判断文字压盖

[复制链接]
发表于 2014-6-12 10:33:14 来自手机 | 显示全部楼层 |阅读模式
请求高手帮忙:    所选图中的(单行)文字,如果文字有互相压盖的,则把此文字颜色变成绿色。谢谢!
发表于 2014-6-12 13:37:46 | 显示全部楼层
  1. ;;---------------------=={ Get Text Box }==-------------------;;
  2. ;;                                                            ;;
  3. ;;  Returns a point list describing a rectangle framing the   ;;
  4. ;;  specified text or mtext entity with optional offset       ;;
  5. ;;------------------------------------------------------------;;
  6. ;;  Author: Lee Mac, Copyright ?2010 - www.lee-mac.com       ;;
  7. ;;------------------------------------------------------------;;
  8. ;;  Arguments:                                                ;;
  9. ;;  ent - Text or MText ename                                 ;;
  10. ;;  off - offset (may be zero)                                ;;
  11. ;;------------------------------------------------------------;;
  12. ;;  Returns:  List of Points (in OCS) describing text frame   ;;
  13. ;;------------------------------------------------------------;;

  14. (defun LM:GetTextBox ( ent off / dx lst base rotn norm w h matrix )
  15.   ;; ?Lee Mac 2010

  16.   (setq dx (lambda ( x l ) (cdr (assoc x l))))

  17.   (if
  18.     (setq lst
  19.       (cond
  20.         (
  21.           (eq "TEXT" (dx 0 (setq l (entget ent))))

  22.           (setq base (dx 10 l) rotn (dx 50 l))

  23.           (
  24.             (lambda ( data )
  25.               (mapcar
  26.                 (function
  27.                   (lambda ( funcs )
  28.                     (mapcar
  29.                       (function
  30.                         (lambda ( func )
  31.                           ((eval (car func)) ((eval (cdr func)) data) off)
  32.                         )
  33.                       )
  34.                       funcs
  35.                     )
  36.                   )
  37.                 )
  38.                 (list
  39.                   (list (cons '- 'caar ) (cons '- 'cadar ))
  40.                   (list (cons '+ 'caadr) (cons '- 'cadar ))
  41.                   (list (cons '+ 'caadr) (cons '+ 'cadadr))
  42.                   (list (cons '- 'caar ) (cons '+ 'cadadr))
  43.                 )
  44.               )
  45.             )
  46.             (textbox l)
  47.           )
  48.         )
  49.         (
  50.           (eq "MTEXT" (dx 0 l))

  51.           (setq norm (dx 210 l) base (trans (dx 10 l) 0 norm)
  52.          
  53.                 rotn (angle '(0. 0. 0.) (trans (dx 11 l) 0 norm))

  54.                 w (dx 42 l) h (dx 43 l)
  55.           )
  56.           (
  57.             (lambda ( org )
  58.               (mapcar
  59.                 (function
  60.                   (lambda ( o ) (mapcar '+ org o))
  61.                 )
  62.                 (list
  63.                   (list (-   off) (-   off))
  64.                   (list (+ w off) (-   off))
  65.                   (list (+ w off) (+ h off))
  66.                   (list (-   off) (+ h off))
  67.                 )
  68.               )
  69.             )
  70.             (
  71.               (lambda ( j )
  72.                 (list
  73.                   (cond
  74.                     (
  75.                       (member j '(2 5 8)) (/ w -2.)
  76.                     )
  77.                     (
  78.                       (member j '(3 6 9)) (- w)
  79.                     )
  80.                     ( 0. )
  81.                   )
  82.                   (cond
  83.                     (
  84.                       (member j '(1 2 3)) (- h)
  85.                     )
  86.                     (
  87.                       (member j '(4 5 6)) (/ h -2.)
  88.                     )
  89.                     ( 0. )
  90.                   )
  91.                 )
  92.              )
  93.              (dx 71 l)
  94.            )
  95.          )
  96.        )
  97.      )
  98.    )
  99.     (progn
  100.       (setq matrix
  101.          (list
  102.            (list (cos rotn) (sin (- rotn)) 0.)
  103.            (list (sin rotn) (cos    rotn)  0.)
  104.            (list     0.           0.       1.)
  105.          )
  106.       )

  107.       (mapcar
  108.         (function
  109.           (lambda ( point )
  110.             (mapcar '+
  111.               (mapcar
  112.                 (function
  113.                   (lambda ( r ) (apply '+ (mapcar '* r point)))
  114.                 )
  115.                 matrix
  116.               )
  117.               (reverse (cdr (reverse base)))
  118.             )
  119.           )
  120.         )
  121.         lst
  122.       )
  123.     )
  124.   )
  125. )
回复 支持 1 反对 0

使用道具 举报

发表于 2014-6-12 12:51:43 | 显示全部楼层
选求得文字四个角点,然后(ssget "CW" '(list p1 p2 p3 p4) '((0 . *Text)))
 楼主| 发表于 2014-6-12 13:03:38 来自手机 | 显示全部楼层
谢谢,能给我完整的代码吗?非常感谢!我是菜鸟……
 楼主| 发表于 2014-6-12 14:07:00 来自手机 | 显示全部楼层
谢谢,运行后提示参数太少。
发表于 2014-6-12 17:52:51 | 显示全部楼层
利用地板的函数,给你做了个,看看是否合用。
  1. (vl-load-com)
  2. (defun c:gt1(/ sstext text_sn cpl i)
  3. (setq sstext (ssget '((0 . "text"))))
  4. (if sstext
  5. (progn
  6. (setq i 0)
  7. (repeat (sslength sstext)
  8. (setq text_sn (ssname sstext i)
  9.       plst (LM:GetTextBox text_sn 0)
  10.       cpl (ssget "CP" plst '((0 . "text")))
  11. )
  12. (if (> (sslength cpl) 1)
  13. (vla-put-color (vlax-ename->vla-object text_sn) 3)
  14. )
  15. (setq i (1+ i))
  16. ))))

 楼主| 发表于 2014-6-13 14:03:31 来自手机 | 显示全部楼层
819534890 发表于 2014-6-12 17:52
利用地板的函数,给你做了个,看看是否合用。

非常感谢!能实现检查功能了。只不过文字样式似乎有影响,如果文字样式为宋体,选择过多会提示参数错误。如果样式为hz则不会提示错误。能优化此问题吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-25 22:41 , Processed in 0.168414 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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