乐筑天下

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

[编程交流] vba插入块在sc上指定

[复制链接]
smr

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 21:51:29 | 显示全部楼层 |阅读模式
大家好
我试图使用AutoCAD菜单按钮将已知文件位置的块插入到图形中,以加载vba代码
我已经成功地做到了这一点,但我只能在用户在键盘上输入或在代码中设置的坐标处插入块。
我希望它可以由用户选择,通过点击鼠标,它浮动在光标上(即指定在屏幕上),基本上就像你插入一个块时发生的事情。
如果有人能帮忙,那就太好了。
代码随附仅供参考
密码txt文件
回复

使用道具 举报

2

主题

261

帖子

20

银币

初来乍到

Rank: 1

铜币
8
发表于 2022-7-6 22:08:34 | 显示全部楼层
VBA中的对象方法未实现
只能使用Lisp表达式
send命令和功能:
 
  1. Option Explicit
  2. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
  3. Function IsBlockExist(bName As String) As Boolean
  4.   Dim oBlock As AcadBlock
  5.   IsBlockExist = False
  6.   For Each oBlock In ThisDrawing.Blocks
  7.   If StrComp(oBlock.Name, bName, vbTextCompare) = 0 Then
  8.   IsBlockExist = True
  9.   End If
  10.   Next
  11. End Function
  12. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
  13. Function IsLayerExist(lName As String) As Boolean
  14.   Dim oLayer As AcadLayer
  15.   IsLayerExist = False
  16.   For Each oLayer In ThisDrawing.Layers
  17.   If StrComp(oLayer.Name, lName, vbTextCompare) = 0 Then
  18.   IsLayerExist = True
  19.   End If
  20.   Next
  21. End Function
  22. '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
  23. Sub InsertWithGhostImage()
  24.     Dim blkName As String, layName As String
  25.     Dim strPt As String, comStr As String
  26.     blkName = InputBox(vbCrLf & "Block name to insert:", "Insert Block")
  27.     If blkName = vbNullString Then Exit Sub
  28.     If Not IsBlockExist(blkName) Then
  29.     MsgBox "Block " & Chr(34) & blkName & Chr(34) & " does not exist"
  30.     Exit Sub
  31.     End If
  32.     layName = InputBox(vbCrLf & "Layer name to insert block on:", "Insert Block", "0")
  33.     If Not IsLayerExist(layName) Then
  34.     MsgBox "Layer " & Chr(34) & layName & Chr(34) & " does not exist"
  35.     Exit Sub
  36.     End If
  37.     With ThisDrawing
  38.          On Error GoTo Err_Control
  39.          .Utility.Prompt vbCrLf & "   Specify insertion point of block  >>"
  40.          comStr = "(command " & _
  41.                   Chr(34) & "._-insert" & Chr(34) & _
  42.                   vbCr & Chr(34) & blkName & _
  43.                   Chr(34) & " pause " & vbCr & _
  44.                   Chr(34) & "1" & Chr(34) & _
  45.                   vbCr & Chr(34) & "1" & Chr(34) & _
  46.                   vbCr & Chr(34) & "0" & Chr(34) & ")"
  47.                   .SendCommand comStr & vbCr
  48.          DoEvents
  49.          Dim oSpace As AcadBlock
  50.          Dim oblkRef As AcadBlockReference
  51.          If .ActiveSpace = acModelSpace Then
  52.               Set oSpace = .ModelSpace
  53.          Else
  54.               Set oSpace = .PaperSpace
  55.          End If
  56.          Set oblkRef = oSpace.Item(oSpace.Count - 1)
  57.     End With
  58. Exit_Here:
  59.     Exit Sub
  60. Err_Control:
  61.     MsgBox Err.Description
  62.     Resume Exit_Here
  63. End Sub

代码取自此处http://forum.dwg.ru/showthread.php?t=23161
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 22:21:50 | 显示全部楼层
这在菜单中可能很有用,但拖动可能是您想要的^C^C-INSERT P:/AUTODESK/LISP/SETOUT拖动
回复

使用道具 举报

smr

1

主题

2

帖子

1

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 22:50:04 | 显示全部楼层
谢谢你的回复
 
通过从CUI菜单宏按钮调用LISP表达式,我成功地实现了这一点
我认为这更像是一种变通方法,但对我需要做的事情有效
 
LISP命令是:
 
(定义c:sa()
; 移动刚插入的块
(命令“move”“l”“0,0,0”“pause”)
(普林斯)
)
 
CUI菜单宏命令为
 
^C^C-vbarun SMR\U电缆梯架。dvb!模块1.CableLadderMenu^C^C_sa
 
这将加载电缆梯架的vba用户窗体(然后选择所需内容)
将其插入当前图形中的@0,0,0
然后调用“SA”lisp move命令,移动最后插入的块
 
简单
回复

使用道具 举报

4

主题

2143

帖子

2197

银币

限制会员

铜币
-24
发表于 2022-7-6 22:52:38 | 显示全部楼层
请阅读代码发布指南,并编辑代码以包含在代码标签中。[NOPARSE]
  1. Your Code Here[/NOPARSE]
=
  1. Your Code Here
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 13:04 , Processed in 0.583642 second(s), 62 queries .

© 2020-2025 乐筑天下

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