public static bool SaveThisConfigDxf(string folderToSave, string configuration, SldWorks swApp, IModelDoc2 swModel, out string dxfFilePath, bool sheetmetal) { swModel.ShowConfiguration2(configuration); swModel.EditRebuild3(); if (swApp != null && sheetmetal) { List <PartBendInfo> list; Bends.Fix(swApp, out list, true); } var sDxfName = DxfName(swModel.GetTitle(), configuration) + ".dxf"; dxfFilePath = Path.Combine(folderToSave, sDxfName); // dxfFilePath = Path.Combine(@"C:\DXF", sDxfName); Directory.CreateDirectory(folderToSave); var 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; object varAlignment = dataAlignment; var swPart = (IPartDoc)swModel; int sheetmetalOptions = SheetMetalOptions(true, sheetmetal, false, false, false, true, false); //MessageBox.Show(sheetmetalOptions.ToString()); if (sheetmetal) { return(swPart.ExportToDWG(dxfFilePath, swModel.GetPathName(), sheetmetal ? 1 : 2, true, varAlignment, false, false, sheetmetalOptions, sheetmetal ? 0 : 3)); } else { return(swModel.SaveAs4(dxfFilePath, (int)swSaveAsVersion_e.swSaveAsCurrentVersion, (int)swSaveAsOptions_e.swSaveAsOptions_Silent, 0, 0)); } }
public static void Export(SldWorks swApp, int verToExport, int idPdm, bool closeDoc, out Exception exception) { exception = null; CurrentVersion = verToExport; //verToExport; #region Сбор информации по детали и сохранение разверток if (swApp == null) { try { swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application"); } catch (Exception) { swApp = new SldWorks { Visible = false }; } } IModelDoc2 swModel; try { swModel = swApp.IActiveDoc2; } catch (Exception) { swModel = swApp.IActiveDoc2; } if (swModel == null) { return; } var modelName = swModel.GetTitle(); try { IPartDoc partDoc; try { partDoc = (IPartDoc)((ModelDoc2)swModel); } catch (Exception) { return; } bool sheetMetal = false; try { sheetMetal = Part.IsSheetMetal(partDoc); } catch (Exception) { } if (!sheetMetal) { //swApp.CloseDoc(Path.GetFileName(swModel.GetPathName())); //13.10.2016 swApp.CloseAllDocuments(true); //swApp.ExitApp(); return; } var activeconfiguration = (Configuration)swModel.GetActiveConfiguration(); var swModelConfNames = (string[])swModel.GetConfigurationNames(); foreach (var name in from name in swModelConfNames let config = (Configuration)swModel.GetConfigurationByName(name) where config.IsDerived() select name) { swModel.DeleteConfiguration(name); } var swModelDocExt = swModel.Extension; var swModelConfNames2 = (string[])swModel.GetConfigurationNames(); // Проход по всем родительским конфигурациям var dataList = new List <DataToExport>(); var filePath = swModel.GetPathName(); foreach (var configName in from name in swModelConfNames2 let config = (Configuration)swModel.GetConfigurationByName(name) where !config.IsDerived() select name) { // swModel.ShowConfiguration2(configName); swModel.EditRebuild3(); AddDimentions(swModel, configName, out exception); var confiData = new DataToExport { Config = configName, FileName = filePath.Substring(filePath.LastIndexOf('\\') + 1), IdPdm = idPdm }; #region азгибание всех сгибов try { swModel.EditRebuild3(); List <PartBendInfo> list; Bends.Fix(swApp, out list, false); } catch (Exception) { // } #endregion swModel.ForceRebuild3(false); var swCustProp = swModelDocExt.CustomPropertyManager[configName]; string valOut; string materialId; swCustProp.Get4("MaterialID", true, out valOut, out materialId); if (string.IsNullOrEmpty(materialId)) { confiData.MaterialId = null; } else { confiData.MaterialId = int.Parse(materialId); } string paintX; swCustProp.Get4("Длина", true, out valOut, out paintX); if (string.IsNullOrEmpty(paintX)) { confiData.PaintX = null; } else { confiData.PaintX = double.Parse(paintX); } string paintY; swCustProp.Get4("Ширина", true, out valOut, out paintY); if (string.IsNullOrEmpty(paintY)) { confiData.PaintY = null; } else { confiData.PaintY = double.Parse(paintY); } string paintZ; swCustProp.Get4("Высота", true, out valOut, out paintZ); if (string.IsNullOrEmpty(paintZ)) { confiData.PaintZ = null; } else { confiData.PaintZ = double.Parse(paintZ); } string codMaterial; swCustProp.Get4("Код материала", true, out valOut, out codMaterial); confiData.КодМатериала = codMaterial; string материал; swCustProp.Get4("Материал", true, out valOut, out материал); confiData.Материал = материал; string обозначение; swCustProp.Get4("Обозначение", true, out valOut, out обозначение); confiData.Обозначение = обозначение; var swCustPropForDescription = swModelDocExt.CustomPropertyManager[""]; string наименование; swCustPropForDescription.Get4("Наименование", true, out valOut, out наименование); confiData.Наименование = наименование; //UpdateCustomPropertyListFromCutList const string длинаГраничнойРамкиName = @"Длина граничной рамки"; const string длинаГраничнойРамкиName2 = @"Bounding Box Length"; const string ширинаГраничнойРамкиName = @"Ширина граничной рамки"; const string ширинаГраничнойРамкиName2 = @"Bounding Box Width"; const string толщинаЛистовогоМеталлаNAme = @"Толщина листового металла"; const string толщинаЛистовогоМеталлаNAme2 = @"Sheet Metal Thickness";//Sheet Metal Thickness const string сгибыName = @"Сгибы"; const string сгибыName2 = @"Bends"; const string площадьПокрытияName = @"Площадь покрытия"; const string площадьПокрытияName2 = @"Bounding Box Area"; Feature swFeat2 = swModel.FirstFeature(); while (swFeat2 != null) { if (swFeat2.GetTypeName2() == "SolidBodyFolder") { // List<Bends.SolidWorksFixPattern.PartBendInfo> list; // Bends.Fix(swApp, out list, false); BodyFolder swBodyFolder = swFeat2.GetSpecificFeature2(); swFeat2.Select2(false, -1); swBodyFolder.SetAutomaticCutList(true); swBodyFolder.UpdateCutList(); Feature swSubFeat = swFeat2.GetFirstSubFeature(); while (swSubFeat != null) { if (swSubFeat.GetTypeName2() == "CutListFolder") { BodyFolder bodyFolder = swSubFeat.GetSpecificFeature2(); if (bodyFolder.GetCutListType() != (int)swCutListType_e.swSheetmetalCutlist) { goto m1; } swSubFeat.Select2(false, -1); bodyFolder.SetAutomaticCutList(true); bodyFolder.UpdateCutList(); var swCustPrpMgr = swSubFeat.CustomPropertyManager; swCustPrpMgr.Add("Площадь поверхности", "Текст", "\"SW-SurfaceArea@@@Элемент списка вырезов1@" + Path.GetFileName(swModel.GetPathName()) + "\""); string длинаГраничнойРамки; swCustPrpMgr.Get4(длинаГраничнойРамкиName, true, out valOut, out длинаГраничнойРамки); if (string.IsNullOrEmpty(длинаГраничнойРамки)) { swCustPrpMgr.Get4(длинаГраничнойРамкиName2, true, out valOut, out длинаГраничнойРамки); } swCustProp.Set(длинаГраничнойРамкиName, длинаГраничнойРамки); confiData.ДлинаГраничнойРамки = длинаГраничнойРамки; string ширинаГраничнойРамки; swCustPrpMgr.Get4(ширинаГраничнойРамкиName, true, out valOut, out ширинаГраничнойРамки); if (string.IsNullOrEmpty(ширинаГраничнойРамки)) { swCustPrpMgr.Get4(ширинаГраничнойРамкиName2, true, out valOut, out ширинаГраничнойРамки); } swCustProp.Set(ширинаГраничнойРамкиName, ширинаГраничнойРамки); confiData.ШиринаГраничнойРамки = ширинаГраничнойРамки; string толщинаЛистовогоМеталла; swCustPrpMgr.Get4(толщинаЛистовогоМеталлаNAme, true, out valOut, out толщинаЛистовогоМеталла); if (string.IsNullOrEmpty(толщинаЛистовогоМеталла)) { swCustPrpMgr.Get4(толщинаЛистовогоМеталлаNAme2, true, out valOut, out толщинаЛистовогоМеталла); } swCustProp.Set(толщинаЛистовогоМеталлаNAme, толщинаЛистовогоМеталла); confiData.ТолщинаЛистовогоМеталла = толщинаЛистовогоМеталла; string сгибы; swCustPrpMgr.Get4(сгибыName, true, out valOut, out сгибы); if (string.IsNullOrEmpty(сгибы)) { swCustPrpMgr.Get4(сгибыName2, true, out valOut, out сгибы); } swCustProp.Set(сгибыName, сгибы); confiData.Сгибы = сгибы; var myMassProp = swModel.Extension.CreateMassProperty(); var площадьПоверхности = Convert.ToString(Math.Round(myMassProp.SurfaceArea * 1000) / 1000); swCustProp.Set(площадьПокрытияName, площадьПоверхности); try { confiData.ПлощадьПокрытия = double.Parse(площадьПоверхности.Replace(".", ",")); } catch (Exception e) { exception = e; } } m1: swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } dataList.Add(confiData); } swModel.ShowConfiguration2(activeconfiguration.Name); ExportDataToXmlSql(swModel.GetTitle().ToUpper().Replace(".SLDPRT", ""), dataList, out exception); #endregion if (!closeDoc) { return; } var namePrt = swApp.IActiveDoc2.GetTitle().ToLower().Contains(".sldprt") ? swApp.IActiveDoc2.GetTitle() : swApp.IActiveDoc2.GetTitle() + ".sldprt"; swApp.CloseDoc(namePrt); } catch (Exception e) { exception = e; } finally { swApp.CloseDoc(Path.GetFileName(swModel.GetPathName())); } }
public static void GetCurrentConfigPartData(SldWorks swApp, int lastVer, int idPdm, bool closeDoc, bool fixBends, out List <DataToExport> dataList, out Exception exception) //public static void GetCurrentConfigPartData(SldWorks swApp, bool closeDoc, bool fixBends, out List<DataToExport> dataList, out Exception exception) { // Проход по всем родительским конфигурациям exception = null; dataList = new List <DataToExport>(); var swModel = swApp.IActiveDoc2; if (swModel == null) { return; } var configName = ((Configuration)swModel.GetActiveConfiguration()).Name; swModel.ShowConfiguration2(configName); swModel.EditRebuild3(); var swModelDocExt = swModel.Extension; var fileName = swModel.GetTitle().ToUpper().Replace(".SLDPRT", ""); AddDimentions(swModel, configName, out exception); var confiData = new DataToExport { Config = configName, FileName = fileName, IdPdm = idPdm, Version = lastVer }; #region азгибание всех сгибов fixBends = true; if (fixBends) { swModel.EditRebuild3(); List <PartBendInfo> list; Bends.Fix(swApp, out list, false); } #endregion swModel.ForceRebuild3(false); var swCustProp = swModelDocExt.CustomPropertyManager[configName]; string valOut; string materialId; // TO DO LOOK swCustProp.Get4("MaterialID", true, out valOut, out materialId); if (string.IsNullOrEmpty(materialId)) { confiData.MaterialId = null; } else { confiData.MaterialId = int.Parse(materialId); } string paintX; swCustProp.Get4("Длина", true, out valOut, out paintX); if (string.IsNullOrEmpty(paintX)) { confiData.PaintX = null; } else { confiData.PaintX = double.Parse(paintX); } string paintY; swCustProp.Get4("Ширина", true, out valOut, out paintY); if (string.IsNullOrEmpty(paintY)) { confiData.PaintY = null; } else { confiData.PaintY = double.Parse(paintY); } string paintZ; swCustProp.Get4("Высота", true, out valOut, out paintZ); if (string.IsNullOrEmpty(paintZ)) { confiData.PaintZ = null; } else { confiData.PaintZ = double.Parse(paintZ); } string codMaterial; swCustProp.Get4("Код материала", true, out valOut, out codMaterial); confiData.КодМатериала = codMaterial; string материал; swCustProp.Get4("Материал", true, out valOut, out материал); confiData.Материал = материал; string обозначение; swCustProp.Get4("Обозначение", true, out valOut, out обозначение); confiData.Обозначение = обозначение; var swCustPropForDescription = swModelDocExt.CustomPropertyManager[""]; string наименование; swCustPropForDescription.Get4("Наименование", true, out valOut, out наименование); confiData.Наименование = наименование; //UpdateCustomPropertyListFromCutList const string длинаГраничнойРамкиName = @"Длина граничной рамки"; const string длинаГраничнойРамкиName2 = @"Bounding Box Length"; const string ширинаГраничнойРамкиName = @"Ширина граничной рамки"; const string ширинаГраничнойРамкиName2 = @"Bounding Box Width"; const string толщинаЛистовогоМеталлаNAme = @"Толщина листового металла"; const string толщинаЛистовогоМеталлаNAme2 = @"Sheet Metal Thickness"; const string сгибыName = @"Сгибы"; const string сгибыName2 = @"Bends"; const string площадьПокрытияName = @"Площадь покрытия";//const string площадьПокрытияName2 = @"Bounding Box Area"; Feature swFeat2 = swModel.FirstFeature(); while (swFeat2 != null) { if (swFeat2.GetTypeName2() == "SolidBodyFolder") { BodyFolder swBodyFolder = swFeat2.GetSpecificFeature2(); swFeat2.Select2(false, -1); swBodyFolder.SetAutomaticCutList(true); swBodyFolder.UpdateCutList(); Feature swSubFeat = swFeat2.GetFirstSubFeature(); while (swSubFeat != null) { if (swSubFeat.GetTypeName2() == "CutListFolder") { BodyFolder bodyFolder = swSubFeat.GetSpecificFeature2(); if (bodyFolder.GetCutListType() != (int)swCutListType_e.swSheetmetalCutlist) { goto m1; } swSubFeat.Select2(false, -1); bodyFolder.SetAutomaticCutList(true); bodyFolder.UpdateCutList(); var swCustPrpMgr = swSubFeat.CustomPropertyManager; swCustPrpMgr.Add("Площадь поверхности", "Текст", "\"SW-SurfaceArea@@@Элемент списка вырезов1@" + Path.GetFileName(swModel.GetPathName()) + "\""); string длинаГраничнойРамки; swCustPrpMgr.Get4(длинаГраничнойРамкиName, true, out valOut, out длинаГраничнойРамки); if (string.IsNullOrEmpty(длинаГраничнойРамки)) { swCustPrpMgr.Get4(длинаГраничнойРамкиName2, true, out valOut, out длинаГраничнойРамки); } swCustProp.Set(длинаГраничнойРамкиName, длинаГраничнойРамки); confiData.ДлинаГраничнойРамки = длинаГраничнойРамки; string ширинаГраничнойРамки; swCustPrpMgr.Get4(ширинаГраничнойРамкиName, true, out valOut, out ширинаГраничнойРамки); if (string.IsNullOrEmpty(ширинаГраничнойРамки)) { swCustPrpMgr.Get4(ширинаГраничнойРамкиName2, true, out valOut, out ширинаГраничнойРамки); } swCustProp.Set(ширинаГраничнойРамкиName, ширинаГраничнойРамки); confiData.ШиринаГраничнойРамки = ширинаГраничнойРамки; string толщинаЛистовогоМеталла; swCustPrpMgr.Get4(толщинаЛистовогоМеталлаNAme, true, out valOut, out толщинаЛистовогоМеталла); if (string.IsNullOrEmpty(толщинаЛистовогоМеталла)) { swCustPrpMgr.Get4(толщинаЛистовогоМеталлаNAme2, true, out valOut, out толщинаЛистовогоМеталла); } swCustProp.Set(толщинаЛистовогоМеталлаNAme, толщинаЛистовогоМеталла); confiData.ТолщинаЛистовогоМеталла = толщинаЛистовогоМеталла; string сгибы; swCustPrpMgr.Get4(сгибыName, true, out valOut, out сгибы); if (string.IsNullOrEmpty(сгибы)) { swCustPrpMgr.Get4(сгибыName2, true, out valOut, out сгибы); } swCustProp.Set(сгибыName, сгибы); confiData.Сгибы = сгибы; var myMassProp = swModel.Extension.CreateMassProperty(); var площадьПоверхности = Convert.ToString(Math.Round(myMassProp.SurfaceArea * 1000) / 1000); swCustProp.Set(площадьПокрытияName, площадьПоверхности); try { confiData.ПлощадьПокрытия = double.Parse(площадьПоверхности.Replace(".", ",")); } catch (Exception e) { exception = e; } } m1: swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } dataList.Add(confiData); if (!closeDoc) { return; } var namePrt = swApp.IActiveDoc2.GetTitle().ToLower().Contains(".sldprt") ? swApp.IActiveDoc2.GetTitle() : swApp.IActiveDoc2.GetTitle() + ".sldprt"; swApp.CloseDoc(namePrt); }