sanderson 发表于 2022-7-6 10:21:50

从LSP调用DCL

你好:
 
我想调用这个ync程序,让它加载dcl对话框。两个程序保存在同一文件夹中,并在路径中识别。
 
实际上,ync可能会被合并到我新定义的quit命令中。该命令可以使用特定的保存选项(AutoCAD Mechanical或Vanilla的早期版本)保存图形,也可以退出。
 
根据我的理解,如果我键入“ync”,下面的代码应该运行。然而,我得到了一个无效的命令错误。LISP代码在我们的mnl文件中,如果这是一个问题?
 
非常感谢您在此提供的任何理解。
 
ync lisp代码:
(defun c:ync(/dcl\u ync\u id)
(setq dcl\u ync\u id(加载对话框“ync.dcl”)
(如果(不是(新对话框“退出”dcl\U ync\U id))
(退出)
 
)
(action\u tile“Yes”“(setq cmd($key)(done\u对话框)”)
(action\u tile“No”“(setq cmd($key)(done\u对话框)”)
(action\u tile“Cancel”“(setq cmd($key)(done\u对话框)”)
(start_对话框)
(unload\u对话框dcl\u ync\u id)
(命令cmd)
)
 
 
ync dcl代码:
//ync。dcl
//对话框,用于从AutoLISP中引用“是”、“否”和“取消”选项
//
ync:对话框{
label=“保存图形?”;
:text\u部分{
label=“图纸将保存到AutoCAD Mechanical 2006或AutoCAD 2004,具体取决于使用的轮廓…”;
}
:行{
:按钮{
key=“是”;
label=“是”;
助记符=“Y”;
固定宽度=true;
}
:按钮{
key=“否”;
标签=“否”;
助记符=“N”;
固定宽度=true;
}
:按钮{
key=“取消”;
label=“取消”;
助记符=“C”;
固定宽度=true;
}
}
}

The Buzzard 发表于 2022-7-6 10:27:04

只是快速看一下。
 
(defun c:ync(/dcl\u ync\u id)
(setq dcl\u ync\u id(加载对话框“ync.dcl”)
(if(not(新对话框“ync”dcl\u ync\u id))
(退出)

The Buzzard 发表于 2022-7-6 10:30:25

代码中的其他一些错误
 

(defun c:ync(/ dcl_ync_id)
(setq dcl_ync_id (load_dialog "ync.dcl"))
(if (not (new_dialog "ync" dcl_ync_id))
   (exit))
(action_tile "Yes"    "(setq cmd ($key)(done_dialog)" )
(action_tile "No"   "(setq cmd ($key)(done_dialog)" )
(action_tile "Cancel" "(setq cmd ($key)(done_dialog)" )
(start_dialog)
(unload_dialog dcl_ync_id)
(command cmd)

The Buzzard 发表于 2022-7-6 10:35:40

dcl文件中也有问题。我现在正在看。

sanderson 发表于 2022-7-6 10:39:46

在这里的某个地方,输入上有一个格式错误的列表。你看到了吗??
 
(defun c:ync(/dcl\u ync\u id)
(setq dcl\u ync\u id(加载对话框“ync.dcl”)
(if(not(new\u dialog“ync”dcl\u ync\u id))
(退出)
 
)
(action\u tile“Yes”“(setq cmd($key)(done\u对话框)”)
(action\u tile“No”“(setq cmd($key)(done\u对话框)”)
(action\u tile“Cancel”“(setq cmd($key)(done\u对话框)”)
(start_对话框)
(unload\u对话框dcl\u ync\u id)
(命令cmd)
)

The Buzzard 发表于 2022-7-6 10:42:43

你错过了一个括号看看我贴的代码。
 

(defun c:ync(/ dcl_ync_id)
(setq dcl_ync_id (load_dialog "ync.dcl"))
(if (not (new_dialog "ync" dcl_ync_id))
(exit)

)
(action_tile "Yes" "(setq cmd ($key) (done_dialog)" )
(action_tile "No" "(setq cmd ($key) (done_dialog)" )
(action_tile "Cancel" "(setq cmd ($key) (done_dialog)" )
(start_dialog)
(unload_dialog dcl_ync_id)
(command cmd)
)

The Buzzard 发表于 2022-7-6 10:48:46

这是dcl,您需要根据自己的喜好进行调整。
 

// ync.dcl
// Dialog box for yes, no, cancel options to be referenced from AutoLISP
//
ync: dialog {
    label = "Save Drawing?";
    : text_part {
      label = "Drawing will be saved to AutoCAD Mechanical 2006 or AutoCAD 2004 depending on profile used... ";
    }
    : row {
   : button { label = "&Yes";key = "Yes";    is_Yes = true; }
   : button { label = "&No";   key = "No";   is_No = true; }
   : button { label = "&Exit"; key = "cancel"; is_cancel = true;}
    }
}

The Buzzard 发表于 2022-7-6 10:50:47

我删除了“接受”按钮,对此表示抱歉。

sanderson 发表于 2022-7-6 10:54:43

谢谢你。我从来没见过那些。
 
你现在能告诉我如何将答案返回到代码中吗?我计划重新定义quit命令,让它弹出这个对话框并使用结果(是/否/否)。我不确定是应该保留ync(首选),还是只是将代码添加到重新定义的命令中?

sanderson 发表于 2022-7-6 10:59:05

我注意到Yes和No函数在输入时也返回了一个格式错误的列表??
 
命令:ync
*取消*
命令:nil
命令:ync(使用是)
错误:输入列表格式不正确
命令:
命令:ync(未使用)
错误:输入列表格式不正确
页: [1] 2
查看完整版本: 从LSP调用DCL