我二十天前也遇到这个问题,deepseek给了我思路: - my_dialog : dialog {
- label = "选择基点";
- : text {
- key = "txt_pt";
- label = "基点: 未选择";
- }
- : button {
- key = "btn_pick";
- label = "拾取基点";
- }
- ok_cancel;
- }
 - (defun c:test (/ dcl_id pt saved_pt dcl_status)
- (setq dcl_id (load_dialog "base_pt.dcl"))
- (if (not (new_dialog "my_dialog" dcl_id))
- (exit)
- )
- ; 初始化基点显示
- (set_tile "txt_pt" (if pt
- (vl-princ-to-string pt)
- "未选择"))
-
- ; 设置按钮动作
- (action_tile "btn_pick" "(done_dialog 2)")
- (action_tile "accept" "(done_dialog 1)")
- (action_tile "cancel" "(done_dialog 0)")
-
- (setq dcl_status (start_dialog))
- (unload_dialog dcl_id)
-
- ; 处理拾取循环
- (while (= dcl_status 2)
- ; 临时保存当前点
- (setq saved_pt pt)
- ; 获取新点
- (if (setq pt (getpoint "\n指定基点: "))
- (princ (strcat "\n基点已设为: " (vl-princ-to-string pt)))
- (setq pt saved_pt) ; 用户取消,恢复之前的值
- )
- ; 重新加载对话框
- (setq dcl_id (load_dialog "base_pt.dcl"))
- (if (not (new_dialog "my_dialog" dcl_id))
- (exit)
- )
- ; 更新基点显示
- (set_tile "txt_pt" (if pt
- (vl-princ-to-string pt)
- "未选择"))
- ; 重新绑定动作
- (action_tile "btn_pick" "(done_dialog 2)")
- (action_tile "accept" "(done_dialog 1)")
- (action_tile "cancel" "(done_dialog 0)")
- (setq dcl_status (start_dialog))
- (unload_dialog dcl_id)
- )
-
- ; 用户点击确定时返回点
- (if (= dcl_status 1)
- (progn
- (princ "\n最终基点: ")
- (princ pt)
- pt ; 返回点供后续使用
- )
- )
- )
- ;(setq my_base_pt (c:test))
- ;(if my_base_pt
- ; (command "_circle" my_base_pt 5) ; 示例:在基点绘制圆
- ;)
|