private void LoadCutGroupData(CutGroup g) { load = false; channelCtr1.CH = cutGroupData.CH1; channelCtr2.CH = cutGroupData.CH2; cutDir.SelectedIndex = (int)g.CutDir; sideEdit.Value = g.PreWidth; firmTicknessEdit.Value = g.FilmHeight; cutModeList.SelectedIndex = (int)g.CutMode; leaveEdit.Value = g.ReDepth; secLeaveEdit.Value = g.ReDepth2; backSpeedEdit.Value = g.BackSpeed; cutOrder.SelectedIndex = g.Order ? 0 : 1; spdSpeedEdit.Value = g.SpdSpeed; wpShapeList.SelectedIndex = g.Fixed ? 1 : 0; wpTicknessEdit.Value = g.WorkerHeight; wpLengthEdit.Value = g.Length; wpWidthEdit.Value = g.Width; exitPos.SelectedIndex = g.ExitPosMode; xExitPosEdit.Value = g.ExitXpos; yExitPosEdit.Value = g.ExitYpos; tExitPosEdit.Value = g.ExitTpos; saved = false; Common.ReportCmdKeyProgress(CmdKey.F0025); load = true; }
public static CutPenalty CutGroupPenalty(CutGroup cutGroup, CutSeverity level) { CutPenalty cp = new CutPenalty(); if (cutGroup == CutGroup.BleedAbove) { cp.SpeedPenalty += 0.5 * (int)level; if (level == CutSeverity.High) { cp.AgilityPenalty += 0.5; } else if (level == CutSeverity.Critical) { cp.AgilityPenalty += 1; } } //else if (cutGroup == CutGroup.BleedBelow) //{ // double penalty = ((int) level - 1) * 0.5; // cp.SpeedPenalty += penalty; // cp.AgilityPenalty += penalty; //} else if (cutGroup == CutGroup.Swell && (int)level >= 2) { double penalty = (level == CutSeverity.Medium) ? 0.5 : level == CutSeverity.High ? 1.5 : 3.0; cp.AgilityPenalty += penalty; cp.SpeedPenalty += penalty; } else if (cutGroup == CutGroup.Nose) { cp.FatiguePenalty = 1; } return(cp); }
private void DrawWorkerGroupImage(Graphics g, CutGroup gr) { if (!gr.Multiple) { DrawWorkerImage(g, gr.Center, new SizeF(gr.Length, gr.Width), gr.Fixed); } else { foreach (var item in gr.ChipS) { DrawWorkerImage(g, item.Center, new SizeF(item.Length, item.Width), item.Fixed); } } }
private void SaveCutGroupData() { CutGroup g = cutGroupData; if (g != null) { g.CutDir = (CutDir)cutDir.SelectedIndex; g.PreWidth = sideEdit.Value; g.FilmHeight = firmTicknessEdit.Value; g.CutMode = (CutMode)cutModeList.SelectedIndex; g.ReDepth = leaveEdit.Value; g.ReDepth2 = secLeaveEdit.Value; g.BackSpeed = backSpeedEdit.Value; g.Order = cutOrder.SelectedIndex == 0; g.SpdSpeed = spdSpeedEdit.Int; g.Fixed = wpShapeList.SelectedIndex > 0; g.WorkerHeight = wpTicknessEdit.Value; g.Length = wpLengthEdit.Value; if (g.Fixed) { g.Width = wpWidthEdit.Value; } else { g.Width = wpLengthEdit.Value; } g.ExitPosMode = exitPos.SelectedIndex; g.ExitXpos = xExitPosEdit.Value; g.ExitYpos = yExitPosEdit.Value; g.ExitTpos = tExitPosEdit.Value; if (cutModeList.SelectedIndex < 2) { channelCtr1.SaveChannelDataValue(); channelCtr2.SaveChannelDataValue(); } } }
public CutPauseManager(CutGroup g) { InitializeComponent(); base.Group = g; }
public CutStatusManager(CutGroup gr) { InitializeComponent(); Group = gr; }
public static bool RunGroupCut(CutGroup g) { if (StartCuttingIsReady(g.SpdSpeed)) { bool flag = true; if (!g.Cutting) { g.Cutting = true; ReportWorkingProgress(ProcessCmd.CutGroupCmd, g); } foreach (var item in g.ChipCHs) { if (item.Enable && !item.Complate) { item.Complate = RunChannelCut(item); flag &= item.Complate; if (flag) { foreach (var c in g.ChipS)//划切完当前片子判断当前片是否完成划切 { c.Complate = c.IsComplated; } if (!g.IsComplated) { ReportCmdKeyProgress(CmdKey.P0110); } } } if (!flag) { return(false); } } g.Complate = flag; if (flag) { g.Cutting = false; Globals.SpdStable = false; //重新进行稳定主轴 Globals.Line = null; //清除当前划切线 ReportWorkingProgress(ProcessCmd.CutGroupCmd, g); switch (g.ExitPosMode) { case 0: //对准位置 { X_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignPoint.X); Y_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignPoint.Y + Globals.KniefAdj); //划切完成移动到对准 划切位置+偏移值 T_Axis.AxisJogAbsWork(g.ChipCHs[0].AlignT); } break; case 1: //中心位置 { X_Axis.AxisJogAbsWork(Globals.ViewCenter.X); Y_Axis.AxisJogAbsWork(Globals.ViewCenter.Y); } break; case 2: //起始位置 { X_Axis.AxisJogAbsWork(x_Axis.Param.StartPos); Y_Axis.AxisJogAbsWork(y_Axis.Param.StartPos); T_Axis.AxisJogAbsWork(z_Axis.Param.StartPos); } break; case 3: //自定义位置 { X_Axis.AxisJogAbsWork(g.ExitXpos); Y_Axis.AxisJogAbsWork(g.ExitYpos); T_Axis.AxisJogAbsWork(g.ExitTpos); } break; } WaitAxisMoveDone();//等待移动停止 ReportCmdKeyProgress(CmdKey.P0107); } return(g.Complate); } else { ReportCmdKeyProgress(CmdKey.P0106); return(false); } }
private Vector3 pos2; // planeとmeshの交点その2 public void Cut(Plane plane, CutVictim victim) { var group1 = new CutGroup(); var group2 = new CutGroup(); for (var i = 0; i < victim.Triangles.Length; i += 3) { var positions1 = new List <Vector3>(); var positions2 = new List <Vector3>(); var idx0 = victim.Triangles[i]; var idx1 = victim.Triangles[i + 1]; var idx2 = victim.Triangles[i + 2]; var vertices = new List <Vector3>(); var v1 = Vector3.Scale(victim.Vertices[idx0], victim.Scale) + victim.Position; vertices.Add(v1); var v2 = Vector3.Scale(victim.Vertices[idx1], victim.Scale) + victim.Position; vertices.Add(v2); var v3 = Vector3.Scale(victim.Vertices[idx2], victim.Scale) + victim.Position; vertices.Add(v3); // そのポリゴンの法線を計算しておく var normal = Vector3.Cross(victim.Vertices[idx2] - victim.Vertices[idx0], victim.Vertices[idx1] - victim.Vertices[idx0]); AllocateVertices(plane, vertices, positions1, positions2); // 1.グループ分け // どちらにもカウントがあるということはplateと交差しているポリゴンということ if (positions1.Count > 0 && positions2.Count > 0) { CalcCrossPoint(plane, positions1, positions2); // 2.planeとの交点を求める // 3.両方のグループともに交点を入れる positions1.Add(pos1); positions1.Add(pos2); group1.CapPositions.Add(pos1); group1.CapPositions.Add(pos2); positions2.Add(pos1); positions2.Add(pos2); group2.CapPositions.Add(pos1); group2.CapPositions.Add(pos2); } if (positions1.Count > 0) { var triangles = CreateTriangles(positions1, normal); var count = group1.Positions.Count; group1.Positions.AddRange(positions1); // 二つめ以降ならidxがずれることに注意 foreach (var idx in triangles) { group1.Triangles.Add(idx + count); } } if (positions2.Count > 0) { var triangles = CreateTriangles(positions2, normal); var count = group2.Positions.Count; group2.Positions.AddRange(positions2); // 二つめ以降ならidxがずれることに注意 foreach (var idx in triangles) { group2.Triangles.Add(idx + count); } } } // 蓋を作る group1.Capping(plane, true); group2.Capping(plane, true); // 4.2つのグループに分けたオブジェクトを作成する group1.CreateObject(victim); group2.CreateObject(victim); // 5.元オブジェクトを消去する Object.Destroy(victim.gameObject); }