在Solidworks中,我们经常会使用【评估】/【测量】进行一些物体的测量工作,通过测量的数据进行相关的操作。那么在自动化操作Solidworks的过程中,如果需要测量或检测,并将测量数据用于后续的自动化操作时,此时需要使用到Solidworks的测量类Measure类的相关属性与方法。
image.png
本文将通过下图中的模型进行相关测量,从而给大家简单介绍下Measure类的相关使用。
image.png
ModelDoc2 SwDoc;//模型文档
ModelDocExtension SwDocEx=SwDoc.Extension;//获得模型扩展文档
Measure SwMeasure = SwDocEx.CreateMeasure();//获得文档的测量工具
直接使用测量工具对象的Calculate方法,即可完成测量动作。
Measure SwMeasure
SwMeasure.Calculate(Entities);
参数Entities为实体数组,代表需要测量的实体对象集合,可以理解为如下图中选中的实体.
image.png
Measure类提供了很多属性用于存储测量的结果值。对应我们交互过程中下图红框中的测量结果值。我们通过这些属性即可得到这些值。
image.png
image.png
a.选中需要测量实体-->获取测量实体集合
b.使用测量工具-->运行SwMeasure.Calculate(Entities)
c.查看测量结果-->利用Measure的属性获取相关测量结果值
如下图所示,测量2个选中圆柱面的中心距。
image.png
代码示例:
public static void MeasureFace(ModelDoc2 Doc)
{
ModelDocExtension DocEx = Doc.Extension;
SelectionMgr SwSelMrg = Doc.SelectionManager;
Measure SwMeasure = DocEx.CreateMeasure();
DocEx.SelectByID2("", "FACE",-100/1000.0,60/1000.0,15/1000.0,false,-1,null,0);
DocEx.SelectByID2("", "FACE", 100 / 1000.0, 60 / 1000.0, 15 / 1000.0, true, -1, null, 0);
Face2 SwFace1 = SwSelMrg.GetSelectedObject6(1, -1);
Face2 SwFace2 = SwSelMrg.GetSelectedObject6(2, -1);
Entity[] ents = new Entity[] { (Entity)SwFace1, (Entity)SwFace2 };
SwMeasure.Calculate(ents);
System.Windows.MessageBox.Show("中心距:" + (SwMeasure.CenterDistance*1000).ToString().Trim()+"mm");
}
运行结果:
image.png
如下图所示,测量2条选中边线之间的信息。
image.png
代码示例:
public static void MeasureEdge(ModelDoc2 Doc)
{
ModelDocExtension DocEx = Doc.Extension;
SelectionMgr SwSelMrg = Doc.SelectionManager;
Measure SwMeasure = DocEx.CreateMeasure();
DocEx.SelectByID2("", "EDGE", 100 / 1000.0, 80 / 1000.0, 15 / 1000.0, false, -1, null, 0);
DocEx.SelectByID2("", "EDGE", 0 / 1000.0, 30 / 1000.0, 30 / 1000.0, true, -1, null, 0);
Edge SwEdge1 = SwSelMrg.GetSelectedObject6(1, -1);
Edge SwEdge2 = SwSelMrg.GetSelectedObject6(2, -1);
Entity[] ents = new Entity[] { (Entity)SwEdge1, (Entity)SwEdge2 };
SwMeasure.Calculate(ents);
StringBuilder sb = new StringBuilder("距离:" + (SwMeasure.Distance * 1000).ToString().Trim() + "mm\r\n");
sb.Append("X距离:"+ (SwMeasure.DeltaX * 1000).ToString().Trim() + "mm\r\n");
sb.Append("Y距离:" + (SwMeasure.DeltaY * 1000).ToString().Trim() + "mm\r\n");
sb.Append("Z距离:" + (SwMeasure.DeltaZ * 1000).ToString().Trim() + "mm\r\n");
System.Windows.MessageBox.Show(sb.ToString().Trim());
}
运行结果:
image.png
如下图所示,测量一个顶点与一个圆柱面之间的信息。
image.png
代码示例:
public static void MeasurePointFace(ModelDoc2 Doc)
{
ModelDocExtension DocEx = Doc.Extension;
SelectionMgr SwSelMrg = Doc.SelectionManager;
Measure SwMeasure = DocEx.CreateMeasure();
DocEx.SelectByID2("", "FACE", 0 / 1000.0, 15 / 1000.0, 30 / 1000.0, false, -1, null, 0);
DocEx.SelectByID2("", "VERTEX", 150 / 1000.0, 30 / 1000.0, 75 / 1000.0, true, -1, null, 0);
Face2 SwFace = SwSelMrg.GetSelectedObject6(1, -1);
Vertex SwVertex = SwSelMrg.GetSelectedObject6(2, -1);
Entity[] ents = new Entity[] { (Entity)SwFace, (Entity)SwVertex };
SwMeasure.Calculate(ents);
StringBuilder sb