马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
 - ;;;文字、对象对齐于某线段
- (defun c:cheng_align( / e0 ss p0 p1 p2 p3 p4 r r0 m w x1 x2 y1 y2 x3 y3 x4 y4 c old_osmode tmp)
- (princ "文字、对象对齐于某线段 cheng_align by CHENG")
- (setq old_osmode (getvar "osmode"))
- (setq tmp T)
- (while (/= tmp "TEXT")
- (setq e0 (entsel "\n选择一个文字对象:"))
- (if e0 (setq tmp (cdr (assoc 0 (entget (car e0))))) (setq tmp "TEXT"))
- )
- (if e0
- (progn
- (princ "\n选择其他对象:")
- (setq ss (ssget))
- (if (= ss nil) (setq ss (ssadd)))
- (ssadd (cdr (assoc -1 (entget (car e0)))) ss)
- (setvar "osmode" 951)
- (setq p1 (getpoint "\n选择第一对齐点:"))
- (setq p2 (getpoint "\n选择第二对齐点:"))
- (if (= cheng_align_m nil) (setq cheng_align_m (/ (cdr (assoc 40 (entget (car e0)))) 3.5)))
- (princ "\n对齐偏移量<") (princ cheng_align_m) (princ ">:")
- (setq m (getreal))
- (setq tmp2 nil)
- (setq tmp2 (getstring "\n删除旧对象?<Y>"))
- (if (or (= tmp2 "Y") (= tmp2 "") (= tmp2 "y") (= tmp2 nil)) (setq tmp2 "Y") (setq tmp2 nil))
- (if (/= m nil) (setq cheng_align_m m))
- (setq m cheng_align_m)
- (setq r (angle p1 p2))
- (setq w (cdr (assoc 40 (entget (car e0)))))
- (setq p0 (cdr (assoc 10 (entget (car e0)))))
- (setq x0 (car p0))
- (setq y0 (car(cdr p0)))
- (setq x1 (car p1))
- (setq y1 (car(cdr p1)))
- (setq x2 (car p2))
- (setq y2 (car(cdr p2)))
- (setq r0 (cdr (assoc 50 (entget (car e0)))))
- (setq r0 (* (/ 180.0 pi) r0))
- (setq r0 (- (* (/ 180.0 pi) r) r0))
- (setq c (sqrt (+ (* (- x2 x1) (- x2 x1)) (* (- y2 y1) (- y2 y1)))))
- (setq x3 (+ x0 (* c (sin r))))
- (setq y3 (+ y0 (* c (cos r))))
- (setq p3 (list x3 y3 0.0))
- (setq x4 (- x1 (* m (sin r))))
- (setq y4 (+ y1 (* m (cos r))))
- (if (> x1 x2)
- (progn
- (setq r0 (+ r0 180))
- (setq m (+ cheng_align_m w))
- (setq x4 (- x2 (* m (sin r))))
- (setq y4 (+ y2 (* m (cos r))))
- )
- )
- (setq p4 (list x4 y4 0.0))
- (setq i 0)
- (if (/= tmp2 "Y") (command "copy" ss "" p0 p0))
- ;(repeat (sslength ss)
- ; (setq e0 (ssname ss i))
- ; (setq i (+ i 1))
- (command "ROTATE" ss "" p0 r0)
- ;)
- (command "move" ss "" p0 p4)
- (setvar "osmode" old_osmode)
- )
- )
- (princ)
- );end cheng_align
- ;;;使用方法:
- ;;;1。必须先选择一个文字对象(e0),再选择其他对象(可不选)
- ;;;2。选择第一对齐点(p1)
- ;;;3。选择第一对齐点(p2)
- ;;;4。输入对齐偏移量(m)
- ;;;如果p1的x坐标<=p2的x坐标,那么文字e0将以p1为基点在p1,p2连线的上方;
- ;;;反之,如果p1的x坐标>p2的x坐标,那么文字e0将以p2为基点在p1,p2连线的下方;
|