Cadologist 发表于 2022-7-5 19:48:10

系统变量/LISP到Repo

我试图找出是否存在一个系统变量,该变量将保存打开的平台(AutoCAD、Civil 3D等)上的信息。
 
我知道如何找到软件的版本,我需要的是将其应用于LISP中的if/then类型例程,其中。。。。
 
如果用户正在运行AUTOCAD且版本>19.1,则执行此操作;或
如果用户正在运行CIVIL 3D,并且版本>19.1,则执行此操作。
 
背景知识,处理可信位置问题,在我所在的公司中,我有一个将配置应用于CAD安装的自动化过程。该过程的一部分涉及受信任的位置,其中,AutoCAD在Civil 3D中不需要相同的位置。我希望在LISP开始时进行条件代码检查,该检查将应用于AutoCAD或Civil 3D,取决于“系统变量检查”,这将使过程确认应用程序。
 
有人有什么想法吗?我肯定有什么东西在那里,只是还没有找到它,没有ACADVER,虽然有用,但只回复版本,而不是实际使用的平台/软件。
 
非常感谢任何帮助或见解。。。。。。

Commandobill 发表于 2022-7-5 20:02:00

您是否考虑过只获取acad对象的名称?
 
(setq acadObjName (vla-get-name (vlax-get-acad-object)))
 
对于reg autocad,它应该是“autocad”,对于civil 3d,它应该是“autocad civil 3d(年份)”
 
至少对我来说是这样。

Cadologist 发表于 2022-7-5 20:20:58

谢谢你的回复,我会检查一下,看看这是否符合我的要求。我测试完后会回复。

Commandobill 发表于 2022-7-5 20:25:43

此外,您可以随时关闭受信任的位置。。。也许在所有情况下都不可取,但有另一种选择。

Cadologist 发表于 2022-7-5 20:43:07

没错,这是我们IT部门不想做的事情,但是的,这是一种选择。
 
基本上,我得到了一个调色板按钮(实际上有几个),作为配置过程的一部分,自动配置用户的软件。我希望创建一个条件函数,如果用户运行AutoCAD,则执行1,2,3,如果用户运行Civil 3D,则执行4,5,6。AutoCAD似乎不需要用户的应用程序数据等任何可信位置(或在后台处理),而Civil 3D确实需要多条路径,准确地说是3条,指向用户的唯一配置文件路径等。如果我可以找到列出软件/平台的变量,那么我可以将其作为条件要求来执行。

BIGAL 发表于 2022-7-5 20:54:43

这可能是你想要的,我作为一个单独的函数运行,在主程序之前加载它。这是为了打开Civ3D界面
 

;vercheck.lspversion check for *aecc objects


(defun ah:vercheck ( / vrsn appstr)
(vl-load-com)

(if ((lambda (vrsn)
       (cond
      ((vl-string-search "R17.2" vrsn) (setq appstr "6.0")) ;09
      ((vl-string-search "R18.0" vrsn) (setq appstr "7.0")) ;10
      ((vl-string-search "R18.1" vrsn) (setq appstr "8.0")) ;11
      ((vl-string-search "R18.2" vrsn) (setq appstr "9.0")) ;12 ?
      ((vl-string-search "R19.0" vrsn) (setq appstr "10.0")) ;13
      ((vl-string-search "R19.1" vrsn)(setq appstr "11.0"));;2014
      ((vl-string-search "R20.0" vrsn)(setq appstr "12.0"));;2015
      ((alert "This version of C3D not supported!"))
       )
      )
      (vlax-product-key)
   )                         ; end if condition progn is true
   (progn
       (cond (*AeccDoc*)
         ((setq *AeccDoc*
         (vlax-get
             (cond (*AeccApp*)
               ((setq *AeccApp*
               (vla-getinterfaceobject
                  (cond (*Acad*)
                  ((setq *Acad* (vlax-get-acad-object)))
                  )
                  (strcat "AeccXUiLand.AeccApplication." appstr)
               )
                )
               )
             )
             'ActiveDocument
         )
          )
         )
       ) ; end main cond
   ) ; end progn
) ; end if vsrn
)
页: [1]
查看完整版本: 系统变量/LISP到Repo