明经CAD社区

 找回密码
 注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 641|回复: 17

[提问] 文字加框问题(用于结构设计)

  [复制链接]
发表于 2019-7-9 01:21 | 显示全部楼层 |阅读模式
本帖最后由 涛涛_1048 于 2019-7-9 01:26 编辑

最近在论坛上看到一个程序,可以给文字加框。主要是对特定的计算数据加一个标识。不过对于水平的文字,可以完美的加上框,对于竖向的文字,这个框也是画成了水平的,请高手给修改一下程序。也对原来该程序的作者表示敬意。

本程序首先按图层找到文字,然后检查该文字是否含有“G”标志,然后对"G"后两个数字与设定数值进行比较,只要两个数字中有一个大于设定值,就给该文字加框。

现将该程序与图纸上传,请论坛各位同仁修改一下。

(defun c:cgj (/ bb cc en en_data fjm hh i jm k os p1 p11 p2 p22 pc ss str txt DD)
        (setvar "CMDECHO" 0)
        (setq os (getvar "OSMODE"))
        (setvar "OSMODE" 0)
        (setq str (getstring "\n缺省配箍值<G1.0-0.5(#8@100200)>:"))
        (if (= str "") (setq str "G1.0-0.5"))
        (setq jm (atof (substr str 2 3)) fjm (atof (substr str 6 3)))
        (setq ss (ssget '((0 . "text") (8 . "Pkpm_层15220"))))
        (setq i 0 k 0)
        (command "LAYER" "m" "CGJ" "C" 1 "CGJ" "")
        (repeat (sslength ss)
        (setq en (ssname ss i))
        (setq en_data (entget en))
        (setq txt (cdr (assoc 1 en_data)))
        (setq bb (substr txt 2 3) cc (substr txt 6 3) DD (substr txt 1 1))
        (if (AND (= DD "G") (or (> (atof bb) jm) (> (atof cc ) fjm)))
                (progn
                        (setq p1 (cdr (assoc 10 en_data)) ang (cdr (assoc 50 en_data)) hh (cdr (assoc 40 en_data)))
                        (setq pc (cadr (textbox en_data)))
                        (setq p2 (mapcar '+ p1 pc))
                        (setq hh (* 0.1 hh))
                        (setq p11 (mapcar '- p1 (list hh hh)) p22 (mapcar '+ p2 (list hh hh)))
                        (command "rectangle" p11 p22)
                        (if (= ang (/ pi 2)) (command "rotate" (entlast)  p1 (/ pi 2)))
                        (setq k (+ 1 k))
                )
        )
        (setq i (+ 1 i))
                )
        (princ (strcat "\n共找到超过缺省配箍值<" str "> " (itoa k)" 项。 "))
        (setvar "OSMODE" os)
)
希望图4的文字框变成如图5的样子。wpj3文件是测试图。


本帖子中包含更多资源

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

x
发表于 2019-7-9 08:58 | 显示全部楼层
;;简单改了下
;;涉及到旋转角度,可能会受某些系统变量值的影响,比如ANGBASE或者ANGDIR,不严谨
;;可以考虑下用多行文字,多行文字本身有加框的选项
;;还有一些细节的地方你自己再看看
  1. (defun c:cgj (/        ANG BB CC DD EN EN_DATA FJM HH I JM K P1 P11 P2 P22 PC SS STR TXT)
  2.   (setvar "CMDECHO" 0)
  3.   (setq str (getstring "\n缺省配箍值<G1.0-0.5(#8@100200)>:"))
  4.   (if (= str "")
  5.     (setq str "G1.0-0.5")
  6.   )
  7.   (setq        jm  (atof (substr str 2 3))
  8.         fjm (atof (substr str 6 3))
  9.   )
  10.   (setq ss (ssget '((0 . "text") (8 . "Pkpm_层15220"))))
  11.   (setq        i 0
  12.         k 0
  13.   )
  14.   (vl-cmdf "LAYER" "m" "CGJ" "C" 1 "CGJ" "")
  15.   (repeat (sslength ss)
  16.     (setq en (ssname ss i))
  17.     (setq en_data (entget en))
  18.     (setq txt (cdr (assoc 1 en_data)))
  19.     (setq bb (substr txt 2 3)
  20.           cc (substr txt 6 3)
  21.           DD (substr txt 1 1)
  22.     )
  23.     (if        (AND (= DD "G") (or (> (atof bb) jm) (> (atof cc) fjm)))
  24.       (progn
  25.         (setq pc (textbox en_data)
  26.               p1 (cdr (assoc 10 en_data))
  27.               p2 (mapcar '+ p1 (cadr pc))
  28.               hh (cdr (assoc 40 en_data))
  29.               hh (* 0.1 hh)
  30.               ang (cdr (assoc 50 en_data))
  31.         )
  32.         (setq p11 (mapcar '- p1 (list hh hh))
  33.               p22 (mapcar '+ p2 (list hh hh))
  34.         )
  35.         (vl-cmdf "_.rectang" "_non" p11 p22)
  36.         (if (equal ang (/ pi 2) 1e-5) (vl-cmdf "_.rotate" (entlast) "" "_non" p1 -90))
  37.         (setq k (+ 1 k))
  38.       )
  39.     )
  40.     (setq i (+ 1 i))
  41.   )
  42.   (princ (strcat "\n共找到超过缺省配箍值<" str "> " (itoa k) " 项。 "))
  43. )


发表于 2019-7-9 09:49 | 显示全部楼层
ssget 中可以设定过滤字符为 "G*-*"
用textbox函数获得text的边框数据,然后绘制外框即可。
可能还有任意角度的,按text的rotate angle旋转。
还有考虑UCS,对这些数据进行坐标系转换。
发表于 2019-7-9 10:13 | 显示全部楼层
希望能增加一个功能 文字加圆框
发表于 2019-7-9 13:19 | 显示全部楼层
依然小小鸟 发表于 2019-7-9 10:13
希望能增加一个功能 文字加圆框

用文字的最小包围盒坐标画框不是很简单么?横竖都行。
发表于 2019-7-9 15:46 | 显示全部楼层
依然小小鸟 发表于 2019-7-9 10:13
希望能增加一个功能 文字加圆框

计算中心,半径,画圆
 楼主| 发表于 2019-7-9 18:39 | 显示全部楼层
2楼和5楼的同仁给写一下吧,直接用文字边框的数据的。
 楼主| 发表于 2019-7-9 18:39 | 显示全部楼层
非常感谢二楼的这位同仁,在百忙中回复了帖子。不过就是程序还是运行不正常。
 楼主| 发表于 2019-7-9 18:41 | 显示全部楼层
6楼的必强同学,在论坛里看到你写了好多程序,尤其是在工具箱方面,请必强同学也写一下吧。
发表于 2019-7-10 08:28 | 显示全部楼层
没搞懂这样加框有什么好处
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2019-11-20 13:12 , Processed in 0.836748 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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