Пример #1
0
        /// <summary>
        /// 問題を設定する
        /// </summary>
        /// <returns></returns>
        private bool setNewProblem()
        {
            bool success = false;
            try
            {
                if( ProbNo == 0 )
                {
                    Cad2D.Clear();
                    {    // Make model
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(2.0,0.0) );
                        pts.Add( new CVector2D(2.0,1.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(1.0,2.0) );
                        pts.Add( new CVector2D(0.0,2.0) );
                        uint id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                    }
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 1 )
                {
                    Cad2D.Clear();
                    {    // Make model
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.5,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        uint id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                    }
                    Cad2D.SetCurve_Arc(1,false,-0.2);
                    Cad2D.SetCurve_Arc(2,false, 0.5);
                    //Cad2D.SetCurve_Arc(3,false,-0.5);
                    //Cad2D.SetCurve_Arc(4,true, -0.5);
                    Cad2D.ConnectVertex_Line(1,2);
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 2 )
                {
                    Cad2D.Clear();
                    {    // Make model
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.5,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        uint id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                    }
                    Cad2D.SetCurve_Arc(1,false,  0);
                    //Cad2D.SetCurve_Arc(2,false,  0);

                    //Cad2D.SetCurve_Arc(1,true, -1.0);
                    Cad2D.SetCurve_Arc(2,true, -1.0);
                    Cad2D.SetCurve_Arc(3,true,  -1.0);
                    //Cad2D.SetCurve_Arc(4,true, -0.5);
                    Cad2D.SetCurve_Arc(5,true,  -0.5);
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 3 )
                {
                    Cad2D.Clear();
                    {
                        uint id_l = 0;
                        {
                            IList<CVector2D> pts = new List<CVector2D>();
                            pts.Add( new CVector2D(0.0,0.0) );
                            pts.Add( new CVector2D(1.0,0.0) );
                            pts.Add( new CVector2D(1.0,1.0) );
                            pts.Add( new CVector2D(0.0,1.0) );
                            id_l = Cad2D.AddPolygon( pts ).id_l_add;
                        }
                        uint id_v1 = Cad2D.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.2)).id_v_add;
                        uint id_v2 = Cad2D.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.2)).id_v_add;
                        uint id_v3 = Cad2D.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.7,0.8)).id_v_add;
                        uint id_v4 = Cad2D.AddVertex(CAD_ELEM_TYPE.LOOP,id_l, new CVector2D(0.3,0.8)).id_v_add;
                        Cad2D.ConnectVertex_Line(id_v1,id_v2);
                        Cad2D.ConnectVertex_Line(id_v2,id_v3);
                        Cad2D.ConnectVertex_Line(id_v3,id_v4);
                        Cad2D.ConnectVertex_Line(id_v4,id_v1);
                    }
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 4 ){
                    Cad2D.Clear();
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        Cad2D.AddPolygon( pts );
                        IList<CVector2D> aRelCo = new List<CVector2D>();
                        for (int i = 0; i < 3; i++)
                        {
                            aRelCo.Add(new CVector2D());
                        }
                        {
                            aRelCo[0].x = 0.25;
                            aRelCo[0].y = -0.1;
                            aRelCo[1].x = 0.5;
                            aRelCo[1].y = -0.0;
                            aRelCo[2].x= 0.75;
                            aRelCo[2].y = -0.1;
                        }
                        Cad2D.SetCurve_Polyline(1, aRelCo);
                        Cad2D.SetCurve_Arc(2, true, -1);
                    }
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 5 )
                {
                    Cad2D.Clear();
                    uint id_l_l, id_l_r;
                    {
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0, 0.0) );    // 1
                        pts.Add( new CVector2D(1.5, 0.0) );    // 2
                        pts.Add( new CVector2D(1.5, 0.4) );    // 3
                        pts.Add( new CVector2D(1.0, 0.4) );    // 4
                        pts.Add( new CVector2D(1.0, 0.5) );    // 5
                        pts.Add( new CVector2D(2.0, 0.5) );    // 6
                        pts.Add( new CVector2D(2.0, 1.0) );    // 7
                        pts.Add( new CVector2D(0.0, 1.0) );    // 8
                        pts.Add( new CVector2D(0.0, 0.5) );    // 9
                        Id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                        uint id_e1 = Cad2D.ConnectVertex_Line(5,9).id_e_add;
                        Cad2D.ShiftLayer_Loop(Id_l0, true);
                        double[] col = new double[3]{ 0.9, 0.4, 0.4 };
                        Cad2D.SetColor_Loop(Id_l0, col);
                        Cad2D.AddVertex(CAD_ELEM_TYPE.EDGE, 3, new CVector2D(1.3,0.5) );
                        Cad2D.GetIdLoop_Edge(out id_l_l, out id_l_r, id_e1);
                    }
                    ////////////////
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    // ryujimiya:なぜかグローバルなDrawerへは格納していない。あとでチェック。-->格納するように変更
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    Drawer.SetPointSize(10);
                    DrawerAry.PushBack( Drawer);
                    DrawerAry.InitTrans(Camera);
                }
                else if( ProbNo == 6 )
                {
                    Cad2D.ShiftLayer_Loop(Id_l0,false);
                    Cad2D.ShiftLayer_Loop(Id_l0,false);
                    ////////////////
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    // ryujimiya:なぜかグローバルなDrawerへは格納していない。あとでチェック。-->格納するように変更
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    Drawer.SetPointSize(10);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans(Camera);
                }
                else if( ProbNo == 7 )
                {
                    Cad2D.Clear();
                    {    // Make model
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(2.0,0.0) );
                        pts.Add( new CVector2D(3.0,0.0) );
                        pts.Add( new CVector2D(3.0,1.0) );
                        pts.Add( new CVector2D(2.0,1.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        uint id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                    }
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }
                else if( ProbNo == 8 )
                {
                    Cad2D.Clear();
                    {    // Make model
                        IList<CVector2D> pts = new List<CVector2D>();
                        pts.Add( new CVector2D(0.0,0.0) );
                        pts.Add( new CVector2D(1.0,0.0) );
                        pts.Add( new CVector2D(1.0,1.0) );
                        pts.Add( new CVector2D(0.5,1.0) );
                        pts.Add( new CVector2D(0.0,1.0) );
                        uint id_l0 = Cad2D.AddPolygon( pts ).id_l_add;
                    }
                    Cad2D.SetCurve_Bezier(1,0.2,+0.5, 0.2,-0.5);
                    Cad2D.SetCurve_Bezier(2,0.5,+0.5, 0.2,-0.5);
                    Cad2D.ConnectVertex_Line(1,2);
                    DrawerAry.Clear();
                    if (Drawer != null)
                    {
                        Drawer = null;
                    }
                    Drawer = new CDrawer_Cad2D(Cad2D);
                    DrawerAry.PushBack( Drawer );
                    DrawerAry.InitTrans( Camera );
                }

                success = true;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.Message + " " + exception.StackTrace);
            }

            Gl.glMatrixMode(Gl.GL_PROJECTION);
            Gl.glLoadIdentity();
            DrawerGlUtility.SetProjectionTransform(Camera);
            Glut.glutPostRedisplay();
            ProbNo++;
            if (ProbNo == ProbCnt) ProbNo = 0;
            return success;
        }