iCAx开思工具箱
标题:
CAA:帮着看看程序有什么问题
[打印本页]
作者:
liuruixiao205
时间:
2006-4-11 09:14
标题:
CAA:帮着看看程序有什么问题
CATIFeaturize_var spFeaturize;
spFeaturize=spSurface;(spSurface是CATISpecObject_var类型,鼠标选择的一个圆柱的端面)
if(spFeaturize!=NULL_var)
cout<<"spFeaturize!=NULL_var"<<endl;
CATISpecObject_var spCurFeath=spFeaturize->FeaturizeF();
CATIMfBRep_var spMfBrep=spCurFeath;
if(NULL_var!=spMfBrep)
cout<<"NULL_var!=spMfBrep"<<endl;
CATLISTP(CATCell) List;
List=spMfBrep->GetEdges();
int num=List.Size();
cout<<"num="<<num<<endl;
CATEdge_var spEdge=List[1];
CATEdgeCurve * pEdgeCur=spEdge->GetCurve();
CATCurve* pCur=pEdgeCur->GetRefCurve();
CATCurve_var spCur=pCur;
if(NULL_var!=spCur)
cout<<"NULL_var!=spCur"<<endl;
CATPCircle_var spPCircle=spCur;
if(NULL_var!=spPCircle)
cout<<"NULL_var!=spPCircle"<<endl;
CATSurParam ioCenter;
spPCircle->GetCenter(ioCenter);
CATGeoFactory* spGeoFac = ::CATCreateCGMContainer();
if(NULL!=spGeoFac)
cout<<"NULL_var!=spGeoFac"<<endl;
CATSurface_var spSurface1=spSurface;
if(NULL_var!=spSurface1)
cout<<"NULL_var!=spSurface1"<<endl;
CATPointOnSurface * pPoint = spGeoFac->CreatePointOnSurface(ioCenter,spSurface1);(此句有错)
好像是参数输入错误。
请指教。
作者:
saeba
时间:
2006-4-11 18:11
嗯,基本上是一团糟。
单说
CATSurface_var spSurface1=spSurface;
这还是在推轱辘。
我不相信你能从一个CATISpecObject直接其QI得到CATSurface.
还有,
CATGeoFactory* spGeoFac = ::CATCreateCGMContainer();
不知你对这句理不理解,这是凭空新作一个CGMContainer,而不是得到现在正在使用的CGMContainer,所以即使在下一句中(CreatePointOnSurface)你给的参数正确,恐怕也不会得到正确的结果。即使作出点了,以后恐怕也没法用。
你应该用常规方法老老实实的得到当前的CGMContainer,而不是凭空作出一个。
再说前面的
CATIFeaturize_var spFeaturize;
spFeaturize=spSurface;(spSurface是CATISpecObject_var类型,鼠标选择的一个圆柱的端面)
不知你对CATIFeaturize作何理解,CATIFeaturize的作用就是把本来不是Feature的东西(subelement或叫BRep)
变成Feature(就是CATISpecObject,不应该这么说但这么说好懂)
而spSurface本来就已经是Feature(CATISpecObject),在对它QI CATIFeaturize毫无意义。
你用了那么多cout<<,难道没有一个输出吗?
作者:
hick
时间:
2006-4-12 10:40
saeba分析的很对
1.spSurface既然已经是CATISpecObject_var类型,用CATIFeaturize多此一举
2.CATSurface_var spSurface1=spSurface;肯定是不对的,可以通过 body,cell来获得
3.CATGeoFactory* spGeoFac = ::CATCreateCGMContainer();也是不对的,必须使用现在的CGMContainer,可以使用当前Container QR获得
作者:
liuruixiao205
时间:
2006-4-12 10:44
saeba兄,前面的cout全部输出了。没有空的指针。
还是说说我干什么吧。我就是想得到这个圆面的中心点。是体上的一个圆面。我本来想得到它的body,通过拓扑关系来得到边线在得到圆心的,可是在把这个面赋给CATIGeometricalElement_var时不能成功,如果是单独的面就没问题,体上面就不行。
我选了一个圆柱上的圆端面,想得到它的圆心,saeba兄给说说思路吧。我没办法最后是直接选边线,在把它赋给CATCircle得到的圆心,可是我还要用这个面,要再选一次面鼠标操作就太多了。
作者:
hick
时间:
2006-4-12 11:04
唉,是这样啊,
看你agent如何写的, 怀疑你的spSurface不是CATISpecObject_var类型,用没CATFeatureImportAgent?
直接得到CATISpecObject
CATISpecObject-->CATBody-->CATFace-->CATSurface,
然后随便做什么
作者:
liuruixiao205
时间:
2006-4-12 16:14
我用的是CATFeatureImportAgent,你说的步骤我试过,但得不到Body,用鼠标得到的对象转换为CATIGeometricalElement_var类型时没成功。
选择: _ElementAgent=new CATFeatureImportAgent("surface");
_ElementAgent->SetOrderedElementType("CATIMfBiDimResult");
_ElementAgent->AddOrderedElementType("CATSurface");
_ElementAgent->AddOrderedElementType("CATFace");
_ElementAgent->SetBehavior ( CATDlgEngWithPrevaluation | CATDlgEngWithCSO | CATDlgEngOneShot );
_ElementAgent->SetAgentBehavior ( MfPermanentBody | MfLastFeatureSupport | MfRelimitedFeaturization );
AddCSOClient(_ElementAgent);
得到Body:
CATBody_var spBody = NULL_var;
do {
if( !ispFeature )(ispFeature 是我选择的面的CATISpecObject_var类型)
{
break;
}
CATIGeometricalElement_var spGeometricalElementOnFeature = ispFeature;
if(spGeometricalElementOnFeature!=NULL_var )
{
spBody = spGeometricalElementOnFeature->GetBodyResult();
}
else
{
cout<<"spGeometricalElementOnFeature==NULL_var" <<endl;
}
} while(FALSE);
程序的结果就是spGeometricalElementOnFeature==NULL_var。是不是体上面和单独的面有不同。
作者:
acoka
时间:
2006-4-12 17:02
CATBody_var ???::GetBodyFromFeature( const CATISpecObject_var& ispFeature )
{
CATBody_var spBody = NULL_var;
do {
if( !ispFeature ) {
break;
}
CATIMfBRep_var spBRepOnFeature = ispFeature;
if( !!spBRepOnFeature ) {
spBody = spBRepOnFeature->GetBody();
}
else {
CATIGeometricalElement_var spGeometricalElementOnFeature = ispFeature;
if( !spGeometricalElementOnFeature ) {
break;
}
spBody = spGeometricalElementOnFeature->GetBodyResult();
}
if( !spBody ) {
break;
}
} while(FALSE);
return spBody;
}
是不是体上面和单独的面有不同。 <- 对
作者:
saeba
时间:
2006-4-12 17:48
有点儿时间,回答一下。。。
哦,原来使用的CATFeatureImportAgent,怪不得。
首先,
>我不相信你能从一个CATISpecObject直接其QI得到CATSurface.
这句话我应该收回,因为并不是所有的CATISpecObject都QI不到CATSurface。
具体地说,属于GS/OGS的面feature应该能QI到CATSurface。
而仅仅是有“体上面”的feature(Form feature)是QI不到CATSurface的。(当然了!)
---------[这一段说了个稀里糊涂]---------
作者:
saeba
时间:
2006-4-12 18:14
>是不是体上面和单独的面有不同。
当然不同。
“单独的面“是一个Feature,是一个单独的GeometricalElement,可以直接QI到CATISpecObject,甚至CATSuerface.
“体上面”是“体”这个Feature/单独的GeometricalElement的一个subElement,QI不到CATISpecObject,但是可以QI到CATSuerface。
(从另一方面来说,这也可以解释为什么你的那个ispFeature虽然已经"是"CATISpecObject,却
得不到CATIGeometricalElement。因为它是从subelemnet Featurize来的,并不是原本的Feature)
再回到我曾经写的那个并不那么可笑的比喻,
“单独的面“就像一个单独的车轮子,你可以推着它跑。
而“体上面”则是汽车上的一个轮子,你推它是推不动的,不仅仅是因为汽车的重量。
如果这一点你能真正理解,也就不枉费我打这么多字了。
作者:
liuruixiao205
时间:
2006-4-13 09:21
非常感谢saeba兄!
作者:
liuruixiao205
时间:
2006-4-13 10:01
呵呵,成功了!再次感谢三位斑竹老兄的帮助。
作者:
liuruixiao205
时间:
2006-4-13 10:09
解决了,没经过培训,还是对CATIA里面的接口含义理解错误。多谢三位斑竹的帮助。
欢迎光临 iCAx开思工具箱 (https://t.icax.org/)
Powered by Discuz! X3.3