有点儿时间,回答一下。。。
哦,原来使用的CATFeatureImportAgent,怪不得。
首先,
>我不相信你能从一个CATISpecObject直接其QI得到CATSurface.
这句话我应该收回,因为并不是所有的CATISpecObject都QI不到CATSurface。
具体地说,属于GS/OGS的面feature应该能QI到CATSurface。
而仅仅是有“体上面”的feature(Form feature)是QI不到CATSurface的。(当然了!)
---------[这一段说了个稀里糊涂]---------
具体到你的例子,你显然选取的是一个“体上面”,按理来说是得不到CATSurface的(因为这个
面仅仅是个subelement),但是CATSurface_var spSurface1=spSurface;为什么却没有返回NULL呢?
原因就是你用了这个CATFeatureImportAgent,这个agent的作用是,当你选取subelement
时,自动把它Featurize,就是把它变成feature,这样就可以QI到CATSurface。
--------[应该是这样]------------------------
具体到你的例子,你显然选取的是一个“体上面”,按理来说是得不到CATISpecObject的(因为这个
面仅仅是个subelement),因此spSurface本身就没有意义(NULL_var),但是CATSurface_var spSurface1=spSurface;
为什么却没有返回NULL呢?
原因就是你用了这个CATFeatureImportAgent,这个agent的作用是,当你选取subelement
时,自动把它Featurize,就是把它变成feature,这样就可以QI到CATISpecObject,(这样spSurface才不是NULL_var)
而这个Featurize后的“体上面”因为原本就是个surface subelement, 所以可以QI到CATSurface。
既然已经得到了CATSurface,就不必再费劲儿找CATBody了,应该直接就可以用
CreatePointOnSurface来做面上点了。因此只要你用正常的方法得到当前的CGMContainer(而
不是用CATCreateCGMContainer!),就应该可以了。
再说说为什么不能用CATCreateCGMContainer,前面说过,这个函数是凭空做一个
CGMContainer,而CreatePointOnSurface这样的CATGeoFactory方法,要求提供的参考面必须
和即将生成的object(点)在同一个CGMContainer之内(即当前的CGMContainer),你现在这样
提供两个毫不相关的CGMContainer,当然会出错。(你的出错信息恐怕就是"different container").
总之,虽然你的source里有一堆没用的东西,但只要给对了CGMContainer,恐怕还是能出结果的。
[ 本帖最后由 saeba 于 2006-4-13 21:53 编辑 ] |