SolidWorks二次开发API (C#)---工程图中获取注释或球标关联的零件

最近因为一些原因,博客没更新。
这篇文章给大家介绍一下工程图中怎么获取零件对象,这个问题之前也有网友问过,一直在计划中。

下面这个简单的工程图中,我们要获取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上都有,地址就不贴了,自己找下就有。

猜你喜欢

转载自blog.csdn.net/zengqh0314/article/details/111166819
今日推荐