今天要讲的是如何获取面的单位法向量如何获取,我的思路是首先在模型的面上写下属性为“法向量”。然后循环遍历这个体找到带属性的这个面,再获取这个面的单位法向量。
下图为定义好属性的面:
下面直接上代码:
SldWorks swApp;
swApp = Utility.ConnectToSolidWorks();
var swModel = (ModelDoc2)swApp.ActiveDoc;
var swAss = (AssemblyDoc)swModel;
var comps = (object[])swAss.GetComponents(false);//获取装配体中的所有组件
for (int j = 0; j <= comps.GetUpperBound(0); j++)
{
Component2 swcomp = (Component2)comps[j];
string parentname = swcomp.Name2;
//Debug.Print(parentname);
swcompDoc = (ModelDoc2)swcomp.GetModelDoc2();
if (swcompDoc.GetType() == 1)//判断是不是零部件文档
{
var swPart = (PartDoc)swcompDoc;
var swModelExt = swModel.Extension;
var swBody = (object[])swPart.GetBodies2((int)swBodyType_e.swAllBodies, true);
foreach (object body in swBody)
{
var swBody2 = (Body2)body;
var swFace = (object[])swBody2.GetFaces();
if (swFace != null)
{
foreach (object face in swFace)
{
var swFace2 = (Face2)face;
var faceName = swcompDoc.GetEntityName(swFace2);
if (faceName.Contains("法向量") == true)
{
double[] verty = (double[])swFace2.Normal;
MessageBox.Show("单位法向量为:"+verty[0]+","+ verty[1] + ","+verty[2], "提示");
}
}
}
}
}
}
代码的运行效果如下所示:
最后根据坐标系确定一下获取的单位法向量是否正确,坐标系如下图所示:
可以看得出来,程序求的的单位法向量和坐标系所显示的一致,所以说明我们获取的正确。
本文到此结束,我们下篇文章见。