C# SolidWorks二次开发——判断模型面之间的相邻关系(SolidWorks 2020 + VS 2019)
在SolidWorks二次开发的过程中,我们经常会遇到需要判断模型中两个面是否相邻。但SolidWorks本身并没有可以直接判断两个面是否相邻的函数,这里我们可以利用一个简单的函数来实现这个功能。
1、最近距离函数
这里利用SolidWorks自带的检测两个Object之间最近距离的函数来实现判断相邻的功能。当两个face之间的最近距离为0时,则这两个面相邻。关于该函数具体介绍见帮助文档。
2、简单示例
这里给出了一个简单的示意函数IsAdjacent()。
传入参数1为IFace2类型的面,传入参数2为另一个IFace2类型的面,返回值为0或1,表示这两个面是否相邻。
public void IsAdjacent(IFace2 face1,IFace2 face2)
{
//创建两个点
object point1;
object point2;
//找到最近距离
double closestDistance = iSwApp.IActiveDoc2.ClosestDistance(face1, face2, out point1, out point2);
//如果最近距离小于一定阈值,这是由于SolidWorks本身可能存在一定误差
if ((int)(closestDistance * 1000000) == 0)
{
//相邻
return 1;
}
else
{
//否则,不相邻
return 0;
}
}
3、扩展示例
这里给出一个扩展示例,该示例可以创建模型的面邻接矩阵,并且判断两个面不同相邻关系,外环相邻、内环相邻还是某个面的内环和另一个面的外环相邻。
具体代码实现如下,其中bodyFaces是全局的IFace2类型的List:
public void GenerateAdjacentMatrix()
{
//面的数量
int faceNumber = bodyFaces.Count;
//定义邻接矩阵
double