今天讲的是如何获取自定义边和选定面之间的距离,首先在模型上的一条边上写个边线属性为“测试”,如下图所示:
定义完边属性以后,就选定一个面。开始运行如下程序就可以:
var swApp = Utility.ConnectToSolidWorks();
var swModel = (ModelDoc2)swApp.ActiveDoc;
var swSelMgr = (SelectionMgr)swModel.SelectionManager;
Entity faceentity = (Entity)swSelMgr.GetSelectedObject6(1, -1);
var swPart = (PartDoc)swModel;
var swBody = (object[])swPart.GetBodies2((int)swBodyType_e.swSolidBody, true);
foreach (object body in swBody)
{
var swBody2 = (Body2)body;
var swEdge = (object[])swBody2.GetEdges();
if (swEdge != null)
{
foreach (object edge in swEdge)
{
var swEdge2 = (Edge)edge;
var faceName = swModel.GetEntityName(swEdge2);
if (faceName.Contains("测试") == true)
{
object varpos1;
object varpos2;
double dist;
double[] varparam = new double[2];
varparam = SetParameterForEdge(swEdge2);
long retval = faceentity.GetDistance(swEdge2, true, varparam, out varpos1, out varpos2, out dist);
MessageBox.Show("边和面之间的距离为"+dist*1000+"mm");
}
}
}
}
其中引用的方法SetParameterForEdge代码如下:
public static double[] SetParameterForEdge(Edge swEdge)
{
double[] startPt = new double[3];
double[] endPt = new double[3];
double[] startPara = new double[2];
double[] endPara = new double[2];
double[] paramDl = new double[2];
startPt = (double[])((Vertex)swEdge.GetStartVertex()).GetPoint();
endPt = (double[])((Vertex)swEdge.GetEndVertex()).GetPoint();
startPara = (double[])swEdge.GetParameter(startPt[0], startPt[1], startPt[2]);
endPara = (double[])swEdge.GetParameter(endPt[0], endPt[1], endPt[2]);
paramDl[0] = startPara[0];
paramDl[1] = endPara[0];
return paramDl;
}
整体代码运行效果如下图所示:
上面所写的代码在使用的时候需要注意一点,就是预定义属性的边不能是封闭的圆边。如果是封闭的圆边会有错误,不能使用如下方法进行开发。
测量封闭圆边和面之间距离的方法,我会以后将其写出来。如果有单独需要的可以私聊我。