乐筑天下

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

[编程交流] 使用VLA恢复以前的UCS

[复制链接]

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:26:08 | 显示全部楼层 |阅读模式
大家好,
 
我正在构建一个代码,它可以实现以下功能:
-当我附加“某物”时,它会将其放置在层XREF\u测试上。
-当前层保持活动状态。
-当我的UCS不是WCS时,它会询问我是否要更改为WCS。
 
现在问题来了。。。
命令完成后,我希望恢复以前的UCS。
 
我用红色标记了代码失败的地方。。。
 
  1. Error: AutoCAD command rejected: "UCS"

 
使用反应堆时不允许使用“命令”功能。。。
那么我该如何解决这个问题呢?我是如此的接近。。。
 
  1. ;;Command Reactor for Xref/Attachment layer
  2. (if (null myxr-react)
  3. (setq myxr-react (vlr-command-reactor nil         '((:vlr-commandwillstart . myxr-swaplayer)
  4.                                                 (:vlr-commandended . myxr-restorelayer)
  5.                                                 (:vlr-commandcancelled . myxr-restorelayer))))
  6. )
  7. (defun setormakelayer (layn doc)
  8. (if (null (tblsearch "layer" layn))
  9.         (vla-add (vla-get-layers doc) layn)
  10. )
  11. (vla-put-lock (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) layn ) :vlax-true)
  12. (setvar "clayer" layn)
  13. (if (zerop (getvar 'worlducs))
  14.         (progn
  15.         (ASKFORWCS)
  16.         (setq wisselnaarwcs 1)
  17.         )
  18. )
  19. )
  20. ;;commandwillstart callback (reactor commandlist)
  21. (defun myxr-swaplayer (r cl / doc)
  22. (if (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH" "POINTCLOUDATTACH" "COORDINATIONMODELATTACH"));allowance for other commands
  23.         (progn
  24.                 (setq doc (vlr-document r))
  25.                 (vlr-data-set r (getvar "clayer"))
  26.                 (if (= 1 (vla-get-activespace doc))
  27.                         (progn
  28.                                 (setormakelayer "XREF_TEST" doc)
  29.                         )
  30.                         (progn
  31.                                 (setormakelayer "XREF_TEST" doc)
  32.                         )
  33.                 )
  34.         )
  35. )
  36. )
  37. ;;commandended callback (reactor commandlist)
  38. (defun myxr-restorelayer (r cl)
  39. (if (and (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH" "POINTCLOUDATTACH" "COORDINATIONMODELATTACH"))(vlr-data r))
  40.         (progn
  41.                 (setvar "clayer" (vlr-data r))
  42.                 (if (= wisselnaarwcs 1)
  43.                         (progn
  44. [color="red"]                                        (princ "RESTORE UCS")
  45.                                 (command "UCS" "P")[/color]
  46.                                 (setq wisselnaarwcs 0)
  47.                         )
  48.                 )
  49.         )
  50.         (progn
  51.                 (vlr-data-set r nil)
  52.         )
  53. )
  54. )
  55. (defun ASKFORWCS()
  56. (setq reply (ACET-UI-MESSAGE "UCS NAAR WCS? " "UCS system" (+ Acet:YESNO Acet:ICONQuestion)))
  57. ;; Yes = 6, No = 7, Cancel = 2
  58. (if (= reply 6)
  59.         (progn
  60.                         (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))(vla-put-ActiveUCS doc (vla-add (vla-get-usercoordinatesystems doc)(vlax-3D-point '(0. 0. 0.))(vlax-3D-point '(1. 0. 0.))(vlax-3D-point '(0. 1. 0.)) "TempWord_UCS"))
  61.                 (setq wisselnaarwcs 1)
  62.         )
  63.                 (progn
  64.                 (ALERT "Nope")
  65.         )
  66. )
  67. (princ)
  68. )
  69. (princ)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:31:27 | 显示全部楼层
请参见此示例。
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:32:44 | 显示全部楼层
嘿,李,谢谢你的例子。。。
我试着看看是否可以在代码中插入所需的代码。。。但是你的代码对我来说很难理解。
我如何使其适合我的编码?
 
我在代码中添加了红色代码,但出现了以下错误:
  1. Error: lisp value has no coercion to VARIANT with this type:  ((1.87474 4.632 0.0) (0.846936 0.531695 0.0) (-0.531695 0.846936 0.0))

因此,它确实正确存储UCS,但在放置外部参照并引发此错误后,它不会恢复UCS。
 
  1. ;;Command Reactor for Xref/Attachment layer
  2. (if (null myxr-react)
  3. (setq myxr-react (vlr-command-reactor nil         '((:vlr-commandwillstart . myxr-swaplayer)
  4.                                                 (:vlr-commandended . myxr-restorelayer)
  5.                                                 (:vlr-commandcancelled . myxr-restorelayer))))
  6. )
  7. (defun setormakelayer (layn doc)
  8. (if (null (tblsearch "layer" layn))
  9.         (vla-add (vla-get-layers doc) layn)
  10. )
  11. (vla-put-lock (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) layn ) :vlax-true)
  12. (setvar "clayer" layn)
  13. (if (zerop (getvar 'worlducs))
  14.         (progn
  15.         (ASKFORWCS)
  16.         )
  17. )
  18. )
  19. ;;commandwillstart callback (reactor commandlist)
  20. (defun myxr-swaplayer (r cl / doc)
  21. (if (member (car cl) '("ATTACH"));allowance for other commands
  22.         (progn
  23.                 (setq doc (vlr-document r))
  24.                 (vlr-data-set r (getvar "clayer"))
  25.                 (if (= 1 (vla-get-activespace doc))
  26.                         (progn
  27.                                 (setormakelayer "XREF" doc)
  28.                         )
  29.                         (progn
  30.                                 (setormakelayer "XREF" doc)
  31.                         )
  32.                 )
  33.         )
  34. )
  35. (if (member (car cl) '("XATTACH" "DWFATTACH"));allowance for other commands
  36.         (progn
  37.                 (setq doc (vlr-document r))
  38.                 (vlr-data-set r (getvar "clayer"))
  39.                 (if (= 1 (vla-get-activespace doc))
  40.                         (progn
  41.                                 (setormakelayer "XREF-DWG" doc)
  42.                         )
  43.                         (progn
  44.                                 (setormakelayer "XREF-DWG" doc)
  45.                         )
  46.                 )
  47.         )
  48. )
  49. (if (member (car cl) '("IMAGEATTACH"));allowance for other commands
  50.         (progn
  51.                 (setq doc (vlr-document r))
  52.                 (vlr-data-set r (getvar "clayer"))
  53.                 (if (= 1 (vla-get-activespace doc))
  54.                         (progn
  55.                                 (setormakelayer "XREF-IMAGE" doc)
  56.                         )
  57.                         (progn
  58.                                 (setormakelayer "XREF-IMAGE" doc)
  59.                         )
  60.                 )
  61.         )
  62. )
  63. (if (member (car cl) '("PDFATTACH"));allowance for other commands
  64.         (progn
  65.                 (setq doc (vlr-document r))
  66.                 (vlr-data-set r (getvar "clayer"))
  67.                 (if (= 1 (vla-get-activespace doc))
  68.                         (progn
  69.                                 (setormakelayer "XREF-PDF" doc)
  70.                         )
  71.                         (progn
  72.                                 (setormakelayer "XREF-PDF" doc)
  73.                         )
  74.                 )
  75.         )
  76. )
  77. (if (member (car cl) '("POINTCLOUDATTACH"));allowance for other commands
  78.         (progn
  79.                 (setq doc (vlr-document r))
  80.                 (vlr-data-set r (getvar "clayer"))
  81.                 (if (= 1 (vla-get-activespace doc))
  82.                         (progn
  83.                                 (setormakelayer "XREF-POINTCLOUD" doc)
  84.                         )
  85.                         (progn
  86.                                 (setormakelayer "XREF-POINTCLOUD" doc)
  87.                         )
  88.                 )
  89.         )
  90. )
  91. (if (member (car cl) '("COORDINATIONMODELATTACH"));allowance for other commands
  92.         (progn
  93.                 (setq doc (vlr-document r))
  94.                 (vlr-data-set r (getvar "clayer"))
  95.                 (if (= 1 (vla-get-activespace doc))
  96.                         (progn
  97.                                 (setormakelayer "XREF-COORDINATIONMODEL" doc)
  98.                         )
  99.                         (progn
  100.                                 (setormakelayer "XREF-COORDINATIONMODEL" doc)
  101.                         )
  102.                 )
  103.         )
  104. )
  105. )
  106. ;;commandended callback (reactor commandlist)
  107. (defun myxr-restorelayer (r cl)
  108. (if (and (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH" "POINTCLOUDATTACH" "COORDINATIONMODELATTACH"))(vlr-data r))
  109.         (progn
  110.                 (setvar "clayer" (vlr-data r))
  111.                 (if (= wisselnaarwcs 1)
  112.                         (progn
  113.                                 (ALERT "Vergeet niet je UCS terug te zetten!")
  114. [color="red"]                                        (vla-put-activeucs (ucsr:acdoc)(vla-item (vla-get-usercoordinatesystems (ucsr:acdoc)) ucsr:prevucs))[/color]
  115.                                 (setq wisselnaarwcs 0)
  116.                         )
  117.                 )
  118.         )
  119.         (progn
  120.                 (vlr-data-set r nil)
  121.         )
  122. )
  123. )
  124. (defun ASKFORWCS()
  125. (setq reply (ACET-UI-MESSAGE "Het huidige coördinaten-stelsel is niet 'World'\nCoördinaten-stelsen aanpassen naar 'World'?" "UCS SYSTEM" (+ Acet:YESNO Acet:ICONQuestion)))
  126. ;; Yes = 6, No = 7, Cancel = 2
  127. (if (= reply 6)
  128.         (progn
  129. [color="red"]                        (setq ucsr:prevucs (mapcar 'getvar '(ucsorg ucsxdir ucsydir)))[/color]
  130.                         (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))(vla-put-ActiveUCS doc (vla-add (vla-get-usercoordinatesystems doc)(vlax-3D-point '(0. 0. 0.))(vlax-3D-point '(1. 0. 0.))(vlax-3D-point '(0. 1. 0.)) "TempWord_UCS"))
  131.                 (setq wisselnaarwcs 1)
  132.         )
  133.                 (progn
  134.                 ;(ALERT "Nope")
  135.         )
  136. )
  137. (princ)
  138. )
  139. [color="red"](defun ucsr:acdoc nil
  140.    (eval (list 'defun 'ucsr:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
  141.    (ucsr:acdoc)
  142. )[/color]

 
(普林斯)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 16:37:20 | 显示全部楼层
在我的代码中,变量ucsr:prevucs存储活动UCS的名称,或者存储定义活动UCS的向量列表(如果未命名)。然后,还原此UCS的代码测试此变量的值是字符串还是列表,并进行相应的操作。在代码中,变量ucsr:prevucs将始终存储向量列表,但是,您正在尝试恢复命名UCS。
回复

使用道具 举报

18

主题

1529

帖子

973

银币

中流砥柱

Rank: 25

铜币
649
发表于 2022-7-5 16:39:49 | 显示全部楼层
您不能在reactor回调中使用命令,但可以使用sendcommand方法。我认为它可以用于Aftertouch的代码:
  1. (vla-sendcommand docObject "_UCS _Previous ")
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:44:41 | 显示全部楼层
谢谢大家的回复。
 
我混合了我的代码,李的代码和罗伊的想法,
 
代码现在真的可以工作了!耶:-)
 
即使它在命令行中给我带来了一个错误:
  1. Error: Automation Error. Object is referenced by other object(s)

 
错误是由代码引起的,用红色标记,它抛出错误,但它仍按我的意愿删除UCS。
有没有办法摆脱这个错误???
 
下面是代码:
  1. ;;Command Reactor for Xref/Attachment layer
  2. (if (null myxr-react)
  3. (setq myxr-react (vlr-command-reactor nil         '((:vlr-commandwillstart . myxr-swaplayer)
  4.                                                 (:vlr-commandended . myxr-restorelayer)
  5.                                                 (:vlr-commandcancelled . myxr-restorelayer))))
  6. )
  7. (defun setormakelayer (layn doc)
  8. (if (null (tblsearch "layer" layn))
  9.         (vla-add (vla-get-layers doc) layn)
  10. )
  11. (vla-put-lock (vla-item (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))) layn ) :vlax-true)
  12. (setvar "clayer" layn)
  13. (if (zerop (getvar 'worlducs))
  14.         (progn
  15.         (ASKFORWCS)
  16.         )
  17. )
  18. )
  19. ;;commandwillstart callback (reactor commandlist)
  20. (defun myxr-swaplayer (r cl / doc)
  21. (setvar "CMDECHO" 0)
  22. (if (member (car cl) '("ATTACH"));allowance for other commands
  23.         (progn
  24.                 (setq doc (vlr-document r))
  25.                 (vlr-data-set r (getvar "clayer"))
  26.                 (if (= 1 (vla-get-activespace doc))
  27.                         (progn
  28.                                 (setormakelayer "XREF" doc)
  29.                         )
  30.                         (progn
  31.                                 (setormakelayer "XREF" doc)
  32.                         )
  33.                 )
  34.         )
  35. )
  36. (if (member (car cl) '("XATTACH" "DWFATTACH"));allowance for other commands
  37.         (progn
  38.                 (setq doc (vlr-document r))
  39.                 (vlr-data-set r (getvar "clayer"))
  40.                 (if (= 1 (vla-get-activespace doc))
  41.                         (progn
  42.                                 (setormakelayer "XREF-DWG" doc)
  43.                         )
  44.                         (progn
  45.                                 (setormakelayer "XREF-DWG" doc)
  46.                         )
  47.                 )
  48.         )
  49. )
  50. (if (member (car cl) '("IMAGEATTACH"));allowance for other commands
  51.         (progn
  52.                 (setq doc (vlr-document r))
  53.                 (vlr-data-set r (getvar "clayer"))
  54.                 (if (= 1 (vla-get-activespace doc))
  55.                         (progn
  56.                                 (setormakelayer "XREF-IMAGE" doc)
  57.                         )
  58.                         (progn
  59.                                 (setormakelayer "XREF-IMAGE" doc)
  60.                         )
  61.                 )
  62.         )
  63. )
  64. (if (member (car cl) '("PDFATTACH"));allowance for other commands
  65.         (progn
  66.                 (setq doc (vlr-document r))
  67.                 (vlr-data-set r (getvar "clayer"))
  68.                 (if (= 1 (vla-get-activespace doc))
  69.                         (progn
  70.                                 (setormakelayer "XREF-PDF" doc)
  71.                         )
  72.                         (progn
  73.                                 (setormakelayer "XREF-PDF" doc)
  74.                         )
  75.                 )
  76.         )
  77. )
  78. (if (member (car cl) '("POINTCLOUDATTACH"));allowance for other commands
  79.         (progn
  80.                 (setq doc (vlr-document r))
  81.                 (vlr-data-set r (getvar "clayer"))
  82.                 (if (= 1 (vla-get-activespace doc))
  83.                         (progn
  84.                                 (setormakelayer "XREF-POINTCLOUD" doc)
  85.                         )
  86.                         (progn
  87.                                 (setormakelayer "XREF-POINTCLOUD" doc)
  88.                         )
  89.                 )
  90.         )
  91. )
  92. (if (member (car cl) '("COORDINATIONMODELATTACH"));allowance for other commands
  93.         (progn
  94.                 (setq doc (vlr-document r))
  95.                 (vlr-data-set r (getvar "clayer"))
  96.                 (if (= 1 (vla-get-activespace doc))
  97.                         (progn
  98.                                 (setormakelayer "XREF-COORDINATIONMODEL" doc)
  99.                         )
  100.                         (progn
  101.                                 (setormakelayer "XREF-COORDINATIONMODEL" doc)
  102.                         )
  103.                 )
  104.         )
  105. )
  106. )
  107. ;;commandended callback (reactor commandlist)
  108. (defun myxr-restorelayer (r cl)
  109. (if (and (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH" "POINTCLOUDATTACH" "COORDINATIONMODELATTACH"))(vlr-data r))
  110.         (progn
  111.                 (setvar "clayer" (vlr-data r))
  112.                 (if (= wisselnaarwcs 1)
  113.                         (progn
  114.                                 (setq acadObj (vlax-get-acad-object))
  115.                                 (setq doc (vla-get-ActiveDocument acadObj))
  116.                                 (vla-sendcommand doc "_UCS _P ")
  117.                                 (setq wisselnaarwcs 0)
  118.                         )
  119.                         (progn
  120.                         )
  121.                 )
  122.         )
  123.         (progn
  124.                 (vlr-data-set r nil)
  125.         )
  126. )
  127. [color="red"]        (if (tblsearch "ucs" "WCS")
  128.         (progn
  129.         (vla-delete (vla-item (vla-get-usercoordinatesystems doc) "WCS"))
  130.         )
  131.         (progn
  132.         )
  133. )[/color]
  134. (setvar "CMDECHO" 1)
  135. )
  136. (defun ASKFORWCS()
  137. (setq reply (ACET-UI-MESSAGE "Het huidige coördinaten-stelsel is niet 'World'\nCoördinaten-stelsen aanpassen naar 'World'?" "UCS SYSTEM" (+ Acet:YESNO Acet:ICONQuestion)))
  138. ;; Yes = 6, No = 7, Cancel = 2
  139. (if (= reply 6)
  140.         (progn
  141.                         (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))(vla-put-ActiveUCS doc (vla-add (vla-get-usercoordinatesystems doc)(vlax-3D-point '(0. 0. 0.))(vlax-3D-point '(1. 0. 0.))(vlax-3D-point '(0. 1. 0.)) "WCS"))
  142.                 (setq wisselnaarwcs 1 )
  143.         )
  144.                 (progn
  145.                 ;(ALERT "Nope")
  146.         )
  147. )
  148. (princ)
  149. )
  150. (princ)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:45:37 | 显示全部楼层
你好
 
你的重复代码太多了!但无论如何,这是我给你的mods,希望它能如你所愿工作。
 
注意:请尝试新图纸上的代码。
  1. ;;  Command Reactor for Xref/Attachment layer
  2. (if (null myxr-react)
  3. (setq myxr-react (vlr-command-reactor nil '((:vlr-commandwillstart . myxr-swaplayer)
  4.                                              (:vlr-commandended . myxr-restorelayer)
  5.                                              (:vlr-commandcancelled . myxr-restorelayer)
  6.                                              )
  7.                     )
  8.        )
  9. )
  10. ;;                                ;;
  11. (defun setormakelayer (layn doc / lay)
  12. (if (setq lay (vla-add (vla-get-layers doc) layn))
  13.    (vla-put-lock lay :vlax-true)
  14.    )
  15. (setq *myxrClayer* (getvar 'CLAYER))
  16. (setvar "clayer" layn)
  17. (if (zerop (getvar 'worlducs))
  18.    (askforwcs doc)
  19. )
  20. )
  21. ;;    commandwillstart callback (reactor commandlist)
  22. (defun myxr-swaplayer (r cl / doc cmd)
  23. (setvar "CMDECHO" 0)
  24. (setq doc (vlr-document r)
  25.        cmd (car cl)
  26.        )
  27. (vlr-data-set r (getvar "clayer"))
  28. (cond ((= cmd "ATTACH")                      (setormakelayer "XREF" doc))
  29.        ((member cmd '("XATTACH" "DWFATTACH")) (setormakelayer "XREF-DWG" doc))
  30.        ((= cmd "IMAGEATTACH")                 (setormakelayer "XREF-IMAGE" doc))
  31.        ((= cmd "PDFATTACH")                   (setormakelayer "XREF-PDF" doc))
  32.        ((= cmd "POINTCLOUDATTACH")            (setormakelayer "XREF-POINTCLOUD" doc))
  33.        ((= cmd "COORDINATIONMODELATTACH")     (setormakelayer "XREF-COORDINATIONMODEL" doc))
  34.        )
  35. )
  36. ;;    commandended callback (reactor commandlist)
  37. (defun myxr-restorelayer (r cl)
  38. (if (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH"
  39.                         "POINTCLOUDATTACH" "COORDINATIONMODELATTACH" ) )
  40.    (progn
  41.      (and *myxrClayer* (setvar "clayer" *myxrClayer*) (setq *myxrClayer* nil))
  42.      (if (= wisselnaarwcs 1)
  43.        (progn
  44.          (vla-sendcommand (vlr-document r) "_UCS _P ")
  45.          (setq wisselnaarwcs 0)
  46.        )
  47.      )
  48.    )
  49. )
  50. (if (tblsearch "ucs" "WCS")
  51.      (vla-delete (vla-item (vla-get-usercoordinatesystems doc) "WCS")
  52.    )
  53. )
  54. (setvar "CMDECHO" 1)
  55. )
  56. ;;                                ;;
  57. (defun askforwcs (doc / reply )
  58. (setq reply (acet-ui-message "Het huidige co?rdinaten-stelsel is niet 'World'\nCo?rdinaten-stelsen aanpassen naar 'World'?"
  59.                "UCS SYSTEM" (+ acet:yesno acet:iconquestion))
  60. )
  61. ;; Yes = 6, No = 7, Cancel = 2
  62. (if (= reply 6)
  63.    (progn
  64.      (vla-put-activeucs doc
  65.        (vla-add (vla-get-usercoordinatesystems doc)
  66.                 (vlax-3d-point '(0. 0. 0.))
  67.                 (vlax-3d-point '(1. 0. 0.))
  68.                 (vlax-3d-point '(0. 1. 0.))
  69.                 "WCS"
  70.        )
  71.      )
  72.      (setq wisselnaarwcs 1)
  73.    )
  74.    ;; (ALERT "Nope")
  75. )
  76. (princ)
  77. ) (vl-load-com)
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:50:35 | 显示全部楼层
嘿Tharwat,
 
感谢代码中的清理。
这给我带来了一个小错误,但我设法纠正了那个错误。
我用红色标记了它。
 
现在,您的代码可以像以前一样工作(但现在已清理完毕):-),但仍然会引发错误:
我这次用绿色标记了原因。:-)
注意:Is仍然完成了我想要的所有事情。。。所以我不明白为什么会出现错误。。。因为它仍然执行delete函数,并实际删除WCS。。。
 
  1. Error: Automation Error. Object is referenced by other object(s)
  1. ;;  Command Reactor for Xref/Attachment layer
  2. (if (null myxr-react)
  3. (setq myxr-react (vlr-command-reactor nil '((:vlr-commandwillstart . myxr-swaplayer)
  4.                                              (:vlr-commandended . myxr-restorelayer)
  5.                                              (:vlr-commandcancelled . myxr-restorelayer)
  6.                                              )
  7.                     )
  8.        )
  9. )
  10. ;;                                ;;
  11. (defun setormakelayer (layn doc / lay)
  12. (if (setq lay (vla-add (vla-get-layers doc) layn))
  13.    (vla-put-lock lay :vlax-true)
  14.    )
  15. (setq *myxrClayer* (getvar 'CLAYER))
  16. (setvar "clayer" layn)
  17. (if (zerop (getvar 'worlducs))
  18.    (askforwcs doc)
  19. )
  20. )
  21. ;;    commandwillstart callback (reactor commandlist)
  22. (defun myxr-swaplayer (r cl / doc cmd)
  23. (setvar "CMDECHO" 0)
  24. (setq doc (vlr-document r)
  25.        cmd (car cl)
  26.        )
  27. (vlr-data-set r (getvar "clayer"))
  28. (cond ((= cmd "ATTACH")                      (setormakelayer "XREF" doc))
  29.        ((member cmd '("XATTACH" "DWFATTACH")) (setormakelayer "XREF-DWG" doc))
  30.        ((= cmd "IMAGEATTACH")                 (setormakelayer "XREF-IMAGE" doc))
  31.        ((= cmd "PDFATTACH")                   (setormakelayer "XREF-PDF" doc))
  32.        ((= cmd "POINTCLOUDATTACH")            (setormakelayer "XREF-POINTCLOUD" doc))
  33.        ((= cmd "COORDINATIONMODELATTACH")     (setormakelayer "XREF-COORDINATIONMODEL" doc))
  34.        )
  35. )
  36. ;;    commandended callback (reactor commandlist)
  37. (defun myxr-restorelayer (r cl)
  38. (if (member (car cl) '("ATTACH" "XATTACH" "IMAGEATTACH" "DWFATTACH" "PDFATTACH"
  39.                         "POINTCLOUDATTACH" "COORDINATIONMODELATTACH" ) )
  40.    (progn
  41.      (and *myxrClayer* (setvar "clayer" *myxrClayer*) (setq *myxrClayer* nil))
  42.      (if (= wisselnaarwcs 1)
  43.        (progn
  44.          (vla-sendcommand (vlr-document r) "_UCS _P ")
  45.          (setq wisselnaarwcs 0)
  46.        )
  47.      )
  48.    )
  49. )
  50. [color="seagreen"]  (if (tblsearch "ucs" "WCS")
  51.      (vla-delete (vla-item (vla-get-usercoordinatesystems [color="red"](vlr-document r)[/color]) "WCS") [color="red"];replaced doc for (vlr-document r)[/color]
  52.    )
  53. )[/color]
  54. (setvar "CMDECHO" 1)
  55. )
  56. ;;                                ;;
  57. (defun askforwcs (doc / reply )
  58. (setq reply (acet-ui-message "Het huidige co?rdinaten-stelsel is niet 'World'\nCo?rdinaten-stelsen aanpassen naar 'World'?"
  59.                "UCS SYSTEM" (+ acet:yesno acet:iconquestion))
  60. )
  61. ;; Yes = 6, No = 7, Cancel = 2
  62. (if (= reply 6)
  63.    (progn
  64.      (vla-put-activeucs doc
  65.        (vla-add (vla-get-usercoordinatesystems doc)
  66.                 (vlax-3d-point '(0. 0. 0.))
  67.                 (vlax-3d-point '(1. 0. 0.))
  68.                 (vlax-3d-point '(0. 1. 0.))
  69.                 "WCS"
  70.        )
  71.      )
  72.      (setq wisselnaarwcs 1)
  73.    )
  74.    ;; (ALERT "Nope")
  75. )
  76. (princ)
  77. ) (vl-load-com)
回复

使用道具 举报

63

主题

6297

帖子

6283

银币

后起之秀

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

铜币
358
发表于 2022-7-5 16:52:09 | 显示全部楼层
正如预期的那样,我修改过的代码和您在第8篇文章中发布的代码都能正常工作。
回复

使用道具 举报

76

主题

312

帖子

254

银币

后起之秀

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

铜币
390
发表于 2022-7-5 16:57:01 | 显示全部楼层
嘿Tharwat,
 
这两个代码似乎都有效,但当我检查命令栏时,我看到了以下内容:
 
您的代码:
  1. Command: _XATTACH
  2. Overlay Xref "TESTDWG": G:\PROJECTS\TESTDWG.dwg
  3. "TESTDWG" loaded.
  4. Error: bad argument type: VLA-OBJECT nilPress ENTER to continue:
  5. Command: _UCS
  6. Current ucs name:  WCS
  7. Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis] <World>: _P
  8. Error: bad argument type: VLA-OBJECT nil

 
您的代码已修改
  1. Command: _XATTACH
  2. Overlay Xref "TESTDWG": G:\PROJECTS\TESTDWG.dwg
  3. "TESTDWG" loaded.
  4. Error: Automation Error. Object is referenced by other object(s)Press ENTER to continue:
  5. Command: _UCS
  6. Current ucs name:  WCS
  7. Specify origin of UCS or [Face/NAmed/OBject/Previous/View/World/X/Y/Z/ZAxis] <World>: _P
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-20 21:25 , Processed in 2.319274 second(s), 73 queries .

© 2020-2025 乐筑天下

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