Ejemplo n.º 1
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()));
            }
        }
Ejemplo n.º 2
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);
        }