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); } } } }
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()); } }