SolidWorks钣金零件导出dxf排版拉丝方向C#二次开发

SolidWorks钣金零件导出dxf排版拉丝方向C#二次开发

首先在钣金零件中(最好是导出展开图的面上)绘制3D草图,如下图所示,长边代表导出dxf图的X方向(拉丝方向),短边代表Y方向。钣金零件将3D草图更改名字,方便使用程序获取,这里我写的是XYAXIS,并压缩起来(如果不压缩会被导出,乱线)。
3D草图
代码如下:

//参考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方向
dxf图
本实例并未涉及如何连接Solidworks程序,连接Solidworks程序请参考Paine_Zeng 博主的文章
链接: C# SolidWorks 二次开发 API—连接solidworks.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值