C# SolidWorks 二次开发 API---导入dxf/dwg到图纸或者零件草图
有些情况下我们需要把以前的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
                    
                
                
            
        
浙公网安备 33010602011771号