预祝大家双节快乐
一段东拼西凑的代码搞到半夜3点还没完善好,那就先放个动图吧. 缺的函数见本论坛。

网友答:
根据greed鼠标位置创建矩形高程点选择集、得到三角网点表、判断在哪个三角形内、重心坐标插值法求点在面的投影高程
大概这几个步骤网友答: 测试过程中发现被广泛引用的zInsert函数有个bug,就是当三角形有一边在竖直方向上的时候,会出现除数为0的错误。需要先判断除数为0的时候 直接给ZL赋值
或者用下面这个deep seek代码代替这个功能,我简单测试这个函数是没有问题的,不知道到底对不对。
网友答:
根据高程点内插高程点 最终效果
网友答: 框选范围选中+动态拖框?
有什么意义吗?网友答:
我惊Σ( ° △ °|||)︴也值夜班么
网友答:
用不到,顶下,头像很别致网友答:
半夜写代码???网友答:
高程点不应该是现场实测出来的吗?内插疑是偷工,

网友答:
大佬也睡的晚啊
动态只是方便看看内插的高程点是怎么计算得来的
花里胡哨的,同事看了会觉得很吊网友答: OKOK
非常感谢分享网友答: 感谢分享。 网友答: 三角网内插么?
一段东拼西凑的代码搞到半夜3点还没完善好,那就先放个动图吧. 缺的函数见本论坛。

- (defun c:tt (/ *error*)
- (vl-load-com) ; 确保加载VLCOM支持
- (defun *error*(msg)
- (if en(entdel en))
- (if sq-en(entdel sq-en))
- (sssetfirst nil nil)
- (setvar 'PICKBOX old-PICKBOX)
- (princ)
- )
- (setq old-PICKBOX(getvar 'PICKBOX ))
- (setvar 'PICKBOX 0)
- (setq en (mktext "测试" '(0 0 0) 2 0 "hz" "ZJ" "ML"))
- (setq sq-en (EntmakeSquare '(0 0 0) 10)) ; 创建初始正方形并保存图元名
- (setq done nil)
- (setq gr 0 gr-model 0 gr-value 0)
- (while (not done)
- (setq gr (grread T 8 3) ; 启用追踪
- gr-model (car gr)
- gr-value (cadr gr))
- (cond
- ((= gr-model 5)
-
- ; 更新文字位置和内容
- ; 移动正方形到新位置
-
- (sssetfirst nil(setq ss(ssget "c" (list(nth 6 new-pts)(nth 7 new-pts)) (list(nth 2 new-pts)(nth 3 new-pts)) '((2 . "GC200")))))
- ;;; (princ"\n")
- ;;; (princ(setq sjw-lst(sjwlst ss)))
- (setq sjw-lst(sjwlst ss))
- (移动正方形 sq-en gr-value 100)
- (vla-put-textalignmentpoint (vlax-ename->vla-object en) (vlax-3d-point(mapcar '+ '(2 2 0) gr-value)))
- (if(setq nnn(addgcptinpm gr-value sjw-lst))
- (progn
- (setq nnn (zInsert nnn))
- (vla-put-textstring (vlax-ename->vla-object en) (vl-princ-to-string (caddr nnn)))
- )
- (vla-put-textstring (vlax-ename->vla-object en) "nil")
- )
- );
- ((= gr-model 3)
- ;; 实时显示坐标,\r 使光标回到行首实现原地更新
- ;;; (princ gr-value)
- ;;; (setq done T)
- ;; 这里可以添加实时更新的图形逻辑,例如拖拽对象、动态绘制等
- (princ"\n")
- (setq ptlst(addgcptinpm gr-value sjw-lst))
- (if ptlst ;如果点在三角形线上或三角形内
- (progn
- ;;双线性内插计算内插点的高程值 返回内插点(x y z)
- (setq zpt (zInsert ptlst))
- (print zpt)
- ;(Entmakegcd 插入点 高程 图块比例 属性 文字字符 文字插入点 小数位数)
- ;(Entmakegcd zpt (caddr zpt) Scale inserD Tag txt ist1 txth ist2 xsws)
-
- (gxl-cs:gcd zpt (caddr zpt) 1 2 );展高程点
-
- )
- )
-
- )
-
- ;; 代码 11:辅助设备按键(通常对应鼠标右键)
- ((= gr-model 11)
- (princ "\n检测到鼠标右键事件,退出程序。")
- (setq done T)
- )
-
- )
- )
- (princ)
- )
网友答:
luzhmu 发表于 2025-9-29 08:29
三角网内插么?
根据greed鼠标位置创建矩形高程点选择集、得到三角网点表、判断在哪个三角形内、重心坐标插值法求点在面的投影高程
大概这几个步骤网友答: 测试过程中发现被广泛引用的zInsert函数有个bug,就是当三角形有一边在竖直方向上的时候,会出现除数为0的错误。需要先判断除数为0的时候 直接给ZL赋值
或者用下面这个deep seek代码代替这个功能,我简单测试这个函数是没有问题的,不知道到底对不对。

- ;重心坐标插值法 代替双线性内插 避免垂足三角网发生除数为0的错误
- (defun 重心坐标插值法求点在面的投影高程 (lst / p a b c denom lambda1 lambda2 lambda3 h)
- (setq p(car lst)
- a(car(cadr lst))
- b(cadr(cadr lst))
- c(caddr(cadr lst)))
- (setq denom (+ (* (- (cadr B) (cadr C)) (- (car A) (car C)))
- (* (- (car C) (car B)) (- (cadr A) (cadr C)))))
-
- (setq lambda1 (/ (+ (* (- (cadr B) (cadr C)) (- (car P) (car C)))
- (* (- (car C) (car B)) (- (cadr P) (cadr C))))
- denom))
-
- (setq lambda2 (/ (+ (* (- (cadr C) (cadr A)) (- (car P) (car C)))
- (* (- (car A) (car C)) (- (cadr P) (cadr C))))
- denom))
-
- (setq lambda3 (- 1 lambda1 lambda2))
-
- ; 计算点P的高程
- (setq h(+ (* lambda1 (caddr A))
- (* lambda2 (caddr B))
- (* lambda3 (caddr C))))
- (list(car(car lst))(cadr(car lst))h)
- )
网友答: 框选范围选中+动态拖框?
有什么意义吗?网友答:
你有种再说一遍 发表于 2025-9-27 03:15
框选范围选中+动态拖框?
有什么意义吗?
我惊Σ( ° △ °|||)︴也值夜班么
网友答:
用不到,顶下,头像很别致网友答:
半夜写代码???网友答:
高程点不应该是现场实测出来的吗?内插疑是偷工,

网友答:
你有种再说一遍 发表于 2025-9-27 03:15
框选范围选中+动态拖框?
有什么意义吗?
大佬也睡的晚啊
动态只是方便看看内插的高程点是怎么计算得来的
花里胡哨的,同事看了会觉得很吊网友答: OKOK
非常感谢分享网友答: 感谢分享。 网友答: 三角网内插么?