如何在一条线上生成文字
如何在一条线上生成文字 ;我自己编写的直线上写文字qx命令(defun c:qx (/ oos oor old_lay old_sty pt ang0 tmq3 fyf s1 e1 tmq1 pt00 pt01 pt1x pt2x pt1y pt2y ang1 k pt1 tst pt0 ang2)
(defun ffg-getdxf (en dxf)
(cdr (assoc dxf (entget en)))
)
(defun ffg-entsel (msg filter / ss sss)
(setq ss (entsel msg))
(if (/= ss nil)
(progn
(command "_.select" (car ss) "")
(if (not (setq sss (ssget "P" filter)))
(setq ss nil)
(list (ssname sss 0) (cadr ss))
)
)
)
)
(setvar "cmdecho" 0)
(setq oor (getvar "orthomode"))
(setvar "orthomode" 0)
(setq oos (getvar "osmode"))
(setvar "osmode" 0)
(setq old_lay (getvar "clayer"))
(setq old_sty (getvar "textstyle"))
(setq fyf (getvar "useri2"))
(setq tmq3 (getvar "users4"))
(if (< fyf 0)
(setq fyf (abs fyf))
)
(if (= fyf 0)
(progn
(setq fyf 300)
(setvar "useri2" fyf)
)
)
(if (= (tblobjname "LAYER" "Text") nil)
(progn
(entmake (list (quote (0 . "LAYER")) (quote (100 . "AcDbSymbolTableRecord")) (quote (100 . "AcDbLayerTableRecord"))
(quote (6 . "CONTINUOUS")) (quote (62 . 7)) (quote (70 . 0)) (cons 2 "Text")
)
)
)
)
(if (not (tblsearch "style" "TSSD_REIN"))
(progn
(command "-style" "TSSD_REIN" "txt.shx,hztxt.shx" "0" "0.7" "0" "N" "N" "N")
)
)
(initget "R C")
(setq yesno (getkword "\n文字与直线对齐方式[边对齐(R)/中间对齐(C)] <C>:"))
(cond
((= yesno "C")
(setq tst 1)
)
((= yesno "c")
(setq tst 1)
)
((= yesno "R")
(setq tst 2)
)
((= yesno "r")
(setq tst 2)
)
(t
(setq tst 1)
)
)
(setq fyf (getint (strcat "\n请输入文字高度< " (itoa fyf) " >:"))
fyf (if fyf
fyf
(getvar "useri2")
)
)
(setvar "useri2" fyf)
(while (setq s1 (ffg-entsel "\n请选择一根直线(line或lwpolyline)<退出>: " (quote ((0 . "LINE,LWPOLYLINE")))))
(setq e1 (car s1)
tmq1 (ffg-getdxf e1 0)
pt0 (cadr s1)
)
(if (= "LINE" tmq1)
(progn
(setq pt00 (ffg-getdxf e1 10)
pt01 (ffg-getdxf e1 11)
ang0 (angle pt00 pt01)
ang0 (/ (* ang0 180) pi)
ang2 ang0
pt1x (car pt00)
pt1y (cadr pt00)
pt2x (car pt01)
pt2y (cadr pt01)
)
)
)
(if (and
(= "LWPOLYLINE" tmq1)
(= (ffg-getdxf e1 90) 2)
)
(progn
(setq pt00 (ffg-getdxf e1 10)
pt01 (cdr (assoc 10 (reverse (entget e1))))
ang0 (angle pt00 pt01)
ang0 (/ (* ang0 180) pi)
ang2 ang0
pt1x (car pt00)
pt1y (cadr pt00)
pt2x (car pt01)
pt2y (cadr pt01)
)
)
)
(if (and
(< (distance pt0 pt00) (distance pt0 pt01))
(= tst 2)
)
(setq k 0)
)
(if (and
(> (distance pt0 pt00) (distance pt0 pt01))
(= tst 2)
)
(setq k 1)
)
(if (= tst 1)
(setq k 0.5)
)
(setq ptx (+ pt1x (* (- pt2x pt1x) k))
pty (+ pt1y (* (- pt2y pt1y) k))
pt1 (list ptx pty)
)
(if (and
(> ang0 90)
(<= ang0 270)
)
(progn
(setq ang0 (angle pt01 pt00)
ang0 (/ (* ang0 180) pi)
ang1 (+ ang0 90)
ang1 (rem ang1 360)
pt (polar pt1 (* (/ ang1 180) pi) 150)
)
)
(progn
(setq ang1 (+ ang0 90)
ang1 (rem ang1 360)
pt (polar pt1 (* (/ ang1 180) pi) 150)
)
)
)
(setq tmq3 (getstring t (strcat "\n请输入标注文本< " tmq3 " >:"))
tmq3 (if tmq3
tmq3
(getvar "users4")
)
)
(if (= tmq3 "")
(setq tmq3 (getvar "users4"))
)
(setvar "users4" tmq3)
(if (/= old_sty "TSSD_REIN")
(progn
(command "text" "style" "TSSD_REIN")
(command)
)
)
(setvar "clayer" "Text")
(if (= tst 1)
(command "text" "j" "bc" pt fyf ang0 tmq3)
)
(if (and
(< (distance pt0 pt00) (distance pt0 pt01))
(= tst 2)
)
(if (and
(> ang2 90)
(<= ang2 270)
)
(command "text" "j" "bR" pt fyf ang0 tmq3)
(command "text" "j" "bl" pt fyf ang0 tmq3)
)
)
(if (and
(> (distance pt0 pt00) (distance pt0 pt01))
(= tst 2)
)
(if (and
(> ang2 90)
(<= ang2 270)
)
(command "text" "j" "bl" pt fyf ang0 tmq3)
(command "text" "j" "br" pt fyf ang0 tmq3)
)
)
(command "_clayer" old_lay)
(command "_textstyle" old_sty)
)
(setvar "osmode" oos)
(setvar "orthomode" oor)
(setvar "cmdecho" 1)
(princ)
)
不知道符合你的要求否.
页:
[1]