在上一文中,我们介绍的草图绘制的基本方法,效果如下图1。但是,这个草图的颜色都是蓝色的,鼠标任意拖动就能改变图形的尺寸与形状。在实际生产实践中,这类草图尚不合规。我们需要通过对草图元素添加一些几何关系与尺寸,来约束图形。本文我们将着重讲解草图的几何关系添加与尺寸添加,最终使得该草图实现图2的完全定义。
1.欲从图1变成图2的完全定义,过程分析如下:
a.添加两个圆心的几何关系--水平
b.添加两个圆心的几何关系--对称
c.添加一个圆心与坐标原点的几何关系--水平
d.添加两个圆心之间的尺寸距离
e.添加两个圆几何关系--相等
f.给圆添加直径尺寸
g.给矩形的长添加尺寸
h.给矩形的高添加尺寸
2.通过上述的工作内容分析,我们先来看下完整的代码。
public void DoSketch()
{
SldWorks swApp = API_Learn.Learn_Sldworks.NewSolidworksApp();
ModelDoc2 SketchDoc = swApp.NewPart();//新建零件,验证获得Solidworks程序对象成功
try
{
swApp.SetUserPreferenceToggle(10, false);//不弹出尺寸标注对话框
API_Learn.Learn_SketchManager.AddConstraintAndDim(SketchDoc);
}
catch
{
}
finally
{
swApp.SetUserPreferenceToggle(10, true);//恢复弹出尺寸标注对话框
}
}
public static void AddConstraintAndDim(ModelDoc2 SketchDoc)
{
SketchManager SwSketchMrg = SketchDoc.SketchManager;//获得SketchManager对象
SketchDoc.Extension.SelectByID2("前视基准面", "PLANE", 0, 0, 0, false, 0, null, 0);
SwSketchMrg.InsertSketch(true);//进入编辑草图模式
object[] ObjRectangle = SwSketchMrg.CreateCenterRectangle(0, 0, 0, 0.075, 0.04, 0);
SketchSegment SktCircle1 = SwSketchMrg.CreateCircle(-0.0425, 0, 0, -0.03, 0, 0);
SketchSegment SktCircle2 = SwSketchMrg.CreateCircle(0.0425, 0, 0, 0.03, 0, 0);
SketchSegment SktCentLine = SwSketchMrg.CreateCenterLine(0, 0.04, 0, 0, -0.04, 0);
#region 两个圆心添加水平
SketchDoc.ClearSelection2(true);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", -0.0425, 0, 0, true, 0, null, 0);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", 0.0425, 0, 0, true, 0, null, 0);
SketchDoc.SketchAddConstraints("sgHORIZONTALPOINTS2D");
#endregion
#region 两个圆心添加对称
SketchDoc.ClearSelection2(true);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", -0.0425, 0, 0, true, 0, null, 0);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", 0.0425, 0, 0, true, 0, null, 0);
SktCentLine.Select(true);
SketchDoc.SketchAddConstraints("sgSYMMETRIC");
#endregion
#region 圆心与坐标原点水平
SketchDoc.ClearSelection2(true);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", -0.0425, 0, 0, true, 0, null, 0);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", 0, 0, 0, true, 0, null, 0);
SketchDoc.SketchAddConstraints("sgHORIZONTALPOINTS2D");
#endregion
#region 添加孔间距尺寸
SketchDoc.ClearSelection2(true);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", -0.0425, 0, 0, true, 0, null, 0);
SketchDoc.Extension.SelectByID2("", "SKETCHPOINT", 0.0425, 0, 0, true, 0, null, 0);
SketchDoc.AddDimension2(0, 0.05, 0);
#endregion
#region 两个圆添加相同大小
SktCircle1.Select(false);
SktCircle2.Select(true);
SketchDoc.SketchAddConstraints("sgSAMELENGTH");
#endregion
#region 添加圆尺寸
SktCircle1.Select(false);
SketchDoc.AddDimension2(-0.02, 0.02, 0);
#endregion
#region 添加矩形长
SketchDoc.Extension.SelectByID2("", "SKETCHSEGMENT", -0.02, 0.04, 0, false, 0, null, 0);
SketchDoc.AddDimension2(0, 0.07, 0);
#endregion
#region 添加矩形高
SketchDoc.Extension.SelectByID2("", "SKETCHSEGMENT", 0.075,0 , 0, false, 0, null, 0);
SketchDoc.AddDimension2(0.09, 0, 0);
#endregion
SwSketchMrg.InsertSketch(true);//退出编辑草图模式
}
3.代码解读
a.几何关系添加
在日常手工与Solidworks交互添加几何关系时候,我们都知道需要先选中需要添加几何关系的元素,然后添加几何关系。
使用API自动添加几何关系的时候,也是通过相同的步骤完成几何关系的自动添加。
1)选择方式,我们使用2种选择方法:
扩展文档对象ModelDocExtensio::SelectByID2方法通过坐标选中草图元素。
各对象实例的Select方法,选中对象本身。
Solidworks自动操作中,选择使用的频率非常高,在下一文中,我们一起来看下Solidworks中各类选择方法与优缺点。
2)添加几何关系,使用如下方法。参数IdStr代表几何关系的类型,一次添加仅能添加一个几何关系。
ModelDoc2.SketchAddConstraints(IdStr)
IdStr可使用的字符串值,如下图
b.关闭尺寸弹出框
在日常添加草图尺寸时候,都会弹出下图红框中的尺寸修改对话框,但是在使用API自动操作Solidworks的时候,这就不是一件好事了,这个修改框意味着我们需要人工去点击。
那在自动标准尺寸前,我们就先要考虑不让Solidworks系统弹出该对话框。
如下图所示,在Solidworks系统选项设置中的红框所圈的设置取消勾选,即可不再弹出尺寸修改对话框。
该设置,同样可以使用Solidworks的API自动实现,代码如下,为了避免其他执行代码的意外出错,导致修改用户的该设置,故添加try,catch,finally,异常捕捉,无论运行结果如何,都恢复用户原有设置。
try
{
swApp.SetUserPreferenceToggle(10, false);//不弹出尺寸标注对话框
//执行用户代码
}
catch
{
}
finally//避免出错,自动化完毕后恢复设置
{
swApp.SetUserPreferenceToggle(10, true);//恢复弹出尺寸标注对话框
}
c.添加尺寸
添加尺寸时,也需要先选中尺寸标注的基准,故步骤同几何关系添加。添加尺寸的关键方法如下,参数X,Y,Z代表尺寸显示值放置的坐标位置。
ModelDoc2.AddDimension2(X, Y, Z)
如下图为本文的示例程序,源码可上我的Github下载。操作步骤可见文章《公众号源码Github分享库》****,****实例序号7