明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3740|回复: 16

[源码] 单行文本遮罩批量处理

  [复制链接]
发表于 2015-9-12 22:43 | 显示全部楼层 |阅读模式
本帖最后由 ttmc 于 2015-9-12 22:53 编辑

最近一直做结构设计,大量遇到在线形上标注文字的情况。但单行文本没有多行或标注一样的文本遮罩功能。而wipeout命令又太难用,需要点几个点才完成一个。我这个小程序,也是利用了在文字上面wipeput,把文字再复制回来。我是利用文字框放大1.1倍的方式实际框与文字出现间距。只是文字太长,两边空格较大就不美观了。欢迎大家修改完善这个功能。初学,请
  1. <div class="blockcode"><blockquote>(defun c:wpt(/ os i ii ss ssn ssdata key box p1 p3 p2 p4 px1 py1 px3 py3 mx my mpt ee )
  2.   (setvar "cmdecho" 0)
  3.   (setq os (getvar "osmode"))    ;取得捕捉形式   
  4.   (setvar "osmode" 0)                   ;取消捕捉,如果不取消,会出错
  5. (setq clay (getvar "CLAYER"))    ;层初始状态
  6. ;创建符号层sign颜色31
  7.   (if (null (tblsearch "LAYER" "sign"))  
  8.     (command "_layer" "_m" "sign" "_c" 31 "" "_lt" "continuous"  "" "")
  9.   )
  10. (command "_layer" "_s" "sign" "") ;设为符号层
  11.   
  12.   (setq i 0)                               ;设循环起始点
  13.   (setq ii 0)
  14.   (setq ss (ssget))                        ;多选目标
  15.   (repeat (sslength ss)                    ;循环目标数的次数
  16.     (setq ssn (ssname ss i))               ;筛选出目标中的第i+1个对象名称
  17.     (setq ssdata (entget ssn))             ;取出ssn中的数据
  18.     (setq key (cdr (assoc 0 ssdata)))      ;取出关键字为0的列表
  19.     (if (= key "TEXT")                     ;如果是单行文本
  20.       (progn
  21.   (setq ii (1+ ii))
  22.          ;(setq ee1 (entlast))        ;文字临时赋值
  23.    (command "ucs" "e" ssn)            ;以文字为参考坐标系
  24.    (setq box (textbox ssdata))        ;测量并返回文字方框的对角坐标
  25.    (setq p1 (car box))                ;取得一个角坐标
  26.    (setq p3 (cadr box))               ;取得另对角坐标
  27.    (setq p2 (list (car p3)(cadr p1))) ;取得另外角坐标
  28.    (setq p4 (list (car p1)(cadr p3)))  ;取得另外角坐标
  29.    (command "wipeout" p1 p2 p3 p4 "")  ;画遮罩部分
  30.          
  31.    (setq ee (entlast))                ;临时赋值
  32.   
  33.     ;以下求中心mpt
  34.          (setq px1 (car p1))
  35.          (setq py1 (cadr p1))
  36.          (setq px3 (car p3))
  37.    (setq py3 (cadr p3))
  38.     (setq mx (/ (+ px1 px3) 2))
  39.    (setq my (/ (+ py1 py3) 2))
  40.   
  41.    (setq mpt (list mx my))
  42.   
  43.    (command "scale"  ee ""  mpt 1.1)
  44.     (command "copy" ssn "" mpt mpt )
  45.    (entdel ssn)    ;删除原文字
  46.   
  47.       )
  48.       
  49.        ;(progn
  50.     ;(prompt "无单行文字选项,退出!")
  51.    ;(exit)
  52.        ;)
  53.       )
  54.      
  55.     (setq i (1+ i))   ;循环+1
  56.     )
  57.   (command "ucs" "")     ;返回世界坐标系
  58.   (prin1)
  59.   (setvar "osmode" os)     ;返回原始捕捉状态
  60.   (setvar "CLAYER" clay)    ;返回图层初始状态
  61.   (princ "\n 共处理了")(princ i ) (princ "个目标中的")(princ ii)(princ "个单行文字。感谢使用!")
  62.   (prin1)
  63.    
  64.   )
  65. (prompt "单行文字加外框遮罩程序<代替wipeout命令>***** <<wpt>>******")
  66. (prin1)
  67.       
大家指教。

本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
菜鸟初来乍到 + 1
fyw12345 + 1 很给力!

查看全部评分

 楼主| 发表于 2018-8-20 15:09 | 显示全部楼层
本帖最后由 ttmc 于 2018-8-20 17:22 编辑
水仙的错 发表于 2018-4-8 15:40
这个文字的边框能不显示吗??

内容增加一条 (command "wipeout" "f" "off")即可。我曾尝试过设置图层为不打印或者是透明度高一些的,但打印出来效果就不行或不佳。
也可以把图层颜色31修改为251,看起来也舒服些。打印时,251图层因为没有特别设置,往往也是灰度,不太明显了。


 楼主| 发表于 2018-8-20 17:26 | 显示全部楼层
我又重新编辑了一下,主要是消除了边框。如果需要文字边框,还可以把 (command "wipeout" "f" "off")这行删除。

本帖子中包含更多资源

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

x
发表于 2018-6-30 09:33 | 显示全部楼层
能不能转多行,加上背景呢,这样可能就没有 前置后置的问题了。
发表于 2015-12-16 17:10 | 显示全部楼层
这个结构用用挺不错的,支持一下
发表于 2015-12-16 19:55 | 显示全部楼层
支持一下
发表于 2015-12-17 11:03 | 显示全部楼层
贴个图,才能看到效果。
发表于 2015-12-17 15:36 | 显示全部楼层
谢谢分享,挺好用的。
发表于 2015-12-18 06:22 | 显示全部楼层
支持一下,很不错。
发表于 2015-12-19 19:17 | 显示全部楼层
应该叫做单行文字画矩形框吧
发表于 2018-4-8 15:40 | 显示全部楼层
这个文字的边框能不显示吗??
发表于 2018-6-3 20:25 | 显示全部楼层
不错,有时可用
发表于 2018-6-7 01:01 | 显示全部楼层
的确很方便,对于结构专业来说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 03:03 , Processed in 0.257282 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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