乐筑天下

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

[编程交流] 在20中访问CIV3D数据库

[复制链接]

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:10:01 | 显示全部楼层 |阅读模式
我现在有问题,我已经安装了CIV3D 2016,这个例程会出现错误,我知道appstr“13.0”可能是错误的数字,但我似乎在尝试其他数字之前出现了错误。有什么需要帮忙的吗?
 
  1. ;vercheck.lsp  version check for *aecc objects
  2. ; By Alan H
  3. (defun ah:vercheck ( / vrsn appstr)
  4. (vl-load-com)
  5. (if ((lambda (vrsn)
  6.        (cond
  7.         ((vl-string-search "R17.2" vrsn) (setq appstr "6.0")) ;09
  8.         ((vl-string-search "R18.0" vrsn) (setq appstr "7.0")) ;10
  9.         ((vl-string-search "R18.1" vrsn) (setq appstr "8.0")) ;11
  10.         ((vl-string-search "R18.2" vrsn) (setq appstr "9.0")) ;12 ?
  11.         ((vl-string-search "R19.0" vrsn) (setq appstr "10.0")) ;13
  12.         ((vl-string-search "R19.1" vrsn)(setq appstr "11.0"));;2014
  13.         ((vl-string-search "R20.0" vrsn)(setq appstr "12.0"));;2015
  14.         ((vl-string-search "R20.1" vrsn)(setq appstr "13.0"));;2016
  15.         ((alert "This version of C3D not supported!"))
  16.        )
  17.       )
  18.       (vlax-product-key)
  19.      )                         ; end if condition progn is true
  20.      (progn
  21.        (cond (*AeccDoc*)
  22.          ((setq *AeccDoc*
  23.            (vlax-get
  24.              (cond (*AeccApp*)
  25.                ((setq *AeccApp*
  26.                  (vla-getinterfaceobject
  27.                     (cond (*Acad*)
  28.                     ((setq *Acad* (vlax-get-acad-object)))
  29.                     )
  30.                     (strcat "AeccXUiLand.AeccApplication." appstr)
  31.                  )
  32.                 )
  33.                )
  34.              )
  35.              'ActiveDocument
  36.            )
  37.           )
  38.          )
  39.        ) ; end main cond
  40.      ) ; end progn
  41. ) ; end if vsrn
  42. )
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
358
发表于 2022-7-5 18:18:08 | 显示全部楼层
你好
 
您的代码中有两次以下版本号,可能这就是为什么它没有达到2016版本的原因。
 
  1. (vl-string-search "R20.0" vrsn)
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:22:46 | 显示全部楼层
对的2016年为R20.1
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:26:05 | 显示全部楼层
而且
 
  1. (if vlax-user-product-key                                               ; If 2013+
  2. (vlax-user-product-key)                                               ; Use new function
  3. (vlax-product-key)                                                    ; Use legacy function
  4. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:27:21 | 显示全部楼层
“11.0”、“12.0”和“13.0”是从哪里来的?
 
  1. (vl-load-com)
  2. (defun _GetAeccDocument ()
  3. ((lambda (vrsn)
  4.     (if
  5.       (setq vrsn
  6.              (cond
  7.                ((vl-string-search "20.1" vrsn) "10.5")                 ; 2016
  8.                ((vl-string-search "20.0" vrsn) "10.4")                 ; 2015
  9.                ((vl-string-search "19.1" vrsn) "10.3")                 ; 2014
  10.                ((vl-string-search "19.0" vrsn) "10.0")                 ; 2013
  11.                ((vl-string-search "18.2" vrsn) "9.0")                  ; 2012
  12.                ((vl-string-search "18.1" vrsn) "8.0")                  ; 2011
  13.                ((vl-string-search "18.0" vrsn) "7.0")                  ; 2010
  14.                ((vl-string-search "17.2" vrsn) "6.0")                  ; 2009
  15.                ((vl-string-search "17.1" vrsn) "5.0")                  ; 2008
  16.              )
  17.       )
  18.        (setq *AeccDoc*
  19.               (vlax-get
  20.                 (cond (*AeccApp*)
  21.                       ((setq *AeccApp*
  22.                               (vla-getinterfaceobject
  23.                                 (cond (*Acad*)
  24.                                       ((setq *Acad* (vlax-get-acad-object)))
  25.                                 )
  26.                                 (strcat "AeccXUiLand.AeccApplication." vrsn)
  27.                               )
  28.                        )
  29.                       )
  30.                 )
  31.                 'ActiveDocument
  32.               )
  33.        )
  34.     )
  35.   )
  36.    (if vlax-user-product-key                                           ; If 2013+
  37.      (vlax-user-product-key)                                           ; Use new function
  38.      (vlax-product-key)                                                ; Use legacy function
  39.    )
  40. )
  41. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:33:20 | 显示全部楼层
我不使用垂直软件,但我可以这样编写函数FWIW:
如果getinterfaceobject方法失败,或者找不到版本号,则可以包括额外的错误捕获:
  1. (defun _aeccdocument nil
  2.    (cond
  3.        (   *aeccdoc*   )
  4.        (   (_aeccapp) (setq *aeccdoc* (vlax-get (_aeccapp) 'activedocument)))
  5.    )
  6. )
  7. (defun _aeccapp ( / err str )
  8.    (cond
  9.        (   *aeccapp*   )
  10.        (   (   (lambda ( v )
  11.                    (not
  12.                        (vl-some
  13.                           '(lambda ( a b ) (if (vl-string-search a v) (setq str b)))
  14.                           '("20.1" "20.0" "19.1" "19.0" "18.2" "18.1" "18.0" "17.2" "17.1")
  15.                           '("10.5" "10.4" "10.3" "10.0"  "9.0"  "8.0"  "7.0"  "6.0"  "5.0")
  16.                        )
  17.                    )
  18.                )
  19.                ((eval (cond (vlax-user-product-key) (vlax-product-key))))
  20.            )
  21.            (prompt "\nIncompatible version.")
  22.        )
  23.        (   (vl-catch-all-error-p
  24.                (setq err
  25.                    (vl-catch-all-apply 'vla-getinterfaceobject
  26.                        (list (_acapp) (strcat "aeccxuiland.aeccapplication." str))
  27.                    )
  28.                )
  29.            )
  30.            (prompt (vl-catch-all-error-message err))
  31.        )
  32.        (   (setq *aeccapp* err))
  33.    )
  34. )
  35. (defun _acapp ( )
  36.    (cond
  37.        (   *acapp*   )
  38.        (   (setq *acapp* (vlax-get-acad-object)))
  39.    )
  40. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:36:52 | 显示全部楼层
请原谅我的提问,李-
 
我假设我忽略了一些事情,因为这些天我很少用LISP进行编码——为什么这两个函数(我*相信*是等效的)在性能上有这么大的差异?
 
 
 
示例函数:
 
  1. (defun _Sample1 ()
  2. ((lambda (v)
  3.     (vl-some
  4.       '(lambda (a b) (if (vl-string-search a v) (setq s b)))
  5.       '("20.1" "20.0" "19.1" "19.0" "18.2" "18.1" "18.0" "17.2" "17.1")
  6.       '("10.5" "10.4" "10.3" "10.0"  "9.0"  "8.0"  "7.0"  "6.0"  "5.0")
  7.       )
  8.     )
  9.    ((eval (cond (vlax-user-product-key) (vlax-product-key))))
  10.    )
  11. )
  12. (defun _Sample2 ()
  13. ((lambda (vrsn)
  14.     (cond
  15.         ((vl-string-search "20.1" vrsn) "10.5")                        ; 2016
  16.         ((vl-string-search "20.0" vrsn) "10.4")                        ; 2015
  17.         ((vl-string-search "19.1" vrsn) "10.3")                        ; 2014
  18.         ((vl-string-search "19.0" vrsn) "10.0")                        ; 2013
  19.         ((vl-string-search "18.2" vrsn) "9.0")                         ; 2012
  20.         ((vl-string-search "18.1" vrsn) "8.0")                         ; 2011
  21.         ((vl-string-search "18.0" vrsn) "7.0")                         ; 2010
  22.         ((vl-string-search "17.2" vrsn) "6.0")                         ; 2009
  23.         ((vl-string-search "17.1" vrsn) "5.0")                         ; 2008
  24.       )
  25.   )
  26.    (if vlax-user-product-key                                           ; If 2013+
  27.      (vlax-user-product-key)                                           ; Use new function
  28.      (vlax-product-key)                                                ; Use legacy function
  29.    )
  30. )
  31. )

 
 
 
控制台结果:
 
  1. 7

 
 
 
我增加了迭代次数,以获得样本2的非零结果;诚然,没有人会在外部对象上多次执行此任务(这是该子函数打算支持的),只是对性能感到好奇。
 
干杯
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:41:06 | 显示全部楼层
哦,第二个函数无疑会更快:不需要分配内存来存储提供给vl some的两个列表,并且没有eval语句;然而,性能不是此类表达式的一个因素,因为它们只会被计算一次(因为全局变量在之后被引用)。我只是发现很多重复的表达式只会导致代码相当丑陋。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-5 18:44:51 | 显示全部楼层
 
很好,谢谢。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:52:41 | 显示全部楼层
感谢Blackbox,当我在家发布时,20.0是一个拼写错误。11-12-13只是一个猜测,因为我们刚刚从2013年到2016年,将在明天上班时尝试。用于通过工具栏而不是工具空间更改轮廓和点样式。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 19:45 , Processed in 1.348297 second(s), 72 queries .

© 2020-2025 乐筑天下

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