C# SolidWorks 二次开发 API—让用户选择对象后执行操作

C# SolidWorks 二次开发 API—让用户选择对象后执行操作

在做一些交互操作的时候,有时候需要用户做选择。比如对象很多的时候,让用户指定选择某个特征,或者基准面等等。
我用一个简单的例子说明一下如何处理。
这个是例用了solidworks提供的事件来操作,我们需要进行事件的绑定。
查看我的API中文宝典,发现有个官方例子:

这例子也比较简单,我就不多说了。

代码部分:

  //用于事件对象共享。
        private PartDoc partDoc = null;

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

            if (swApp != null)
            {
                ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

                partDoc = swModel as PartDoc;
                //为当前文件增加选择对象之后 通知事件
                partDoc.UserSelectionPostNotify += PartDoc_UserSelectionPostNotify;
            }
        }

        /// <summary>
        /// 选择之后 处理事件内容
        /// </summary>
        /// <returns></returns>
        private int PartDoc_UserSelectionPostNotify()
        {
            SldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            var swSelMgr = (SelectionMgr)swModel.SelectionManager;

            var selectType = swSelMgr.GetSelectedObjectType3(1, -1);

            SendMessageToUser("You Select :" + Enum.GetName(typeof(swSelectType_e), selectType));

            return 1;
        }

        /// <summary>
        /// 做完通知之后 ,去掉事件绑定
        /// </summary>
        /// <param name="s"></param>
        private void SendMessageToUser(string s)
        {
            SldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            swApp.SendMsgToUser(s);

            partDoc.UserSelectionPostNotify -= PartDoc_UserSelectionPostNotify;
        }

逻辑如下:当点击界面上的按钮之后,会给当前零件增加一个事件绑定。用于当用户选择对象之后,进行某些操作。
执行完操作之后,删除绑定(这里按实际需要处理)。

我这个例子结果如下:

posted @
2022-12-23 11:51 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源

C# SolidWorks 二次开发 API —取整坐标

C# SolidWorks 二次开发 API —取整坐标

这是博文来自于网友的提问。
从CAD中复制一些轮廓到Solidworks的草图里面之后,因为软件转换的精度问题,会导致草图直线的一些坐标出来1999.88这种小数,但是实际都是要取整的。 咨询我有没有好的办法可以解决这个问题。
思路: 遍历草图直线,或者端点,在获取完坐标之后 进行取整操作,并修改坐标点位。(因为当前草图全部为活动状态,所以就可以任意修改)
原始状态:

关键代码:

        private void btnRoundPointLoc_Click(object sender, EventArgs e)
        {
            SldWorks swApp = PStandAlone.GetSolidWorks();

            ModelDoc2 swModel = default(ModelDoc2);
            ModelDocExtension swModelDocExt = default(ModelDocExtension);
            SelectionMgr swSelMgr = default(SelectionMgr);
            Feature swFeature = default(Feature);

            //连接文件

            swModel = (ModelDoc2)swApp.ActiveDoc;

            swModelDocExt = (ModelDocExtension)swModel.Extension;

            //选中草图
            var status = swModelDocExt.SelectByID2("Sketch1", "SKETCH", 0, 0, 0, false, 0, null, 0);

            swSelMgr = (SelectionMgr)swModel.SelectionManager;
            //转换
            swFeature = (Feature)swSelMgr.GetSelectedObject6(1, -1);
            //进入编辑草图
            swModel.EditSketch();

            //获取草图中的所有草图点来修改坐标

            var swSketch = (Sketch)swFeature.GetSpecificFeature2();

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

            for (int i = 0; i < points.Length; i++)
            {
                var p = (SketchPoint)points[i];

                var x = p.X * 1000;
                var y = p.Y * 1000;

                p.X = Math.Round(x, 0) / 1000;
                p.Y = Math.Round(y, 0) / 1000;

                //Debug.Print(p.X.ToString() + " " + p.Y.ToString());
            }

            swModel.EditRebuild3();

            swModel.EditSketch();

            MessageBox.Show("完成了!");
        }

结果:

posted @
2022-12-22 10:18 
painezeng  阅读(
0)  评论(
0
编辑 
收藏 
举报  
来源