예제 #1
0
        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);
        }
예제 #2
0
파일: Dxf.cs 프로젝트: radtek/PdmWebService
        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);
        }
예제 #3
0
        /// <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);
            }
        }
예제 #4
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()));
            }
        }
예제 #5
0
        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);
        }
예제 #6
0
        /// <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);
        }
예제 #7
0
        //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());
        }