static string GetFromCutlist(IModelDoc2 swModel, string property) { var propertyValue = ""; try { 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(); swSubFeat.Select2(false, -1); bodyFolder.SetAutomaticCutList(true); bodyFolder.UpdateCutList(); var swCustPrpMgr = swSubFeat.CustomPropertyManager; //swCustPrpMgr.Add("Площадь поверхности", "Текст", "\"SW-SurfaceArea@@@Элемент списка вырезов1@ВНС-901.81.002.SLDPRT\""); string valOut; swCustPrpMgr.Get4(property, true, out valOut, out propertyValue); } swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } } catch (Exception exception) { MessageBox.Show(exception.ToString()); } return(propertyValue); }
static string GetFromCutlist(IModelDoc2 swModel, string property) { string propertyValue = null; try { 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(); swSubFeat.Select2(false, -1); bodyFolder.SetAutomaticCutList(true); bodyFolder.UpdateCutList(); var swCustPrpMgr = swSubFeat.CustomPropertyManager; string valOut; swCustPrpMgr.Get4(property, true, out valOut, out propertyValue); } swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } } catch (Exception) { // } return(propertyValue); }
/// <summary> /// 天花子装配导出DXF图纸 /// </summary> /// <param name="swApp"></param> /// <param name="tree"></param> /// <param name="dxfPath"></param> /// <param name="userId"></param> public void CeilingAssyToDxf(SldWorks swApp, SubAssy subAssy, string dxfPath, int userId) { swApp.CommandInProgress = true; List <CeilingCutList> celingCutLists = new List <CeilingCutList>(); string assyPath = subAssy.SubAssyPath; if (assyPath.Length == 0) { return; } try { //打开模型 ModelDoc2 swModel = swApp.OpenDoc6(assyPath, (int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings) as ModelDoc2; if (swModel == null) { MessageBox.Show("模型不存在,请认真检查", "模型不存在"); return; } string modulePath = dxfPath + @"\" + subAssy.SubAssyName; if (!Directory.Exists(modulePath)) { Directory.CreateDirectory(modulePath); } swModel.ForceRebuild3(true); AssemblyDoc swAssy = swModel as AssemblyDoc; //获取所有零部件集合 var compList = swAssy.GetComponents(false); //遍历集合中的所有零部件对象 foreach (var swComp in compList) { //判断零件是否被压缩,不显示,封套,零件名称不是以sldprt或SLDPRT结尾 if (swComp.Visible == 1 && !swComp.IsEnvelope() && !swComp.IsSuppressed() && (swComp.GetPathName().EndsWith(".sldprt") || swComp.GetPathName().EndsWith(".SLDPRT"))) { Component2 swParentComp = swComp.GetParent(); //总装没有父装配体 if (swParentComp == null) { ConfigurationManager swConfigMgr = swModel.ConfigurationManager; Configuration swConfig2 = swConfigMgr.ActiveConfiguration; swParentComp = swConfig2.GetRootComponent3(true); } //判断父装配体是否可视,并且不封套 if (swParentComp.Visible == 1 && !swParentComp.IsEnvelope() && !swComp.IsSuppressed()) { PartDoc swPart = swComp.GetModelDoc2(); //获取文档中的额Body对象集合 var bodyList = swPart.GetBodies2(0, false); //遍历集合中的所有Body对象,判断是否为钣金 foreach (var swBody in bodyList) { //如果是钣金则将零件地址添加到列表中 if (swBody.IsSheetMetal()) { if (sheetMetaDic.ContainsKey(swComp.GetPathName())) { sheetMetaDic[swComp.GetPathName()] += 1; } else { sheetMetaDic.Add(swComp.GetPathName(), 1); } } } } } } //关闭装配体零件 swApp.CloseDoc(assyPath); //遍历钣金零件 foreach (var sheetMeta in sheetMetaDic) { //打开模型 ModelDoc2 swPart = swApp.OpenDoc6(sheetMeta.Key, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings) as ModelDoc2; Feature swFeat = (Feature)swPart.FirstFeature(); CeilingCutList cutRecord = new CeilingCutList() { SubAssyId = subAssy.SubAssyId, Quantity = sheetMeta.Value, UserId = userId }; while (swFeat != null) { var suppStatus = swFeat.IsSuppressed2((int)swInConfigurationOpts_e.swThisConfiguration, null); if (suppStatus[0] == false && swFeat.GetTypeName() == "SolidBodyFolder") { BodyFolder swBodyFolder = (BodyFolder)swFeat.GetSpecificFeature2(); swBodyFolder.SetAutomaticCutList(true); swBodyFolder.SetAutomaticUpdate(true); Feature SubFeat = swFeat.GetFirstSubFeature(); if (SubFeat != null) { Feature ownerFeature = SubFeat.GetOwnerFeature(); BodyFolder swSubBodyFolder = ownerFeature.GetSpecificFeature2(); swSubBodyFolder.UpdateCutList(); string val = string.Empty; string valout = string.Empty; bool wasResolved = false; bool linkToProp = false; SubFeat.CustomPropertyManager.Get4("Bounding Box Length", false, out val, out valout); cutRecord.Length = Convert.ToDecimal(valout); SubFeat.CustomPropertyManager.Get4("Bounding Box Width", false, out val, out valout); cutRecord.Width = Convert.ToDecimal(valout); SubFeat.CustomPropertyManager.Get4("Sheet Metal Thickness", false, out val, out valout); cutRecord.Thickness = Convert.ToDecimal(valout); SubFeat.CustomPropertyManager.Get4("Material", false, out val, out valout); cutRecord.Materials = valout; swPart.GetActiveConfiguration().CustomPropertyManager.Get6("Description", false, out valout, out val, out wasResolved, out linkToProp); cutRecord.PartDescription = valout; cutRecord.PartNo = swPart.GetTitle().Substring(0, swPart.GetTitle().Length - 7); celingCutLists.Add(cutRecord);//将信息添加到集合中 } } swFeat = swFeat.GetNextFeature(); } PartToDxf(swApp, swPart, modulePath); //关闭零件 swApp.CloseDoc(sheetMeta.Key); } } catch (Exception ex) { throw new Exception(assyPath + "导图过程发生异常,详细:" + ex.Message); } finally { sheetMetaDic.Clear(); swApp.CloseDoc(assyPath); //关闭,很快 swApp.CommandInProgress = false; //及时关闭外部命令调用,否则影响SolidWorks的使用 } //基于事务ceilingCutLists提交SQLServer if (celingCutLists.Count == 0) { return; } try { if (objCeilingCutListService.ImportCutList(celingCutLists)) { celingCutLists.Clear(); } } catch (Exception ex) { throw new Exception("Cutlist导入数据库失败" + ex.Message); } }
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); }
/// <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); }
//public static IEdmObject5 GetObject(IEdmVault12 vault, int objectId, EdmObjectType objectType) //{ // try // { // var obj = vault.GetObject(objectType, objectId); // return obj; // } // catch (Exception e) // { // Console.WriteLine("Ошибка в процедуре public static IEdmObject5 GetObject {0}:", e); // } // foreach (EdmObjectType enumObjectType in Enum.GetValues(typeof(EdmObjectType))) // { // try // { // var obj = vault.GetObject(enumObjectType, objectId); // return obj; // } // catch (Exception e) // { // Console.WriteLine("Ошибка в процедуре public static IEdmObject5 GetObject {0}:", e); // } // } // //nothing found // return null; //} static void CreateFlattPatternUpdateCutlist(string filePath, bool savedxf) { //var vault1 = new EdmVault5(); //IEdmFolder5 oFolder; //vault1.LoginAuto("Vents-PDM", 0); //var edmFile5 = vault1.GetFileFromPath("D:\\Vents-PDM\\Библиотека проектирования\\Templates\\flattpattern.drwdot", out oFolder); //edmFile5.GetFileCopy(0, 0, oFolder.ID, (int)EdmGetFlag.EdmGet_Simple); try { SwApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application"); } catch (Exception) { SwApp = new SldWorks { Visible = true }; } if (SwApp == null) { return; } var swModel = SwApp.OpenDoc6(filePath, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", 0, 0); SwApp.SetUserPreferenceStringValue(((int)(swUserPreferenceStringValue_e.swFileLocationsDocumentTemplates)), "D:\\Vents-PDM\\Библиотека проектирования\\Templates\\"); try { if (!IsSheetMetalPart((IPartDoc)swModel)) { SwApp.CloseDoc(swModel.GetTitle()); return; } } catch (Exception) { 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>(); foreach (var configName in from name in swModelConfNames2 let config = (Configuration)swModel.GetConfigurationByName(name) where !config.IsDerived() select name) { swModel.ShowConfiguration2(configName); swModel.EditRebuild3(); var confiData = new DataToExport { Config = configName }; var swDraw = (DrawingDoc)SwApp.NewDrawing2((int)swDwgTemplates_e.swDwgTemplateA0size, "D:\\Vents-PDM\\Библиотека проектирования\\Templates\\flattpattern.drwdot",// "D:\\Vents-PDM\\Библиотека проектирования\\Templates\\flattpattern.drwdot", (int)swDwgPaperSizes_e.swDwgPaperA0size, 0.841, 0.594); swDraw.CreateFlatPatternViewFromModelView3(swModel.GetPathName(), configName, 0.841 / 2, 0.594 / 2, 0, true, true); swModel.ForceRebuild3(false); var swCustProp = swModelDocExt.CustomPropertyManager[configName]; string valOut; 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.Наименование = наименование; if (savedxf) { var newDxf = (IModelDoc2)swDraw; SwApp.CloseDoc(newDxf.GetPathName()); } else { var newDxf = (IModelDoc2)swDraw; SwApp.CloseDoc(newDxf.GetTitle()); } //UpdateCustomPropertyListFromCutList const string длинаГраничнойРамкиName = "Длина граничной рамки"; const string ширинаГраничнойРамкиName = "Ширина граничной рамки"; const string толщинаЛистовогоМеталлаNAme = "Толщина листового металла"; const string сгибыName = "Сгибы"; const string площадьПокрытияName = "Площадь покрытия"; 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(); 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 длинаГраничнойРамки); swCustProp.Set(длинаГраничнойРамкиName, длинаГраничнойРамки); confiData.ДлинаГраничнойРамки = длинаГраничнойРамки; string ширинаГраничнойРамки; swCustPrpMgr.Get4(ширинаГраничнойРамкиName, true, out valOut, out ширинаГраничнойРамки); swCustProp.Set(ширинаГраничнойРамкиName, ширинаГраничнойРамки); confiData.ШиринаГраничнойРамки = ширинаГраничнойРамки; string толщинаЛистовогоМеталла; swCustPrpMgr.Get4(толщинаЛистовогоМеталлаNAme, true, out valOut, out толщинаЛистовогоМеталла); swCustProp.Set(толщинаЛистовогоМеталлаNAme, толщинаЛистовогоМеталла); confiData.ТолщинаЛистовогоМеталла = толщинаЛистовогоМеталла; string сгибы; swCustPrpMgr.Get4(сгибыName, true, out valOut, out сгибы); swCustProp.Set(сгибыName, сгибы); confiData.Сгибы = сгибы; string площадьПоверхности; swCustPrpMgr.Get4("Площадь поверхности", true, out valOut, out площадьПоверхности); swCustProp.Set(площадьПокрытияName, площадьПоверхности); confiData.ПлощадьПокрытия = площадьПоверхности; } swSubFeat = swSubFeat.GetNextFeature(); } } swFeat2 = swFeat2.GetNextFeature(); } dataList.Add(confiData); } swModel.ShowConfiguration2(activeconfiguration.Name); //GetXml(swModel); ExportDataToXmlSql(swModel, dataList); SwApp.CloseDoc(swModel.GetTitle()); }