明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: zhang8755

[求助]请编一个将通过文字区的线剪断的程序

  [复制链接]
发表于 2004-1-9 23:52:00 | 显示全部楼层
在文字屏蔽是在文字下插入代理光栅,若到没有安装et的机子上使用该图,就失去屏蔽作用,且在文字上形成一个矩形框,因此使用上受到一定限制,若产生文字剪切,则通用性较好。而在填充里则是利用了关联填充且进行孤岛检测形成的,只要不去掉关联性,文字可以任意移动而依然保持文字处是空的,两者原理不一样。
发表于 2004-1-10 07:58:00 | 显示全部楼层
本帖最后由 作者 于 2004-1-10 12:06:23 编辑

cqnj023发表于2004-1-9 12:11:004楼和7楼的程序采用了不同的剪切方式,产生了不同的效果,经测试,结果有部分不理想,4楼的甚至丢了一半线条,从程序来看不应该出现这种情况,(如图,desktop.rar文件中),不知问题出在哪里?



;;By 龍龍仔(LUCAS)
    ;;-------------------------------------------------------------------
    ;;把
    ;;(command "trim" "last" "" "f" dian1 dian2 dian3 dian4  dian1 "" "")
    ;;(command "trim" "last" "" "f" dian1 dian2 dian3 dian4  dian1 "" "")
    ;;改為下列___(注意:UCS_2_MTEXT副程序 and C:TEXTTRIM函數  ")" 不對稱)
    ;;-------------------------------------------------------------------
    (while (and        (setq S1 (ssget "C" DIAN1 DIAN3))
                (> (sslength S1) 2)
                (setq S1 (ssget "" '((0 . "*line"))))
           )
      (repeat (sslength S1)
        (command "_.TRIM" BOX2 "" "F" DIAN1 DIAN2 DIAN3        DIAN4 DIAN1 ""
                 "")
      )
      (setq S1 NIL)
    )
    ;;------------------------------------------------------------------

    ;;把
    ;;(IF (OR (= EA "y") (= EA "Y"))
    ;;(command "erase" "wp" dian1 dian2 dian3 dian4 "" ""))
    ;;改為下列
    (if        (or (= EA "y") (= EA "Y"))
      (progn
        (setq ER (ssget        "wp"
                        (list DIAN1 DIAN2 DIAN3 DIAN4)
                        '((-4 . "<NOT")
                          (-4 . "<OR")
                          (0 . "MTEXT")
                          (0 . "TEXT")
                          (-4 . "OR>")
                          (-4 . "NOT>")
                         )
                 )
        )
        (command "erase" ER)
      )
    )
    ;;---------------------------------------------------------------------
发表于 2004-1-10 08:11:00 | 显示全部楼层
四楼的程序因为只用了一次的修剪,有时多段线多次穿过框里的时候,修剪一次只能修掉一段相关段。看看以下图形需要修剪多少次才能修剪完:(红线有修剪线)

本帖子中包含更多资源

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

x
发表于 2004-1-10 16:30:00 | 显示全部楼层
碰到13樓的問題, 那就四樓的程序不管用了. 呵呵. 看來得炸開黃色的多段線再修會快點吧.
发表于 2004-1-10 17:11:00 | 显示全部楼层
9樓的程序已修正!它能解決13樓的問題!
发表于 2004-1-10 23:58:00 | 显示全部楼层
感谢龙斑竹的热心,(while (and (setq S1 (ssget "C" DIAN1 DIAN3))
  (> (sslength S1) 2)
  (setq S1 (ssget "" '((0 . "*line"))))
    )
      (repeat (sslength S1)
(command "_.TRIM" BOX2 "" "F" DIAN1 DIAN2 DIAN3 DIAN4 DIAN1 ""
   "")
      )
      (setq S1 NIL)
    )
以上代码段应改为
  1. (while (and        (setq S1 (ssget "cp" (LIST DIAN1 DIAN2 DIAN3 DIAN4)))
  2.                 (> (sslength S1) 1)
  3.                 (setq S1 (ssget "P" '((0 . "*line"))))
  4.            )
  5.       (setq ci (sslength S1))
  6.       (repeat ci
  7.         (command "_.TRIM" BOX2 "" "F" DIAN1 DIAN2 DIAN3        DIAN4 DIAN1 ""
  8.                  "")
  9.       )
  10.       (setq S1 NIL)
  11.     )
,否则当文字为倾斜时会出现死循环。
当然通过这种处理后,也解决了明总所说的问题。
另外,经实验并分析4楼及7楼的剪切方式,觉得采用全部对象作为剪切边界不妥,这样实际上只剪掉了线段中的一段,因此跟多段线的端点密度有关,当很多疏密不一的线通过文字区时,剪出来的边界参差不齐,并且,当同时要处理多个文字,(特别是图件较大,校验时约1m)速度不能忍受。
发表于 2004-1-11 14:35:00 | 显示全部楼层
还是用遮罩舒服

本帖子中包含更多资源

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

x
发表于 2004-1-13 08:28:00 | 显示全部楼层
不错,这样我没装ET也可以了
发表于 2004-1-13 09:23:00 | 显示全部楼层
liuyj发表于2004-1-13 8:28:00不错,这样我没装ET也可以了


可是没装ET,就没有wipeout了
发表于 2004-1-13 10:48:00 | 显示全部楼层
to 17楼
你的程序还是挺方便的能否上传一个叫我们也用用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-31 15:00 , Processed in 0.168210 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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