明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4077|回复: 15

[讨论] 求助能否做到如下程序一样,做到文字加外框效果,给line线画的图形加矩形框?

  [复制链接]
发表于 2011-4-6 17:20:54 | 显示全部楼层 |阅读模式
;;;***********************************
;;; No.16-1 单行/多行文本加框 函数   
;;;***********************************
(defun C:JK (/ SS1 n BoxType roundSpace i txtEntData txtEntName txtEntType tBox Pt_BL Pt_BR
                PtTL PtTR Pt_MC xWidth xHeight xAngle)

;(AYCMDINIT0);保存用户系统变量.
(if (= #AY_TBOXRSPACE nil) (setq #AY_TBOXRSPACE 0.5))
(if (= #AY_TBOXBOXTYPE nil) (setq #AY_TBOXBOXTYPE "R"))
(setvar "osmode" 0)
(initget "Mtext Text All")
(setq SelType (getkword "\n选择类型 多行文本(Mtext)/单行文本(Text)/任意<All> "))
(if (null SelType)
  (setq SelType "All")
);endif
(cond ((= SelType "Mtext") (setq SS1 (ssget '((0 . "MTEXT")))));多行文本
    ((= SelType "Text") (setq SS1 (ssget '((0 . "TEXT")))));Text文本
    ((= SelType "All") (setq SS1 (ssget '((0 . "*TEXT")))));任意类型文本
);endcond
(if (null SS1) (progn (princ "\n没有文本实体被选择!") (exit)))
(setq n (sslength SS1))
(if (not (= nil n));No select objects
  (progn
   (initget "C R")
    (setq BoxType (getkword (strcat "\n边框类型 圆形(C)/矩形(R)<" #AY_TBOXBOXTYPE ">: ")))
    (if (= BoxType nil) (setq BoxType #AY_TBOXBOXTYPE) (setq #AY_TBOXBOXTYPE BoxType))
    (setq roundSpace (getreal (strcat "\n文本距离边框偏移距<" (rtos #AY_TBOXRSPACE 2)">: ")))
    (if (= roundSpace nil) (setq roundSpace #AY_TBOXRSPACE) (setq  #AY_TBOXRSPACE roundSpace))
    (setq i 0)
    (while (< i n)
     (setq txtEntName (ssname SS1 i))
     (setq txtEntData (entget txtEntName))
     (setq i (+ i 1))
     (setq txtEntType (cdr (assoc 0 txtEntData)));get Entity's name: "TEXT" or "MTEXT"
     (if (= txtEntType "TEXT");this object is simple line text
      (progn
       (vl-cmdf "ucs" "Object" txtEntName);定义用户坐标系到文本的方向.
       (setq tBox (textbox (list (car txtEntData)));must change to a list
          Pt_BL (car tBox);left bottom point coords
          PtTR (cadr tBox);right top point coords
          PtTL (list (car Pt_BL) (cadr PtTR))
          Pt_BR (list (car PtTR) (cadr Pt_BL))
          Pt_MC (polar Pt_BL (angle Pt_BL PtTR) (/ (distance Pt_BL PtTR) 2.0))
       );endsetq
       (if (= BoxType "C");圆形边框.
        (vl-cmdf "_Circle" Pt_MC (+ (distance Pt_MC Pt_BL) roundSpace))
       );End_if
       (if (= BoxType "R");矩形边框.
        (progn
         (setq Pt_BL (polar Pt_BL PI roundSpace))
         (setq Pt_BL (polar Pt_BL (* PI 1.5) roundSpace))
         (setq Pt_BR (polar Pt_BR 0.0 roundSpace))
         (setq Pt_BR (polar Pt_BR (* PI 1.5) roundSpace))
         (setq PtTL (polar PtTL PI roundSpace))
         (setq PtTL (polar PtTL (* PI 0.5) roundSpace))
         (setq PtTR (polar PtTR 0.0 roundSpace))
         (setq PtTR (polar PtTR (* PI 0.5) roundSpace))
         (vl-cmdf "_PLine" Pt_BL Pt_BR PtTR PtTL "C")
        ); progn
       ); if
        (vl-cmdf "ucs" "p");恢复原有坐标。
      ); progn
     ); if
     (if (= txtEntType "MTEXT")
      (progn
       (vl-cmdf "_.JustifyText" txtEntName "" "TL");处理为对对齐模式为: "左上".
       (setq txtEntData (entget txtEntName))
       (setq PtTL  (cdr (assoc 10 txtEntData))
          xWidth (cdr (assoc 42 txtEntData))
          xHeight (cdr (assoc 43 txtEntData))
          xAngle (cdr (assoc 50 txtEntData))
          Pt_TC  (polar PtTL xAngle (* xWidth 0.5))
          PtTR  (polar PtTL xAngle xWidth)
          Pt_BL  (polar PtTL (- xAngle (/ PI 2.0)) xHeight)
          Pt_BC  (polar Pt_BL xAngle (* xWidth 0.5))
          Pt_BR  (polar Pt_BL xAngle xWidth)
          Pt_MC  (polar Pt_BL (angle Pt_BL PtTR) (/ (distance Pt_BL PtTR) 2.0))
       );endsetq
       (if (= BoxType "C");圆形边框.
        (vl-cmdf "_Circle" Pt_MC (+ (distance Pt_MC Pt_BL) roundSpace))
       );endif
       (if (= BoxType "R");矩形边框.
        (progn
          (setq xAngle (cdr (assoc 50 txtEntData)))
          (setq Pt_BL (polar Pt_BL xAngle (- roundSpace)))
          (setq Pt_BL (polar Pt_BL (+ xAngle (/ PI 2.0)) (- roundSpace)))
          (setq Pt_BR (polar Pt_BR xAngle roundSpace))
          (setq Pt_BR (polar Pt_BR (+ xAngle (/ PI 2.0)) (- roundSpace)))
          (setq PtTL (polar PtTL xAngle (- roundSpace)))
          (setq PtTL (polar PtTL (+ xAngle (/ PI 2.0)) roundSpace))
          (setq PtTR (polar PtTR xAngle roundSpace))
          (setq PtTR (polar PtTR (+ xAngle (/ PI 2.0)) roundSpace))
          (vl-cmdf "_PLine" Pt_BL Pt_BR PtTR PtTL "C")
        ); progn
       ); if
      ); progn
     ); if
    ); while
  ); progn
);End_ if
;(AYCMDINIT1);恢复用户系统变量.
); defun

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-12-15 21:43:45 | 显示全部楼层
为什么不能下载附件。。。特定用户
发表于 2011-4-7 10:31:51 | 显示全部楼层
请楼主说明一下,是要在样图中连接线段成多义线,还是绘制矩形外框?
 楼主| 发表于 2011-4-7 16:01:20 | 显示全部楼层
绘制矩形外框,即套上一个矩形外框
 楼主| 发表于 2011-4-7 17:04:37 | 显示全部楼层
已购买了你tt4.lsp程序,但用不起来,不知怎么回事?
发表于 2011-4-7 17:55:34 | 显示全部楼层

pedit j 0

本帖子中包含更多资源

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

x
 楼主| 发表于 2011-4-8 08:43:59 | 显示全部楼层
请问版主是怎么做到的
发表于 2011-4-8 09:12:52 | 显示全部楼层
本帖最后由 xiaxiang 于 2011-4-10 18:04 编辑

如果只是批量连接线段,可用钮广春的程序,就是PEDIT

如果是生成外框可用Gu_xl版主的程序

或者这个程序,注意模糊距离选到1000以上


注意我的tt4程序不是用在这个场合。
我的一个简单代码如下:
  1. (defun c:test()
  2. (setq os (getvar "osmode"))
  3. (setq ech (getvar "cmdecho"))
  4. (setvar "peditaccept" 1)
  5. (setvar  "cmdecho" 0)
  6. (setq s (ssget))
  7. (command "_pedit" "m" s "" "j" 10 "")
  8. ;(setq  ss (ssget "_i"))
  9. (setq  ss (ssget ))
  10. (setq n  0
  11.     mn (sslength ss)
  12.     )
  13.     (repeat mn
  14.       (setq en     (ssname ss n))
  15.     (setq n (1+ n))
  16. (if (< os 16384) (setvar "osmode" (+ os 16384)))
  17. (command "zoom" "o" en "")
  18. (setq p1 (getvar "extmin"))
  19. (setq p2 (getvar "extmax"))
  20. (command "rectang" p1 p2)
  21. (command "zoom" "p")
  22. )          ;repeat
  23. (setvar "osmode" os)
  24. (setvar "cmdecho" ech)
  25. (princ)
  26. )
要分两步,第一步连接线段,第二步通过取得图元坐标角点绘制矩形。用pedit连接生成多义线,这里要两个ssget,有没有更好的办法?


本帖子中包含更多资源

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

x
 楼主| 发表于 2011-4-8 10:50:52 | 显示全部楼层
谢谢7楼的兄弟,请您能否把TT4的场合改一下?相信很多人会用到的
发表于 2011-4-8 11:02:38 | 显示全部楼层
cxs259 发表于 2011-4-8 10:50
谢谢7楼的兄弟,请您能否把TT4的场合改一下?相信很多人会用到的

tt4是绘制不规则图形的外框
 楼主| 发表于 2011-4-8 11:38:31 | 显示全部楼层
就是需要不规则外框,因为可以用到墙面扣除门窗面积的计算
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 02:01 , Processed in 0.196166 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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