枪花不凋谢 发表于 2020-2-18 22:41:59

等高线的闭合坡顶线自动生成示坡线功能插件


等高线坡顶是闭合 等高线,就是在闭合等高线左右或上下两端有一条短线(示坡线),相对称的方向。    另外最好可以根据等高线高程值判定是坡顶还是坑凼,坑凼示坡线在闭合等高线内部。   希望有大神写个代码,逻辑感觉不难,可是我不会啊,要slp文件格式,开源代码哈。非常感谢。

lht 发表于 2020-2-18 22:42:00

本帖最后由 lht 于 2020-3-6 11:09 编辑

;;人工确定闭合线长轴方向上的两个点和相邻等高线上的一个点即可自画坡向线,1:1万地形图的坡顶坡向线长为5,洼地坡向线长是坡顶坡向线长的1.5倍,可根据需要调整K值。
(defun c:pxx ()
    (setvar "osmode" 512)                                       ;捕捉最近点
    (setq k 5)                                                         ;确定坡顶坡向线长度
    (setq p1 (getpoint "\n选择示坡线第一点:"))         ;闭合线上曲率最大点
    (setq p2 (getpoint "\n选择示坡线第二点:"))         ;闭合线上曲率最大另一点
    (setq z1 (caddr p1))                                          ;取得闭合线高程值
    (setq z2 (caddr (getpoint "\n选择相邻线:")))         ;取得相邻线高程值
    (setvar "osmode" 0)                                           ;关闭捕捉
    (setq ptx (car p1) pty (cadr p1))                        ;第一点XY坐标
    (command ".XLINE" "PER"P1 P1 "")                  ;画第一点的垂直构造线
    (setq p0 (cdr (assoc 11 (entget (entlast)))))          ;构造线相对P1点的增量坐标
    (entdel (entlast))                                             ;删除构造线
    (setq p0 (list (- ptx (car p0)) (- pty (cadr p0))))   ;取得第一条坡向线增量坐标
    (setq at1 (angle p0 p1))                                     ;计算第一条坡向线的方位弧度角
    (setq ptx (car p2) pty (cadr p2))                        ;第二点XY坐标
    (command ".XLINE" "PER"P2 P2 "")                     ;画第二点的垂直构造线
    (setq p0 (cdr (assoc 11 (entget (entlast)))))         ;构造线相对P2点的增量坐标
    (entdel (entlast))                                                ;删除构造线
    (setq p0 (list (- ptx (car p0)) (- pty (cadr p0))))      ;取得第一条坡向线增量坐标
    (setq at2 (angle p0 p2))                                       ;计算第二点坡向线的方位弧度角
    (if (> z1 z2) (progn                                             ;画坡顶坡向线
      (command "_pline" p1 (polar p1 at1 k) "")          ;画长k的坡向线
      (command "_pline" p2 (polar p2 at2 k) "")          ;画长k的坡向线
    ))
    (if (< z1 z2) (progn                                              ;画洼地坡向线
      (command "_pline" p1 (polar p1 (+ at1 pi) (* k 1.5)) "")   ;画长k的坡向线
      (command "_pline" p2 (polar p2 (+ at2 pi ) (* k 1.5)) "")    ;画长k的坡向线
    ))
    (setvar "osmode" 35)
)


lht 发表于 2020-2-19 21:04:05

没看明白你需要什么,也没图示,不明白什么是“等高线坡顶是闭合等高线”,请原谅我在地质行业40年了。

枪花不凋谢 发表于 2020-2-26 22:26:09

lht 发表于 2020-2-19 21:04
没看明白你需要什么,也没图示,不明白什么是“等高线坡顶是闭合等高线”,请原谅我在地质行业40年了。

你好,坡顶的等高线就是闭合的等高线撒,就是这个意思。    然后需要在这个闭合的等高线中自动添加示坡线,希望有这种插件。最好能识别整个DWG文件中的闭合坡顶线,并且自动生成示坡线。

枪花不凋谢 发表于 2020-2-26 22:27:05

lht 发表于 2020-2-19 21:04
没看明白你需要什么,也没图示,不明白什么是“等高线坡顶是闭合等高线”,请原谅我在地质行业40年了。

40年,前辈您好啊。

清清绿茶 发表于 2020-2-26 23:32:33

我之前有写过示坡线的手动标注(比cass里的稍微好用一点),不支持批量。如果无所谓示坡线的标注位置,倒是不难。

枪花不凋谢 发表于 2020-3-1 17:18:42

清清绿茶 发表于 2020-2-26 23:32
我之前有写过示坡线的手动标注(比cass里的稍微好用一点),不支持批量。如果无所谓示坡线的标注位置,倒是 ...

那可以试试,那请问能发一个给我吗?401347131@qq.com,收到后,明经币就给你了

lht 发表于 2020-3-2 20:32:18

给你个思路,先选择闭合线,再选择与闭合线相邻的线,根据这两条线的Z值趋势判断闭合线是坡顶还是洼地线,闭合线Z值大于相邻线的Z值就是坡顶线,反之就是洼地线,还要找到闭合线两个的曲率最大点,从这两个画示坡线,是坡顶线就向外画垂直于闭合线的示坡线,是洼地线就向里画垂直于闭合线的示坡线。

枪花不凋谢 发表于 2020-3-2 22:57:48

lht 发表于 2020-3-2 20:32
给你个思路,先选择闭合线,再选择与闭合线相邻的线,根据这两条线的Z值趋势判断闭合线是坡顶还是洼地线, ...

谢谢,思路很清晰;但是我对lisp编程知识比较欠缺,不知如何下手,前辈请指教,能劳烦前辈写个代码试试吗?

lht 发表于 2020-3-3 17:51:06

问题是如何找到闭合线的两个最大曲率点坐标有难度,其他都不是问题。
页: [1] 2
查看完整版本: 等高线的闭合坡顶线自动生成示坡线功能插件