private IEnumerable <string[]> GetOperationDescriptions(NxOperationGroup operationGroup) { string chanellName = null; // заголовок для всех операций var list = new List <string[]>(7) { new[] { "У", "-", operationGroup.Name, operationGroup.Description, string.Empty, string.Empty, string.Empty } }; // сортируем по номеру канала var nxOperations = operationGroup.NxOperations.OrderBy(op => op.ChanellNumber); // группируем операции по инструменту var operationsGroup = nxOperations.GroupBy(op => op.CUTTER_TAG); foreach (var operations in operationsGroup) { foreach (var oper in operations) { //если коррекция включена, делаем проверку на правильную трассировку одного и того же инстр, входящего в массив if (arrForCheckToolCorrection.Contains(oper.CUTTER_TYPE) && oper.getCutComParams()) // try { cutComParambuilder(oper); } // catch(NXException e) // {throw;} } var operation = operations.FirstOrDefault(); if (operation == null) { continue; } // довольно сложно будем добавлять признак первого или второго канала для станка var s = operation.ChanellNumber == 1 ? "Первый канал" : (operation.ChanellNumber == 2 ? "Второй канал" : null); if (chanellName != s) { chanellName = s; list.Add(new[] { string.Empty, "-", string.Empty, chanellName, string.Empty, string.Empty, string.Empty }); } if (operation.CUTTER_TYPE == UFConstants.UF_CUTTER_TYPE_TURN || operation.CUTTER_TYPE == UFConstants.UF_CUTTER_TYPE_GROOVE || operation.CUTTER_TYPE == UFConstants.UF_CUTTER_TYPE_THREAD) { toolMap = operation.getToolListRegister(); // инициализируем мапу если выполняются условия } // получим описание операции в зависипости от типа инструмента switch (operation.CUTTER_TYPE) { case UFConstants.UF_CUTTER_TYPE_MILL: case UFConstants.UF_CUTTER_TYPE_BARREL: case UFConstants.UF_CUTTER_TYPE_T: //---- case 15: //добавил условие для Switch тип режущего инструмента == 15 //---- list.AddRange(GetDescription_UF_CUTTER_TYPE_MILL(operations)); break; case UFConstants.UF_CUTTER_TYPE_DRILL: list.AddRange(GetDescription_UF_CUTTER_TYPE_DRILLL(operations)); break; case UFConstants.UF_CUTTER_TYPE_TURN: list.AddRange(GetDescription_UF_CUTTER_TYPE_TURN(operations)); break; case UFConstants.UF_CUTTER_TYPE_GROOVE: list.AddRange(GetDescription_UF_CUTTER_TYPE_GROOVE(operations)); break; case UFConstants.UF_CUTTER_TYPE_THREAD: list.AddRange(GetDescription_UF_CUTTER_TYPE_THREAD(operations)); break; case UFConstants.UF_CUTTER_TYPE_FORM: list.AddRange(GetDescription_UF_CUTTER_TYPE_FORM(operations)); break; case UFConstants.UF_CUTTER_TYPE_SOLID: list.AddRange(GetDescription_UF_CUTTER_TYPE_SOLID(operations)); break; } // для всех инструментов list.AddRange(GetAdditionalOperationDescriptions(operation)); // получим атрибуты инструмента list.AddRange(GetToolAttributes(operation)); } return(list); }
private IEnumerable <string[]> GetOperationDescriptions(NxOperationGroup operationGroup) { string chanellName = null; // заголовок для всех операций var list = new List <string[]>(7) { new[] { "У", "-", operationGroup.Name, operationGroup.Description, string.Empty, string.Empty, string.Empty } }; // сортируем по номеру канала var nxOperations = operationGroup.NxOperations.OrderBy(op => op.ChanellNumber); // группируем операции по инструменту var operationsGroup = nxOperations.GroupBy(op => op.CUTTER_TAG); foreach (var operations in operationsGroup) { var operation = operations.FirstOrDefault(); if (operation == null) { continue; } // довольно сложно будем добавлять признак первого или второго канала для станка var s = operation.ChanellNumber == 1 ? "Первый канал" : (operation.ChanellNumber == 2 ? "Второй канал" : null); if (chanellName != s) { chanellName = s; list.Add(new[] { string.Empty, "-", string.Empty, chanellName, string.Empty, string.Empty, string.Empty }); } // получим описание операции в зависипости от типа инструмента switch (operation.CUTTER_TYPE) { case UFConstants.UF_CUTTER_TYPE_MILL: case UFConstants.UF_CUTTER_TYPE_BARREL: case UFConstants.UF_CUTTER_TYPE_T: list.AddRange(GetDescription_UF_CUTTER_TYPE_MILL(operations)); break; case UFConstants.UF_CUTTER_TYPE_DRILL: list.AddRange(GetDescription_UF_CUTTER_TYPE_DRILLL(operations)); break; case UFConstants.UF_CUTTER_TYPE_TURN: list.AddRange(GetDescription_UF_CUTTER_TYPE_TURN(operations)); break; case UFConstants.UF_CUTTER_TYPE_GROOVE: list.AddRange(GetDescription_UF_CUTTER_TYPE_GROOVE(operations)); break; case UFConstants.UF_CUTTER_TYPE_THREAD: list.AddRange(GetDescription_UF_CUTTER_TYPE_THREAD(operations)); break; case UFConstants.UF_CUTTER_TYPE_FORM: list.AddRange(GetDescription_UF_CUTTER_TYPE_FORM(operations)); break; case UFConstants.UF_CUTTER_TYPE_SOLID: list.AddRange(GetDescription_UF_CUTTER_TYPE_SOLID(operations)); break; } // для всех инструментов list.AddRange(GetAdditionalOperationDescriptions(operation)); // получим атрибуты инструмента list.AddRange(GetToolAttributes(operation)); } return(list); }