public void Render(Plotter3D p) { foreach (Domino d in dominoArray) { d.Render(p); p.IsPenDown = false; p.Forward(distanceBetweenDominoes); p.IsPenDown = true; } }
private void btnRotateSquareAroundCenter_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 360; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = StartLocation; // Move to the center of the square p.PenUp(); p.Forward(25); p.TurnRight(90); p.Forward(25); p.TurnRight(angle); // Retrace your steps to move back to the starting point p.TurnRight(180); p.Forward(25); p.TurnLeft(90); p.Forward(25); p.TurnLeft(180); p.PenDown(); DrawSquare(p, 50); } } } }
private void btnRotateSquareAroundCenter_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 360; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = new CPI.Plot3D.Point3D(150, 150, 0); // Move to the center of the square p.PenUp(); p.Forward(25); p.TurnRight(90); p.Forward(25); p.TurnRight(angle); // Retrace your steps to move back to the starting point p.TurnRight(180); p.Forward(25); p.TurnLeft(90); p.Forward(25); p.TurnLeft(180); p.PenDown(); DrawSquare(p, 50); } } } }
private void btnRotateLine_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 30; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, CameraLocatioin)) { //txtTest.Text = angle.ToString(); System.Threading.Thread.Sleep(100); g.Clear(this.BackColor); p.Location = StartLocation; p.TurnDown(angle); p.PenDown(); Point3D P_start = p.Location; p.Forward(100); Point3D P_end = p.Location; txtTest.Text = P_start.ToString() + P_end.ToString(); } } } }
private void btnDrawCube_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //Camera positon CameraLocatioin = new CPI.Plot3D.Point3D(Convert.ToInt32(txtCameraPos_X.Text), Convert.ToInt32(txtCameraPos_Y.Text), Convert.ToInt32(txtCameraPos_Z.Text)); //Start postion StartLocation = new CPI.Plot3D.Point3D(Convert.ToInt32(txtStartPos_X.Text), Convert.ToInt32(txtStartPos_Y.Text), Convert.ToInt32(txtStartPos_Z.Text)); using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, CameraLocatioin)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); //Camera positon p.Location = StartLocation; g.TranslateTransform(StartLocation.X, StartLocation.Y); //1.2. Повернуть на широту g.RotateTransform(45.0F); //1.3. Вернуть начало координат в начало g.TranslateTransform(-StartLocation.X, -StartLocation.Y); DrawCube(p, 50, 100, 50); } } }
public void displayWinningLine(Form form) { Game game = (Game)form; Board board = game.getBoard(); Player winner = game.getWinner(); using (Graphics g = form.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(form.BackColor); boardAngle = defaultBoardAngle; int i = 0; for (int q = 0; q < (planeDistance * 4); q += planeDistance) { p.Location = new CPI.Plot3D.Point3D(defaultXCord, defaultYCord + q, 0); DrawRhombusPanel(p, i, board); i++; } if (winner != null) { drawWinningLine(p, board, winner); } } }
public void DrawSquare(Plotter3D p, float sideLength) { for (int i = 0; i < 4; i++) { p.Forward(sideLength); // Draw a line sideLength long p.TurnRight(90); // Turn right 90 degrees } }
private void btnRotateVertical_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 360; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, CameraLocatioin)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); g.TranslateTransform(StartLocation.X, StartLocation.Y); //1.2. Повернуть на широту g.RotateTransform(45.0F); //1.3. Вернуть начало координат в начало g.TranslateTransform(-StartLocation.X, -StartLocation.Y); //Обозначим цетр g.FillEllipse(new SolidBrush(Color.Red), StartLocation.X - 2, StartLocation.Y - 2, 4, 4); p.Location = StartLocation; // Move to the center of the square p.PenUp(); p.Forward(25); p.TurnRight(90); p.Forward(50); p.TurnDown(90); p.Forward(25); p.TurnUp(180); p.TurnRight(angle); // Retrace your steps to move back to the starting point p.Forward(25); p.TurnRight(180); p.TurnUp(90); p.Forward(50); p.TurnLeft(90); p.Forward(25); p.TurnLeft(180); p.PenDown(); //p.TurnDown(angle); DrawCube(p, 50, 100, 50); g.TranslateTransform(StartLocation.X, StartLocation.Y); //1.2. Повернуть на широту g.RotateTransform(-45.0F); //1.3. Вернуть начало координат в начало g.TranslateTransform(-StartLocation.X, -StartLocation.Y); } } } }
public void DrawCube(Plotter3D p, float sideLength) { for (int i = 0; i < 4; i++) { DrawSquare(p, sideLength); p.Forward(sideLength); p.TurnDown(90); } }
private void btnDrawSquare_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.Clear(this.BackColor); p.Location = new CPI.Plot3D.Point3D(150, 150, 0); DrawSquare(p, 50); } }
private void btnDominoSetUpX_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(this.BackColor); using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, new Point3D(350, 100, -600))) { p.Location = new Point3D(100, 200, 0); Dominoes d = new Dominoes(10, 60, 120, 16, 60); d.Render(p); } } }
private void btnDrawSphere_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, new Point3D(200, 200, -600))) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = new CPI.Plot3D.Point3D(150, 150, 0); DrawSphere(p, 100); } } }
private void button1_Click(object sender, EventArgs e) { string filePath = txtFilePath.Text; Dictionary<int, ClusterObject> m_lstData = DataLoader.LoadData(filePath); using (Graphics g = pnlGraph.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.Clear(this.BackColor); // p.Location = new CPI.Plot3D.Point3D(0, 0, 0); // DrawSquare(p, 400); foreach (KeyValuePair<int, ClusterObject> kvp in m_lstData) { p.Location = new CPI.Plot3D.Point3D((int)kvp.Value.Coordinates[0], (int)kvp.Value.Coordinates[1], 0); DrawSquare(p, 1, 1000); // 1000: To get black. Any number greater than 12 will do... } } }
private void btnRotateSquareAroundEdge_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 360; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = StartLocation; p.TurnRight(angle); DrawSquare(p, 50); } } } }
private void drawSpotMap(Form form) { using (Graphics g = form.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(form.BackColor); p.PenWidth = (float)2; p.PenColor = Color.FromName("White"); foreach (Coordinate c in spotMap) { if (c != null) { p.Location = new CPI.Plot3D.Point3D(c.getX(), c.getY(), 0); //DrawPlayerMove(p); } } } }
private void btnRotateSquareAroundEdge_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 360; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = new CPI.Plot3D.Point3D(150, 150, 0); p.TurnRight(angle); DrawSquare(p, 50); } } } }
public void DrawLayersBoard(Form form, Board board) { using (Graphics g = form.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { //p.PenWidth = (float)1.5; p.PenWidth = (float)2; p.PenColor = Color.FromName("White"); //g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(form.BackColor); for (int q = 0; q < (planeDistance * 4); q += planeDistance) { p.Location = new CPI.Plot3D.Point3D(defaultXCord, defaultYCord + q, 0); DrawRhombusPanel(p, q, board); } } }
private void btnRunKMeans1_Click(object sender, EventArgs e) { string filePath = txtFilePath.Text; Dictionary<int, ClusterObject> m_lstData = DataLoader.LoadData(filePath); KMeansAlgorithm kmeans = new KMeansAlgorithm(); kmeans.K = Int32.Parse(txtClusterCount.Text); kmeans.FilePath = filePath; kmeans.Run(); using (Graphics g = pnlGraph.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.Clear(this.BackColor); foreach (KeyValuePair<int, ClusterObject> kvp in kmeans.ClusteredData) { p.Location = new CPI.Plot3D.Point3D((int)kvp.Value.Coordinates[0], (int)kvp.Value.Coordinates[1], 0); DrawSquare(p, 1, kvp.Value.ClusterId); } } }
public void displayBoard(Form form, int x, int y, int z) { Game game = (Game)form; Board board = game.getBoard(); using (Graphics g = form.CreateGraphics()) using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g)) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(form.BackColor); int i = 0; for (int q = 0; q < (planeDistance * 4); q += planeDistance) { p.Location = new CPI.Plot3D.Point3D(defaultXCord, defaultYCord + q, 0); DrawRhombusPanel(p, i, board); i++; } drawMovePreview(p, x, y, z, board); } }
private void btnSphereMultiAxisRotate_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; for (int angle = 0; angle <= 180; angle += 3) { using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, new Point3D(200, 200, -600))) { System.Threading.Thread.Sleep(50); g.Clear(this.BackColor); p.Location = new CPI.Plot3D.Point3D(150, 150, 0); // Move to the center of the sphere p.PenUp(); p.Forward(50); p.TurnRight(90); p.Forward(50); p.TurnDown(angle * 3); p.TurnRight(angle * 2); // Retrace your steps to move back to the starting point p.TurnLeft(180); p.Forward(50); p.TurnLeft(90); p.Forward(50); p.TurnRight(180); p.PenDown(); DrawSphere(p, 100); } } } }
public void DrawSquare(Plotter3D p, float sideLength, int clusterId) { SetColor(p, clusterId); DrawSquare(p, sideLength); }
private void DrawCircle(Plotter3D p, float diameter) { float radius = diameter / 2; // Increasing this number will create a better approximation, // but will require more work to draw int sides = 64; float innerAngle = 360F / sides; float sideLength = (float)(radius * Math.Sin(Orientation3D.DegreesToRadians(innerAngle) / 2) * 2); // Save the initial position and orientation of the cursor Point3D initialLocation = p.Location; Orientation3D initialOrientation = p.Orientation.Clone(); // Move to the starting point of the circle p.PenUp(); p.Forward(radius - (sideLength / 2)); p.PenDown(); // Draw the circle for (int i = 0; i < sides; i++) { p.Forward(sideLength); p.TurnRight(innerAngle); } // Restore the position and orientation to what they were before // we drew the circle p.Location = initialLocation; p.Orientation = initialOrientation; }
void dominoes_PositionChanged(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { System.Threading.Thread.Sleep(50); g.Clear(SystemColors.Control); g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; using (Plotter3D p = new Plotter3D(g, new Point3D(350, 100, -600))) { p.Location = new Point3D(100, 200, 0); p.TurnDown(dominoRotationAngle); ((Dominoes)sender).Render(p); } } }
private void SetColor(Plotter3D p, int clusterId) { switch (clusterId) { case 0 : p.Pen = new Pen(Color.Blue); break; case 1 : p.Pen = new Pen(Color.Red); break; case 2 : p.Pen = new Pen(Color.Green); break; case 3 : p.Pen = new Pen(Color.Yellow); break; case 4 : p.Pen = new Pen(Color.White); break; case 5 : p.Pen = new Pen(Color.Brown); break; case 6 : p.Pen = new Pen(Color.BurlyWood); break; case 7 : p.Pen = new Pen(Color.LawnGreen); break; case 8 : p.Pen = new Pen(Color.LightSalmon); break; case 9: p.Pen = new Pen(Color.Magenta); break; case 10: p.Pen = new Pen(Color.MediumTurquoise); break; case 11: p.Pen = new Pen(Color.PapayaWhip); break; case 12: p.Pen = new Pen(Color.AliceBlue); break; default: p.Pen = new Pen(Color.Black); break; } }
////////////////////////////////////////////////////////////////////////////////////////////////////////// public void DrawTelescope3D(PaintEventArgs e) { using (Graphics graphicsObj = e.Graphics) //using (Graphics graphicsObj = panel1.CreateGraphics()) { graphicsObj.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; Pen grayPen = new Pen(Color.LightGray, 1); //цвет линии (NOT USED) Pen blackPen = new Pen(Color.Black, 3); //цвет линии (NOT USED) Pen TracePen = new Pen(Color.Red, 2); //цвет линии (NOT USED) Pen TracePen2 = new Pen(Color.PaleVioletRed, 2); //цвет линии (NOT USED) //Настройки цветов Pen TelescopeColor = new Pen(Color.LightGray, 1); //вход телескопа виден Pen TelescopeObjectiveVisibleColor = Pens.Blue; //вход телескопа виден Pen TelescopeObjectiveInvisibleColor = Pens.LightBlue; //вход телескопа невиден Pen AxisColor_PhysicalSideE = new Pen(Color.LightGray, 1); //цвет оси RA/Dec когда телескоп с восточной стороны (телескоп ПЕРЕД монтировкой) Pen AxisColor_PhysicalSideW = new Pen(Color.Black, 1); //цвет оси RA/Dec когда телескоп с западной стороны (телескоп ЗА монтировкой) SolidBrush AxisPoint_PhysicalSideE = new SolidBrush(Color.LightGray); //закраска SolidBrush AxisPoint_PhysicalSideW = new SolidBrush(Color.Black); //закраска //1. Сместить и повернуть холст //1.1. Сместить на центр, чтобы вращение было по точке соприкосновения с телескопом graphicsObj.TranslateTransform(X0, Y0); //1.2. Повернуть на широту graphicsObj.RotateTransform(LatitudeGrad); //1.3. Вернуть начало координат в начало graphicsObj.TranslateTransform(-X0, -Y0); //Обозначим цетр graphicsObj.FillEllipse((PoinitingPhysicalSideE ? AxisPoint_PhysicalSideE : AxisPoint_PhysicalSideW), X0 - 2, Y0 - 2, 4, 4); //1. Ось RA Rectangle recRAAxis = new Rectangle((int)(X0 - PARAM_RAAxix_Thick / 2), (int)(Y0), (int)(PARAM_RAAxix_Thick), (int)(PARAM_RAAxix_Len)); graphicsObj.DrawRectangle((PoinitingPhysicalSideE ? AxisColor_PhysicalSideE : AxisColor_PhysicalSideW), recRAAxis); using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(graphicsObj, TelescopeColor, CameraPosition)) { //System.Threading.Thread.Sleep(50); //g.Clear(this.BackColor); //Camera positon p.Location = StartDrawingPosition; //2. Ось DEC p.PenUp(); p.TurnLeft(90); p.TurnDown(90); p.TurnRight(HA_mech_grad); //Rotate Hour Angle p.Forward(PARAM_DecAxix_Len / 2); p.TurnRight(180); p.PenDown(); p.Forward(PARAM_DecAxix_Len, (PoinitingPhysicalSideE ? AxisColor_PhysicalSideE : AxisColor_PhysicalSideW)); //Dec axis //3. Телескоп p.PenUp(); p.TurnDown(90); p.TurnRight(90); p.TurnRight(DEC_mech_grad); //Rotate DEC // Move to telescope start p.Forward(PARAM_Telescope_Len / 2); p.TurnUp(90); p.Forward(PARAM_Telescope_Thick); p.TurnRight(90); p.Forward(PARAM_Telescope_Thick / 2); p.TurnRight(90); p.TurnUp(90); p.PenDown(); // Нарисовать телескоп // Нулевое направление: // - точка пересеения небесного меридиана/экватора на юге // - расположение трубы восточная сторона на запад Draw3DCube(p, PARAM_Telescope_Len, PARAM_Telescope_Thick, PARAM_Telescope_Thick); /* * //dir test * p.Forward(20, TracePen); * p.TurnDown(90); * p.Forward(20, TracePen); */ //4. Телексоп front //4.1 Point P1 //initial pos: верхняя (меньшая по Y, помним, что Y увеличивается вниз) передняя (ближняя, по Z) точка фермы (when in zero pos, см. выше) //initial dir: вдоль фермы вниз //orientation: на зрителя P1 = p.Location; txtP1_X.Text = P1.X.ToString(); txtP1_Y.Text = P1.Y.ToString(); txtP1_Z.Text = P1.Z.ToString(); //Draw3DRect(p, 3, 3, TracePen); //draw point for debug //4.2 Point P2 //initial pos: верхняя (меньшая по Y, помним, что Y увеличивается вниз) задняя (дальняя, по Z) точка фермы (when in zero pos, см. выше) //после перехода к точке dir: вдоль фермы вниз //после перехода к точке orientation: на зрителя //go to it p.PenUp(); p.TurnDown(90); p.Forward(PARAM_Telescope_Thick); P2 = p.Location; txtP2_X.Text = P2.X.ToString(); txtP2_Y.Text = P2.Y.ToString(); txtP2_Z.Text = P2.Z.ToString(); //p.PenDown(); //Draw3DRect(p, 3, 3, TracePen2);//draw point for debug //p.PenUp(); //Return from P2 to P1 p.TurnUp(180); p.Forward(PARAM_Telescope_Thick); p.TurnDown(90); p.PenDown(); p.TurnDown(90); // Определим - виден ли вход трубы? if ((P1.Z < P2.Z) && (P1.X > P2.X) || (P1.Z > P2.Z) && (P1.X > P2.X)) { if (PoinitingSideEtoW) { TelescopeObjectiveVisible = true; } else { TelescopeObjectiveVisible = false; } } else { if (PoinitingSideEtoW) { TelescopeObjectiveVisible = false; } else { TelescopeObjectiveVisible = true; } } Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, (TelescopeObjectiveVisible ? TelescopeObjectiveVisibleColor : TelescopeObjectiveInvisibleColor)); /* * p.TurnDown(90); * if (p.Location.Z < -(PARAM_Telescope_Thick+ PARAM_DecAxix_Len / 2)) * { * Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, Pens.Blue); * //Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, (PoinitingPhysicalSideE ? Pens.Blue : Pens.LightBlue)); * } * else * { * Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, Pens.LightBlue); * } */ //p.Forward(20, Pens.Red); ////p.TurnDown(90); //if (PoinitingSideWtoE) //{ // p.PenUp(); // p.Forward(2); // p.TurnRight(90); // p.Forward(2); // p.TurnLeft(90); // p.PenDown(); // Draw3DRect(p, PARAM_Telescope_Thick - 4, PARAM_Telescope_Thick - 4, new Pen(Color.Blue)); //} ////5. Телексоп back //p.TurnLeft(90); //p.Forward(2, Pens.Red); //p.TurnLeft(90); //p.Forward(2, Pens.Red); //p.TurnDown(90); //p.Forward(PARAM_Telescope_Len, Pens.Green); //p.TurnDown(90); //p.Forward(PARAM_Telescope_Len, Pens.Orange); ////p.Forward(100, Pens.Red); //Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, (PoinitingSideWtoE ? Pens.Red : Pens.Red)); ////5. Телексоп строна к монтировке //p.PenUp(); //p.Forward(PARAM_Telescope_Thick); //p.TurnUp(90); //p.PenDown(); //Draw3DRect(p, PARAM_Telescope_Len, PARAM_Telescope_Thick, new Pen(Color.Silver)); } } }
public void DrawSphere(Plotter3D p, float diameter) { Point3D initialLocation = p.Location; Orientation3D initialOrientation = p.Orientation.Clone(); for (int i = 0; i < 180; i += 20) { p.PenUp(); p.Forward(diameter / 2); // Rotate appropriately p.TurnDown(i); // Go back to the starting point p.TurnDown(180); p.Forward(diameter / 2); p.TurnDown(180); p.PenDown(); DrawCircle(p, 100); p.Orientation = initialOrientation.Clone(); p.Location = initialLocation; } }
private void btnDominoSetUpZ_Click(object sender, EventArgs e) { using (Graphics g = this.CreateGraphics()) { g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; g.Clear(this.BackColor); using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(g, new Point3D(350, 100, -600))) { p.Location = new Point3D(100, 200, 0); p.TurnDown(90); Dominoes d = new Dominoes(10, 60, 120, 16, 60); d.Render(p); } } }
public void Render(Plotter3D p) { Point3D startLocation = p.Location; Orientation3D startOrientation = p.Orientation.Clone(); bool startPenDown = p.IsPenDown; AngleMeasurement startAngleMeasurement = p.AngleMeasurement; p.AngleMeasurement = AngleMeasurement.Degrees; // Move to the back edge of the domino p.IsPenDown = false; p.Forward(depth); p.TurnUp(90); p.IsPenDown = startPenDown; // Tilt the domino accordingly p.Orientation.RollLeft(90 - fallAngle); // Draw the back surface of the domino p.Forward(width); p.TurnLeft(90); p.Forward(height); p.TurnLeft(90); p.Forward(width); p.TurnLeft(90); p.Forward(height); p.TurnLeft(90); // Draw the middle bits of the domino p.TurnUp(90); p.Forward(depth); p.TurnDown(90); p.IsPenDown = false; p.Forward(width); p.TurnDown(90); p.IsPenDown = startPenDown; p.Forward(depth); p.TurnUp(90); p.TurnLeft(90); p.IsPenDown = false; p.Forward(height); p.TurnUp(90); p.IsPenDown = startPenDown; p.Forward(depth); p.TurnDown(90); p.TurnLeft(90); p.IsPenDown = false; p.Forward(width); p.TurnDown(90); p.IsPenDown = startPenDown; p.Forward(depth); p.IsPenDown = false; p.TurnUp(180); p.Forward(depth); p.TurnUp(90); p.Orientation.RollRight(180); p.IsPenDown = startPenDown; // Draw the front of the domino p.Forward(width); p.TurnRight(90); p.Forward(height); p.TurnRight(90); p.Forward(width); p.TurnRight(90); p.Forward(height); // Return the the start orientation and location, then advance to the back edge of the domino. p.IsPenDown = false; p.Orientation = startOrientation; p.Location = startLocation; p.Forward(depth); p.IsPenDown = startPenDown; p.AngleMeasurement = startAngleMeasurement; }
////////////////////////////////////////////////////////////////////////////////////////////////////////// public void Draw3DTelescope(PaintEventArgs e) { using (Graphics graphicsObj = e.Graphics) //using (Graphics graphicsObj = panel1.CreateGraphics()) { graphicsObj.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //Create graph objects SolidBrush Brush1 = new SolidBrush(Color.LightGray); //закраска SolidBrush RedBrush = new SolidBrush(Color.Red); //закраска Pen grayPen = new Pen(Color.LightGray, 1); //цвет линии Pen blackPen = new Pen(Color.Black, 3); //цвет линии //1. Сместить и повернуть холст //1.1. Сместить на центр, чтобы вращение было по точке соприкосновения с телескопом graphicsObj.TranslateTransform(X0, Y0); //1.2. Повернуть на широту graphicsObj.RotateTransform(LatitudeGrad); //1.3. Вернуть начало координат в начало graphicsObj.TranslateTransform(-X0, -Y0); //Обозначим цетр graphicsObj.FillEllipse(RedBrush, X0 - 2, Y0 - 2, 4, 4); //1. Ось RA Rectangle recRAAxis_el1 = new Rectangle((int)(X0 - PARAM_RAAxix_Thick / 2), (int)(Y0), (int)(PARAM_RAAxix_Thick), (int)(PARAM_RAAxix_Len)); graphicsObj.DrawRectangle(Pens.Black, recRAAxis_el1); using (CPI.Plot3D.Plotter3D p = new CPI.Plot3D.Plotter3D(graphicsObj, new Pen(Color.Black, 1), CameraPosition)) { //System.Threading.Thread.Sleep(50); //g.Clear(this.BackColor); //Camera positon p.Location = StartDrawingPosition; //2. Ось DEC p.PenUp(); p.TurnLeft(90); p.TurnDown(90); p.TurnRight(HAGrad); //Rotate Hour Angle p.Forward(PARAM_DecAxix_Len / 2); p.TurnRight(180); p.PenDown(); p.Forward(PARAM_DecAxix_Len); //Dec axis //3. Телескоп p.PenUp(); p.TurnDown(90); p.TurnRight(90); p.TurnRight(DECGrad); //Rotate DEC // Move to telescope start p.Forward(PARAM_Telescope_Len / 2); p.TurnUp(90); p.Forward(PARAM_Telescope_Thick); p.TurnRight(90); p.Forward(PARAM_Telescope_Thick / 2); p.TurnRight(90); p.TurnUp(90); p.PenDown(); Draw3DCube(p, PARAM_Telescope_Len, PARAM_Telescope_Thick, PARAM_Telescope_Thick); //4. Телексоп front p.TurnDown(90); Draw3DRect(p, PARAM_Telescope_Thick, PARAM_Telescope_Thick, new Pen(Color.Blue)); //5. Телексоп строна к монтировке p.PenUp(); p.Forward(PARAM_Telescope_Thick); p.TurnUp(90); p.PenDown(); Draw3DRect(p, PARAM_Telescope_Len, PARAM_Telescope_Thick, new Pen(Color.Silver)); } } }