C# SolidWorks二次开发-工程图-遍历选中视图中的草图

125 篇文章 72 订阅
54 篇文章 15 订阅

知识点: 遍历选中视图中的草图

我们来继续学习一下工程图里的东西,如下图,我们可以在工程图中画草图,也可以在某个视图中画草图,你不要问我为什么要画,因为我也不知道你要干什么。在这里插入图片描述

在这里插入图片描述
今天就简单介绍一下,如何获取这几条线的信息。
大家都知道零件的时候画草图都是要先定义基准面的,而且画完左侧特征树上也会显示一个特征,但是我们在图纸上或者视图上画的时候,却不用,也没有显示特征。
所以我猜侧,这里是Solidworks做了隐藏及优化,图纸或者视图上的草图只能有一个,所有就不用再显示 出来了。
在这里插入图片描述
动手-> 去api 帮助里面找一找相关的帮助,看看有没有什么新发现。

-----------------------------------------------------------------------------华丽的分割线-----------------------------------------------------------------------------------------

好像发现了什么:
在这里插入图片描述
找到了个View的接口:
在这里插入图片描述
在这里插入图片描述

关键信息在这里:
Remarks
Each drawing view contains an underlying sketch. The user can activate the sketch for a drawing view by double-clicking the view. Once the drawing view is active, you can add sketch directly to the view’s sketch.

我假装看不懂,哈哈。翻译一下:
在这里插入图片描述

那就好办了,就是先搞到一个View对象,再GetSketch,这样我们就有和零件草图一样的对象了,这样我们就可以遍历里面的直线、点、文字这些信息了。

其实代码我写好很久了,一直没有发文章解释一下。
在这里插入图片描述

 private void btnGetView_Click(object sender, EventArgs e)
        {
            SldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            SelectionMgr selectionMgr = (SelectionMgr)swModel.SelectionManager;

            //获取选择的视图对象
            View view = (View)selectionMgr.GetSelectedObject5(1);

            //获取视图的草图
            var viewSketch = view.IGetSketch();

            //var pointsCount = viewSketch.GetSketchPointsCount2();

            var points = (object[])viewSketch.GetSketchPoints2();

            var skSegs = (object[])viewSketch.GetSketchSegments();

            List<SketchPoint> segmentPoints = new List<SketchPoint>();
            if (points != null)
            {
                for (int i = 0; i < points.Length; i++)
                {
                    var thisPoint = (SketchPoint)points[i];

                    Debug.Print(thisPoint.Type.ToString());

                    if (thisPoint.Type == 1)
                    {
                        // thisPoint.Select(true);

                        segmentPoints.Add(thisPoint);
                    }
                }
            }
            List<SketchSegment> segmentCenterLines = new List<SketchSegment>();

            if (skSegs != null)
            {
                for (int i = 0; i < skSegs.Length; i++)
                {
                    var thisSeg = (SketchSegment)skSegs[i];
                    // thisSeg.Select(false);
                    if (thisSeg.Style == (int)swLineStyles_e.swLineCENTER)
                    {
                        //thisSeg.Select(true);
                        segmentCenterLines.Add(thisSeg);
                    }
                }
            }
        }

其它来不及解释了,大家自己思考吧,顺便来个小调查,谢谢大家。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paine Zeng

如果对有帮助,请我喝咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值