SolidWorks二次开发教程---获取两个面的最小最大距离

126 篇文章 73 订阅
55 篇文章 15 订阅
之前的文章里有讲过solidworks提供过一个ClosestDistance获取最小距离的方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/071ae0ae222b421c9becaa56d4f43fb5.png)
虽然 这里面支持的对象还比较多,常用就够了。只是今天我们来研究一下另一个距离相关的方法GetDistance。
这是支持返回最小和最大距离 :
![在这里插入图片描述](https://img-blog.csdnimg.cn/83f1ec0850e348a386638a93c949ac11.png)

而且还有实例,所以我就不花太多时间去解释了。直接抄作业。先看中文
在这里插入图片描述
这个例子里面先用SelectById2选择了两个面,再输出层们之前的最小最大距离,而且还创建了草图来示意距离 。我们来改一下,改成用户先选两个面,然后执行。

 SldWorks swApp = Utility.ConnectToSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            SelectionMgr selectionMgr = (SelectionMgr)swModel.SelectionManager;
            bool bMin;
            long retval;
            double dist;
            double[] varParam=null;
            object varPos1;
            object varPos2;
            double[] Pos1 = new double[3];
            double[] Pos2 = new double[3];
            if (selectionMgr.GetSelectedObjectCount()==2)
            {
                var swTop1 = (Entity)selectionMgr.GetSelectedObject6(1, -1);
                var swTop2 = (Entity)selectionMgr.GetSelectedObject6(2, -1);
                 bMin = true;
                 retval = swTop1.GetDistance(swTop2, bMin, varParam, out varPos1, out varPos2, out dist);
                 Pos1 = (double[])varPos1;
                 Pos2 = (double[])varPos2;
                Debug.Print("IEquity::GetDistance return value (0 = success; -1 = failure) : " + retval);
                Debug.Print("Face1 coordinate: " + Pos1[0] + "," + Pos1[1] + "," + Pos1[2]);
                Debug.Print("Face2 coordinate: " + Pos2[0] + "," + Pos2[1] + "," + Pos2[2]);
                Debug.Print("Minimum distance between two faces = " + dist * 1000 + " mm");
                Debug.Print("");
                 Pos1 = new double[3];
                 Pos2 = new double[3];
                bMin = false;
                retval = swTop1.GetDistance(swTop2, bMin, varParam, out varPos1, out varPos2, out dist);
                Pos1 = (double[])varPos1;
                Pos2 = (double[])varPos2;
                Debug.Print("IEquity::GetDistance return value (0 = success; -1 = failure) : " + retval);
                Debug.Print("Face coordinate: " + Pos1[0] + "," + Pos1[1] + "," + Pos1[2]);
                Debug.Print("Edge coordinate: " + Pos2[0] + "," + Pos2[1] + "," + Pos2[2]);
                Debug.Print("Maximum distance between face and edge = " + dist * 1000 + " mm");
                Debug.Print("");


            }
            else
            {
                MessageBox.Show("请只选择面或者边,且总数量2个。");
            }

主要代码就这样了,但是我发现这个测量出来的结果 好像有时候不正确,和手动测量出来也不一样。
另外 失败返回值 是-1 api帮助里写的也不对。
在这里插入图片描述
就目前来说这个功能不太好用。这样好像博文白写了,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Paine Zeng

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

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

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

打赏作者

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

抵扣说明:

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

余额充值