菜鸟寻求帮助
我有一些来自前一个线程的代码,我用我的lisp知识设法适应了这些代码,它帮助我定义了一个启动工作区,我想为每个新用户运行一次,以在他们的登录名中生成一个保存的版本。我想添加一个IF来检查这是否已经完成,而不是生成一条错误消息,因此在正常编程中,我想说一些类似的话:如果工作区(loginname)存在,转到SETCURRENT-这是我目前在ACAD中使用的代码。lsp
(defun-q mystartup ()
(command "_wscurrent" "SWD Drafting")
(command "_wssave" (getvar "loginname"))
)
;(setq S::STARTUP (append S::STARTUP mystartup))
(command "_wscurrent" (getvar "loginname"))
“SWD Drawing”工作区是不可编辑的,因为它在“Enterprise”中,所以我希望用户有一个单独命名的副本,他们可以自由编辑。它可以工作,但我必须在运行一次“mystartup”后将其注释掉,我希望能够利用IF跳过它。
我可能希望太多了,但有一些聪明的人让这看起来很容易。
谢谢同时我会继续搜索 请检查本讨论中提出的解决方案。将测试插入代码后:
(if (IsValidWorkspace (getvar "loginname"))
(setq S::STARTUP (append S::STARTUP mystartup))
) 谢谢Mircea,
我已经浏览了推荐的帖子,但看不出如何应用它,解决方案似乎是生成一个日志文件并询问它,在没有打开文件的情况下可以创建日志吗在打开任何文件之前,我想在CAD启动期间应用这些设置。
现在,我可以从您的示例中了解如何应用IF,但我正在努力找到一种方法来定义命名工作区的true/false元素,例如,IF false(工作区名称不存在)运行mystartup else IF true set wscurrent“loginname”。
我欢迎任何其他建议。 我同意Visual LISP应该能够直接查询可用工作区的对象模型(即使这需要迭代每个主工作区和企业CUI),而无需写入日志文件等,正如上面链接的帖子所示。
也许,这将有助于:
(vl-load-com)
(defun c:SetOrMakeUserWs (/ wsTemplate _WsCurrent user)
;; Change this string to be the name of the standard
;; workspace to be copied as the user workspace:
(setq wsTemplate "SWD Drafting")
;; _WsCurrent sub-function:
(defun _WsCurrent (workspace)
(if (vl-catch-all-error-p
(vl-catch-all-apply
'setvar
(list 'wscurrent workspace)
)
)
nil
T
)
)
;;
;; Main code:
;;
;; If you cannot set the user's workspace current
;; (meaining it does not exist)
(if (not (_WsCurrent (setq user (getvar 'loginname))))
;; Attempt to set the template workspace current
(if (_WsCurrent wsTemplate)
(progn
;; If successful, save the template workspace
;; as the user workspace
(command "._wssave" user)
;; Now that the user workspace exists, set
;; it current
(_WsCurrent user)
)
)
)
(princ)
)
(c:SetOrMakeUserWs)
谢谢RenderMan这很好用
你能推荐一些好的参考书/网站让我学到更多吗? 哦,不!我被迷住了。
当我从ACAD运行你的代码时。lsp它可以工作,但不会从我加载的企业中保存快速访问工具栏。如果在CAD内进行I appload,则会中断,并显示错误消息:
当我关闭这个;代码完成了,一切都如我所愿。
你知道我该怎么解决这个问题吗?
谢谢
哦,不!我被迷住了。
当我从ACAD运行你的代码时。lsp它可以工作,但不会从我加载的企业中保存快速访问工具栏。如果在CAD内进行I appload,则会中断,并显示错误消息:
https://www.cadtutor.net/forum/attachment.php?attachmentid=36016&d=1342617444
当我关闭这个;代码完成了,一切都如我所愿。
你知道我该怎么解决这个问题吗?
谢谢
</blockquote>
首先,不客气。
有几种方法可以做到这一点。您收到错误的原因是系统未完全加载。考虑到启动顺序,通过脚本(SCR)运行可能会更成功。然而,这将需要您修改应用程序图标的目标路径(副本),以包括/b开关(更多关于启动开关)。
应用程序图标的目标路径,伪代码:
脚本,伪代码:
(load "<YourFilePathHere>\<YourLispFileName>.lsp")
有很多免费的资源可以学习,比如像这样的论坛,AfraLisp等等,但是,如果你想要一本好书,我推荐(图片链接):
Visual LISP开发人员的圣经
https://sites.google.com/site/visuallispbible/_/rsrc/1293815636554/temp/vldb_cover_2011.JPG?height=320&width=244 感谢您的时间和投入,非常感谢。
我会仔细研究你的建议,并反馈我的进展 我已经查看了您的链接,并使用/b开关和脚本加载程序设置了一个测试。
它的工作原理就像我手动运行\u appload;我得到了worspace的真实副本,但我像以前一样收到了警告消息。我知道我可以勾选“不再显示此消息”(这确实有效),但它太混乱,无法部署到所有用户并要求他们勾选该框,是否可以禁用警告消息?
我想我们在一个不同的时区,所以我会做一些浏览,看看我是否可以找到一个解决方案,谢谢你的书推荐,我将在周末得到它! RenderMan,谢谢你给我那本书的链接!我刚买了它(6美元,对吗?!)并将其发送到我的Kindle Fire、手机和电脑上的桌面应用程序。我本来可以免费使用借阅图书馆的,但我读了很多书,想让它由我支配。
页:
[1]
2