C# SolidWorks 二次开发 API---导入dxf/dwg到图纸或者零件草图

这篇博客介绍了如何使用SolidWorks API在3D模型或图纸中插入DWG/DXF文件,并对其进行定位。通过示例代码展示了如何设置单位、位置、比例和导入方法等参数,实现文件的导入。最后,提供了C#代码示例,将DXF文件导入到草图中,并进行了位置调整。
摘要由CSDN通过智能技术生成

有些情况下我们需要把以前的2D图纸借用到3D中,以前先画2D的时候就是把2D图画好之后 ,选中一些元素,直接Ctrl+C 然后在Solidworks中Ctrl+V就可以了。好像尺寸是没有的。 今天我们来看下如何找api,以及实现这个功能。路子其实都是相通的,会找一个,后面的都会了。
关键字? 这里很明显就是Dxf 或者dwg
来吧,开始搜索。
在这里插入图片描述
api帮助跳出来的第一个就是dxf/dwg files
下面有几个小主题,我们我们看下,和我们的目标比较近的就是import或者load .
在这里插入图片描述
在这里插入图片描述
而且两个方法中都有实例给我们参考:
如果看不懂,就可以复制百度翻译一把: 这样就可以继续研究了:
在这里插入图片描述
在这里插入图片描述
接下来的步骤就差不多了,挑一个自己喜欢的语言版本的实例,去测试效果。
如下面这个,就是其中一个例子:
在这里插入图片描述
下面是api中的源版

SOLIDWORKS API Help
Insert and Position DXF/DWG File in Drawing Example (C#)     
This example shows how to insert and position a DXF/DWG file in a drawing. 

//---------------------------------------------------------------------------
// Preconditions:
// 1. Open a drawing.
// 2. Replace DXF_file_path with the pathname of an existing DXF/DWG file.
// 3. Open the Immediate window.
//
// Postconditions:
// 1. Inserts the DXF/DWG file as per the specified import data.
// 2. Inspect the Immediate window.
//---------------------------------------------------------------------------
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
namespace InsertDXFDrawing_CSharp.csproj
{
    partial class SolidWorksMacro
    {

        public void Main()
        {
            const string sDwgFileName = "DXF_file_path";

            ModelDoc2 swModel = default(ModelDoc2);
            ModelView swModelView = default(ModelView);
            DrawingDoc swDraw = default(DrawingDoc);
            FeatureManager swFeatMgr = default(FeatureManager);
            Feature swFeat = default(Feature);
            Sketch swSketch = default(Sketch);
            View swView = default(View);
            double[] vPos = null;
            bool bRet = false;
            ImportDxfDwgData importData = default(ImportDxfDwgData);

            swModel = (ModelDoc2)swApp.ActiveDoc;
            swModelView = (ModelView)swModel.ActiveView;

            bRet = swModel.Extension.SelectByID2("Sheet1", "SHEET", 0.0, 0.0, 0, false, 0, null, 0);

            swDraw = (DrawingDoc)swModel;
            swFeatMgr = swModel.FeatureManager;
            importData = (ImportDxfDwgData)swApp.GetImportFileData(sDwgFileName);

            // Unit
            importData.set_LengthUnit("", (int)swLengthUnit_e.swINCHES);

            // Position
            bRet = importData.SetPosition("", (int)swDwgImportEntitiesPositioning_e.swDwgEntitiesCentered, 0, 0);

            // Sheet scale
            bRet = importData.SetSheetScale("", 1.0, 2.0);

            // Paper size
            bRet = importData.SetPaperSize("", (int)swDwgPaperSizes_e.swDwgPaperAsize, 0.0, 0.0);

            //Import method
            importData.set_ImportMethod("", (int)swImportDxfDwg_ImportMethod_e.swImportDxfDwg_ImportToExistingDrawing);

            // Import file with importData
            swFeat = swFeatMgr.InsertDwgOrDxfFile2(sDwgFileName, importData);
            swSketch = (Sketch)swFeat.GetSpecificFeature2();

            swView = (View)swDraw.GetFirstView();

            while ((swView != null))
            {
                if (object.ReferenceEquals(swSketch, swView.GetSketch()))
                {
                    break; 
                }
                swView = (View)swView.GetNextView();
            }

            vPos = (double[])swView.Position;

            Debug.Print("File = " + swModel.GetPathName());
            Debug.Print("  Sketch       = " + swFeat.Name);
            Debug.Print("  View         = " + swView.Name);
            Debug.Print("    Old Pos    = (" + vPos[0] * 1000.0 + ", " + vPos[1] * 1000.0 + ") mm");

            // Move to right
            vPos[0] = vPos[0] + 0.01;
            swView.Position = vPos;

            vPos = (double[])swView.Position;
            Debug.Print("    New Pos    = (" + vPos[0] * 1000.0 + ", " + vPos[1] * 1000.0 + ") mm");

            // Redraw
            double[] rect = null;
            rect = null;
            swModelView.GraphicsRedraw(rect);

        }

        public SldWorks swApp;

    }
} 

这个我们用到我们的实例中,需要做一些修改。
在这里插入图片描述

首选把 swApp 引用改为实体,如我们最近系列中一直使用的
SldWorks swApp = PStandAlone.GetSolidWorks();
然后就是基本照抄模式。

下面我的代码是另一个例子的C#版本。
在这里插入图片描述

 /// <summary>
        /// 导入dxf到 sketch
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnImpotDxfToSketch_Click(object sender, EventArgs e)
        {
            SldWorks swApp = PStandAlone.GetSolidWorks();

            //确保文件存在
            string filename = @"C:\Users\Public\Documents\SOLIDWORKS\SOLIDWORKS 2018\samples\tutorial\importexport\rainbow.DXF";

            ImportDxfDwgData importData = (ImportDxfDwgData)swApp.GetImportFileData(filename);

            importData.ImportMethod[""] = (int)swImportDxfDwg_ImportMethod_e.swImportDxfDwg_ImportToPartSketch;

            int longerrors = 0;

            var newDoc = swApp.LoadFile4(filename, "", importData, ref longerrors);

            //Gets
            Debug.Print("Part Sketch Gets:");
            Debug.Print("  Add constraints:   " + importData.AddSketchConstraints[""]);
            Debug.Print("  Merge points:      " + importData.GetMergePoints(""));
            Debug.Print("  Merge distance:    " + (importData.GetMergeDistance("") * 1000));
            Debug.Print("  Import dimensions: " + importData.ImportDimensions[""]);
            Debug.Print("  Import hatch:      " + importData.ImportHatch[""]);
            //Sets
            Debug.Print("Part Sketch Sets:");
            importData.AddSketchConstraints[""] = true;
            Debug.Print("  Add constraints:   " + importData.AddSketchConstraints[""]);
            var retVal = importData.SetMergePoints("", true, 0.000002);
            Debug.Print("  Merge points:      " + retVal);
            Debug.Print("  Merge distance:    " + (importData.GetMergeDistance("") * 1000));
            importData.ImportDimensions[""] = true;
            Debug.Print("  Import dimensions: " + importData.ImportDimensions[""]);
            importData.ImportHatch[""] = false;
            Debug.Print("  Import hatch:      " + importData.ImportHatch[""]);
        }

执行完之后 。solidworks中出现了传说中的彩虹!哈哈。。。
在这里插入图片描述
在这里插入图片描述
立即窗口中显示 了一些信息,后面有空继续研究!
代码已经上传.可在此下载源码:https://gitee.com/painezeng/CSharpAndSolidWorks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Paine Zeng

如果对有帮助,请我喝咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值