明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 蓝心儿

第一次编程就要郁闷而死

  [复制链接]
发表于 2003-10-17 20:52:00 | 显示全部楼层
关于textbox的详细信息请参考AutoLISP Developer's Guide中的 :

AutoLISP Developer's Guide\Using AutoLISP to Communicate with AutoCAD \Geometric Utilities\Text Extents
发表于 2003-10-17 21:01:00 | 显示全部楼层
函数 textbox 返回文字对象矩形边框的对角点坐标。该函数的唯一参数是一个图元定义表,该表的格式与 entget 返回表(组码及其值的关联表)的类型相同。该表可以包含文字对象的完整关联表,也可以仅包括描述文字字符串的表。
函数 textbox 返回的点描述了文字对象的边框(一个假想的包含文字对象的框),假定它的插入点位于 (0,0,0),且它的旋转角度为 0。返回的第一个表是点 (0.0 0.0 0.0),除非文字对象是斜的或垂直的,或者它包含下行字符(例如 g 和 p)。第一个点表的值指定从文字插入点到边框左下角的距离,该边框是包含此文字对象的最小矩形。第二个点表指定该边框的右上角。所返回的点表总是该边框的左下角点和右上角点,而与文字测量的方向无关。

下例中,列举了 textbox 可以接受的最小的图元定义表。由于没有附加信息,所以 textbox 使用当前缺省的文字样式和高度。

命令:  (textbox '((1 . "Hello world")) )

((0.0 0.0 0.0) (2.80952 1.0 0.0))

textbox 的实际返回值会因当前文字样式不同而有所变化

不管文字方向或样式如何,由 textbox 返回的点是用原点位于文字插入点(组码 10)的对象坐标系 (OCS) 来表示的。当把由 textbox 返回的坐标转换为定义了文字实际区域的点时,这个点可以被参照。无论选定文字的方向如何,下列两个例程都调用 textbox 在文字周围放置边框。

第一个例程调用函数 textbox 在选定文字周围绘制边框。

  1. (defun C:TBOX ( / textent tb ll ur ul lr)
  2.   (setq textent (car (entsel "\nSelect text: ")))
  3.   (command "ucs" "Object" textent)
  4.   (setq tb (textbox (list  (cons -1 textent)))
  5.         ll (car tb)
  6.         ur  (cadr tb)
  7.         ul  (list (car ll) (cadr ur))
  8.         lr (list (car ur) (cadr ll))
  9.   )
  10.   (command "pline" ll lr ur ul "Close")
  11.   (command "ucs" "p")
  12.   (princ)

  13. )

第二个例程通过调用 AutoLISP 函数 sin 和 cos 进行几何计算后,完成了与第一个程序相同的操作。只有在当前 UCS 平行于文字对象所在平面时,它的结果才是正确的。


  1. (defun C:TBOX2 ( / textent ang sinrot cosrot
  2.                    t1 t2 p0 p1 p2 p3 p4)
  3.   (setq textent (entget (car (entsel "\nSelect text: "))))
  4.   (setq p0 (cdr (assoc 10 textent))
  5.         ang (cdr (assoc 50 textent))
  6.         sinrot (sin ang)
  7.         cosrot (cos ang)
  8.         t1 (car (textbox textent))
  9.         t2 (cadr (textbox textent))
  10.         p1 (list
  11.           (+ (car p0)
  12.             (- (* (car t1) cosrot)(* (cadr t1) sinrot))
  13.           )
  14.           (+ (cadr p0)

  15.             (+ (* (car t1) sinrot)(* (cadr t1) cosrot))
  16.           )
  17.       )
  18.       p2 (list
  19.         (+ (car p0)
  20.           (- (* (car t2) cosrot)(* (cadr t1) sinrot))
  21.         )
  22.         (+ (cadr p0)
  23.           (+ (* (car t2) sinrot)(* (cadr t1) cosrot))
  24.         )
  25.       )
  26.       p3 (list
  27.         (+ (car p0)
  28.           (- (* (car t2) cosrot)(* (cadr t2) sinrot))
  29.         )
  30.         (+ (cadr p0)
  31.           (+ (* (car t2) sinrot)(* (cadr t2) cosrot))
  32.         )
  33.       )

  34.       p4 (list
  35.         (+ (car p0)
  36.           (- (* (car t1) cosrot)(* (cadr t2) sinrot))
  37.         )
  38.         (+ (cadr p0)
  39.           (+ (* (car t1) sinrot)(* (cadr t2) cosrot))
  40.         )
  41.       )
  42.   )
  43.   (command "pline" p1 p2 p3 p4 "c")
  44.   (princ)

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

本版积分规则

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

GMT+8, 2024-10-2 14:22 , Processed in 0.154298 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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