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); }
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())); } }
/// <summary> /// Returns sheet metal cut list by configuration name /// </summary> /// <param name="configuratuinName"></param> /// <param name="SwModel"></param> /// <returns></returns> public static DataToExport GetDataToExport(ModelDoc2 swModel) { solidWorksDocument = swModel; DataToExport dataToExport = new DataToExport(); string valOut; const string BoundingBoxLengthRu = @"Длина граничной рамки"; // rename, change number to eng/rus const string BoundingBoxLengthEng = @"Bounding Box Length"; const string BoundingBoxWidthRu = @"Ширина граничной рамки"; const string BoundingBoxWidthEng = @"Bounding Box Width"; const string SheetMetalThicknessRu = @"Толщина листового металла"; const string SheetMetalThicknessEng = @"Sheet Metal Thickness"; const string BendsRu = @"Сгибы"; const string BendsEng = @"Bends"; Feature swFeat2 = solidWorksDocument.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") { //MessageObserver.Instance.SetMessage("GetTypeName2: " + swSubFeat.GetTypeName2() + "; swSubFeat.Name " + swSubFeat.Name); BodyFolder bodyFolder = swSubFeat.GetSpecificFeature2(); if (bodyFolder.GetCutListType() != (int)swCutListType_e.swSheetmetalCutlist) { goto m1; } swSubFeat.Select2(false, -1); bodyFolder.SetAutomaticCutList(true); bodyFolder.UpdateCutList(); var swCustProp = swSubFeat.CustomPropertyManager; string tempOutBoundingBoxLength; swCustProp.Get4(BoundingBoxLengthRu, true, out valOut, out tempOutBoundingBoxLength); if (string.IsNullOrEmpty(tempOutBoundingBoxLength)) { swCustProp.Get4(BoundingBoxLengthEng, true, out valOut, out tempOutBoundingBoxLength); } dataToExport.WorkpieceX = SafeConvertToDecemal(tempOutBoundingBoxLength);//Convert.ToDecimal(tempOutBoundingBoxLength.Replace(".", ",")); string ширинаГраничнойРамки; swCustProp.Get4(BoundingBoxWidthRu, true, out valOut, out ширинаГраничнойРамки); if (string.IsNullOrEmpty(ширинаГраничнойРамки)) { swCustProp.Get4(BoundingBoxWidthEng, true, out valOut, out ширинаГраничнойРамки); } dataToExport.WorkpieceY = SafeConvertToDecemal(ширинаГраничнойРамки);//Convert.ToDecimal(ширинаГраничнойРамки.Replace(".", ",")); string толщинаЛистовогоМеталла; swCustProp.Get4(SheetMetalThicknessRu, true, out valOut, out толщинаЛистовогоМеталла); if (string.IsNullOrEmpty(толщинаЛистовогоМеталла)) { swCustProp.Get4(SheetMetalThicknessEng, true, out valOut, out толщинаЛистовогоМеталла); } dataToExport.Thickness = SafeConvertToDecemal(толщинаЛистовогоМеталла);//Convert.ToDecimal(толщинаЛистовогоМеталла.Replace(".", ","), ); string сгибы; swCustProp.Get4(BendsRu, true, out valOut, out сгибы); if (string.IsNullOrEmpty(сгибы)) { swCustProp.Get4(BendsEng, true, out valOut, out сгибы); } // swCustProp.Set(BendsRu, сгибы); dataToExport.Bend = Convert.ToInt32(сгибы); dataToExport.PaintX = GetDimentions()[0]; dataToExport.PaintY = GetDimentions()[1]; dataToExport.PaintZ = GetDimentions()[2]; dataToExport.SurfaceArea = GetSurfaceArea(); } m1: swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } solidWorksDocument = null; return(dataToExport); }