找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1236|回复: 2

[分享]:使用函数生成文本的好处(附函数)

[复制链接]
发表于 2002-11-14 19:27:37 | 显示全部楼层 |阅读模式

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

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

×
使用函数生成文本的好处(附函数)
1.速度快
2.不容易出错,使用COMMAND函数时如果当前字体高度是个固定值,就会出错
3.容易控制文本属性,你可以随意控制文本的属性,而且使用还比COMMAND函数简洁,可以忽略次要属性。
4.可以有返回值,后附的函数返回生成的文本的ENTNAME


  1. ;;-------------------------------------------------
  2. ;;#$help.begin
  3. ;;##function.name->  (dd_creatext txt   p lst)
  4. ;;##keyword-> create text   生成 文本
  5. ;;##Description->   生成 文本  比command text 安全方便  
  6. ;;##Arguments.begin
  7. ;|  
  8.    txt  <string> 文本字符
  9.    p  <point>文本插入点
  10.    lst=( h LAYER w ts) 文本次要属性表,可以只要部分属性或者为 nil
  11.    h  <real> 文本高度
  12.    layer <string> 层名
  13.    w  <real>  文本度
  14.    ts <string> 文本字型|;
  15. ;;##Arguments.end
  16. ;;##return->  entlist
  17. ;;##examples.begin
  18. ;|   (dd_creatext "DDTEST" '(0 0 0) '( 1.0 ) )     |;
  19. ;;##examples.end
  20. ;;##see also->
  21. ;;#$help.end
  22. ;;-------------------------------------------------

  23. ;;##use function->
  24. ;;##use ddsysvar->
  25. ;;##Variable Description ;|  |;
  26. (defun dd_creatext (TXT P  lst / otxtlst txtlst  h LAYER w ts)
  27.   
  28.   (SETQ H (CAR LST)  LST (CDR LST))
  29.   (SETQ LAYER (CAR LST)  LST (CDR LST))
  30.   (SETQ W (CAR LST)  LST (CDR LST))
  31.   (SETQ TS (CAR LST)  LST (CDR LST))

  32.     (IF (NULL H )  (SETQ H (getvar "TEXTSIZE")))
  33.     (IF (NULL LAYER) (setq layer (getvar "clayer")))
  34.     (IF (NULL TS) (SETQ TS (getvar "TEXTSTYLE")))
  35.     (IF (NULL w) (SETQ w  (cdr (assoc 41 (entget (tblobjname "style" ts))))))
  36.      ;;;;;;;;;;;;
  37.      (setq otxtlst ( list  '(0 . "TEXT")  '(100 . "AcDbEntity") '(67 . 0)  '(100 . "AcDbText") '(50 . 0.0)  '(51 . 0.0)
  38. '(71 . 0) '(72 . 0) '(11 0.0 0.0 0.0)  '(210 0.0 0.0 1.0) '(100 . "AcDbText") '(73 . 0)))
  39.                           
  40.     ;;;;;;;;;;;;;
  41.     (setq txtlst (append oTXTlst (list (cons 10 P) (cons 8 layer)  (cons 40 h) (cons 1 txt) (CONS 7  TS) (cons 41 w) )))
  42.   ;;(if dd*testmode* (print entlst))
  43.    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  44.      (if (entmake txtlst) (entlast))  ;;;返回实体名
  45.   
  46. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-15 12:44:19 | 显示全部楼层
我也觉得stdlib的很乱,主要是没法一个一个细看。我用的是当时从
圆方还是中望的lisp中咪来自己补充的,格式和原程序的差不多。


  1. ;;制造 TEXT 实体  (#m_txt1 pt txt "dxfs" (* 3 0bl) 0.7 0 "L" lay color)

  2. (defun #m_txt1 (pt txt sty th wid tan dq lay color / DQ1 D72 D73)
  3.   (setq dq1(strcase dq))
  4.   (cond
  5.     ((OR(= dq1 "L")(= dq1 "")) (setq d72 0 d73 0))
  6.     ((= dq1 "C")(setq d72 1 d73 0))
  7.     ((= dq1 "R")(setq d72 2 d73 0))
  8.     ((= dq1 "A")(setq d72 3 d73 0))
  9.     ((= dq1 "M")(setq d72 4 d73 3))
  10.     ((= dq1 "F")(setq d72 5 d73 0))

  11.     ((= dq1 "TL")(setq d72 0 d73 3))
  12.     ((= dq1 "TC")(setq d72 1 d73 3))
  13.     ((= dq1 "TR")(setq d72 2 d73 3))

  14.     ((= dq1 "ML")(setq d72 0 d73 2))
  15.     ((= dq1 "MC")(setq d72 1 d73 2))
  16.     ((= dq1 "MR")(setq d72 2 d73 2))

  17.     ((= dq1 "BL")(setq d72 0 d73 1))
  18.     ((= dq1 "BC")(setq d72 1 d73 1))
  19.     ((= dq1 "BR")(setq d72 2 d73 1))
  20.     (T  (setq d72 0 d73 0))
  21.   )
  22. (if (and (= d72 0)(= d73 0))
  23.   (setq en000 (list
  24.       (cons 0 "TEXT")
  25.       (cons 1 txt)
  26.       (cons 7 sty)
  27.       (cons 8 lay)
  28.       (cons 10 pt)
  29.       (cons 40 th)
  30.       (cons 41 wid)
  31.       (cons 50 tan)
  32.       (cons 72 d72)
  33.       (cons 73 d73)   ) )
  34.   (setq en000 (list
  35.       (cons 0 "TEXT")
  36.       (cons 1 txt)
  37.       (cons 7 sty)
  38.       (cons 8 lay)
  39.       (cons 10 pt)
  40.       (cons 11 pt)
  41.       (cons 40 th)
  42.       (cons 41 wid)
  43.       (cons 50 tan)
  44.       (cons 72 d72)
  45.       (cons 73 d73)   ) )
  46.   )
  47.   (IF (= STY "STANDARD")(setq en000 (append en000 (list (cons 51 0.261799)))))
  48.   (if (/= -1 color) (setq en000 (append en000 (list (cons 62 color)))))
  49.   (if (= nil (entmake en000)) (princ "\n制造 TEXT 实体失败.")  )
  50. )


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

使用道具 举报

 楼主| 发表于 2002-11-15 17:13:07 | 显示全部楼层
对啊 STDLIB实在太罗索了,开始我就按照它的思想作的,结果由于参数的不同,一个函数产生很多不同版本,只好用后缀1 2 3表示,
使用很不方便,而且容易出错,但LISP又不可以定义缺省参数的函数,
直到最近才想到将次要参数封装在一个表里,这样等于可以使用缺省参数的函数了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 06:30 , Processed in 0.176321 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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