马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
根据网友要求,工作中有时候绘制很多文字和线,彼此没有联系,虽然这样的习惯不好,但也
有很多这样的图纸,本插件就是把选择的文字按照最近的和文字方向相同的LINE对齐,文字的中点
对齐到直线的中点,并可以设置文字到直线的间距。
 - (defun c:xdtb_txtalignatln (/ #angle #getfirstderiv #midpoint box e elst height mat mid mid1 ml p1
- p2 position rot ss ss1 text-vec tf tol v x y
- )
- (if (and (setq tol (getdist "\n输入字线间距<退出>:"))
- (xdrx_initssget "\n选取要调整的文字<退出>:")
- (setq ss (xdrx_ssget '((0 . "*text"))))
- )
- (progn
- (xdrx_begin)
- (setq tf (xd::doc:safezoom ss))
- (mapcar
- '(lambda (e)
- (setq box (xdrx_text_box e)
- text-vec (cadr (xdrx_entity_getecs e))
- rot (xdrx_getpropertyvalue e "rotation")
- box (XD::Geom:Box->9PT box)
- position (nth 1 box)
- p1 (nth 0 box)
- p2 (nth 2 box)
- height (xdrx_getpropertyvalue e "Height")
- ss1 (xdrx_pickset_GetAtPoint position height 2 '((0 . "LINE")))
- )
- (if ss1
- (progn (setq elst nil)
- (mapcar '(lambda (x)
- (xdrx_getpropertyvalue
- x "angle" "MidPoint" "startpoint" "endpoint" "getfirstderiv"
- #midpoint
- )
- (if (or (xdrx_vector_iscodirectional
- text-vec
- #getfirstderiv
- (/ pi 5.0)
- )
- (xdrx_vector_iscodirectional
- text-vec
- (xdrx_vector_negate #getfirstderiv)
- (/ pi 5.0)
- )
- )
- (progn
- (setq elst (cons (list (xd::geom:angleformat (- #angle rot)) x) elst))
- )
- )
- )
- (xdrx_pickset->ents ss1)
- )
- (if elst
- (progn (setq elst (vl-sort elst '(lambda (x y) (< (car x) (car y))))
- ml (nth 1 (car elst))
- )
- (setq mid (xdrx_getpropertyvalue mL "MidPoint")
- v (xdrx_getpropertyvalue ml "getfirstderiv" mid)
- v (if (xdrx_vector_iscodirectional text-vec v)
- v
- (xdrx_vector_negate v)
- )
- mid1 (mapcar '+
- mid
- (xdrx_vector_product (xdrx_vector_perpvector v) tol)
- )
- mat (xdrx_matrix_align position p2 mid1 (mapcar '+ mid1 v))
- )
- (xdrx_entity_transform e mat)
- )
- )
- )
- )
- )
- (xdrx_pickset->ents ss)
- )
- (and tf (xdrx_document_zoomprevious))
- (xdrx_end)
- )
- )
- (princ)
- )
|