之前的文章里有讲过solidworks提供过一个ClosestDistance获取最小距离的方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/071ae0ae222b421c9becaa56d4f43fb5.png)
虽然 这里面支持的对象还比较多,常用就够了。只是今天我们来研究一下另一个距离相关的方法GetDistance。
这是支持返回最小和最大距离 :
![在这里插入图片描述](https://img-blog.csdnimg.cn/83f1ec0850e348a386638a93c949ac11.png)
而且还有实例,所以我就不花太多时间去解释了。直接抄作业。先看中文
这个例子里面先用SelectById2选择了两个面,再输出层们之前的最小最大距离,而且还创建了草图来示意距离 。我们来改一下,改成用户先选两个面,然后执行。
SldWorks swApp = Utility.ConnectToSolidWorks();
ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
SelectionMgr selectionMgr = (SelectionMgr)swModel.SelectionManager;
bool bMin;
long retval;
double dist;
double[] varParam=null;
object varPos1;
object varPos2;
double[] Pos1 = new double[3];
double[] Pos2 = new double[3];
if (selectionMgr.GetSelectedObjectCount()==2)
{
var swTop1 = (Entity)selectionMgr.GetSelectedObject6(1, -1);
var swTop2 = (Entity)selectionMgr.GetSelectedObject6(2, -1);
bMin = true;
retval = swTop1.GetDistance(swTop2, bMin, varParam, out varPos1, out varPos2, out dist);
Pos1 = (double[])varPos1;
Pos2 = (double[])varPos2;
Debug.Print("IEquity::GetDistance return value (0 = success; -1 = failure) : " + retval);
Debug.Print("Face1 coordinate: " + Pos1[0] + "," + Pos1[1] + "," + Pos1[2]);
Debug.Print("Face2 coordinate: " + Pos2[0] + "," + Pos2[1] + "," + Pos2[2]);
Debug.Print("Minimum distance between two faces = " + dist * 1000 + " mm");
Debug.Print("");
Pos1 = new double[3];
Pos2 = new double[3];
bMin = false;
retval = swTop1.GetDistance(swTop2, bMin, varParam, out varPos1, out varPos2, out dist);
Pos1 = (double[])varPos1;
Pos2 = (double[])varPos2;
Debug.Print("IEquity::GetDistance return value (0 = success; -1 = failure) : " + retval);
Debug.Print("Face coordinate: " + Pos1[0] + "," + Pos1[1] + "," + Pos1[2]);
Debug.Print("Edge coordinate: " + Pos2[0] + "," + Pos2[1] + "," + Pos2[2]);
Debug.Print("Maximum distance between face and edge = " + dist * 1000 + " mm");
Debug.Print("");
}
else
{
MessageBox.Show("请只选择面或者边,且总数量2个。");
}
主要代码就这样了,但是我发现这个测量出来的结果 好像有时候不正确,和手动测量出来也不一样。
另外 失败返回值 是-1 api帮助里写的也不对。
就目前来说这个功能不太好用。这样好像博文白写了,哈哈。