Example #1
0
        public List <Files.Info> Convert(SldWorks swApp, List <Files.Info> filesToConvert)
        {
            var ListForBatchAdd = new List <Files.Info>();
            var fileNameErr     = "";

            foreach (var item in filesToConvert)
            {
                fileNameErr = item.FullFilePath;
                edmTaskInstance.SetProgressPos(filesToProceed++, item.FullFilePath);

                Logger.Add($"Open in Solidworks : {item.FileName}");

                ModelDoc2 swModel = swApp.OpenDoc6(item.FullFilePath, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", 0, 0);

                // Запуск конвертации только для литовых деталей

                if (IsSheetMetalPart(swModel))
                {
                    Exception exOut = null;

                    var confArray = (object[])swModel.GetConfigurationNames();

                    bool isFix = false;
                    ExportDataToXmlSql(swApp, item, swModel, ref exOut, confArray, out isFix);
                    ConvertToDxf(swApp, item, swModel, ref exOut, confArray, isFix);

                    //   ConvertToEprt(swApp, ListForBatchAdd, item, swModel);
                }

                Logger.Add($"CloseDoc: {item.FileName}");
                swApp.CloseDoc(item.FullFilePath);
            }

            return(ListForBatchAdd);
        }
        public void runTask()//EdmCmdData[] data
        {
            List <string> file2Delete = new List <string>();

            try
            {
                //Keep the Task List status up to date
                inst.SetStatus(EdmTaskStatus.EdmTaskStat_Running);
                inst.SetProgressRange(100, 0, "Starting");

                string tempDir    = Path.GetTempPath() + @"AutoCadTaskConverter\";
                string dataName   = tempDir + @"proccessFile.txt";
                string scriptPath = tempDir + @"proccessScript.scr";
                string lispPath   = tempDir + @"proccessLisp.lsp";
                if (!Directory.Exists(tempDir))
                {
                    Directory.CreateDirectory(tempDir);
                }


                file2Delete.Add(dataName);
                file2Delete.Add(scriptPath);
                file2Delete.Add(lispPath);


                //collect data
                foreach (EdmCmdData item in data)
                {
                    if (item.mlLongData1 == (long)EdmObjectType.EdmObject_File)
                    {
                        var fileParm = new AutoCADParameters();
                        fileParm.FileId   = item.mlObjectID1;
                        fileParm.FolderId = item.mlObjectID2;
                        fileParm.FileName = item.mbsStrData1;

                        ///Custom code to output path
                        var path = Path.GetDirectoryName(fileParm.FileName).Split('\\');
                        try
                        {
                            if (path.Length > 3 && path[2].Equals("30 Projects"))
                            {
                                fileParm.OutputPath    = Path.Combine(path[0] + @"\", path[1], path[2], path[3], "03 PDFs", Path.GetFileNameWithoutExtension(fileParm.FileName) + ".pdf");
                                fileParm.OutputPathDXF = Path.Combine(path[0] + @"\", path[1], path[2], path[3], "04 DXFs", Path.GetFileNameWithoutExtension(fileParm.FileName) + ".dxf");
                            }
                            else
                            {
                                fileParm.OutputPath    = Path.ChangeExtension(fileParm.FileName, ".pdf");
                                fileParm.OutputPathDXF = Path.ChangeExtension(fileParm.FileName, ".dxf");
                            }
                        }
                        catch
                        {
                            fileParm.OutputPath    = Path.ChangeExtension(fileParm.FileName, ".pdf");
                            fileParm.OutputPathDXF = Path.ChangeExtension(fileParm.FileName, ".dxf");
                        }


                        var CADFile = vault.GetFileFromPath(fileParm.FileName, out IEdmFolder5 Cadfld);
                        if (CADFile == null)
                        {
                            break;
                        }

                        string OutputfilePath = tempDir + Path.GetFileNameWithoutExtension(fileParm.FileName) + ".pdf";

                        if (System.IO.File.Exists(OutputfilePath))
                        {
                            File.Delete(OutputfilePath);
                        }


                        inst.SetProgressPos(10, "Writting report");
                        ///Write json file ensure file is local
                        JsonSerializer serializer = new JsonSerializer();
                        using (StreamWriter sw = new StreamWriter(dataName, false))
                        {
                            using (JsonWriter writer = new JsonTextWriter(sw))
                            {
                                serializer.Serialize(writer, fileParm);
                            }
                        }
                        inst.SetProgressPos(15, "Launching application");


                        ///Launch autocad.
                        File.WriteAllText(scriptPath, string.Format(AutoCADConversion.Properties.Resources.AcadScript, lispPath.Replace(@"\", @"\\")));
                        File.WriteAllText(lispPath, string.Format(AutoCADConversion.Properties.Resources.ACADLisp, @"""" + OutputfilePath.Replace(@"\", @"\\") + @""""));

                        System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo
                        {
                            CreateNoWindow  = false,
                            UseShellExecute = true,
                            FileName        = CorePath,
                            WindowStyle     = System.Diagnostics.ProcessWindowStyle.Normal,
                            Arguments       = $"/i \"{fileParm.FileName}\" /s \"{scriptPath}\""
                        };

                        using (System.Diagnostics.Process exeProccess = System.Diagnostics.Process.Start(startInfo))
                        {
                            inst.SetProgressPos(20, "Launching application");
                            exeProccess?.WaitForExit();
                        }

                        //If Pdf has generated, then copy the file to the desitnation output
                        if (System.IO.File.Exists(OutputfilePath))
                        {
                            var allFiles = Directory.GetFiles(Path.GetDirectoryName(OutputfilePath), Path.GetFileNameWithoutExtension(OutputfilePath) + "*");
                            if (allFiles.Count() > 1)
                            {
                                List <string> files2Merge = new List <string>();
                                foreach (string f in allFiles)
                                {
                                    if (f.Equals(OutputfilePath, StringComparison.OrdinalIgnoreCase))
                                    {
                                        file2Delete.Add(OutputfilePath);
                                    }
                                    else if (Path.GetExtension(f).Equals(".dxf", StringComparison.OrdinalIgnoreCase))
                                    {
                                        file2Delete.Add(Path.ChangeExtension(OutputfilePath, ".dxf"));
                                    }
                                    else
                                    {
                                        files2Merge.Add(f);
                                        file2Delete.Add(f);
                                    }
                                }
                                if (files2Merge.Count > 0)
                                {
                                    files2Merge.Insert(0, OutputfilePath);
                                    PdfDocument finalDoc = new PdfDocument();
                                    PdfDocument.Merge(finalDoc, files2Merge.ToArray());
                                    File.Delete(OutputfilePath);
                                    finalDoc.Save(OutputfilePath);
                                    finalDoc.Close(true);
                                }
                            }
                            else
                            {
                                file2Delete.Add(OutputfilePath);
                                file2Delete.Add(Path.ChangeExtension(OutputfilePath, ".dxf"));
                            }

                            IEdmFile5 filePDF = CopyFileIntoVault(OutputfilePath, fileParm.OutputPath);
                            IEdmFile5 fileDXF = CopyFileIntoVault(Path.ChangeExtension(OutputfilePath, ".dxf"), fileParm.OutputPathDXF);


                            //If pdf is now in the vault
                            if (filePDF != null)
                            {
                                //Update variables, first get a copy of the files from the source
                                IEdmBatchListing4 var = (IEdmBatchListing4)vault.CreateUtility(EdmUtility.EdmUtil_BatchList);
                                var.AddFileCfg(fileParm.FileName, default(DateTime), 0);
                                var colsetNames = var.GetColumnSetNames();

                                //string atts = "";
                                //foreach (VariableMapperViewModel va in settings.Variables)
                                //{
                                //    if (va.MapVariable)
                                //        atts += "\n" + va.SourceVariable.Name;
                                //}


                                string         atts  = "\nDescription\nDescription2\nDescription3\nRevision\nDocument Number\nDrawnBy\nApprovedBy\nProject Name\nProject Number";
                                EdmListCol[]   cols  = default(EdmListCol[]);
                                EdmListFile2[] files = default(EdmListFile2[]);
                                var.CreateListEx(atts, (int)EdmCreateListExFlags.Edmclef_MayReadFiles, ref cols, null);
                                var.GetFiles2(ref files);

                                //Now copy the files to the variables.
                                IEdmBatchUpdate2 bUp = (IEdmBatchUpdate2)vault.CreateUtility(EdmUtility.EdmUtil_BatchUpdate);
                                foreach (EdmListFile2 getFile in files)
                                {
                                    for (int i = 0; i < cols.Length; i++)
                                    {
                                        bUp.SetVar(filePDF.ID, cols[i].mlVariableID, ((string[])getFile.moColumnData)[i], "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                        bUp.SetVar(fileDXF.ID, cols[i].mlVariableID, ((string[])getFile.moColumnData)[i], "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                    }
                                }
                                //Set SourcedState
                                bUp.SetVar(filePDF.ID, 171, "Released", "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                bUp.SetVar(fileDXF.ID, 171, "Released", "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                //Set AutomaticallyGenerated
                                bUp.SetVar(filePDF.ID, 158, 1, "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                bUp.SetVar(fileDXF.ID, 158, 1, "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                //foreach (EdmListFile2 getFile in files)
                                //{
                                //    for (int i = 0; i < cols.Length; i++)
                                //    {
                                //        VariableMapperViewModel va = settings.Variables.FirstOrDefault(t=> t.SourceVariable.Id == ((EdmListCol[])cols)[i].mlVariableID);
                                //        bUp.SetVar(Outfile.ID, va.DestinationVariable.Id , ((string[])getFile.moColumnData)[i], "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                //    }
                                //}

                                ////copy the static text
                                //foreach (VariableMapperViewModel va in settings.Variables)
                                //{
                                //    if (!va.MapVariable)
                                //        bUp.SetVar(Outfile.ID, va.DestinationVariable.Id, va.Value, "", (int)EdmBatchFlags.EdmBatch_AllConfigs);
                                //}

                                if (0 != bUp.CommitUpdate(out EdmBatchError2[] err))
                                {
                                    PDMAddin.log.Error("Variable errors");
                                }
                                //Check file in.
                                //IEdmFolder5 fldPDF = vault.GetFolderFromPath(Path.GetDirectoryName(fileParm.OutputPath));
                                // IEdmFolder5 fldDXF = vault.GetFolderFromPath(Path.GetDirectoryName(fileParm.OutputPathDXF));

                                filePDF.UnlockFile(0, "Automaticly created", (int)EdmUnlockFlag.EdmUnlock_IgnoreReferences);
                                fileDXF.UnlockFile(0, "Automaticly created", (int)EdmUnlockFlag.EdmUnlock_IgnoreReferences);
                            }
                        }
                    }
                }

                ///comlete

                inst.SetProgressPos(100, "finished");
                inst.SetStatus(EdmTaskStatus.EdmTaskStat_DoneOK);
            }
            catch (System.Runtime.InteropServices.COMException ex)
            {
                PDMAddin.log.Error(ex);
                inst.SetStatus(EdmTaskStatus.EdmTaskStat_DoneFailed, ex.ErrorCode, "The task failed!");
            }
            catch (Exception ex)
            {
                PDMAddin.log.Error(ex);
                inst.SetStatus(EdmTaskStatus.EdmTaskStat_DoneFailed, 0, "", "The task failed!");
            }
            finally
            {
                foreach (string f in file2Delete)
                {
                    if (File.Exists(f))
                    {
                        File.Delete(f);
                    }
                }
            }
        }
Example #3
0
        void OnTaskRun(ref EdmCmd poCmd, ref EdmCmdData[] ppoData)
        {
            var statusTask = true;

            edmTaskInstance = (IEdmTaskInstance)poCmd.mpoExtra;
            edmTaskInstance.SetStatus(EdmTaskStatus.EdmTaskStat_Running);
            List <Files.Info> filesToConvert = null;

            try
            {
                var vault = poCmd.mpoVault as IEdmVault7;

                InitializeErrorList();

                filesToProceed = 1;

                filesPdm  = Files.GetFilesToConvert(vault, ref poCmd, ref ppoData);
                FilesList = Batch.UpdateFileInfo(vault, filesPdm);

                filesToConvert = FilesList.Where(x => !x.ExistCutList | !x.ExistDXF /*| !x.ExistEdrawing*/).ToList();

                Logger.Add($@"\n\n{new string('-', 500)}\nTime {DateTime.Now}\nЗадача '{edmTaskInstance.TaskName}'
                            ID: {edmTaskInstance.ID}, для {filesToConvert.Count} элемента(ов), OnTaskRun ver.{currentVer}");

                edmTaskInstance.SetProgressRange(filesToConvert.Count, 0, $"Запуск задачи в {DateTime.Now}");

                GetAndDeleteUnnecesseryFromPdm(vault, filesToConvert);

                // Run SldWorks

                if (filesToConvert.Count != 0)
                {
                    KillSwAndStartNewProccess();

                    // Разбиваем лист на группы
                    var nChunks     = 1;
                    var totalLength = filesToConvert.Count();
                    var chunkLength = (int)Math.Ceiling(totalLength / (double)nChunks);
                    var partsToList = Enumerable.Range(0, chunkLength).Select(i => filesToConvert.Skip(i * nChunks).Take(nChunks).ToList()).ToList();

                    for (var i = 0; i < partsToList.Count; i++)
                    {
                        if (!ConvertChunk(vault, partsToList[i]))
                        {
                            statusTask = false;
                        }
                    }
                }
            }
            catch (COMException ex)
            {
                statusTask = false;
                this.ex    = ex;
                Logger.Add("OnTaskRun HRESULT = 0x" + ex.ErrorCode.ToString("X") + "; " + ex.StackTrace + "; \n" + ex.Message);
            }
            catch (Exception ex)
            {
                statusTask = false;
                this.ex    = ex;
                Logger.Add(ex.Message + ";\n" + ex.StackTrace);
            }
            finally
            {
                if (ListWithConvertErrors?.Count > 0)
                {
                    statusTask = false;
                    try
                    {
                        var message = "";
                        foreach (var item in ListWithConvertErrors)
                        {
                            message = message + "\n" + $"FileName - {item.FileName} FolderID - {item.FolderID} IdPDM - {item.IdPDM} Revision {item.Revision}";
                        }
                        Logger.Add(message);
                    }
                    catch (Exception)
                    {
                        Logger.Add("Ошибки при выгрузке данных об ошибке");
                    }
                }

                edmTaskInstance.SetProgressPos(filesToConvert.Count, "Выполнено, ID = " + edmTaskInstance.ID);
                edmTaskInstance.SetStatus(statusTask ? EdmTaskStatus.EdmTaskStat_DoneOK : EdmTaskStatus.EdmTaskStat_DoneFailed, GetHashCode());
            }
        }