乐筑天下

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

Autocad 3dSolid质量特性主轴

[复制链接]
GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-5-25 04:01:07 | 显示全部楼层 |阅读模式
嗨,我正在做一个项目,比较Autocad实体的几何相等性..目前,我只测试从封闭的二维多段线挤出的实体。基本概念是从实体中收集点(使用Explode x2),将它们添加到我的点集合中,然后检查集合是否相等。问题是,如何计算固体的主轴?我需要知道这一点,以便将每个立体转换到相同的坐标中进行比较。请参见下面的代码.....这似乎是可行的,除了一些固体围绕WCS z轴正好旋转180度?除了使用质量属性获得固体ECS/OCS,还有更好的方法吗?(Brep api有点超出我的理解范围)任何帮助都将不胜感激。     _ 。
Public Sub InvertECS()。

将文档显示为文档=应用程序,document manager . MdiActiveDocument 。
Dim db As Database = doc,数据库。
Dim ed As Editor = doc,编辑器。

“选择实体”。
Dim peo As New promptentity options(vbLf & " Select a 3D solid:")。
peo,SetRejectMessage(vbLf & "无效选择...")。
peo,AddAllowedClass(GetType(solid 3d),True)。

Dim per As PromptEntityResult = ed,GetEntity(peo)。

如果按照,状态提示状态,那好吧。
返回。
结束If。

Dim Id As ObjectId = per,ObjectId。

“开始交易”。
使用Tr作为事务= db,transaction manager . start transaction()。

“得到固体”。
Dim sol As solid 3d = DirectCast(Tr,GetObject(Id,OpenMode。ForWrite)、Solid3d)。

'获取固体质量属性。
Dim mprops As solid 3d mass properties = sol,质量属性。
将原点标注为Point3d = mprops,质心。
Dim solX As Vector3d = mprops,PrincipalAxes(0)。
Dim solY As Vector3d = mprops,原则性问题(1)。
Dim solZ As Vector3d = mprops,原则性问题(2)。

“质量属性中的实体坐标系”。
Dim ECS As New coordinate system3d(origin,solX,solY)。

'世界坐标系。
将WCS作为新的CoordinateSystem3d(新点3d(0,0,0),新矢量3d(1,0,0),新矢量3d(0,1,0))。

'转换矩阵。
Dim TrMatrix作为新的Matrix3d()。

TrMatrix = Matrix3d,对齐坐标系统(ECS,起源,_。
ECS,Xaxis,_。
ECS,Yaxis,_。
ECS,Zaxis,_。
WCS,起源,_。
WCS,Xaxis,_。
WCS,Yaxis,_。
WCS,Zaxis)。
'变换实体。
溶胶,TransformBy(TrMatrix)。

“现在保存以检查结果”。
TrCommit()。

结束使用。
结束Sub。


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

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

使用道具 举报

57

主题

559

帖子

13

银币

中流砥柱

Rank: 25

铜币
786
发表于 2016-5-25 04:32:08 | 显示全部楼层

您可能会发现这(来自gile)很有帮助
https://www . the swamp . org/index . PHP?topic = 31865 . msg 445372 # msg 445372
回复

使用道具 举报

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2016-5-25 04:37:14 | 显示全部楼层

主方向分析确实有助于Pitch和Yaw,但确实给Roll留下了歧义。*
主方向也可以帮助生成横截面。*该部分(区域)也可以进行分析。它的主方向和/或最长的线性成员,相对于它的形心,将有助于滚动方向。
我在这个线程中使用VBA查看了这个过程:
https://www.theswamp.org/index.php?topic=21524.msg260549#msg260549
*不过,我应该指出,如果3dSolid挤出没有任何布尔/切片操作,则主方向仅直接适用于Pitch和Yaw。
回复

使用道具 举报

16

主题

506

帖子

6

银币

中流砥柱

Rank: 25

铜币
570
发表于 2016-5-25 10:20:20 | 显示全部楼层
干扰操作不是更容易吗?如果它们相同,结果将是零;它们越接近,结果的体积就越小。更简单的方法是比较边界框(虽然仅适用于go/nogo测试)-如果两个框的最小值/最大值不相同,则形状不可能相同。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2016-5-25 17:40:33 | 显示全部楼层
我发现处理转换的最简单方法是将World Space(1013)3d点作为xdata添加到实体中。您在3d实体创建时将其添加为主轴。
示例:您存储挤出轴(从2d折线到挤出的法线)。
此xdata使用旋转、镜像等进行更新并且可靠,只需将此坐标反转为WCS并进行比较。我会使用Brep库并利用Equals方法对每种类型的Brep实体进行准确比较。
回复

使用道具 举报

GRH

2

主题

7

帖子

1

银币

初来乍到

Rank: 1

铜币
15
发表于 2016-5-26 00:43:06 | 显示全部楼层
真棒,感谢您的回复.
是的,这类似于我的一次健全性检查,我使用体积属性。几何检查是最难和最昂贵的,这就是为什么它是我所做的最后一次检查(如果所有其他检查都失败了),以绝对肯定地知道对象是不同的。
我还查看了边界框/范围检查,但在此之前,我无法像现在一样依赖它,因为它似乎始终与WCS xy平面对齐(对于在3d中旋转的对象没有好处),我现在可以使用它,因为我可以转换为WCS 0,0,0并在那里进行范围检查。
您知道在任何地方是否有类似“收缩包装”(紧密边界框)的例子吗?
感谢您的链接,非常有趣,与我想到的方法没有什么不同。
我的方法是使用Brep拆卸实体,并比较面的平等性。找到 2 个相同的平行面可能指示拉伸方向(假设目前没有模组)。
我仍然感到困惑的是,为什么在创建时没有引用WCS或描述挤出方向的向量?这肯定是一个廉价的属性,以后会消除猜测游戏。
谢谢Mick,这正是我所做的,但是我仍然需要处理之前创建的固体。
断续器
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 19:09 , Processed in 0.156853 second(s), 64 queries .

© 2020-2025 乐筑天下

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