乐筑天下

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

取消定义/重新定义Xref

[复制链接]

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-22 06:00:58 | 显示全部楼层 |阅读模式
嗨,
我想创建一个VBA模块来取消xref命令的定义,然后创建一个名为“Xref”的新命令,然后重新定义它。这可能吗?请帮帮忙。谢谢

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-22 09:05:07 | 显示全部楼层
不。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-27 01:25:58 | 显示全部楼层
重新定义...事实上没有必要...当用户在命令行中键入xref时,ActiveUCS应该立即转到“World”,ActiveLayer应该转到“0”。之后应该会弹出Xref对话框。通过xref对话框插入绘图后,图层和ucs应该会像之前一样回到原来的位置。这可以完成吗?
谢谢
回复

使用道具 举报

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-27 08:15:43 | 显示全部楼层
是的,您可以使用活动文档的 BeginCommand 事件来执行此操作。
回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-27 10:12:00 | 显示全部楼层
不要忘记XATTACH。
回复

使用道具 举报

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-28 00:32:13 | 显示全部楼层
这是我写的代码。但不幸的是,它不起作用。
请帮忙。
  1. Option Explicit
  2. Dim CurUCS As AcadUCS
  3. Dim CurLayer As AcadLayer
  4. Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
  5. If CommandName = "XREF" Or CommandName = "XATTACH" Then
  6. Set CurUCS = ThisDrawing.ActiveUCS
  7. Set CurLayer = ThisDrawing.ActiveLayer
  8. SendKeys "{Esc}"
  9. ThisDrawing.SendCommand "ucs" & vbCr & "world" & vbCr
  10. ThisDrawing.Layers("0").Freeze = False
  11. ThisDrawing.Layers("0").LayerOn = True
  12. ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
  13. End If
  14. End Sub
  15. Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
  16. If CommandName = "XREF" Or CommandName = "XATTACH" Then
  17. ThisDrawing.ActiveUCS = CurUCS
  18. ThisDrawing.ActiveLayer = CurLayer
  19. End If
  20. End Sub

谢谢
回复

使用道具 举报

154

主题

1274

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1936
发表于 2007-3-28 08:15:58 | 显示全部楼层
我认为在开始另一个命令时,您无法有效地使用sendkeys函数。您可能希望以编程方式设置UCS,而不是使用sendkeys函数。
回复

使用道具 举报

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-28 10:24:27 | 显示全部楼层
这似乎可行。
  1. Sub owcs()
  2.     Dim zero(2) As Double
  3.     Dim Xaxis(2) As Double
  4.     Dim Yaxis(2) As Double
  5.     Dim strNm As String, sUcs As String
  6.     Dim oUcs As AcadUCS
  7.    
  8.     If ThisDrawing.GetVariable("WORLDUCS") = 1 Then
  9.         Exit Sub
  10.     Else
  11.         sUcs = ThisDrawing.GetVariable("UCSNAME")
  12.         'Debug.Print sUcs
  13.         Xaxis(0) = 1: Yaxis(1) = 1
  14.         Set oUcs = ThisDrawing.UserCoordinateSystems.Add(zero, Xaxis, Yaxis, "World")
  15.         ThisDrawing.ActiveUCS = oUcs
  16.     End If
  17. End Sub

回复

使用道具 举报

170

主题

1424

帖子

8

银币

顶梁支柱

Rank: 50Rank: 50

铜币
2119
发表于 2007-3-28 23:57:56 | 显示全部楼层
我复制了WCS,一切正常。但有一个问题。如果用户单击“外部参照”对话框的“取消”按钮,则不会恢复旧UCS和图层,因为它不会执行EndCommand事件。我已经给出了在EndCommand事件中恢复旧UCS和图层的代码。有解决办法吗
设置
xref命令运行
[结束命令]
此场景将重置在取消外部参照时未重置的先前设置,但是,为了捕获大多数场景,您还需要使用Begin Lisp事件验证设置。
回复

使用道具 举报

6

主题

29

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
53
发表于 2007-3-29 00:26:52 | 显示全部楼层
Keith,
很抱歉我没有理解你解释的解决方法。我会给出我所做的代码。希望你能对代码进行更改,这让我更好地理解。
  1. Option Explicit
  2. Dim CurUCS As AcadUCS
  3. Dim CurLayer As AcadLayer
  4. Dim UCSs As Object
  5. Private Sub AcadDocument_BeginCommand(ByVal CommandName As String)
  6. If CommandName = "XREF" Or CommandName = "XATTACH" Then
  7.     Set CurUCS = ThisDrawing.ActiveUCS
  8.     Set CurLayer = ThisDrawing.ActiveLayer
  9.     Call ShowWCS
  10.     ThisDrawing.Layers("0").Freeze = False
  11.     ThisDrawing.Layers("0").LayerOn = True
  12.     ThisDrawing.ActiveLayer = ThisDrawing.Layers("0")
  13. End If
  14. End Sub
  15. Sub ShowWCS()
  16. '
  17. '   Display WCS
  18. '
  19.     Dim wcs As Object
  20.     Dim dorigin(0 To 2) As Double
  21.     Dim dxAxisPnt(0 To 2) As Double
  22.     Dim dyAxisPnt(0 To 2) As Double
  23.         
  24.     dorigin(0) = 0#
  25.     dorigin(1) = 0#
  26.     dorigin(2) = 0#
  27.    
  28.     dxAxisPnt(0) = 1#
  29.     dxAxisPnt(1) = 0#
  30.     dxAxisPnt(2) = 0#
  31.    
  32.     dyAxisPnt(0) = 0#
  33.     dyAxisPnt(1) = 1#
  34.     dyAxisPnt(2) = 0#
  35.    
  36.     Set wcs = ThisDrawing.UserCoordinateSystems.Add(dorigin, dxAxisPnt, dyAxisPnt, "WORLD")
  37. '    Display WCS.
  38.     ThisDrawing.ActiveUCS = wcs
  39.    
  40. End Sub
  41. Private Sub AcadDocument_EndCommand(ByVal CommandName As String)
  42. If CommandName = "XREF" Or CommandName = "XATTACH" Then
  43.     ThisDrawing.ActiveUCS = CurUCS
  44.     ThisDrawing.ActiveLayer = CurLayer
  45.     ThisDrawing.UserCoordinateSystems.Item("World").Delete
  46. End If
  47. End Sub

如果我没有错,我理解如果Xref对话框被取消,执行控件永远不会进入EndCommand事件。请帮助。
谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-7 13:47 , Processed in 0.442851 second(s), 73 queries .

© 2020-2025 乐筑天下

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