C# Solidworks二次开发:测量边和面之间的距离

今天讲的是如何获取自定义边和选定面之间的距离,首先在模型上的一条边上写个边线属性为“测试”,如下图所示:

定义完边属性以后,就选定一个面。开始运行如下程序就可以:

 var swApp = Utility.ConnectToSolidWorks();
            var swModel = (ModelDoc2)swApp.ActiveDoc;
            var swSelMgr = (SelectionMgr)swModel.SelectionManager;
            Entity faceentity = (Entity)swSelMgr.GetSelectedObject6(1, -1);
            var swPart = (PartDoc)swModel;
            var swBody = (object[])swPart.GetBodies2((int)swBodyType_e.swSolidBody, true);
            foreach (object body in swBody)
            {
                var swBody2 = (Body2)body;
                var swEdge = (object[])swBody2.GetEdges();
                if (swEdge != null)
                {
                    foreach (object edge in swEdge)
                    {
                        var swEdge2 = (Edge)edge;
                        var faceName = swModel.GetEntityName(swEdge2);
                        if (faceName.Contains("测试") == true)
                        {
                            object varpos1;
                            object varpos2;
                            double dist;
                            double[] varparam = new double[2];
                            varparam = SetParameterForEdge(swEdge2);
                            long retval = faceentity.GetDistance(swEdge2, true, varparam, out varpos1, out varpos2, out dist);
                            MessageBox.Show("边和面之间的距离为"+dist*1000+"mm");
                        }
                    }
                }

            }

其中引用的方法SetParameterForEdge代码如下:

 public static double[] SetParameterForEdge(Edge swEdge)
        {
            double[] startPt = new double[3];
            double[] endPt = new double[3];
            double[] startPara = new double[2];
            double[] endPara = new double[2];         
            double[] paramDl = new double[2];                     
            startPt = (double[])((Vertex)swEdge.GetStartVertex()).GetPoint();
            endPt = (double[])((Vertex)swEdge.GetEndVertex()).GetPoint();
            startPara = (double[])swEdge.GetParameter(startPt[0], startPt[1], startPt[2]);
            endPara = (double[])swEdge.GetParameter(endPt[0], endPt[1], endPt[2]);
            paramDl[0] = startPara[0];
            paramDl[1] = endPara[0];
            return paramDl;
        }

整体代码运行效果如下图所示:

 

 上面所写的代码在使用的时候需要注意一点,就是预定义属性的边不能是封闭的圆边。如果是封闭的圆边会有错误,不能使用如下方法进行开发。

测量封闭圆边和面之间距离的方法,我会以后将其写出来。如果有单独需要的可以私聊我。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

喵桑さん

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值