找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1899|回复: 9

[建议]:屏幕上显示文字的函数

[复制链接]
发表于 2009-8-5 11:44:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
autocad 有在屏幕上显示动态直线的函数grdraw,没有在屏幕上显示文字的函数,有没有高手用其他语言写一个
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-8-7 17:40:53 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-8-13 12:17:24 | 显示全部楼层
下面是Terry Miller写的Vector_text.lsp你只做很少改动便可以改成Grdraw_text.
但只能下英文,而且要好效果还得下点功夫。

;-------------------------------------------------------------------------------
; vector_text - Draws text in a dialog image tile
; Arguments: 6
;   Justify$ = Justification option of "L" "ML" "TL" "C" "M" "TC" "R" "MR" or "TR"
;   X# = Starting X location
;   Y# = Starting Y location
;   Rotation# = Rotation angle of 0 or 90
;   Color# = Color number of text ranging from 0 to 255
;   TextStr$ = Text string to draw
; Returns: Draws text string in a dialog image tile
; Note: Use this function between a start_image and an end_image command.
; Example: (vector_text "M" 110 25 0 5 "Hello World")
;-------------------------------------------------------------------------------
(defun vector_text (Justify$ X# Y# Rotation# Color# TextStr$ / ChrList@ FontList@
  Item Num# Width# XY# X1# X2# Y1# Y2#)
  (setq Justify$ (strcase Justify$))
  (if (not (member Justify$ (list "L" "ML" "TL" "C" "M" "TC" "R" "MR" "TR")))
    (progn (princ "\nvector_text syntax error:\nJustification options are L, ML, TL, C, M, TC, R, MR, and TR.")(exit))
  );if
  (if (and (< Color# 0)(> Color# 255))
    (progn (princ "\nvector_text syntax error:\nColor value ranges between 0 and 255.")(exit))
  );if
  (if (or (< X# 0)(< Y# 0))
    (progn (princ "\nvector_text syntax error:\nValues for X and Y must be a positive number.")(exit))
  );if
  (if (not (or (= Rotation# 0)(= Rotation# 90)))
    (progn (princ "\nvector_text syntax error:\nRotation angle can only be 0 or 90 degrees.")(exit))
  );if
  (setq FontList@ (GetFontList TextStr$))
  (setq Width# 0)
  (if (= Rotation# 0)
    (progn
      (if (member Justify$ (list "TL" "TC" "TR"))
        (setq Y# (1- Y#))
      );if
      (if (member Justify$ (list "ML" "M" "MR"))
        (setq Y# (- Y# 5))
      );if
      (if (member Justify$ (list "L" "C" "R"))
        (setq Y# (- Y# 9))
      );if
      (foreach Item FontList@
        (setq Width# (+ Width# (nth 0 Item)))
      );foreach
      (if (member Justify$ (list "C" "M" "TC"))
        (setq X# (- X# (fix (+ (/ Width# 2.0) 0.5))))
      );if
      (if (member Justify$ (list "R" "MR" "TR"))
        (setq X# (- X# Width#))
      );if
      (foreach ChrList@ FontList@
        (setq Num# 1)
        (while (< Num# (length ChrList@))
          (setq XY# (nth Num# ChrList@)
                X1# (+ X# (nth Num# ChrList@))
                Y1# (+ Y# (nth (1+ Num#) ChrList@))
                X2# (+ X# (nth (+ Num# 2) ChrList@))
                Y2# (+ Y# (nth (+ Num# 3) ChrList@))
          );setq
          (if (and (/= XY# -1)(> X1# -1)(> Y1# -1)(> X2# -1)(> Y2# -1))
            (vector_image X1# Y1# X2# Y2# Color#)
          );if
          (setq Num# (+ Num# 4))
        );while
        (setq X# (+ X# (nth 0 ChrList@)))
      );foreach
    );progn
    (progn
      (if (member Justify$ (list "TL" "TC" "TR"))
        (setq X# (1- X#))
      );if
      (if (member Justify$ (list "ML" "M" "MR"))
        (setq X# (- X# 5))
      );if
      (if (member Justify$ (list "L" "C" "R"))
        (setq X# (- X# 9))
      );if
      (foreach Item FontList@
        (setq Width# (+ Width# (nth 0 Item)))
      );foreach
      (if (member Justify$ (list "C" "M" "TC"))
        (setq Y# (+ Y# (fix (+ (/ Width# 2.0) 0.5))))
      );if
      (if (member Justify$ (list "R" "MR" "TR"))
        (setq Y# (+ Y# Width#))
      );if
      (foreach ChrList@ FontList@
        (setq Num# 1)
        (while (< Num# (length ChrList@))
          (setq XY# (nth Num# ChrList@)
                X1# (+ X# (nth (1+ Num#) ChrList@))
                Y1# (- Y# (nth Num# ChrList@))
                X2# (+ X# (nth (+ Num# 3) ChrList@))
                Y2# (- Y# (nth (+ Num# 2) ChrList@))
          );setq
          (if (and (/= XY# -1)(> X1# -1)(> Y1# -1)(> X2# -1)(> Y2# -1))
            (vector_image X1# Y1# X2# Y2# Color#)
          );if
          (setq Num# (+ Num# 4))
        );while
        (setq Y# (- Y# (nth 0 ChrList@)))
      );foreach
    );progn
  );if
);defun vector_text
;-------------------------------------------------------------------------------
; GetFontList - Gets vector points of font string
; Arguments: 1
;   Str$ = Text string
; Returns: List of vector points of font string
;-------------------------------------------------------------------------------
(defun GetFontList (Str$ / C$ ChrList@ FontList@ Num# PercentPercent:)
  ;-----------------------------------------------------------------------------
  ; PercentPercent: - Replaces special characters begining with %%.
  ; Arguments: 1
  ;   Str$ = String
  ; Returns: String with %%d, %%c and %%p characters replaced.
  ;-----------------------------------------------------------------------------
  (defun PercentPercent: (Str$)
    (if (wcmatch Str$ "*%%D*")
      (setq Str$ (FindReplace Str$ "%%D" (chr 176)));degree
    );if
    (if (wcmatch Str$ "*%%d*")
      (setq Str$ (FindReplace Str$ "%%d" (chr 176)));degree
    );if
    (if (wcmatch Str$ "*%%P*")
      (setq Str$ (FindReplace Str$ "%%P" (chr 177)));plus/minus
    );if
    (if (wcmatch Str$ "*%%p*")
      (setq Str$ (FindReplace Str$ "%%p" (chr 177)));plus/minus
    );if
    (if (wcmatch Str$ "*%%C*")
      (setq Str$ (FindReplace Str$ "%%C" (chr 248)));diameter
    );if
    (if (wcmatch Str$ "*%%c*")
      (setq Str$ (FindReplace Str$ "%%c" (chr 248)));diameter
    );if
    (if (wcmatch Str$ "*&#216;*")
      (setq Str$ (FindReplace Str$ (chr 216) (chr 248)));diameter
    );if
    Str$
  );defun PercentPercent:
  ;-----------------------------------------------------------------------------
  ; Start of main function
  ;-----------------------------------------------------------------------------
  (setq Str$ (PercentPercent: Str$))
  (setq Num# 1)
  (repeat (strlen Str$)
    (setq C$ (substr Str$ Num# 1))
    (setq ChrList@
      (cond
        ((= C$" ")'(3 -1 -1 -1 -1))((= C$"!")'(3 1 7 1 1 1 9 1 9))((= C$"\"")'(5 1 1 1 3 4 1 4 3))((= C$"#")'(7 1 7 6 7 1 3 6 3 2 1 2 9 5 1 5 9))((= C$"$")'(6 3 1 3 10 1 8 1 8 2 9 4 9 1 3 1 4 4 6 2 5 4 2 2 2 5 8 5 7 5 3 5 3))((= C$"%")'(8 1 8 7 2 4 8 4 8 1 2 1 2 2 3 3 3 2 1 3 1 4 2 4 2 5 7 6 7 5 9 6 9 7 8 7 8))((= C$"&")'(6 1 6 1 8 2 9 3 9 4 8 4 7 1 2 1 3 2 4 2 5 3 6 3 6 2 1 2 1 3 2 3 3 5 9 5 9 5 6 5 6))((= C$"'")'(2 1 1 1 3))((= C$"(")'(3 1 2 1 10 2 11 2 11 2 1 2 1))((= C$")")'(3 2 2 2 10 1 11 1 11 1 1 1 1))((= C$"*")'(4 1 4 3 2 1 2 3 4))((= C$"+")'(6 1 6 5 6 3 4 3 8))((= C$",")'(3 1 10 2 9))((= C$"-")'(3 1 6 2 6))((= C$".")'(3 1 9 1 9))((= C$"/")'(5 1 9 4 2 4 1 4 1))((= C$"0")'(6 1 2 1 8 2 9 4 9 2 1 4 1 5 2 5 8))((= C$"1")'(6 3 1 3 9 1 2 2 2))((= C$"2")'(6 5 9 1 9 1 8 4 5 1 2 1 2 2 1 4 1 5 2 5 4))((= C$"3")'(6 1 8 1 8 2 9 4 9 1 2 1 2 4 5 3 5 2 1 4 1 5 8 5 6 5 2 5 4))((= C$"4")'(6 5 7 1 7 4 1 4 9 3 2 1 7))((= C$"5")'(6 5 1 1 1 1 8 1 8 4 9 2 9 1 1 1 5 2 4 4 4 5 5 5 8))
        ((= C$"6")'(6 1 8 1 2 2 9 4 9 4 5 2 5 2 1 4 1 5 8 5 6 5 2 5 2))((= C$"7")'(6 5 1 2 8 1 1 5 1 2 9 2 9))((= C$"8")'(6 1 6 1 8 2 9 4 9 1 2 1 4 2 5 4 5 2 1 4 1 5 6 5 8 5 2 5 4))((= C$"9")'(6 1 8 1 8 2 9 4 9 1 2 1 4 2 5 4 5 2 1 4 1 5 2 5 8))((= C$":")'(3 1 9 1 9 1 4 1 4))((= C$";")'(3 1 10 2 9 2 4 2 4))((= C$"<")'(6 1 6 4 9 1 6 4 3))((= C$"=")'(6 1 7 5 7 1 5 5 5))((= C$">")'(6 4 6 1 9 1 3 4 6))((= C$"?")'(6 3 6 3 7 3 9 3 9 1 2 1 2 4 5 4 5 2 1 4 1 5 2 5 4))((= C$"@")'(11 4 10 8 10 4 1 7 1 1 4 1 7 2 9 3 9 2 8 2 9 4 5 4 6 3 2 2 2 2 2 2 3 8 7 10 7 5 7 6 7 7 4 5 4 7 4 7 6 8 2 9 2 9 2 9 3 10 4 10 7))((= C$"A")'(7 3 1 5 6 1 7 5 7 0 9 0 8 1 6 3 1 6 8 6 9))((= C$"B")'(7 1 1 1 9 1 9 4 9 1 5 4 5 1 1 4 1 5 6 5 8 5 2 5 4))((= C$"C")'(7 2 9 5 9 2 1 5 1 1 2 1 8 6 8 6 8 6 2 6 2))((= C$"D")'(8 1 1 1 9 1 9 4 9 1 1 4 1 6 3 6 7 5 8 5 8 5 2 5 2))((= C$"E")'(7 1 9 5 9 1 1 5 1 1 1 1 9 1 5 4 5))((= C$"F")'(6 1 1 5 1 1 1 1 9 1 5 4 5))((= C$"G")'(8 4 5 6 5 2 1 5 1 1 2 1 8 4 9 2 9 6 5 6 9 5 8 5 8 6 2 6 2))
        ((= C$"H")'(8 1 5 6 5 1 1 1 9 6 1 6 9))((= C$"I")'(3 1 1 1 9))((= C$"J")'(5 3 8 3 1 1 9 2 9 0 7 0 8))((= C$"K")'(7 2 5 6 9 5 1 2 4 1 1 1 9))((= C$"L")'(6 1 9 5 9 1 1 1 9))((= C$"M")'(9 4 8 6 3 1 9 1 1 4 8 2 3 7 1 7 9))((= C$"N")'(8 1 1 1 9 2 2 3 5 4 6 4 6 6 9 6 1 5 7 5 8))((= C$"O")'(8 2 9 5 9 2 1 5 1 1 2 1 8 6 2 6 8))((= C$"P")'(7 5 5 1 5 1 1 5 1 1 9 1 1 6 2 6 4))((= C$"Q")'(8 5 8 4 7 2 9 5 9 2 1 5 1 1 2 1 8 6 2 6 8 6 10 6 10))((= C$"R")'(8 1 1 5 1 5 5 1 5 1 9 1 1 6 6 6 9 6 2 6 4))((= C$"S")'(7 1 8 1 8 2 9 4 9 1 2 1 4 2 5 4 5 2 1 4 1 5 6 5 8 5 2 5 2))((= C$"T")'(7 1 1 5 1 3 1 3 9))((= C$"U")'(8 2 9 5 9 1 1 1 8 6 1 6 8))((= C$"V")'(7 5 4 3 9 1 4 3 9 0 1 1 4 6 1 5 4))((= C$"W")'(11 5 4 3 9 1 4 3 9 0 1 1 4 10 1 9 4 9 4 7 9 5 4 7 9 5 3 5 3))((= C$"X")'(7 1 3 5 7 1 7 5 3 0 9 0 8 0 1 0 2 6 8 6 9 6 1 6 2))((= C$"Y")'(7 3 5 5 3 3 6 3 9 1 3 3 5 0 1 0 2 6 1 6 2))((= C$"Z")'(7 0 8 6 2 0 9 6 9 0 1 6 1))((= C$"[")'(3 1 1 1 11 2 11 2 11 2 1 2 1))((= C$"\\")'(5 1 2 4 9 1 1 1 1))
        ((= C$"]")'(3 2 1 2 11 1 11 1 11 1 1 1 1))((= C$"^")'(6 1 2 3 0 3 0 5 2))((= C$"_")'(6 0 11 5 11))((= C$"`")'(3 1 1 2 2))((= C$"a")'(6 2 6 5 6 5 9 2 9 1 8 1 7 4 4 2 4 5 9 5 5))((= C$"b")'(6 1 1 1 9 1 9 4 9 1 4 4 4 5 5 5 8))((= C$"c")'(6 1 5 1 8 2 9 4 9 2 4 4 4 5 8 5 8 5 5 5 5))((= C$"d")'(6 2 4 5 4 2 9 5 9 1 5 1 8 5 9 5 1))((= C$"e")'(6 1 6 5 6 1 5 1 8 2 9 4 9 2 4 4 4 5 8 5 8 5 5 5 5))((= C$"f")'(3 1 2 1 9 2 4 2 4 2 1 2 1))((= C$"g")'(6 2 4 5 4 2 9 5 9 1 5 1 8 4 11 1 11 5 4 5 10))((= C$"h")'(6 1 1 1 9 2 5 2 5 3 4 4 4 5 5 5 9))((= C$"i")'(2 1 9 1 4 1 1 1 1))((= C$"j")'(2 1 4 1 11 1 1 1 1))((= C$"k")'(6 5 9 2 6 1 1 1 9 2 6 4 4))((= C$"l")'(2 1 1 1 9))((= C$"m")'(8 1 9 1 4 4 9 4 5 3 4 2 4 7 9 7 5 5 4 6 4))((= C$"n")'(6 1 9 1 4 2 5 2 5 3 4 4 4 5 5 5 9))((= C$"o")'(6 1 5 1 8 2 9 4 9 2 4 4 4 5 8 5 5))((= C$"p")'(6 1 4 1 11 1 9 4 9 1 4 4 4 5 8 5 5))((= C$"q")'(6 5 9 2 9 5 4 2 4 1 8 1 5 5 4 5 11))((= C$"r")'(3 1 9 1 4 2 4 2 4))((= C$"s")'(5 1 5 4 8 1 8 1 8 2 9 3 9 2 4 3 4 4 5 4 5))
        ((= C$"t")'(3 1 1 1 8 2 9 2 9 2 4 2 4))((= C$"u")'(6 1 4 1 8 2 9 3 9 4 8 4 8 5 9 5 4))((= C$"v")'(6 3 9 5 4 1 4 3 9))((= C$"w")'(8 6 9 4 4 1 4 1 7 2 9 4 4 7 4 7 7))((= C$"x")'(5 1 4 2 7 3 6 4 9 1 9 1 8 2 7 2 7 4 4 4 5))((= C$"y")'(5 4 4 4 7 1 4 1 7 1 11 0 11 2 8 2 10 3 8 3 8))((= C$"z")'(5 1 8 4 5 1 9 4 9 1 4 4 4))((= C$"{")'(4 2 6 2 9 3 10 3 10 1 5 1 5 2 4 2 1 3 0 3 0))((= C$"|")'(2 1 1 1 10))((= C$"}")'(4 2 6 2 9 1 10 1 10 2 4 2 1 3 5 3 5 1 0 1 0))((= C$"~")'(7 2 2 5 3 1 3 1 3 6 2 6 2))((= C$(chr 176))'(4 1 2 2 3 2 1 3 2))((= C$(chr 177))'(6 1 9 5 9 1 5 5 5 3 3 3 7))((= C$(chr 248))'(6 3 5 5 3 1 8 3 6 4 8 3 8 1 4 1 6 3 3 2 3 5 5 5 7))
      );cond
    );setq
    (setq FontList@ (append FontList@ (list ChrList@)))
    (setq Num# (1+ Num#))
  );repeat
  (if FontList@ FontList@ (list '(3 -1 -1 -1 -1)))
);defun GetFontList
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-8-14 13:23:35 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-8-14 14:11:59 | 显示全部楼层
根据3楼代码改写后:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-6 17:42:53 | 显示全部楼层
方法:
1.反编译汉字字形shx-》shp,提取汉字
2.在gr过程中取屏幕高度,设字高比例,写text,动态更新,退出时删除
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-7 08:48:28 | 显示全部楼层

Re: [建议]:屏幕上显示文字的函数

最初由 dailx 发布
[B]autocad 有在屏幕上显示动态直线的函数grdraw,没有在屏幕上显示文字的函数,有没有高手用其他语言写一个 [/B]


动态显示啥都可以的,用grread,最好是先制造出图元,然后不断更新图元,。

像这样子:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2009-9-8 09:26:49 | 显示全部楼层
C 可能误解意思了。楼主可能想用grdraw来做这件事。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-17 12:33:06 | 显示全部楼层
楼主是想要这种效果吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2009-9-17 12:34:45 | 显示全部楼层
Lisp是可以完成的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 22:25 , Processed in 0.236599 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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