乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 29|回复: 8

[编程交流] dcl冻结执行函数

[复制链接]

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 23:33:18 | 显示全部楼层 |阅读模式
我写了dcl文件,它加载。我开始设置我的action_tiles以向测试发送警报。我所有的按钮都能用。我的set\u tile动态检索所有正确的值,并且我已经测试了我的mode\u tile,改变了我的输入。它们一直都是预期的。太棒了
 
 
我还编写了所有函数,当我独立调用它们时,它们都可以工作。当我试图回忆一个按钮的action_tile中的一个(工作)功能时,dcl和cad冻结。
  1. (action_tile "converttostb" "(alert "this alert prints") (convtostb) (alert "this one doesn't print, cad freeze before") (current_plot_style_table_type_update)")

 
 
看起来我的函数(convtostb)无法由dcl调用,但我可以在命令行上调用它而不会出现问题。
 
 
我不明白为什么它不起作用。是否有一些功能在dcl打开时无法执行?有人指出我做错了什么吗?
 
 
谢谢
杰夫!
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:48:03 | 显示全部楼层
如果函数试图在不关闭DCL框的情况下转到图形编辑器,它将冻结。(即:getpoint或类似)
 
简而言之,在不关闭DCL的情况下,不能将图形编辑器用作用户输入的方法。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-5 23:51:48 | 显示全部楼层
嗨,斯诺努特!
 
 
此函数不使用任何getpoint,而是使用getvar和getenv。你认为这类似吗?
这是密码
  1. (defun convtostb ( / oldecho)
  2.   (setq oldecho (getvar "cmdecho"))
  3.   (setvar "cmdecho" 0)
  4.   (if (vl-directory-files (getenv "PrinterStyleSheetDir") "convert.stb")
  5.       (princ "\nConvert.stb available. Launching conversion from CTB to STB")
  6.       (progn
  7.          (vl-file-copy (findfile "convert.stb") (strcat (getenv "PrinterStyleSheetDir") "[url="file://convert.stb/"]\\convert.stb[/url]"))
  8.          (command "shell" (strcat "attrib +R "" (getenv "PrinterStyleSheetDir") "[url="file://convert.stb/"]\\convert.stb\[/url]""))
  9.          (princ "\nConvert.stb could not be found locally and has been copied from the server")
  10.          (princ "\nand has been made read-only")
  11.          (princ "\Launching conversion from CTB to STB")
  12.       )
  13.   )
  14.   (command "convertpstyles" "convert.stb")
  15.   (setvar "cmdecho" oldecho)
  16.   (princ)
  17. )
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-5 23:59:14 | 显示全部楼层
试着注释(princ)行。。。。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-6 00:09:17 | 显示全部楼层
我试图评论所有的princ行(整个if,因为if-true是a(princ))
它仍然挂着。。。
 
 
我取消了所有princ的注释并注释了(命令“convertpstyles”“convert.stb”),它不再挂起。。。但这个命令是convtoctb例行程序的唯一目的。真不方便。我有什么选择=D
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:17:47 | 显示全部楼层
首先关闭DCL,然后执行命令,如果仍然需要,可以将其合并到while循环中以重新启动DCL。(发生得如此之快,大多数用户都不知道DCL已关闭并重新启动)
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-6 00:19:55 | 显示全部楼层
似乎是一个很好的解决方法。
我两者都试过了
(action\u tile“converttostb”“(alert \“will try to conv\”)(done\u对话框)(convtostb)(standard\u scan\u dcl)”)
(action\u tile“converttostb”“(alert \“will try to conv\”)(done\u dialog)(unload\u dialog DCL\u ID)(convtostb)(standard\u scan\u DCL)“”)
使用这两种方法,dcl不会挂断,但虽然它似乎在处理命令,但最终会出现两个对话框。我可以关闭第二个,但第一个仍然存在,甚至取消按钮也不起作用。我必须进入任务管理器才能杀死我的cad应用程序。
回复

使用道具 举报

28

主题

317

帖子

292

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
140
发表于 2022-7-6 00:29:16 | 显示全部楼层
好的,我学到了:打开dcl时不能调用命令。
 
 
我设法做到了。我不确定我是否明白如何像你建议的那样在一段时间内做到这一点,但以下是我是如何做到的。
(action\u tile“converttostb”“(alert \“will try to conv \”“)(done\u对话框)(setq convtostbflag 1)”)
 
 
在我的dcl定义中,卸载后我添加了
  1. (if (= convtostbflag 1)
  2.      (convtostb))

 
 
然后在我的convtostb定义中,最后,如果存在convtosbtflag,我(再次将其重置为nil并启动对话框文件)。。。因此,理论上我可以在不启动dcl的情况下使用该子函数,因为标志不存在。我很确定有更好的方法。。但我很高兴它起作用了。
感谢您的帮助和输入snownut!
回复

使用道具 举报

4

主题

194

帖子

192

银币

初来乍到

Rank: 1

铜币
25
发表于 2022-7-6 00:39:54 | 显示全部楼层
不客气,很高兴我能把你引向正确的方向。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-18 04:26 , Processed in 1.324848 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表