这篇文章记录一下如何把实体作为数据导出,以及实体数据临时显示。
用过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