C# SolidWorks 二次开发 API---实体(body)数据导出与导入显示

这篇文章记录一下如何把实体作为数据导出,以及实体数据临时显示。
用过solidworks的人都知道,在做特征的时候有个预览。如下图:
其实这个透明黄色的就是一个临时实体,这样可以更直观的显示出来结果。
在这里插入图片描述
这个操作是用代码控制实体的生成的,由于这只是一个长方形,用Modeler直接画出来,但是如果一个很复杂的实体,想要显示出来就比较麻烦了。所以才有了今天这个文章。

下面讲一下示例:

  • 导出功能:导出一个小球实体到文件
  • 导入功能: 在鼠标选中的地方,显示小球。
    在这里插入图片描述

导出实体

我们可以把之前做好一实体导出为一个文件,这样也可以在代码中作为资源在后续的程序中使用,当然肯定没有参数了。

在这里插入图片描述

        /// <summary>
        /// 导出选中的实体到文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnExportBodyToFile_Click(object sender, EventArgs e)
        {
    
    
            SldWorks swApp = PStandAlone.GetSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            // SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;
            //注意,选中实体才能导出。(可以使用过滤工具选择)

            //指定导出记录
            BodyHelper.ExportBodyToFile(@"D:\smallball.dat");

            MessageBox.Show("导出小球成功!");
        }

临时显示实体

显示实体能用在哪里,需要自己考虑一下。我就不细说了,做独立插件时,有预览需求时,还是用的比较多的。

在零件是选择一个面之后 点击 按钮,就会在鼠标点击 的点那里显示 一个小球。
代码中可以设置,这个临时的能不能显示 ,而且可以用这个实体做出一个导入的实体特征进来,可以根据实际情况扩展。
这里面涉及到的内容还不少,尤其是变换的问题。
在这里插入图片描述

        /// <summary>
        /// 从文件导出实体并显示 (在鼠标位置显示小球)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnShowTemplateBody_Click_1(object sender, EventArgs e)
        {
    
    
            SldWorks swApp = PStandAlone.GetSolidWorks();

            ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc;

            SelectionMgr swSelMgr = (SelectionMgr)swModel.SelectionManager;

            //var selectFace = (Face2)swSelMgr.GetSelectedObject6(1, -1);

            var mousePoint = (double[])swSelMgr.GetSelectionPoint2(1, -1);

            //var faceNormal = selectFace.Normal;

            //var faceNormalDou = (double[])faceNormal;

            if (swModel != null)
            {
    
    
                IBody2 body = BodyHelper.LoadBodyFromFile(swApp, @"D:\smallball.dat");

                if (body != null)
                {
    
    
                    Color color = Color.Yellow; //System.Drawing.ColorTranslator.FromHtml(colorString); 如果是字符串可以通过这转

                    int colorInt = color.ToArgb();
                    int red2 = colorInt >> 16 & 255;
                    int green2 = colorInt >> 8 & 255;
                    int blue2 = colorInt & 255;
                    int refcolor2 = (int)blue2 << 16 | (int)green2 << 8 | (int)red2;
                    object vXform = null;
                    double[] Xform = new double[16];
                    Xform[0] = 1; //旋转
                    Xform[1] = 0.0;
                    Xform[2] = 0.0;

                    Xform[3] = 0;  //旋转
                    Xform[4] = 1;
                    Xform[5] = 0;

                    Xform[6] = 0; //旋转
                    Xform[7] = 0;
                    Xform[8] = 1;

                    Xform[9] = mousePoint[0]; //平移 x
                    Xform[10] = mousePoint[1]; //平移 y
                    Xform[11] = mousePoint[2]; //平移 z

                    Xform[12] = 1.0; //比例因子
                    Xform[13] = 0.0; //未使用
                    Xform[14] = 0.0;//未使用
                    Xform[15] = 0.0;//未使用

                    vXform = Xform;

                    var MathUtility = (MathUtility)swApp.GetMathUtility();

                    var MathXform = (MathTransform)MathUtility.CreateTransform(vXform);

                    //var swOrigPt = MathUtility.CreatePoint(new double[] { 0.094, 0.142, 0.012 });

                    //这里可以通过轴来创建变换,相当于坐标系的配合
                    //var swAxisVerX = (MathVector)MathUtility.CreateVector(new double[] { 0, 0, -1 });
                    //var swAxisVerY = (MathVector)MathUtility.CreateVector(new double[] { 0, 1, 0 });
                    //var swAxisVerZ = (MathVector)MathUtility.CreateVector(faceNormalDou);
                    //var swAxisVerM = (MathVector)MathUtility.CreateVector(new double[] { 0.094, 0.142, 0.012 });
                    // var MathXform = (MathTransform)MathUtility.ComposeTransform(swAxisVerX, swAxisVerY, swAxisVerZ, swAxisVerM, 1);

                    //这是通过轴 与角度 创建变换
                    //var MathXform = (MathTransform)MathUtility.CreateTransformRotateAxis(swOrigPt, swAxisVerX, Math.PI*0.5);

                    body.ApplyTransform(MathXform);

                    //显示实体,并设置为可选中。
                    body.Display3(swModel, refcolor2, (int)swTempBodySelectOptions_e.swTempBodySelectable);

                    body.CreateBaseFeature(body); //把实体变成导入特征。

                    //vb.net 写法  body.Display3(swModel, Information.RGB(255, 255, 0), swTempBodySelectOptions_e.swTempBodySelectOptionNone);
                }
                else
                    throw new Exception("失败了!");
            }
            else
                throw new Exception("请打开一个文件");
        }

完整代码请从这里下载:
https://gitee.com/painezeng/CSharpAndSolidWorks

https://github.com/painezeng/CSharpAndSolidWorks

猜你喜欢

转载自blog.csdn.net/zengqh0314/article/details/109159032