コード例 #1
0
 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;
 }
コード例 #2
0
ファイル: CutBase.cs プロジェクト: DougOz/WeBLSimulator
        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);
        }
コード例 #3
0
 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);
         }
     }
 }
コード例 #4
0
        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();
                }
            }
        }
コード例 #5
0
 public CutPauseManager(CutGroup g)
 {
     InitializeComponent();
     base.Group = g;
 }
コード例 #6
0
 public CutStatusManager(CutGroup gr)
 {
     InitializeComponent();
     Group = gr;
 }
コード例 #7
0
        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);
            }
        }
コード例 #8
0
    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);
    }