本篇文章讨论一下Solidworks草图中存在多个闭环轮廓时如何进行操作。
我们就以最简单的拉伸来介绍一下:
默认情况下:
-
在只一有个闭环轮廓 或者 多个不相交的闭环轮廓 下,Solidworks会默认自动选择上所有轮廓进行拉伸。
如下图: -
在多个轮廓有相交的情况下,Solidworks在点击完拉伸命令之后会进入轮廓选择状态,提示选择你需要的轮廓。
如下图:
我们先考虑一种简单的情况,就是怎么把所有的轮廓都选中,让程序进行拉伸特征。
当前零件草图如下:
下面的代码就是简单的遍历轮廓之后 ,选中所有轮廓,做一个拉伸特征。
/// <summary>
/// 遍历 草图中的闭环轮廓
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void butGetSketchContour_Click(object sender, EventArgs e)
{
SldWorks swApp = PStandAlone.GetSolidWorks();
ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;
SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
//选择草图
swModel.Extension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, false, 4, null, 0);
//把选择转换为特征
var swFeat = (Feature)swSelMgr.GetSelectedObject6(1, -1);
swModel.ClearSelection();
//把特征转换为草图
var swSketch = (Sketch)swFeat.GetSpecificFeature2();
//获取轮廓数量
var sketchContoursCount = swSketch.GetSketchContourCount();
var sketchContours = (object[])swSketch.GetSketchContours();
//选择所有轮廓
for (int i = 0; i < sketchContoursCount; i++)
{
var skContous = (SketchContour)sketchContours[i];
skContous.Select(true, 0);
}
var swFeatureManager = (FeatureManager)swModel.FeatureManager;
//做一个简单的拉伸
var swFeature = (Feature)swFeatureManager.FeatureExtrusion2(true, false, false, 0, 0, 0.01, 0.01, false, false, false,
false, 0, 0, false, false, false, false, true, true, true, 0, 0, false);
}
那问题来了,如果我只想选中某一个轮廓,应该怎么玩?
- 两个方法,按上面的方案遍历一次。然后再通过 skContous.GetEdges 去找到对应的边,或者其它信息来判断 哪一个轮廓是想要的。
- 如果知道一个内部点坐标,也可以通过直接选择的方式来,具体可以参考api中的例子。
Enable Contour Selection Example (C#)
关键地方在这里:
源代码已上传:
https://gitee.com/painezeng/CSharpAndSolidWorks
或
https://github.com/painezeng/CSharpAndSolidWorks