预祝大家双节快乐
一段东拼西凑的代码搞到半夜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)
- )
|