计曲线标注程序
本帖最后由 493514506 于 2012-1-3 11:27 编辑求等高线计曲线标注程序
要求:1,提示输入等高距: 米(如0.5 1 2 2.5等)
2,画直线,创建所有与直线相交的DGX的选择集
3,标注,获取选择集中每根等高线的标高,判断是否能够被(等高距与5的乘积)整除,若能整除,在等高线与直线的交点处标出等高线的标高(与直线垂直,字头朝向高处)
4,删除直线。
附样图
试试这个,字头朝高处,自己加一个判断(defun c:tt()
(setq d (getreal "\n请输入等高距:") n 0)
(setq pt1 (getpoint "\n请输入第一点:"))
(setq pt2 (getpoint pt1 "\n请输入第二点:"))
(command "_.line" pt1 pt2 "")
(setq line (entlast))
(setq ss (ssget "f" (list pt1 pt2) '((8 . "dgx"))))
(if ss
(repeat (sslength ss)
(setq en (ssname ss n))
(setq h (vla-get-elevation (vlax-ename->vla-object en)))
(if (= (rem h (* d 5.0)) 0)
(progn
(setq dxf_line (entget line))
(setq st (cdr (assoc 10 dxf_line)) et (cdr (assoc 11 dxf_line)))
(setq st (list (car st) (cadr st) h) et (list (car et) (cadr et) h))
(setq dxf_line (subst (cons 10 st) (assoc 10 dxf_line) dxf_line))
(setq dxf_line (subst (cons 11 et) (assoc 11 dxf_line) dxf_line))
(entmod dxf_line)
(entupd line)
(setq pt (vlax-safearray->list (vlax-variant-value (vla-IntersectWith (vlax-ename->vla-object line) (vlax-ename->vla-object en) acExtendNone))))
(setq pt (list (car pt) (cadr pt)))
(setq ang (/ (* 180 (vla-get-angle (vlax-ename->vla-object line))) pi))
(command "_.text" pt 1 (+ ang 90) (rtos h 2 2))
)
)
(setq n (1+ n))
)
)
(command "_.erase" line "")
(princ)
) CASS中有此功能,不过最多一次只能标注4根计曲线。 每根等高线的标高从哪获取? 多谢byghbcx ,可是程序只标注一根,其他满足条件的不标注,不知什么原因 本帖最后由 byghbcx 于 2012-1-6 16:38 编辑
493514506 发表于 2012-1-6 12:32 http://bbs.mjtd.com/static/image/common/back.gif
多谢byghbcx ,可是程序只标注一根,其他满足条件的不标注,不知什么原因
判断是否能够被(等高距与5的乘积)整除,我机上怎么是可以标注的? 少了两句
(vl-load-com)
(setq n 0)
基本可以实现,多谢帮助。程序根据需要完善中,完善后发上来。
页:
[1]