明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3077|回复: 11

[求助]TextBox函数有时不灵了

[复制链接]
发表于 2009-12-18 13:05:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-12-18 14:32:21 编辑

测试图:

具体情况详动画:


相关的代码如下:
  1. ;;文本包围框
  2. (defun C-TEXTBOX (ENT /     I     ENAME ELIST LST   LST2  TB   TB1
  3.     TB2 TLEN  THI   LL   LR UR    UL    ANG   ANGG
  4.     UCSANG      LLX   LRX   URX ULX   LLY   LRY   URY
  5.     ULY ALL   AVG   ERR   CNTLST
  6.    )
  7.   (setq UCSANG (angle (trans '(0.0 0.0 0.0) 1 0)
  8.         (trans '(1.0 0.0 0.0) 1 0)
  9.         )
  10.   )
  11.   (setq ELIST (entget ENT)
  12. ANG   (cdr (assoc 50 ELIST))
  13. TB    (textbox ELIST)
  14. TB1   (car TB)
  15. TB2   (cadr TB)
  16. TLEN  (- (car TB2) (car TB1))
  17. THI   (- (cadr TB2) (cadr TB1))
  18. LL    (mapcar '+ (trans (cdr (assoc 10 ELIST)) 0 1) TB1)
  19. ANG   (- ANG UCSANG)
  20. LR    (polar LL ANG TLEN)
  21. UR    (polar LL (+ ANG (angle TB1 TB2)) (distance TB1 TB2))
  22. UL    (polar LL (+ ANG (/ pi 2)) THI)
  23.   )
  24.   (list LL LR UR UL)
  25. )
  26. (defun c:tt ()
  27.   (setq ent (car (entsel)))
  28.   (setq ptList (C-TEXTBOX ent))
  29.   (command "_.PLINE")
  30.   (foreach X ptList
  31.     (command "_NON" X)
  32.   )
  33.   (command "_C")
  34. )

附上字体文件:

可能跟字体有关系

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-1 09:11:35 | 显示全部楼层
xianaihua 发表于 2009-12-18 18:10
看看一个老外写得文本框工具,可以对单行、多行、尺寸文本加框,而且对于任意角度都可以。

多谢分享!顶你!
发表于 2024-8-1 16:43:34 | 显示全部楼层
文字框函数问题把,我的能正常用
发表于 2009-12-18 13:17:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-12-18 14:33:00 | 显示全部楼层

将字体附上。

可能跟字体有关系。

发表于 2009-12-18 16:44:00 | 显示全部楼层
是你的算法问题,我用我自己的程序正常
 楼主| 发表于 2009-12-18 17:04:00 | 显示全部楼层

应该是textbox函数没有写正确。

发表于 2009-12-18 18:10:00 | 显示全部楼层
看看一个老外写得文本框工具,可以对单行、多行、尺寸文本加框,而且对于任意角度都可以。
  1. ;-------------------------------------------------------------------------------
  2. ; Program Name: Text-Box.lsp [Text-Box R2]
  3. ; Created By:   Terry Miller (Email: terrycadd@yahoo.com)
  4. ; c:Text-Box -  Draws a polyline Text Box outlining Text, Mtext and Dimensions.
  5. ;-------------------------------------------------------------------------------
  6. (defun c:TB ( )(c:Text-Box));Shortcut
  7. (defun c:Text-Box (/ Cnt# EntName^ Osmode# Pt PtsList@ SS&)
  8.   (setq Osmode# (getvar "OSMODE"))
  9.   (princ "\nSelect Text, Mtext or Dimension for Text Box")
  10.   (if (setq SS& (ssget '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(0 . "DIMENSION")(-4 . "OR>"))))
  11.     (progn
  12.       (command "UNDO" "BEGIN")
  13.       (setvar "OSMODE" 0)
  14.       (setq Cnt# 0)
  15.       (repeat (sslength SS&)
  16.         (setq EntName^ (ssname SS& Cnt#))
  17.         (setq PtsList@ (append (Text-Box EntName^) (list "C")))
  18.         (command "PLINE" (foreach Pt PtsList@ (command Pt)))
  19.         (setq Cnt# (1+ Cnt#))
  20.       );repeat
  21.       (command "UNDO" "END")
  22.       (setvar "OSMODE" Osmode#)
  23.     );progn
  24.     (princ "\nNo Text, Mtext or Dimension selected.")
  25.   );if
  26.   (princ)
  27. );defun c:Text-Box
  28. ;-------------------------------------------------------------------------------
  29. ; Text-Box - Function for Text, Mtext and Dimension entities
  30. ; Arguments: 1
  31. ;   Entity^ = Entity name of the Text, Mtext or Dimension to use
  32. ; Returns: A list of the four corners of the Text Box
  33. ;-------------------------------------------------------------------------------
  34. (defun Text-Box (Entity^ / Ang~ AngEntity~ Corners: EntList@ EntNext^ EntType$
  35.   First List@ MovePt NewPts@ Pt Return@ Textboxes@ X X1 X3 Y Y1 Y3 Zero)
  36.   ;-----------------------------------------------------------------------------
  37.   ; Corners: - Calculates the four corners of the Text Box
  38.   ;-----------------------------------------------------------------------------
  39.   (defun Corners: (Entity^ / Ang~ Corners@ Dist~ EntList@ Ins Pt Pt1 Pt2 Pt3 Pt4)
  40.     (setq EntList@ (entget Entity^)
  41.           Corners@ (textbox EntList@)
  42.           Ang~ (cdr (assoc 50 EntList@))
  43.           Ins (cdr (assoc 10 EntList@))
  44.           Pt (mapcar '+ (car Corners@) Ins)
  45.           Pt1 (polar Ins (+ Ang~ (angle Ins Pt)) (distance Ins Pt))
  46.           Pt (mapcar '+ (cadr Corners@) Ins)
  47.           Pt3 (polar Ins (+ Ang~ (angle Ins Pt)) (distance Ins Pt))
  48.           Dist~ (* (distance (car Corners@) (cadr Corners@)) (cos (- (angle Pt1 Pt3) Ang~)))
  49.           Pt2 (polar Pt1 Ang~ Dist~)
  50.           Pt4 (polar Pt3 Ang~ (- Dist~))
  51.     );setq
  52.     (list Pt1 Pt2 Pt3 Pt4)
  53.   );defun Corners:
  54.   ;-----------------------------------------------------------------------------
  55.   (setq EntList@ (entget Entity^)
  56.         EntType$ (cdr (assoc 0 EntList@))
  57.   );setq
  58.   (cond
  59.     ((= EntType$ "TEXT")
  60.       (setq Return@ (Corners: Entity^))
  61.     );case
  62.     ((or (= EntType$ "MTEXT")(= EntType$ "DIMENSION"))
  63.       (command "UNDO" "MARK")
  64.       (setq EntNext^ (entlast))
  65.       (command "EXPLODE" Entity^)
  66.       (if (= EntType$ "DIMENSION")
  67.         (command "EXPLODE" (entlast))
  68.       );if
  69.       (while (setq EntNext^ (entnext EntNext^))
  70.         (if (= "TEXT" (cdr (assoc 0 (entget EntNext^))))
  71.           (setq Textboxes@ (append Textboxes@ (list (Text-Box EntNext^))))
  72.         );if
  73.       );while
  74.       (command "UNDO" "BACK")
  75.       (setq AngEntity~ (angle (nth 0 (nth 0 Textboxes@))(nth 1 (nth 0 Textboxes@)))
  76.             Zero (list 0 0)
  77.             First t
  78.       );setq
  79.       (foreach List@ Textboxes@
  80.         (foreach Pt List@
  81.           (setq X (car Pt) Y (cadr Pt))
  82.           (if First
  83.             (setq First nil X1 X Y1 Y)
  84.           );if
  85.           (if (< X X1)(setq X1 X))
  86.           (if (< Y Y1)(setq Y1 Y))
  87.         );foreach
  88.       );foreach
  89.       (if (or (< X1 0)(< Y1 0))
  90.         (progn
  91.           (cond
  92.             ((and (< X1 0)(< Y1 0))(setq MovePt (list X1 Y1)))
  93.             ((< X1 0)(setq MovePt (list X1 0)))
  94.             ((< Y1 0)(setq MovePt (list 0 Y1)))
  95.           );cond
  96.           (command "UCS" "M" MovePt)
  97.         );progn
  98.       );if
  99.       (setq First t)
  100.       (foreach List@ Textboxes@
  101.         (foreach Pt List@
  102.           (setq Ang~ (- (angle Zero Pt) AngEntity~))
  103.           (setq Pt (polar Zero Ang~ (distance Zero Pt)))
  104.           (setq X (car Pt) Y (cadr Pt))
  105.           (if First
  106.             (setq First nil X1 X X3 X Y1 Y Y3 Y)
  107.           );if
  108.           (if (< X X1)(setq X1 X))
  109.           (if (< Y Y1)(setq Y1 Y))
  110.           (if (> X X3)(setq X3 X))
  111.           (if (> Y Y3)(setq Y3 Y))
  112.         );foreach
  113.       );foreach
  114.       (command "UCS" "W")
  115.       (setq NewPts@ (list (list X1 Y1)(list X3 Y1)(list X3 Y3)(list X1 Y3)))
  116.       (foreach Pt NewPts@
  117.         (setq Ang~ (+ (angle Zero Pt) AngEntity~))
  118.         (setq Pt (polar Zero Ang~ (distance Zero Pt)))
  119.         (setq Return@ (append Return@ (list Pt)))
  120.       );foreach
  121.     );case
  122.   );cond
  123.   Return@
  124. );defun Text-Box
  125. ;-------------------------------------------------------------------------------
  126. (princ)

本帖子中包含更多资源

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

x

点评

此段代码没考虑在ucs下的情况。  发表于 2014-2-22 12:14
发表于 2009-12-18 18:23:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-12-18 18:25:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-12-18 18:46:00 | 显示全部楼层

谢谢xianaihua

发表于 2009-12-18 19:02:00 | 显示全部楼层

回复:(carrot1983)将字体附上。可能跟字体有关系。...

caoyin 版主,能否看一下你的算法?

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-24 11:24 , Processed in 0.226723 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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