最近因为一些原因,博客没更新。
这篇文章给大家介绍一下工程图中怎么获取零件对象,这个问题之前也有网友问过,一直在计划中。
下面这个简单的工程图中,我们要获取clamp这个零件,我们可以选择的方式很多:
- 左侧特征树
- 关联和球标
- 关联的注释文字
- 零件上面的面/边/线
也许还有别的方式:
大家可以自己思考一下,上在这几种方式都如何去获取到这个零件。
模板文件在源代码中: TemplateModel\TempAssembly.SLDDRW
给大家十分钟,能搞定,就不用继续看了。
直接上代码加注释:
/// <summary>
/// 这里有两种代码,一个是直接在工程图中选中了零件,另一个在工程图中选中了注释 或者球标(有引线指向零件)
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnGetCompFromBalloon_Click(object sender, EventArgs e)
{
SldWorks swApp = PStandAlone.GetSolidWorks();
var swModel = swApp.IActiveDoc2;
//var drawingDoc = (DrawingDoc)swModel;
//选择管理器
var swSelMgr = (SelectionMgr)swModel.SelectionManager;
//检查是否有选择对象
if (swSelMgr.GetSelectedObjectCount2(-1) == 0)
{
MessageBox.Show("还有没选择对象");
return;
}
//遍历选中对象 (经验觉得第一个选中对象一直是视图,第二个开始才是要选中的对象)
//所以下在的循环应该可以从2开始
for (int i = 1; i <= swSelMgr.GetSelectedObjectCount(); i++)
{
//获取选中的对象,转为DrawingComponent
var swDrawingComponent = (DrawingComponent)swSelMgr.GetSelectedObjectsComponent4(i, -1);
if (swDrawingComponent != null)
{
var swComponent = (Component2)swDrawingComponent.Component;
MessageBox.Show(swComponent.Name2);
}
//如果选择的是球标 或者 注释
if (swSelMgr.GetSelectedObjectType3(i, -1) == (int)swSelectType_e.swSelNOTES)
{
//获取Note
var thisNote = (Note)swSelMgr.GetSelectedObject6(i, -1);
//获取Annotation
var ann = (Annotation)thisNote.GetAnnotation();
//获取关联实体
var attEntity = (Entity)ann.IGetAttachedEntities();
//获取实体所对应的Component
var comp = attEntity.IGetComponent2();
MessageBox.Show(comp.Name2);
}
}
}
完美运行
源代码在码云和github上都有,地址就不贴了,自己找下就有。