/// <summary> /// Загрузить данные из файла в контейнер /// </summary> /// <returns></returns> public static Settings Load() { try { var formatter = new XmlSerializer(typeof(Settings)); using (var fileStream = new FileStream(GetFilePath, FileMode.Open)) return((Settings)formatter.Deserialize(fileStream)); } catch (Exception e) { Acad.Alert($"Ошибка при загрузке настроек из файла {GetFilePath}", e); throw; //settings = new Settings //{ // //Tools = new List<Tool>(), // //TechProcessParams = new TechProcessParams(), // SawingLineTechOperationParams = new SawingTechOperationParams(), // SawingCurveTechOperationParams = new SawingTechOperationParams() //}; } //if (!settings.MachineSettingsList.Any()) //{ // settings.MachineSettingsList = new List<MachineSettings>() // { // new MachineSettings{ MachineType = MachineType.ScemaLogic, Tools = new List<Tool>(), MaxFrequency = 3000, ZSafety = 20 }, // new MachineSettings{ MachineType = MachineType.Donatoni, Tools = new List<Tool>(), MaxFrequency = 5000, ZSafety = 20 }, // new MachineSettings{ MachineType = MachineType.Krea, Tools = new List<Tool>(), MaxFrequency = 10000, ZSafety = 20 } // }; //} //if (settings.TactileTechProcessParams == null) //{ // settings.TactileTechProcessParams = Tactile.TactileTechProcessParams.GetDefault(); //} //return settings; }
public void BuildProcessing(ITechProcess techProcess) { try { Acad.Write($"Выполняется расчет обработки по техпроцессу {techProcess.Caption} ..."); var stopwatch = Stopwatch.StartNew(); Acad.DeleteObjects(techProcess.ToolpathObjectIds); Acad.DeleteExtraObjects(); Acad.Editor.UpdateScreen(); techProcess.BuildProcessing(); stopwatch.Stop(); Acad.Write($"Расчет обработки завершен {stopwatch.Elapsed}"); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { techProcess.DeleteProcessCommands(); if (ex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.UserBreak) { Acad.Write("Расчет прерван"); } else { Acad.Alert("Ошибка при выполнении расчета", ex); } } catch (Exception ex) { techProcess.DeleteProcessCommands(); Acad.Alert("Ошибка при выполнении расчета", ex); } Acad.Editor.UpdateScreen(); }
public static bool Validate(Tool tool, ToolType toolType) { string message = null; if (tool == null) { message = "Выберите инструмент"; } else if (tool.Type != toolType) { message = $"Выберите инструмент типа {toolType.GetDescription()}"; } else { if (tool.Type == ToolType.Disk) { if (tool.Diameter == 0) { message = $"Не указан диаметр инструмента"; } if (tool.Thickness.GetValueOrDefault() == 0) { message = $"Не указана толщина инструмента"; } } } if (message != null) { Acad.Alert(message); } return(message == null); }
public void SendProgram(ITechProcess techProcess) { if (techProcess.ProcessCommands == null) { Acad.Alert("Программа не сформирована"); return; } var fileName = Acad.SaveFileDialog(techProcess.Caption, Settings.GetMachineSettings(techProcess.MachineType.Value).ProgramFileExtension, techProcess.MachineType.ToString()); if (fileName != null) { try { var contents = techProcess.ProcessCommands.Select(p => p.GetProgrammLine(Settings.GetMachineSettings(techProcess.MachineType.Value).ProgramLineNumberFormat)).ToArray(); File.WriteAllLines(fileName, contents); Acad.Write($"Создан файл {fileName}"); if (techProcess.MachineType == MachineType.CableSawing) { CreateImitationProgramm(contents, fileName); } } catch (Exception ex) { Acad.Alert($"Ошибка при записи файла {fileName}", ex); } } }
public static void LoadAcadProps(object @object) { bool err = false; var properties = @object.GetType().GetProperties(); foreach (var prop in properties.Where(p => p.PropertyType == typeof(AcadObject))) { var acadObject = (AcadObject)prop.GetValue(@object); if (acadObject != null && !acadObject.LoadObject()) { prop.SetValue(@object, null); err = true; } } foreach (var prop in properties.Where(p => p.PropertyType == typeof(List <AcadObject>))) { var acadObjects = (List <AcadObject>)prop.GetValue(@object); if (acadObjects != null && !acadObjects.All(p => p.LoadObject())) { prop.SetValue(@object, null); err = true; } } if (err) { Acad.Alert("Используемые в техпроцессе объекты чертежа были удалены"); } }
public static void SaveTechProsess(CamDocument camDocument) { if (camDocument.Hash == 0 && !camDocument.TechProcessList.Any()) { return; } try { const int kMaxChunkSize = 127; using (var resultBuffer = new ResultBuffer()) { using (MemoryStream stream = new MemoryStream()) { BinaryFormatter formatter = new BinaryFormatter(); formatter.Serialize(stream, camDocument.TechProcessList); stream.Position = 0; for (int i = 0; i < stream.Length; i += kMaxChunkSize) { int length = (int)Math.Min(stream.Length - i, kMaxChunkSize); byte[] datachunk = new byte[length]; stream.Read(datachunk, 0, length); resultBuffer.Add(new TypedValue((int)DxfCode.Text, Convert.ToBase64String(datachunk))); } } var newHash = resultBuffer.ToString().GetHashCode(); if (newHash == camDocument.Hash) { return; } using (DocumentLock acLckDoc = Acad.ActiveDocument.LockDocument()) using (Transaction tr = Acad.Database.TransactionManager.StartTransaction()) using (DBDictionary dict = tr.GetObject(Acad.Database.NamedObjectsDictionaryId, OpenMode.ForWrite) as DBDictionary) { if (dict.Contains(DataKey)) { using (var xrec = tr.GetObject(dict.GetAt(DataKey), OpenMode.ForWrite) as Xrecord) xrec.Data = resultBuffer; } else { using (var xrec = new Xrecord { Data = resultBuffer }) { dict.SetAt(DataKey, xrec); tr.AddNewlyCreatedDBObject(xrec, true); //xrec.ObjectClosed += new ObjectClosedEventHandler(OnDataModified); } } tr.Commit(); } } } catch (Exception e) { Acad.Alert($"Ошибка при сохранении техпроцессов", e); } }
public static bool CheckNotNull(this object value, string field) { if (value == null) { Acad.Alert($"Не заполнено поле {field}"); } return(value != null); }
private static void LoadTools(object senser, EventArgs eventArgs) { string path = @"\\192.168.1.59\ssd\_CUST\Utensili.csv"; if (!File.Exists(path)) { Acad.Alert($"Не найден файл инструментов по адресу {path}"); return; } var lines = File.ReadAllLines(path) .Select(p => Array.ConvertAll(p.Split(';'), k => new { result = double.TryParse(k, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out var value), value }))
/// <summary> /// Сохранить данные в файл /// </summary> public static void Save() { var formatter = new XmlSerializer(typeof(Settings)); try { using (var fileStream = new FileStream(GetFilePath, FileMode.Create)) formatter.Serialize(fileStream, Instance); } catch (Exception e) { Acad.Alert($"Ошибка при сохранении настроек в файл {GetFilePath}", e); } }
public void BuildProcessing(ITechProcess techProcess) { if (!techProcess.TechOperations.Any()) { techProcess.CreateTechOperations(); } if (!techProcess.Validate() || techProcess.TechOperations.Any(p => p.Enabled && p.CanProcess && !p.Validate())) { return; } try { Acad.Write($"Выполняется расчет обработки по техпроцессу {techProcess.Caption} ..."); var stopwatch = Stopwatch.StartNew(); Acad.CreateProgressor($"Расчет обработки по техпроцессу \"{techProcess.Caption}\""); DeleteProcessing(techProcess); Acad.Editor.UpdateScreen(); techProcess.BuildProcessing(); stopwatch.Stop(); Acad.Write($"Расчет обработки завершен {stopwatch.Elapsed}"); } catch (Autodesk.AutoCAD.Runtime.Exception ex) { techProcess.DeleteProcessCommands(); if (ex.ErrorStatus == Autodesk.AutoCAD.Runtime.ErrorStatus.UserBreak) { Acad.Write("Расчет прерван"); } else { Acad.Alert("Ошибка при выполнении расчета", ex); } } catch (Exception ex) { techProcess.DeleteProcessCommands(); Acad.Alert("Ошибка при выполнении расчета", ex); } Acad.CloseProgressor(); Acad.Editor.UpdateScreen(); }
public void SendProgram(List <ProcessCommand> processCommands, ITechProcess techProcess) { if (processCommands == null || !processCommands.Any()) { Acad.Alert("Программа не сформирована"); return; } var fileName = Acad.SaveFileDialog(techProcess.Caption, _machineSettings[techProcess.MachineType.Value].ProgramFileExtension, techProcess.MachineType.ToString()); if (fileName != null) { try { var contents = processCommands?.Select(p => p.GetProgrammLine(_machineSettings[techProcess.MachineType.Value].ProgramLineNumberFormat)).ToArray(); File.WriteAllLines(fileName, contents); Acad.Write($"Создан файл {fileName}"); } catch (Exception ex) { Acad.Alert($"Ошибка при записи файла {fileName}", ex); } } }
/// <summary> /// Загрузить технологические процессы из файла чертежа /// </summary> public static void LoadTechProsess(CamDocument camDocument) { try { using (Transaction tr = Acad.Database.TransactionManager.StartTransaction()) using (DBDictionary dict = tr.GetObject(Acad.Database.NamedObjectsDictionaryId, OpenMode.ForRead) as DBDictionary) if (dict.Contains(DataKey)) { using (Xrecord xRecord = tr.GetObject(dict.GetAt(DataKey), OpenMode.ForRead) as Xrecord) using (ResultBuffer resultBuffer = xRecord.Data) using (MemoryStream stream = new MemoryStream()) { camDocument.Hash = resultBuffer.ToString().GetHashCode(); foreach (var typedValue in resultBuffer) { var datachunk = Convert.FromBase64String((string)typedValue.Value); stream.Write(datachunk, 0, datachunk.Length); } stream.Position = 0; var formatter = new BinaryFormatter { Binder = new MyBinder() }; camDocument.TechProcessList = (List <ITechProcess>)formatter.Deserialize(stream); } } if (camDocument.TechProcessList != null) { camDocument.TechProcessList.ForEach(p => p.Setup()); Acad.Write($"Загружены техпроцессы: {string.Join(", ", camDocument.TechProcessList.Select(p => p.Caption))}"); } } catch (Exception e) { Acad.Alert($"Ошибка при загрузке техпроцессов", e); } }
public static void HandleException(Exception exception) { Acad.Alert($"Ошибка: {exception.Message}"); File.WriteAllText($@"\\US-CATALINA3\public\Программы станок\CodeRepository\Logs\error_{DateTime.Now.ToString("yyyy-MM-dd_hh-m-ss")}.log", $"{Acad.ActiveDocument.Name}\n\n{exception}"); }