SolidWorks钣金零件导出dxf排版拉丝方向C#二次开发
首先在钣金零件中(最好是导出展开图的面上)绘制3D草图,如下图所示,长边代表导出dxf图的X方向(拉丝方向),短边代表Y方向。将3D草图更改名字,方便使用程序获取,这里我写的是XYAXIS,并压缩起来(如果不压缩会被导出,乱线)。
代码如下:
//参考SOLIDWORKS API Help中的IExportToDWG2 Method (IPartDoc) 和 Export Part to DWG Example (C#)
//首先在钣金中绘制三维草图,长边代表导出dxf图的X方向,短边代表dxf图的Y方向,用于限定钣金拉丝方向(默认是X方向),防止排版错误
ModelDoc2 swModel = (ModelDoc2)swApp.ActiveDoc; //获取当前已打开的零件
if (swModel != null)
{
PartDoc swPart = (PartDoc)swModel;
string swModelName = swModel.GetPathName();
string swDxfName = swModelName.Substring(0, swModelName.Length - 6) + "dxf";
double[] dataAlignment = new double[12];
dataAlignment[0] = 0.0;
dataAlignment[1] = 0.0;
dataAlignment[2] = 0.0;
dataAlignment[3] = 1.0;
dataAlignment[4] = 0.0;
dataAlignment[5] = 0.0;
dataAlignment[6] = 0.0;
dataAlignment[7] = 1.0;
dataAlignment[8] = 0.0;
dataAlignment[9] = 0.0;
dataAlignment[10] = 0.0;
dataAlignment[11] = 1.0;
//Array[0], Array[1], Array[2] - XYZ coordinates of new origin
//Array[3], Array[4], Array[5] - coordinates of new x direction vector
//Array[6], Array[7], Array[8] - coordinates of new y direction vector
//判断XYAXIS,长边作为X轴,短的作为Y轴,用于限定拉丝方向
bool status = swModel.Extension.SelectByID2("XYAXIS", "SKETCH", 0, 0, 0, false, 0, null, 0);
if (status)
{
SelectionMgr swSelectionMgr = swModel.SelectionManager;
Feature swFeature = swSelectionMgr.GetSelectedObject6(1, -1);
Sketch swSketch = swFeature.GetSpecificFeature2();
var swSketchPoints = swSketch.GetSketchPoints2();//获取草图中的所有点
//用这三个点抓取直线,并判断长度,长边作为X轴,画3D草图的时候一次性画出两条线,不能分两次画出,否则会判断错误
SketchPoint p0 = swSketchPoints[0];//最先画的点
SketchPoint p1 = swSketchPoints[1];//作为坐标原点
SketchPoint p2 = swSketchPoints[2];//最后画的点
dataAlignment[0] = p1.X * 1000;
dataAlignment[1] = p1.Y * 1000;
dataAlignment[2] = p1.X * 1000;
double l1 = Math.Sqrt(Math.Pow(p0.X - p1.X, 2) + Math.Pow(p0.Y - p1.Y, 2) + Math.Pow(p0.Z - p1.Z, 2));
double l2 = Math.Sqrt(Math.Pow(p2.X - p1.X, 2) + Math.Pow(p2.Y - p1.Y, 2) + Math.Pow(p2.Z - p1.Z, 2));
if (l1 > l2)
{
dataAlignment[3] = p0.X * 1000 - p1.X * 1000;
dataAlignment[4] = p0.Y * 1000 - p1.Y * 1000;
dataAlignment[5] = p0.Z * 1000 - p1.Z * 1000;
dataAlignment[6] = p2.X * 1000 - p1.X * 1000;
dataAlignment[7] = p2.Y * 1000 - p1.Y * 1000;
dataAlignment[8] = p2.Z * 1000 - p1.Z * 1000;
}
else
{
dataAlignment[3] = p2.X * 1000 - p1.X * 1000;
dataAlignment[4] = p2.Y * 1000 - p1.Y * 1000;
dataAlignment[5] = p2.Z * 1000 - p1.Z * 1000;
dataAlignment[6] = p0.X * 1000 - p1.X * 1000;
dataAlignment[7] = p0.Y * 1000 - p1.Y * 1000;
dataAlignment[8] = p0.Z * 1000 - p1.Z * 1000;
}
}
object varAlignment = dataAlignment;
//Export sheet metal to a single drawing file将钣金零件导出单个dxf文件
//include flat-pattern geometry,倒数第二位数字1代表钣金展开,options = 1;
swPart.ExportToDWG2(swDxfName, swModelName, (int)swExportToDWG_e.swExportToDWG_ExportSheetMetal, true, varAlignment, false, false, 1, null);
}
else
{
toolStripStatusLabel1.Text = "Please open a part first.";
}
导出后的dxf图,长边被限定成X方向
本实例并未涉及如何连接Solidworks程序,连接Solidworks程序请参考Paine_Zeng 博主的文章
链接: C# SolidWorks 二次开发 API—连接solidworks.