最近因为一些原因,博客没更新。这篇文章给大家介绍一下工程图中怎么获取零件对象,这个问题之前也有网友问过,一直在计划中。
下面这个简单的工程图中,我们要获取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++){//获取选中的对象,转为DrawingComponentvar swDrawingComponent = (DrawingComponent)swSelMgr.GetSelectedObjectsComponent4(i, -1);if (swDrawingComponent != null){var swComponent = (Component2)ponent;MessageBox.Show(swComponent.Name2);}//如果选择的是球标 或者 注释if (swSelMgr.GetSelectedObjectType3(i, -1) == (int)swSelectType_e.swSelNOTES){//获取Notevar thisNote = (Note)swSelMgr.GetSelectedObject6(i, -1);//获取Annotationvar ann = (Annotation)thisNote.GetAnnotation();//获取关联实体var attEntity = (Entity)ann.IGetAttachedEntities();//获取实体所对应的Componentvar comp = attEntity.IGetComponent2();MessageBox.Show(comp.Name2);}}}
完美运行
源代码在码云和github上都有,地址就不贴了,自己找下就有。
如果觉得《SolidWorks二次开发API (C#)---工程图中获取注释或球标关联的零件》对你有帮助,请点赞、收藏,并留下你的观点哦!