找回密码 注册 QQ登录
开思网工业级高精度在线3D打印服务

iCAx开思网

CAD/CAM/CAE/设计/模具 高清视频【积分说明】如何快速获得积分?快速3D打印 手板模型CNC加工服务在线3D打印服务,上传模型,自动报价
查看: 20701|回复: 10
打印 上一主题 下一主题

CAA求助

[复制链接]
跳转到指定楼层
1
发表于 2005-9-22 17:51:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多同行朋友,交流,分享,学习。

您需要 登录 才可以下载或查看,没有帐号?注册

x
如图:里面的圆是圆柱与面的交。我已经得到这些cells,但不知怎么计算它的属性如直径、圆心。请高手帮着说一下思路。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 赞一下!赞一下!
2
发表于 2005-9-22 20:11:44 | 只看该作者
从图上看,那些Intersetct.5等应该是CATIGSMIntersect,把它们QI到CATIGSMCircle就行了.
3
发表于 2005-9-22 21:50:15 | 只看该作者
每个CATIGSMIntersect实际上有很多Circle,是不能QI到CATIGSMCircle的。(其实即使就算是只有一个,你也QI不到的,我认为)
(一个CATIGSMCircle对应的是一个circle的Feature,注意是Feature而不是BRep)
liuruixiao得到cells的做法是对的,关键是下一步怎么做:
这是非公开的,但是还是告诉你吧,
对每一个Cell, cout他的GetImpl()->IsA(),就象这样:
cout << myCell->GetImpl()->IsA() << endl;
你会得到这个Cell的implementation的名字,就是LateType.
有了LateType,到Object broswer中去查一下它都实现了什么Interface,
你一定会找到和circle相关的interface的

这是一个非常重要而且非常常用的技巧,但是尽量只用在debug的时候,在最终产品里不要出现。
因为这是非公开的,得不到保证.

[ 本帖最后由 saeba 于 2005-9-22 21:54 编辑 ]
4
发表于 2005-9-22 23:41:47 | 只看该作者
我搞错了,CATIGSMIntersect可以QI到CATIMeasurableCurve,如果是单圆的话,CATIMeasurableCircle. 对多圆的话,这个CATIMeasurable没什么用.
如果是SpecObject的话,用GetType()也能得到Implementation吧.
5
发表于 2005-9-23 09:24:02 | 只看该作者
非常感谢两位!我试一下
6
发表于 2005-9-23 09:53:34 | 只看该作者
>如果是SpecObject的话,用GetType()也能得到Implementation吧.
是的,SpecObject(就是Feature)的情况下,可以用CATISpecObject::GetType()得到
但是仅仅局限于Feature,对BRep以及其他就没有办法了
而GetImpl()->IsA()对所有CATBaseUnknown都有效

>CATIGSMIntersect可以QI到CATIMeasurableCurve,如果是单圆的话,CATIMeasurableCircle
嗯。。。有点怀疑
下星期试一下再说
7
发表于 2005-9-26 15:14:07 | 只看该作者
试试这个:
CATIGSMIntersect --> CATIGeometricalElement --> CATBody (with method GetBodyResult).
然后你可以取到CATBody中的CATDomain. 每个Domain是相互连接的同维的元素的集合,按照这个定义,每个CATDomain应该代表了一个相交圆. 现在的问题是如何求出直径和圆心. 用GetAllCells求出CATDomain中所有零维的元素,你可以得到两个点(CATVertex), 这两个点是圆直径上的端点!
如果用GetAllCells求出CATDomain中所有一维的元素,相信应该是两个半圆(CATEdge), 当然这对求圆心和直经没什么帮助.
Good luck!
8
发表于 2005-9-26 16:06:58 | 只看该作者
CATCircle::GetRadius()
CATConic::GetOrigin()
9
发表于 2005-9-27 10:00:04 | 只看该作者
非常感谢两位! 我是这样做的。从body直接得到所有的Cells,用saeba兄给的方法找到cell 的late type,从Object broswer 找到接口CATIMeasurableCircle ,然后用Cell[i]来qurrey  CATIMeasurableCircle ,再用CATIMeasurableCircle->GetRadius;   CATIMeasurableCircle->GetCenter;就可以得到圆心和半径。缺点是一个圆是两个cell,半径和圆心都有两个相同的值。
10
发表于 2005-9-27 10:25:48 | 只看该作者
>缺点是一个圆是两个cell,半径和圆心都有两个相同的值。

这个可能无法避免,可以这么解决:
构造一个列表,每个表项是两个vertex
每得到一个圆弧cell, 再用一次GetAllCells(list, 0)来得到两个端点,
和列表中的表项比较,已存在的话丢弃该圆弧,
不存在的话,加入列表,处理圆弧
(提示,每个cell同时也是一个domain, 都继承于CATTopology,都有GetAllCells方法)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3D打印手板模型快速制作服务,在线报价下单!

QQ 咨询|手机版|联系我们|iCAx开思网  

GMT+8, 2024-12-24 14:02 , Processed in 0.028100 second(s), 10 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表