乐筑天下

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

[编程交流] VBA-使用组码

[复制链接]

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 23:00:24 | 显示全部楼层 |阅读模式
你好。
我写了这个小代码:
  1.   Dim entObj As AcadEntity
  2.   Dim ssetObj As AcadSelectionSet
  3.   Dim grpCode(1) As Integer
  4.   Dim dataVal(1) As Variant
  5.   
  6.   Dim x, y, z As Double
  7.   
  8.   grpCode(0) = 0
  9.   dataVal(0) = "MTEXT,TEXT"  'the type of the objects
  10.   grpCode(1) = 8
  11.   dataVal(1) = "COTE,SECTIUNI" 'the names of the layers
  12.   
  13.    On Error Resume Next
  14.    Set ssetObj = ThisDrawing.SelectionSets.Add(SetName)
  15.    If Err.Number <> 0 Then
  16.        Set ssetObj = ThisDrawing.SelectionSets.Item(SetName)
  17.    End If
  18.   
  19.   ssetObj.Clear
  20.   Set ssetObj = ThisDrawing.SelectionSets.Add("SS01")
  21.   ssetObj.SelectOnScreen grpCode, dataVal
  22.   
  23.   For i = 0 To ssetObj.Count - 1
  24.            x = ssetObj.Item(i).InsertionPoint(0)
  25.            y = ssetObj.Item(i).InsertionPoint(1)
  26.            z = ssetObj.Item(i).InsertionPoint(2)
  27.    Next i

 
问题是
  1.            x = ssetObj.Item(i).InsertionPoint(0)
  2.            y = ssetObj.Item(i).InsertionPoint(1)
  3.            z = ssetObj.Item(i).InsertionPoint(2)

不起作用。
如果我创建一个手表,我可以看到每个ssetObj。项一个称为InsertionPoint的值,表示x、y和z轴的插入点值。
 
有没有办法获取每个ssetObj的插入点值。项目
 
我也想过使用组码。我发现插入点的组码是“40”,但我不知道使用什么命令来获取值。
 
提前感谢!
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 23:20:31 | 显示全部楼层
我是一个口齿不清的家伙,但,这应该吗
 
  1.    On Error Resume Next
  2.    Set ssetObj = ThisDrawing.SelectionSets.Add(SetName)
  3.    If Err.Number <> 0 Then
  4.        Set ssetObj = ThisDrawing.SelectionSets.Item(SetName)
  5.    End If

 
不是这样的:
 
  1.    On Error Resume Next
  2.    Set ssetObj = ThisDrawing.SelectionSets.Add([color=Red][b]"SS01"[/b][/color])
  3.    If Err.Number <> 0 Then
  4.        Set ssetObj = ThisDrawing.SelectionSets.Item([b][color=Red]"SS01"[/color][/b])
  5.    End If
回复

使用道具 举报

9

主题

59

帖子

38

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
58
发表于 2022-7-6 23:29:33 | 显示全部楼层
你好
 
我认为这应该管用
 
  1. Sub Test()
  2.    On Error Resume Next
  3.    
  4.    Dim ssetObj As AcadSelectionSet
  5.    Dim SetName As String
  6.    SetName = "SS01"
  7.    ThisDrawing.SelectionSets(SetName).Delete
  8.    If Err Then Err.Clear
  9.    Set ssetObj = ThisDrawing.SelectionSets.Add(SetName)
  10.   Dim grpCode(1) As Integer
  11.   Dim dataVal(1) As Variant
  12.   
  13.   grpCode(0) = 0
  14.   dataVal(0) = "MTEXT,TEXT"  'the type of the objects
  15.   grpCode(1) = 8
  16.   dataVal(1) = "COTE,SECTIUNI" 'the names of the layers
  17.   
  18.   
  19.   ssetObj.SelectOnScreen grpCode, dataVal
  20.   
  21.   For i = 0 To ssetObj.Count - 1
  22.            Dim var As Variant
  23.            var = ssetObj.Item(i).InsertionPoint
  24.            Debug.Print " x = " & var(0)
  25.            Debug.Print " y = " & var(1)
  26.            Debug.Print " z = " & var(2)
  27.            Debug.Print
  28.    Next i
  29. End Sub

 
当做
乔罗
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-6 23:43:23 | 显示全部楼层
 
通过选择循环,您需要按文本和多行文字的类型分别投射对象
请尝试:
选项ExplicitSub TestSelection()Dim entObj As AcadEntity Dim oText As AcadText Dim oMText As AcadMText Dim ssetObj As AcadSelectionSet Dim grpCode(1)As Integer Dim dataVal(1)As Variant Dim SetName As String Dim x As Double,y As Double,z As Double'
回复

使用道具 举报

4

主题

12

帖子

8

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-6 23:54:25 | 显示全部楼层
感谢您的快速回复。
我试图应用你的代码,但它们对我无效。然而,我挖掘了更多,发现了一些有用的东西,这是你的回复的一种组合。
[code]尺寸x为双精度,y为双精度,z为双精度'
回复

使用道具 举报

1

主题

1069

帖子

1050

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
69
发表于 2022-7-7 00:07:48 | 显示全部楼层
 
没问题
干杯
 
~'J'~
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 05:50 , Processed in 1.849863 second(s), 71 queries .

© 2020-2025 乐筑天下

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