找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 11809|回复: 127

[教学]:在AutoCAD中做三维文字...

[复制链接]
发表于 2003-4-17 20:17:20 | 显示全部楼层 |阅读模式

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

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

×
在AutoCAD中做三维文字...(陈伯雄)

1) 写字,例如用隶书体TTF
2) 提取文字线框,用附加程序进行
3) 删除不需要的线
4) 接合成多段线(Pedit-M-All-Y-J...)
5) 一起拉伸
6) 做必要的布尔运算,完成。
------------------------------------------------------------------
程序:
(Defun C:TextB (/ lvl lul lvp lvs lss ViewPL)
(SetQ lvs (GetVar "viewsize")
lss (GetVar "screensize")
)
(SetVar "cmdecho" 0)
(Defun ViewPL ( / vi vw vh vc)
(setq vi (* lvs (/ (Car lss) (Cadr lss)))
vc (GetVar "viewctr")
vw (list (- (car vc) (* 0.5 vi))
(- (cadr vc) (* 0.5 lvs))
)
vh (list (+ (car vc) (* 0.5 vi))
(+ (cadr vc) (* 0.5 lvs))
)
)
(List vw vh)
)
(PrinC "\n要分解的文字行: ")
(SetQ ltl (SSGet)
lvl (ViewPL)
lul (List (Caar lvl) (Cadadr lvl))
lvp (GetVar "viewctr")
)
(Command "mirror" ltl "" lvp "@0,1" "y"
"wmfout" "textb" ltl ""
"erase" ltl ""
"wmfin" "textb" lul "2" "" ""
"mirror" (EntLast) "" lvp "@0,1" "y"
"explode" (EntLast)
"erase" (ssget "p") "R" "W"
(polar (car lvl) (* 0.25 Pi)
(Max (Abs (/ lvs (Cadr lss)))
(Abs (/ (* lvs
(/ (Car lss) (Cadr lss))
)
(Car lss)
)
)
)
)
(cadr lvl)
""
)
(SetVar "cmdecho" 1)(PrinC)
)
----------------------------------------------
结果实例:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-4-17 20:57:10 | 显示全部楼层
我看这样太麻烦吧?无须编程!
最好的方法是:1.输入汉字,设置好字体. 2.命令TXTEXP. 3.将多余的线条删掉,根据结构制作一个个的面域, 再EXT 就OK了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-4-17 21:25:21 | 显示全部楼层
谢谢陈老师!!

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

使用道具 举报

已领礼包: 10个

财富等级: 恭喜发财

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

使用道具 举报

发表于 2003-4-19 19:43:41 | 显示全部楼层

最初由 Kosilin 发布
[B]我看这样太麻烦吧?无须编程!
最好的方法是:1.输入汉字,设置好字体. 2.命令TXTEXP. 3.将多余的线条删掉,根据结构制作一个个的面域, 再EXT 就OK了! [/B]

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2003-4-22 16:20:10 | 显示全部楼层
最初由 Kosilin 发布
[B]我看这样太麻烦吧?无须编程!
最好的方法是:1.输入汉字,设置好字体. 2.命令TXTEXP. 3.将多余的线条删掉,根据结构制作一个个的面域, 再EXT 就OK了! [/B]
转贴一下陈先生的回答
  1. 直接用CAD的Express中的炸開文字命令Textxp炸開文字。
  2. 再使用BOUNDARY命令做出面組。
  3. 再伸!

  4. 看来您还不知道,您说的功能也是LISP程序,源程序在下面。
  5. 您可以比较一下,您不认为还是我的程序更简洁么,在同样的功能下...

  6. ;;
  7. ;;;
  8. ;;; By Dominic Panholzer
  9. ;;;
  10. ;;; TXTEXP.LSP
  11. ;;; Copyright ?1999 by Autodesk, Inc.
  12. ;;;
  13. ;;; Your use of this software is governed by the terms and conditions of the
  14. ;;; License Agreement you accepted prior to installation of this software.
  15. ;;; Please note that pursuant to the License Agreement for this software,
  16. ;;; "[c]opying of this computer program or its documentation except as
  17. ;;; permitted by this License is copyright infringement under the laws of
  18. ;;; your country. If you copy this computer program without permission of
  19. ;;; Autodesk, you are violating the law."
  20. ;;;
  21. ;;; AUTODESK PROVIDES THIS PROGRAM "AS IS" AND WITH ALL FAULTS.
  22. ;;; AUTODESK SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTY OF
  23. ;;; MERCHANTABILITY OR FITNESS FOR A PARTICULAR USE. AUTODESK, INC.
  24. ;;; DOES NOT WARRANT THAT THE OPERATION OF THE PROGRAM WILL BE
  25. ;;; UNINTERRUPTED OR ERROR FREE.
  26. ;;;
  27. ;;; Use, duplication, or disclosure by the U.S. Government is subject to
  28. ;;; restrictions set forth in FAR 52.227-19 (Commercial Computer
  29. ;;; Software - Restricted Rights) and DFAR 252.227-7013(c)(1)(ii)
  30. ;;; (Rights in Technical Data and Computer Software), as applicable.
  31. ;;;
  32. ;;; ----------------------------------------------------------------
  33. ;;;
  34. ;;; External Functions:
  35. ;;;
  36. ;;; ACET-ERROR-INIT --> ACETUTIL.FAS Intializes bonus error routine
  37. ;;; ACET-ERROR-RESTORE --> ACETUTIL.FAS Restores old error routine
  38. ;;; ACET-GEOM-ZOOM-FOR-SELECT --> ACETUTIL.FAS Zoom boundry to include points given
  39. ;;; ACET-LAYER-LOCKED --> ACETUTIL.FAS Checks to see if layer is locked
  40. ;;; ACET-GEOM-PIXEL-UNIT --> ACETUTIL.FAS Size of pixel in drawing units
  41. ;;; ACET-GEOM-TEXTBOX --> ACETUTIL.FAS Returns the textbox for any text
  42. ;;; ACET-GEOM-MIDPOINT --> ACETUTIL.FAS Returns midpoint between two points
  43. ;;; ACET-GEOM-VIEW-POINTS --> ACETUTIL.FAS Returns corner points of screen or viewport
  44. ;;; ACET-STR-FORMAT --> ACETUTIL.ARX String builder
  45. ;;; ACET-WMFIN --> ACETUTIL.FAS Brings in WMF file
  46. ;;;

  47. (defun c:txtexp (/ grplst getgname blknm FLTR GLST GDICT SS VIEW UPLFT TMPFIL TBX
  48. TMPFIL CNT PT1 PT2 ENT TXT TXTYP PTLST ZM LOCKED GNAM vpna vplocked)
  49. (acet-error-init
  50. (list
  51. (list "cmdecho" 0
  52. "highlight" 1
  53. "osmode" 0
  54. "Mirrtext" 1
  55. "limcheck" 0
  56. )
  57. T
  58. )
  59. )

  60. ; --------------------- GROUP LIST FUNCTION ----------------------
  61. ; This function will return a list of all the group names in the
  62. ; drawing and their entity names in the form:
  63. ; (( . ) ... ( . ))
  64. ; ----------------------------------------------------------------

  65. (defun acet-txtexp-grplst (/ GRP ITM NAM ENT GLST)

  66. (setq GRP (dictsearch (namedobjdict) "ACAD_GROUP"))
  67. (while (setq ITM (car GRP)) ; While edata item is available
  68. (if (= (car ITM) 3) ; if the item is a group name
  69. (setq NAM (cdr ITM) ; get the name
  70. GRP (cdr GRP) ; shorten the edata
  71. ITM (car GRP) ; get the next item
  72. ENT (cdr ITM) ; which is the ename
  73. GRP (cdr GRP) ; shorten the edata
  74. GLST ; store the ename and name
  75. (if GLST
  76. (append GLST (list (cons ENT NAM)))
  77. (list (cons ENT NAM))
  78. )
  79. )
  80. (setq GRP (cdr GRP)) ; else shorten the edata
  81. )
  82. )
  83. GLST ; return the list
  84. )

  85. ; ------------------- GET GROUP NAME FUNCTION --------------------
  86. ; This function returns a list of all the group names in GLST
  87. ; where ENT is a member. The list has the same form as GLST
  88. ; ----------------------------------------------------------------

  89. (defun acet-txtexp-getgname (ENT GLST / GRP GDATA NAM NLST)
  90. (if (and GLST (listp GLST))
  91. (progn
  92. (foreach GRP GLST
  93. (setq GDATA (entget (car GRP)))
  94. (foreach ITM GDATA ; step through the edata
  95. (if (and
  96. (= (car ITM) 340) ; if the item is a entity name
  97. (eq (setq NAM (cdr ITM)) ENT) ; and the ename being looked for
  98. )
  99. (setq NLST ; store the ename and name
  100. (if NLST
  101. (append NLST (list (cons (car GRP) (cdr GRP))))
  102. (list (cons (car GRP) (cdr GRP)))
  103. )
  104. )
  105. )
  106. )
  107. )
  108. )
  109. )
  110. NLST
  111. )

  112. ; ----------------------------------------------------------------
  113. ; MAIN PROGRAM
  114. ; ----------------------------------------------------------------

  115. (if (and ; Are we in plan view?
  116. (equal (car (getvar "viewdir")) 0 0.00001)
  117. (equal (cadr (getvar "viewdir")) 0 0.00001)
  118. (> (caddr (getvar "viewdir")) 0)
  119. )

  120. (progn

  121. (prompt "\nSelect text to be EXPLODED: ")

  122. (Setq FLTR ''''((-4 . " (-4 . " (0 . "MTEXT")
  123. (0 . "TEXT")
  124. (-4 . "OR>")
  125. (-4 . " (102 . "{ACAD_REACTORS") ; and not leader text
  126. (-4 . "NOT>")
  127. (-4 . "AND>")
  128. )
  129. GLST (acet-txtexp-grplst) ; Get all the groups in drawing
  130. GDICT (if GLST
  131. (dictsearch (namedobjdict) "ACAD_GROUP")
  132. )
  133. SS (ssget FLTR)
  134. CNT 0
  135. )
  136. ;; filter out the locked layers
  137. (if SS
  138. (setq SS (car (bns_ss_mod SS 1 T)))
  139. ) ;if

  140. ;; if we have anything left
  141. (if SS
  142. (progn
  143. (setq CNT 0) ; Reset counter
  144. (while (setq ENT (ssname SS CNT)) ; step through each object in set

  145. (and
  146. GLST ; if groups are present in the drawing
  147. (setq GNAM (acet-txtexp-getgname ENT GLST)) ; and the text item is in one or more
  148. (foreach GRP GNAM ; step through those groups
  149. (command "_.-group" "_r" ; and remove the text item
  150. (cdr GRP) ENT ""
  151. )
  152. )
  153. )

  154. (setq TBX (acet-geom-textbox (entget ENT) 0)) ; get textbox points

  155. (setq TBX (mapcar ''''(lambda (x)
  156. (trans x 1 0) ; convert the points to WCS
  157. )
  158. TBX
  159. )
  160. )

  161. (setq PTLST (append PTLST TBX)) ; Build list of bounding box
  162. ; points for text items selected

  163. (setq CNT (1+ CNT)) ; get the next text item
  164. ); while

  165. (setq PTLST (mapcar ''''(lambda (x)
  166. (trans x 0 1) ; convert all the points
  167. ) ; to the current ucs
  168. PTLST
  169. )
  170. )

  171. (if (setq ZM (acet-geom-zoom-for-select PTLST)) ; If current view does not contain
  172. (progn ; all bounding box points
  173. (setq ZM
  174. (list
  175. (list (- (caar ZM) (acet-geom-pixel-unit)) ; increase zoom area by
  176. (- (cadar ZM) (acet-geom-pixel-unit)) ; one pixel width to
  177. (caddar ZM) ; sure nothing will be lost
  178. )
  179. (list (+ (caadr ZM) (acet-geom-pixel-unit))
  180. (+ (cadadr ZM) (acet-geom-pixel-unit))
  181. (caddr (cadr zm))
  182. )
  183. )
  184. )
  185. (if (setq vpna (acet-currentviewport-ename))
  186. (setq vplocked (acet-viewport-lock-set vpna nil))
  187. );if
  188. (command "_.zoom" "_w" (car ZM) (cadr ZM)) ; zoom to include text objects
  189. )
  190. )

  191. (setq VIEW (acet-geom-view-points)
  192. TMPFIL (strcat (getvar "tempprefix") "txtexp.wmf")
  193. PT1 (acet-geom-midpoint (car view) (cadr view))
  194. PT2 (list (car PT1) (cadadr VIEW))
  195. )

  196. (if (acet-layer-locked (getvar "clayer")) ; if current layer is locked
  197. (progn
  198. (command "_.layer" "_unl" (getvar "clayer") "") ; unlock it
  199. (setq LOCKED T)
  200. )
  201. )

  202. (command "_.mirror" SS "" PT1 PT2 "_y"
  203. "_.WMFOUT" TMPFIL SS "")

  204. (if (findfile tmpfil) ; Does WMF file exist?
  205. (progn
  206. (command "_.ERASE" SS "") ; erase the orignal text
  207. (setq ss (acet-wmfin TMPFIL)) ; insert the WMF file
  208. (command "_.mirror" ss "" PT1 PT2 "_y")
  209. ) ;progn
  210. ) ;if


  211. (if LOCKED
  212. (command "_.layer" "_lock" (getvar "clayer") "") ; relock if needed
  213. ) ;if

  214. (if ZM (command "_.zoom" "_p")) ; Restore original view if needed
  215. (if vplocked
  216. (acet-viewport-lock-set vpna T) ;re-lock the viewport if needed.
  217. );if
  218. (prompt (acet-str-format "\n%1 text object(s) have been exploded to lines." CNT))
  219. (prompt "\nThe line objects have been placed on layer 0.")
  220. )
  221. )
  222. )
  223. (prompt "\nView needs to be in plan (0 0 1).")
  224. );if equal
  225. (acet-error-restore) ; Retsore values
  226. (princ)
  227. )


  228. (princ)





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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

发表于 2003-5-19 18:57:34 | 显示全部楼层
但TXTEXP把文字炸开后,常有把文的某一笔给炸消失了,但不知有没有什么办法解决
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-5-24 22:58:05 | 显示全部楼层
按Kosilin []的方法,会做了,在txtexp后,炸开,将多余的线条删掉,根据结构制作一个面域时,我是用pline一步步描的 ,效果不太理想,更好就是用region将其转变为面域后再拉伸,谢谢学友指导!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 20:28 , Processed in 0.206840 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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