乐筑天下

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

[编程交流] 如何检索三维坐标i

[复制链接]

3

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 17:11:38 | 显示全部楼层 |阅读模式
你好
 
有人知道如何从AutoCAD VBA中检索任何对象的三维坐标信息吗。
 
请在AutoCAD VBA中观看以下程序:不确定:
----------------------------------------------------------------
 
Dim实体作为AcadEntity,my3Dobj作为Acad3DSolid
 
对于此图形中的每个图元。模型空间
MsgBox“entity.ObjectName=”&实体。对象名称
如果LCase(entity.ObjectName)=“acdb3dsolid”,则
MsgBox“发现固体”
设置my3Dobj=实体
 
“my3Dobj。(我不知道哪种方法会显示my3Dobj对象的XYZ坐标。请帮助我
 
my3Dobj=无
如果结束
下一个
 
 
-----------------------------------------------------------------
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 17:39:05 | 显示全部楼层
正如您可能已经确定的那样,VBA对存储在Acad3dSolid中的信息的访问是有限的。传统上有几种方法用于处理这种情况,但它们通常需要相当多的自定义代码。
 
你到底想了解固体的什么?
回复

使用道具 举报

3

主题

5

帖子

2

银币

初来乍到

Rank: 1

铜币
15
发表于 2022-7-6 18:06:38 | 显示全部楼层
感谢肖特的评论,
 
您可以传递有关自定义代码的信息,该代码可以检索三维线的坐标并将其保存在数组中。我曾在谷歌上搜索过,但没有找到任何帮助。
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 18:21:06 | 显示全部楼层
这里有一个相当基本的例程,用于选择一些行并将端点存储到数组中。该例程将端点打印到消息框中。
 
  1. Option Explicit
  2. Sub Lines2Points()
  3. Dim intCode(0) As Integer
  4. Dim varData(0) As Variant
  5. Dim entLine As AcadLine
  6. Dim intLineQuantity As Integer
  7. Dim arrLineCoords() As Variant
  8. Dim i As Integer
  9. Dim strMsg As String
  10. intCode(0) = 0
  11. varData(0) = "LINE"
  12. intLineQuantity = (SoSSS(intCode, varData) * 2) - 1
  13. If intLineQuantity > -1 Then
  14.   ReDim arrLineCoords(intLineQuantity)
  15.   For Each entLine In ThisDrawing.SelectionSets.Item("TempSSet")
  16.      arrLineCoords(i) = entLine.StartPoint
  17.      arrLineCoords(i + 1) = entLine.EndPoint
  18.      i = i + 2
  19.   Next
  20.   For i = 0 To intLineQuantity Step 2
  21.         strMsg = strMsg & "Start: " & PointToString(arrLineCoords(i)) _
  22.            & "  --  End: " & PointToString(arrLineCoords(i + 1)) & vbCr
  23.   Next
  24.   MsgBox strMsg
  25.   
  26. End If
  27. End Sub
  28. Function SoSSS(Optional grpCode As Variant, Optional dataVal As Variant) As Integer
  29. Dim objSSs As AcadSelectionSets
  30. Dim objTempSS As AcadSelectionSet
  31. Set objSSs = ThisDrawing.SelectionSets
  32. For Each objTempSS In objSSs
  33.   If objTempSS.Name = "TempSSet" Then
  34.      objTempSS.Delete
  35.      Exit For
  36.   End If
  37. Next
  38.   Set objTempSS = ThisDrawing.SelectionSets.Add("TempSSet")
  39.         'pick selection set
  40.   If IsMissing(grpCode) Then
  41.      objTempSS.SelectOnScreen
  42.   Else
  43.      objTempSS.SelectOnScreen grpCode, dataVal
  44.   End If
  45.   SoSSS = objTempSS.Count
  46. End Function
  47. Public Function PointToString(varPt As Variant) As String
  48. Dim retVal As String, i As Long
  49.   For i = LBound(varPt) To UBound(varPt)
  50.       varPt(i) = Round(varPt(i), 2)
  51.       retVal = retVal & CStr(varPt(i)) & ","
  52.   Next
  53.   PointToString = Left(retVal, Len(retVal) - 1)
  54. End Function
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-4 16:30 , Processed in 0.602507 second(s), 60 queries .

© 2020-2025 乐筑天下

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