[7] 打一个简单的通孔
这个需要动动脑子。孔好象只能放置在平面上吧?我UG用的不熟,只是觉得只有在平面上才便于定位,曲面上就困难了。
要选圆柱两底面中的一个作为孔的放置平面,由于是通孔,还需要知道要打通的那个平面。所以从圆柱的所有特征面中找到它的两个底面。
方法:
1。使用m_openSession.Modl.AskFeatFaces来获取圆柱体上的所有特征面的Tag,它们存在C#的数组 obj_list中,C#的数组应该是变长的。
2。查询 obj_list中存储的对象的类型,一个也不放过,要写一个循环,在循环中m_openSession.Modl.AskFaceType,如果是平面类型就把它存起来。但我没查到NX OPEN .net中对平面类型是怎样定义的,就用了一个苯方法,圆柱上的特征曲面就仨,一张曲面,两个平面,我就穷举,只要有两个特征面的类型相同,那么它们肯定就是平面。
3。找到了两个特征平面的tag,就可以打孔了。
/////////////////////////////////////////////////////////////////////////
在ExcuteFun()中创建圆柱的代码的下面添加如下代码:
NXOpen.Tag []obj_list;
m_openSession.Modl.AskFeatFaces(cyl_obj_id,out obj_list);
int i=0,j=0;
int m=obj_list.GetLength(0);
int face_type1=0,face_type2;
NXOpen.Tag []filteredObj_list=new NXOpen.Tag[2];
for(i=0;i<m;i++)
{
m_openSession.Modl.AskFaceType(obj_list,out face_type1);
for(j=0;j<m;j++)
{
if(j!=i)
{
m_openSession.Modl.AskFaceType(obj_list[j],out face_type2);
if(face_type1==face_type2)
{
filteredObj_list[0]=obj_list;
filteredObj_list[1]=obj_list[j];
}
}
}
}
NXOpen.Tag feature_obj_id;
m_openSession.Modl.CreateSimpleHole(origin,direction,"1","5","120",filteredObj_list[0],filteredObj_list[1],out feature_obj_id);
//////////////////////////////////////////////
好了。编译,运行看看。 |