C# SolidWorks 二次开发 API ---如何修改草图里面的直线

 昨天有网友想知道怎么修改草图的内容,今天来带着找一找如何解决。

在之前打开和创建那个命令里面我写过如下代码 :

                    //选择对应的草图基准面
                    bool boolstatus = swModel.Extension.SelectByID2("Plane1", "PLANE", 0, 0, 0, false, 0, null, 0);

                    //创建一个2d草图
                    swModel.SketchManager.InsertSketch(true);

                    //画一条线 长度100mm  (solidworks 中系统单位是米,所以这里写0.1)
                    swModel.SketchManager.CreateLine(0, 0, 0, 0, 0.1, 0);

                    //关闭草图
                    swModel.SketchManager.InsertSketch(true);

这里面知道了草图管理器是SketchManager.

我们去API帮助里面查找SketchManager.很容易就能找到这里有个官方示例。

这里虽然是VBA的,但是可以大概知道大体步骤,参考这个就能知道如何读取这些信息了,可以先把这个例子弄懂。再来考虑怎么修改,我也就写几行简单的代码,把之前 我在图中画的一条直线长度 和位置修改掉。

默认当前状态:

代码如下:

        private void btnCreateSketch_Click(object sender, EventArgs e)
        {
            //如果没有打开文件,请执行打开和创建的操作:
            //BtnOpenAndNew_Click(null, null);

            //连接到Solidworks
            ISldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            //定义草图管理器
            SketchManager sketchManager = swModel.SketchManager;

            //按名字选择草图
            bool boolstatus = swModel.Extension.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, false, 0, null, 0);

            if (boolstatus == true)
            {
                //编辑草图
                sketchManager.InsertSketch(false);
                //获取当前草图,当获取草图中的Segment对象
                Sketch sketch = swModel.GetActiveSketch2();
                object[] sketchSegments = sketch.GetSketchSegments();

                if (sketchSegments != null)
                {
                    //遍历
                    foreach (var skSeg in sketchSegments)
                    {
                        SketchSegment sketchSegment = (SketchSegment)skSeg;

                        //判断是直线时执行
                        if (sketchSegment.GetType() == (int)swSketchSegments_e.swSketchLINE)
                        {
                            SketchLine sketchLine = (SketchLine)sketchSegment;
                            SketchPoint sketchPointStart = sketchLine.GetStartPoint2();
                            SketchPoint sketchPointEnd = sketchLine.GetEndPoint2();

                            //这里显示弹出坐标,单位默认是米
                            MessageBox.Show(sketchPointStart.X.ToString() + "," + sketchPointStart.Y.ToString());
                            MessageBox.Show(sketchPointEnd.X.ToString() + "," + sketchPointEnd.Y.ToString());

                            SelectionMgr swSelMgr = swModel.SelectionManager;

                            //定义选择数据
                            SelectData swSelData = swSelMgr.CreateSelectData();

                            //选择此直线

                            sketchSegment.Select4(false, swSelData);

                            //删除当前的约束关系
                            swModel.SketchConstraintsDelAll();

                            //下在我们来修改坐标
                            sketchPointStart.X = 0.05;
                            sketchPointStart.Y = 0.04;

                            sketchPointEnd.X = 0.2;
                            sketchPointEnd.Y = 0.2;
                        }
                    }
                }

                //退出草图
                sketchManager.InsertSketch(true);
            }
        }

执行过后,文件中的草图变成了:

这里讲解的就是一个思路,大家应该能看明白吧。

具体的代码可以去我的码云或者github下载,欢迎大家提问。

猜你喜欢

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