この記事では、エンティティをデータとしてエクスポートし、エンティティデータを一時的に表示する方法を記録します。
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