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

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下载,欢迎大家提问。

 

posted @
2020-03-26 15:40 
painezeng  阅读(
174)  评论(
0
编辑 
收藏 
举报

C# SolidWorks 二次开发 API — 提升exe执行效率接近DLL

C# SolidWorks 二次开发 API — 提升exe执行效率接近DLL

          最近一段时间没更新博客,原因比较多。作为湖北人,今年的班上的不容易。当然还是要感谢各地的支援。

          今天来和大家分享一下一个关于exe提升性能的选项,因为之前主要写的exe比较多,后来改成dll之后效率提升很大,但是最近发现了一个新大陆,在exe中大量读取solidworks文件的数据时,可以先通过swApp.CommandInProgress这个设置为True 来提高性能。

           先看下API帮助中的定义:

           大概意思要是先告诉SOLIDWORKS准备在进程外将进行一系列API调用,提高了进程外应用程序的性能。

         经过测试,在做一些大量读取数据的时候,性能相对于没有设定之前提高了近4倍,结果和dll的差距已经不太大了,因为DLL里面调试没有exe方便,这样设定之后可以减少调试所需的时间,提高运行效率。

本地时间测试

Type Time
exe with CommandInProgress = Ture 111s
exe with CommandInProgress = False 460s
DLL 78s
   

 

posted @
2020-03-26 10:13 
painezeng  阅读(
126)  评论(
0
编辑 
收藏 
举报