如何旋转高程点时使高程点注记保持水平
本帖最后由 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)
)
是用CASS展的高程点吧?可以将这些高程点坐标保存后删除,再重新展点一次即可。 楼上的方法是一种,还可以用测站改正。 我的做法是:旋转后,检查高程值是否保持原样,然后用CASS重新生成数据进行展点,再核对高程值。 poly168 发表于 2013-4-10 10:26 static/image/common/back.gif
是用CASS展的高程点吧?可以将这些高程点坐标保存后删除,再重新展点一次即可。
手动的方法我也想到的:先高程点生成数据文件,然后再重新展点.
但是我想用lisp的方法实现,因为从原始数据到最后的成果的几乎都用代码实现了,就是压盖的问题还没能解决 因为我是VBA编写的,LISP我很整不来。我的步骤是:一、计算转换参数;二、选择集,我是点号、高程注记作为扩展属性附加到高程点上的块。可以用屏选控制也可以根据起始和终止点号控制要转换的坐标点数量,测量过程中可能会出现某天的数据定错向的情况,用点号控制比较方便。三、将选择集中的每一个点坐标和点号提取,然后删除这个点,将坐标转换后重展每一个点。展出来的点可以根据需要进行旋转或水平放置。
你要的是不是这样的功能啊图片 poly168 发表于 2013-6-7 10:38 static/image/common/back.gif
你要的是不是这样的功能啊图片
欢迎分享
软件界面挺好看的
页:
[1]