关于交互选择的一个问题

今天写了一段交互选择的代码,主要是选择一根直线或曲线,然后进行偏移。发现选择对象的时候,可以选择HybridShape对象,也可以选择草图中的Factory2D图元。但草图图元在获取对象的reference时却报错,无论是将草图图元输出为轮廓还是输出为特征,都会报错。

 1 //定义选择集的过滤器
 2 //定义一个类型过滤器,过滤器的大小为1;MonoDim表示一维几何对象,即曲线类型
 3 object[] selType = new object[4] 
 4 {
 5   CATSelectionFilter.MonoDim.ToString(),//曲线或边界,有限长
 6   CATSelectionFilter.MonoDimInfinite.ToString(),//曲线或边界,无限长
 7   CATSelectionFilter.RectilinearMonoDim.ToString(),//直线或直的边界,有限长
 8   CATSelectionFilter.RectilinearMonoDimInfinite.ToString()
 9 };//直线或直的边界,无限长
10 
11 
12 string status = entSelection.SelectElement2(selType, operationTips, false);
13 if (status == "Normal")
14 {
15   //返回选择的对象,赋值给cur.要返回reference
16   return (HybridShape)entSelection.Item2(1).Reference;
17 }
18 else
19 {
20   //如果选择不成功,则返回null
21   return null;
22 }

报错的是16行的代码,测试发现,虽然预设的选择图元是HybridShape,但也可以将草图的图元(草图中只有一个图元,或其余的图元输出为轮廓或特征了)选中,但草图图元不能使用reference属性值。

 

这里,之所以使用HybridShape对象的reference对象,是发现在选择的时候,用entSelection.SelectElement2()返回的对象,得到的对象类型永远是System._ComObject,对象名称是CATIASelectedElement;而reference对象的类型仍是System._ComObject,但名字可是对象原来的名字。

 

对这两个地方还有些疑问,需要进一步了解。

 

posted @ 2020-08-23 15:02  骑士向东  阅读(262)  评论(0编辑  收藏  举报