/// <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; }