马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 Lispboy 于 2016-6-27 08:37 编辑
 - (defun XD::Text:IndexAtPoint (e pt / base box ed i len p2 pos prev tf txt typ v xdir
- )
- (if (setq txt (xdrx_getpropertyvalue e "textstring"))
- (progn
- (setq ed (entget e))
- (setq len (xdrx_string_length txt))
- (setq tf t
- i 0
- )
- (setq box (xdrx_text_box e)
- base (car box)
- ydir (mapcar '- (nth 2 box)(nth 1 box))
- lastpt base
- xdir (xd::entity:xdir e)
- )
- (while (and
- tf
- (< i len)
- )
- (setq prev (xdrx_string_mid txt 0 (1+ i)))
- (setq ed (subst
- (cons 1 prev)
- (assoc 1 ed)
- ed
- )
- )
- (setq box (textbox ed)
- v (mapcar
- '-
- (cadr box)
- (car box)
- )
- p2 (mapcar
- '+
- base
- (xdrx_vector_product xdir (car v))
- )
- )
- (if (xd::pnt:isbetween pt base p2)
- (setq pos (list txt i (list lastpt p2 (mapcar '+ p2 ydir)(mapcar '+ lastpt ydir)))
- tf nil
- )
- )
- (setq lastpt p2
- i (1+ i)
- )
- )
- )
- )
- pos
- )
|