马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
由于刚学编程,程序可能啰唆了点!对xdrx_api更是糊涂,所以只好拿晓东以前写过的程序改了些地方,加了些地方!就这样,也让我想了半天,改了很多遍!请高手们批评指正!
另:本程序考虑了文字旋转的问题,无论文字处于何种角度!
本程序只对普通文字有效,不知怎样才能支持mtext! (呵呵,水平有限)
问:程序中"$xdlsp_txtbrk" 在xdrx_api说明中没查到是函数,是不是本身就是调用"$xdlsp_txtbrk"
子函数呢?
- [FONT=courier new]
- (defun c:txt_add (/ bb ent1 el1 ee be en_data apt_int_date apt_int
- apt_intx apt_inty apt_ang_dat ang txt p1 ptx pty)
- (princ "\n ******* 文字插入程序 ******* 扬州xg")
- (setvar "CMDECHO" 0)
- (if int_pt
- (progn
- (princ "\n [~~]拾取图中文字/请输入要插入的文字<")
- (setq int_pt1 (princ int_pt))
- (setq int_pt (getstring ">:"))
- )
- (progn
- (setq int_pt1 "、")
- (setq int_pt (getstring "\n [~~]拾取图中文字/请输入要插入的文字<、>:"))
- )
- )
- (if (= int_pt "")
- (setq int_pt int_pt1)
- )
- (if (= int_pt "~~")
- (progn
- (setq bb (nentsel "\n拾取图中文字:"))
- (setq ent1 (car bb))
- (setq el1 (entget ent1))
- (setq int_pt (cdr (assoc 1 el1)))
- (princ "\n ")
- (princ "\n拾取文字内容为:") (princ int_pt)
- )
- )
- (setq ee (xdrx_entsel "\n请点取要处理的文字<退出>:"))
- (if (/= ee nil)
- (progn
- (setq be (car ee))
- (setq en_data (entget be))
- (setq apt_int_date (assoc 10 en_data))
- (setq apt_int (cdr apt_int_date))
- (setq apt_intx (car apt_int))
- (setq apt_inty (cadr apt_int))
- (setq apt_ang_date (assoc 50 en_data))
- (setq ang (cdr apt_ang_date))
- (while
- (progn
- (setq txt (xdrx_getentdxf 1))
- (setq p1 (getpoint "\n请点取文字插入位置<退出>:"))
- (setq ptx (car p1))
- (setq pty (cadr p1))
- (if (/= p1 nil)
- (progn
- (xdrx_begin)
- (if (not (setq pos1 (car ($xdlsp_txtbrk be p1))))
- (progn
- (cond ((and (< (- ptx apt_intx) 0) (>= ang 0) (< ang (* pi 0.5)))
- (setq pos1 0)
- )
- ((and (> (- ptx apt_intx) 0) (>= ang 0) (< ang (* pi 0.5)))
- (setq pos1 (strlen txt))
- )
- ((and (> (- ptx apt_intx) 0) (> ang (* pi 0.5)) (< ang (* pi 1.5)))
- (setq pos1 0)
- )
- ((and (< (- ptx apt_intx) 0) (> ang (* pi 0.5)) (< ang (* pi 1.5)))
- (setq pos1 (strlen txt))
- )
- ((and (< (- ptx apt_intx) 0) (> ang (* pi 1.5)) (<= ang (* pi 2)))
- (setq pos1 0)
- )
- ((and (> (- ptx apt_intx) 0) (> ang (* pi 1.5)) (<= ang (* pi 2)))
- (setq pos1 (strlen txt))
- )
- ((and (< (- pty apt_inty) 0) (= ang (* pi 0.5)))
- (setq pos1 0)
- )
- ((and (> (- pty apt_inty) 0) (= ang (* pi 0.5)))
- (setq pos1 (strlen txt))
- )
- ((and (> (- pty apt_inty) 0) (= ang (* pi 1.5)))
- (setq pos1 0)
- )
- ((and (< (- pty apt_inty) 0) (= ang (* pi 1.5)))
- (setq pos1 (strlen txt))
- )
- ) ; end cond
- ) ; end progn
- ) ; end if
- (setq txt (xdrx_string_Insert txt pos1 int_pt))
- (xdrx_setenttodb be)
- (xdrx_modent 1 txt)
- (xdrx_end)
- ) ; end progn
- ) ; end if
- ) ; end progn
- ) ; end while
- ) ; end progn
- ) ; end if
- (princ)
- )
- [/FONT]
|