Keywordkid 发表于 2022-7-6 07:35:20

菜鸟寻求帮助

我有一些来自前一个线程的代码,我用我的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跳过它。
 
我可能希望太多了,但有一些聪明的人让这看起来很容易。
 
谢谢同时我会继续搜索

MSasu 发表于 2022-7-6 07:42:33

请检查本讨论中提出的解决方案。将测试插入代码后:
(if (IsValidWorkspace (getvar "loginname"))
(setq S::STARTUP (append S::STARTUP mystartup))
)

Keywordkid 发表于 2022-7-6 07:46:35

谢谢Mircea,
 
我已经浏览了推荐的帖子,但看不出如何应用它,解决方案似乎是生成一个日志文件并询问它,在没有打开文件的情况下可以创建日志吗在打开任何文件之前,我想在CAD启动期间应用这些设置。
 
现在,我可以从您的示例中了解如何应用IF,但我正在努力找到一种方法来定义命名工作区的true/false元素,例如,IF false(工作区名称不存在)运行mystartup else IF true set wscurrent“loginname”。
 
我欢迎任何其他建议。

BlackBox 发表于 2022-7-6 07:50:00

我同意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)

Keywordkid 发表于 2022-7-6 07:51:51

谢谢RenderMan这很好用
 
你能推荐一些好的参考书/网站让我学到更多吗?

Keywordkid 发表于 2022-7-6 07:55:51

哦,不!我被迷住了。
 
当我从ACAD运行你的代码时。lsp它可以工作,但不会从我加载的企业中保存快速访问工具栏。如果在CAD内进行I appload,则会中断,并显示错误消息:
 

 
当我关闭这个;代码完成了,一切都如我所愿。
 
你知道我该怎么解决这个问题吗?
 
谢谢

BlackBox 发表于 2022-7-6 08:00:42

 
哦,不!我被迷住了。
 
当我从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

Keywordkid 发表于 2022-7-6 08:06:02

感谢您的时间和投入,非常感谢。
 
我会仔细研究你的建议,并反馈我的进展

Keywordkid 发表于 2022-7-6 08:08:28

我已经查看了您的链接,并使用/b开关和脚本加载程序设置了一个测试。
 
它的工作原理就像我手动运行\u appload;我得到了worspace的真实副本,但我像以前一样收到了警告消息。我知道我可以勾选“不再显示此消息”(这确实有效),但它太混乱,无法部署到所有用户并要求他们勾选该框,是否可以禁用警告消息?
 
我想我们在一个不同的时区,所以我会做一些浏览,看看我是否可以找到一个解决方案,谢谢你的书推荐,我将在周末得到它!

Lee Roy 发表于 2022-7-6 08:11:39

RenderMan,谢谢你给我那本书的链接!我刚买了它(6美元,对吗?!)并将其发送到我的Kindle Fire、手机和电脑上的桌面应用程序。我本来可以免费使用借阅图书馆的,但我读了很多书,想让它由我支配。
页: [1] 2
查看完整版本: 菜鸟寻求帮助