乐筑天下

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

ACAD2006 VBA确定Acad3dSolid SolidType

[复制链接]

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 09:12:19 | 显示全部楼层 |阅读模式
任何人都知道如何确定Acad3D实体的实体类型(solidtype)
我的代码在绿线上失败。SolidType
  1. Public Function IsSphereTorus(oObject As AcadObject) as boolean
  2.     IsSphereTorus = false
  3.     Dim oSphere As Acad3DSolid
  4.     If TypeOf oObject Is Acad3DSolid Then
  5.         Set oSphere = oObject
  6.         [color=green]If oSphere.SolidType = "Sphere" Or oSphere.SolidType = "Torus" Then[/color]
  7.              IsSphereTorus = true
  8.         End If
  9.     End If
  10. End Function

每个帮助。SolidType仅输入…那么现在我该怎么办?

k3yu4vl5xqk.jpg

k3yu4vl5xqk.jpg

回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 09:30:22 | 显示全部楼层
注意到有什么问题吗?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 10:40:31 | 显示全部楼层
其余的代码看起来像什么
我很快就把它拼凑起来了
  1. Option Explicit
  2. Public Const AppName = "VBA | 3D Solid"
  3. Public Sub Main()
  4.     Dim Entity As AcadEntity
  5.     Dim Point As Variant
  6.     Dim objObject As Acad3DSolid
  7.     On Error GoTo ErrMsg
  8.     ThisDrawing.Utility.GetEntity Entity, Point, "Select a 3D Solid: "
  9.     If TypeOf Entity Is Acad3DSolid Then
  10.         Set objObject = Entity
  11.         If IsSphereTorus(objObject) = True Then
  12.             MsgBox "Type of entity: " & objObject.SolidType, vbExclamation + vbOKOnly, AppName
  13.         Else
  14.             MsgBox "FAIL!", vbExclamation + vbOKOnly, AppName
  15.         End If
  16.     End If
  17.     Exit Sub
  18.    
  19. ErrMsg:
  20.     If Err.Number = "-2147352567" Then
  21.         MsgBox "You didn't pick anything.  Please try again.", vbExclamation + vbOKOnly, AppName
  22.     Else
  23.         MsgBox Err.Description & vbCrLf & Err.Number, vbCritical + vbOKOnly, AppName
  24.         Debug.Print Err.Number
  25.         Err.Clear
  26.     End If
  27. End Sub
  28. Public Function IsSphereTorus(oObject As AcadObject) As Boolean
  29.     IsSphereTorus = False
  30.     Dim oSphere As Acad3DSolid
  31.     If TypeOf oObject Is Acad3DSolid Then
  32.         Set oSphere = oObject
  33.         If oSphere.SolidType = "Sphere" Or oSphere.SolidType = "Torus" Then
  34.              IsSphereTorus = True
  35.         End If
  36.     End If
  37. End Function
只需将其复制/粘贴到模块中,然后运行MAIN sub。
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 11:15:07 | 显示全部楼层

我的测试代码只是测试每个is函数的最简单方法
  1. Public Sub Test_SphereTorus()
  2.     Set oAcadDoc = ThisDrawing
  3.     Dim oEllipse As AcadEllipse
  4.     Dim oEnt As AcadEntity
  5.     Dim oSphere As Acad3DSolid
  6.     Dim oPoint As Variant
  7.     Set oEnt = oAcadDoc.ModelSpace.AddSphere(MakePoint(0, 0, 0), 5)
  8.     Set oSphere = oEnt
  9.     MsgBox IsSphereTorus(oSphere)
  10. End Sub
  11. Public Function MakePoint(ByVal X As Double, ByVal Y As Double, ByVal Z As Double)
  12.    
  13.     Dim dCoordinate(0 To 2) As Double
  14.    
  15.     dCoordinate(0) = X
  16.     dCoordinate(1) = Y
  17.     dCoordinate(2) = Z
  18.    
  19.     MakePoint = dCoordinate
  20. End Function
远程代码将是遇到或重新遇到的所有模型空间项的条件循环或按需调用 IsLine、IsCircle、IsEllipse、IsEllipseOpen等(所有2D对象都很容易识别),剩下的是3D实体、IsSphere、IsCube、IsCylinder等;多段线和样条曲线最难识别,但在我们的图形中没有使用,因此无关紧要&nbsp
IS函数是我全部代码各个部分的组成部分 起点/终点/中心点在不同类型的实体/对象之间不同,对象捕捉行为由传递的对象控制
例如,如果我想基于其他传递的几何体自动生成OSnap中心,我必须知道所述几何体是圆形还是球体,如果圆形eRetVal是对象。中心,如果球体eRetval是object.centroid 因此,如果对象是Box或圆柱体类型,则返回其他内容
另一个例子,如果在椭圆上寻找可用的捕捉点,我有IsEllipse和IsEllipseOpen…如果IsEllipse只有中心点和长度,则有开始/结束(&E);中心点可用。
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 11:37:24 | 显示全部楼层
你能为MakePoint发布你的代码吗?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 13:07:58 | 显示全部楼层
出于好奇,你想用这个做什么 你的代码是创建一个球体,然后你'重新测试,看看它是否#039;s是一个球体 你已经知道了;s是一个球体
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 13:56:35 | 显示全部楼层
查看下面的图片 第一个是用代码创建的球体的属性 第二个是从“实体”工具栏创建的球体的属性
那里'这是你的答案
现在进入下一个问题……为什么要这样创建?
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 14:38:46 | 显示全部楼层
我在2008年做了我的,所以它#039;这也不是固定不变的。
回复

使用道具 举报

86

主题

744

帖子

6

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1092
发表于 2010-12-22 15:03:46 | 显示全部楼层

是的,我在VB Watch窗口中注意到了相同的结果,比较了菜单绘制和自动绘制之间的实体参数 It#039;s不是球体#039;要么……它'与其他三维实体的行为相同
简单的答案是:;在ACAD2000中进行测试时,无论采用何种绘制方法,都会产生相同的属性结果-两者均失败;因此,ACAD2006中的VBA尚未针对AddSphere等例程进行更新,以使用新版本手动绘制3DObjects
Go freak'在图中,感谢Autodesk
现在我想起了为什么我使用Inventor进行三维建模;编程…:realmad:要使测试用例工作,请替换oacaddoc.modelspace。用oacaddoc添加实体…
。SendCommand“;球体“&vbCr&amp&引用;0,0,0“&vbCr&amp&引用;5,0,0“&vbCr
设置object/entity/ospere=oacaddoc.modelspace.item(thisdrawing.modelspace.count-1)
对于我的完整代码,我现在必须永久保留遇到/绘制的每个3DSolid的objectID,以便以后可以引用它们…很好…我猜我'我将创建一个跟踪对象类,啊 %&($%^*&^)_*$Autodesk感谢Matt帮助我证明了我希望的另一个不足之处't正确;
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-7-1 03:56 , Processed in 2.350349 second(s), 80 queries .

© 2020-2025 乐筑天下

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