本帖最后由 yuanziyou 于 2013-4-19 23:48 编辑
现有一数据文件dat,展点后,需要根据其中的2个坐标点做旋转操作,如何能保证旋转的时候高程点注记一直保持水平?现在的处理方法是,先旋转,然后分别更新点号层文字的旋转角度为0和高程点注记层的旋转角度为0.虽然功能已经实现,但有个问题就是高程点注记会压盖高程点,请问如何避免.
自己经过几天的摸索,总算找到了方法(主要就是旋转角和对齐点的问题),代码如下
- (defun c:xz()
- (xx 100);旋转
- (dz 100);对齐属性
- )
- (defun xx(blc);修改属性块的旋转角(blc:比例尺)
- (setq s1 (ssget "_X" '((8 . "GCD"))))
- (setq i 0)
- (repeat (sslength s1)
- (setq e (ssname s1 i)
- i (1+ i)
- e1 (entget e)
- e2 (entget (entnext e));属性块的属性数据
- )
- (entmod (subst (cons 50 0) (assoc 50 e1) e1))
- (entmod (subst (cons 50 0) (assoc 50 e2) e2))
- (entupd e)
- (entupd (entnext e))
- )
- (princ)
- )
- (defun dz(blc);修改属性块对起点(blc:比例尺)
- (setq s2 (ssget "_X" '((8 . "GCD"))))
- (setq j 0)
- (repeat (sslength s2)
- (setq e (ssname s2 j)
- j (1+ j)
- e1 (entget e)
- p (cdr (assoc 10 e1));块的插入点
- e2 (entget (entnext e))
- p2 (list (+ (car p) (* 0.0012 blc)) (cadr p) (cadr p));属性文字的第二对起点
- p1 (list (car p2) (- (cadr p2) (* 0.001 blc)) (caddr p2));属性文字的第一对起点
- )
- (entmod (subst (cons 10 p1) (assoc 10 e2) e2))
- (entmod (subst (cons 11 p2) (assoc 11 e2) e2))
- (entupd (entnext e))
- )
- (princ)
- )
|