private void toolCmbPrimitives_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { Model.Clear(); //MessageBox.Show(toolCmbPrimitives.Text); foreach (Cube primitive in primitives) { MessageBox.Show(primitive.primitiveName); if (primitive.primitiveName == toolCmbPrimitives.Text) { Cube newCube = new Cube(); newCube.Initialize(primitive); newCube.Origin = new Cube(); newCube.Origin.Initialize(primitive); newCube.TransCube = new Cube(); newCube.TransCube.Initialize(primitive); Model.Add(newCube); } // break; } scaledShapes.Clear(); DefineScaledShapes(); } }
public void AddPrimitive(string name) { Cube newPrimitive = new Cube(); newPrimitive.Initialize(newPrimitive_); newPrimitive.Origin = new Cube(); newPrimitive.Origin.Initialize(newPrimitive_); newPrimitive.TransCube = new Cube(); newPrimitive.TransCube.Initialize(newPrimitive_); newPrimitive.primitiveName = name; primitives.Add(newPrimitive); renewPrimitivesCollection(); //getFullCopies(); }
List <Cube> DevideCube(int nx, int ny, int nz) { Cube mycube1; List <Cube> CubeParts = new List <Cube>(); double[,] arr = new double[20, 3]; //(x0,y0,z0) - ліва нижня вершина стандартного кубика double x0 = -1; double y0 = -1; double z0 = 1; //довжина ребра стандартного кубика = 2 // length, height,width - виміри кубика утвореного поділом стандарного на nx, ny, nz частини double length = 2.0 / nx; double height = 2.0 / ny; double width = 2.0 / nz; for (int i1 = 0; i1 < ny; i1++) { arr[0, 1] = arr[1, 1] = arr[2, 1] = arr[3, 1] = y0 + i1 * height; arr[4, 1] = arr[5, 1] = arr[6, 1] = arr[7, 1] = y0 + (i1 + 1) * height; for (int i2 = 0; i2 < nx; i2++) { arr[0, 0] = arr[3, 0] = arr[4, 0] = arr[7, 0] = x0 + i2 * length; arr[1, 0] = arr[2, 0] = arr[5, 0] = arr[6, 0] = x0 + (i2 + 1) * length; for (int i3 = 0; i3 < nz; i3++) { arr[0, 2] = arr[1, 2] = arr[4, 2] = arr[5, 2] = z0 - i3 * width; arr[2, 2] = arr[3, 2] = arr[6, 2] = arr[7, 2] = z0 - (i3 + 1) * width; mycube1 = new Cube(); mycube1.Initialize(arr); CubeParts.Add(mycube1); } } } foreach (Cube c in CubeParts) { c.MiddleVertices(); } standartParts = CubeParts; return(CubeParts); // return new List<Cube>(); }
public void AddPrimitive(string name) { Cube newPrimitive = new Cube(); newPrimitive.Initialize(Model[0]); newPrimitive.Origin = new Cube(); newPrimitive.Origin.Initialize(Model[0]); newPrimitive.TransCube = new Cube(); newPrimitive.TransCube.Initialize(Model[0]); for (int i = 0; i < newPrimitive.edges.Length; i++) { if (newPrimitive.edges[i].lockState.lockStatus) { newPrimitive.edges[i].lockState.enableChange = false; } } for (int i = 0; i < newPrimitive.faces.Length; i++) { if (newPrimitive.faces[i].lockState.lockStatus) { newPrimitive.faces[i].lockState.enableChange = false; } } newPrimitive.primitiveName = name; primitives.Add(newPrimitive); renewPrimitivesCollection(); frmParent.newPrimitive_.Initialize(newPrimitive); frmParent.newPrimitive_.Origin = new Cube(); frmParent.newPrimitive_.Origin.Initialize(newPrimitive.Origin); frmParent.newPrimitive_.TransCube = new Cube(); frmParent.newPrimitive_.TransCube.Initialize(newPrimitive.TransCube); frmParent.AddPrimitive(name); frmParent.renewPrimitivesCollection(); //frmParent.Model.Add(frmParent.newPrimitive_); //getFullCopies(); }
private void CurveThisCube(Cube cube, Cube myCube) { // Stopwatch sWatch = new Stopwatch(); // sWatch.Start(); double[,] arr = new double[20, 3]; for (int i = 0; i < 20; i++) { double sumX = 0, sumY = 0, sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(cube.vertices[i], j); sumX += myCube.vertices[j].x * fi; sumY += myCube.vertices[j].y * fi; sumZ += myCube.vertices[j].z * fi; } arr[i, 0] = sumX; arr[i, 1] = sumY; arr[i, 2] = sumZ; } cube.Initialize(arr); //sWatch.Stop(); //textBox1.Text = sWatch.ElapsedMilliseconds.ToString(); }
public void AddCube(Cube c) { if ((selectedSide.Parent != null) && (selectedSide.Parent.Origin != null)) { Cube copyC = new Cube(); copyC.Initialize(c); Cube newCube = new Cube(); newCube.Initialize(selectedSide.Parent.Origin); newCube.TransCube = new Cube(); newCube.TransCube.Initialize(selectedSide.Parent.TransCube); double org = 0, now = 0; switch (selectedSide.maxState) { case "minY": org = newCube.faces[0].MaxY(); now = selectedSide.Parent.faces[0].MaxY(); newCube.TransCube.Translate(0, -2, 0); //copyC.TransCube.Translate(0, -2, 0); if (org > now) { newCube.Translate(0, -2 - (org - now), 0); //copyC.Translate(0, -2 - (org - now), 0); } else { newCube.Translate(0, -2 + (now - org), 0); //copyC.Translate(0, -2 + (now - org), 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); //newCube.Initialize(copyC); //find center Vertex center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; //serendyp approxymations double sumX = 0, sumY = 0, sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } double x0 = sumX; double y0 = sumY; double z0 = sumZ; MessageBox.Show("MinY (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "minY"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxY": org = newCube.faces[1].MinY(); now = selectedSide.Parent.faces[1].MinY(); newCube.TransCube.Translate(0, 2, 0); //copyC.TransCube.Translate(0, 2, 0); if (org < now) { newCube.Translate(0, 2 + (org - now), 0); //copyC.Translate(0, 2 + (org - now), 0); } else { newCube.Translate(0, 2 - (org - now), 0); //copyC.Translate(0, 2 - (org - now), 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; sumX = 0; sumY = 0; sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } x0 = sumX; y0 = sumY; z0 = sumZ; MessageBox.Show("MaxY (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "maxY"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "minX": org = newCube.faces[5].MaxX(); now = selectedSide.Parent.faces[5].MaxX(); newCube.TransCube.Translate(-2, 0, 0); // copyC.TransCube.Translate(-2, 0, 0); if (org > now) { newCube.Translate(-2 - (org - now), 0, 0); //copyC.Translate(-2 - (org - now), 0, 0); } else { newCube.Translate(-2 + (now - org), 0, 0); //copyC.Translate(-2 + (now - org), 0, 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; sumX = 0; sumY = 0; sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } x0 = sumX; y0 = sumY; z0 = sumZ; MessageBox.Show("MinX (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "minX"); CheckAllFaces(1, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxX": org = newCube.faces[3].MinX(); now = selectedSide.Parent.faces[3].MinX(); newCube.TransCube.Translate(2, 0, 0); //copyC.TransCube.Translate(2, 0, 0); if (org < now) { newCube.Translate(2 + (org - now), 0, 0); //copyC.Translate(2 + (org - now), 0, 0); } else { newCube.Translate(2 - (org - now), 0, 0); //copyC.Translate(2 - (org - now), 0, 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; sumX = 0; sumY = 0; sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } x0 = sumX; y0 = sumY; z0 = sumZ; MessageBox.Show("MaxX (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "maxX"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "minZ": org = newCube.faces[4].MaxZ(); now = selectedSide.Parent.faces[4].MaxZ(); newCube.TransCube.Translate(0, 0, -2); //copyC.TransCube.Translate(0, 0, -2); if (org > now) { newCube.Translate(0, 0, -2 - (org - now)); //copyC.Translate(0, 0, -2 - (org - now)); } else { newCube.Translate(0, 0, -2 + (now - org)); //copyC.Translate(0, 0, -2 + (now - org)); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; sumX = 0; sumY = 0; sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } x0 = sumX; y0 = sumY; z0 = sumZ; MessageBox.Show("MinZ (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "minZ"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxZ": org = newCube.faces[2].MinZ(); now = selectedSide.Parent.faces[2].MinZ(); newCube.TransCube.Translate(0, 0, 2); //copyC.TransCube.Translate(0, 0, 2); if (org < now) { newCube.Translate(0, 0, 2 + (org - now)); //copyC.Translate(0, 0, 2 + (org - now)); } else { newCube.Translate(0, 0, 2 - (org - now)); //copyC.Translate(0, 0, 2 - (org - now)); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); center = new Vertex(); center.x = 0; center.y = 0; center.z = 0; sumX = 0; sumY = 0; sumZ = 0; for (int j = 0; j < 20; j++) { double fi = F_i(center, j); sumX += newCube.vertices[j].x * fi; sumY += newCube.vertices[j].y * fi; sumZ += newCube.vertices[j].z * fi; } x0 = sumX; y0 = sumY; z0 = sumZ; MessageBox.Show("MaxZ (" + x0 + ", " + y0 + ", " + z0 + ")"); copyC.Translate(x0, y0, z0); newCube.Initialize(copyC); InitializeFace(ref newCube, ref selectedSide.Parent, "maxZ"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; } DevideCurveCube(Model.Count - 1, ref newCube); } else { IsAddingCube = false; } IsAddingCube = false; selectedSide.IsPointed = false; }
public void glOnLeftMouseDown(object sender, MouseEventArgs e) { isLeftDrag = true; mouseStartDrag = new Point(e.X, e.Y); this.startDrag(mouseStartDrag); if (IsAddingCube) { if (Model.Count == 0) { Cube first = new Cube(); first.Origin = new Cube(); first.TransCube = new Cube(); Model.Add(first); } else { Cube newCube = new Cube(); foreach (Cube primitive in primitives) { if (primitive.primitiveName == toolCmbPrimitives.Text) { MessageBox.Show("yes"); newCube.Initialize(primitive); break; } } AddCube(newCube); } } if (isLockingFace) { LockFace(); } if (isUnlockingFace) { UnlockFace(); } if (isLockingEdge) { LockEdge(); } if (isUnlockingEdge) { UnlockEdge(); } if ((IsRemovingCube) && (k > 0)) { RemoveCube(); } this.PlotGL(); DefineScaledShapes(0); if (AxisName == "x") { mouseStartXScale = e.X; } if ((AxisName == "y") || (AxisName == "z")) { mouseStartXScale = e.Y; } mouseStartYScale = e.Y; }
public void AddCube() { if ((selectedSide.Parent != null) && (selectedSide.Parent.Origin != null)) { Cube newCube = new Cube(); newCube.Initialize(selectedSide.Parent.Origin); newCube.TransCube = new Cube(); newCube.TransCube.Initialize(selectedSide.Parent.TransCube); double org = 0, now = 0; switch (selectedSide.maxState) { case "minY": org = newCube.faces[0].MaxY(); now = selectedSide.Parent.faces[0].MaxY(); newCube.TransCube.Translate(0, -2, 0); if (org > now) { newCube.Translate(0, -2 - (org - now), 0); } else { newCube.Translate(0, -2 + (now - org), 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "minY"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxY": org = newCube.faces[1].MinY(); now = selectedSide.Parent.faces[1].MinY(); newCube.TransCube.Translate(0, 2, 0); if (org < now) { newCube.Translate(0, 2 + (org - now), 0); } else { newCube.Translate(0, 2 - (org - now), 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "maxY"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "minX": org = newCube.faces[5].MaxX(); now = selectedSide.Parent.faces[5].MaxX(); newCube.TransCube.Translate(-2, 0, 0); if (org > now) { newCube.Translate(-2 - (org - now), 0, 0); } else { newCube.Translate(-2 + (now - org), 0, 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "minX"); CheckAllFaces(1, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxX": org = newCube.faces[3].MinX(); now = selectedSide.Parent.faces[3].MinX(); newCube.TransCube.Translate(2, 0, 0); if (org < now) { newCube.Translate(2 + (org - now), 0, 0); } else { newCube.Translate(2 - (org - now), 0, 0); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "maxX"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "minZ": org = newCube.faces[4].MaxZ(); now = selectedSide.Parent.faces[4].MaxZ(); newCube.TransCube.Translate(0, 0, -2); if (org > now) { newCube.Translate(0, 0, -2 - (org - now)); } else { newCube.Translate(0, 0, -2 + (now - org)); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "minZ"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; case "maxZ": org = newCube.faces[2].MinZ(); now = selectedSide.Parent.faces[2].MinZ(); newCube.TransCube.Translate(0, 0, 2); if (org < now) { newCube.Translate(0, 0, 2 + (org - now)); } else { newCube.Translate(0, 0, 2 - (org - now)); } newCube.Origin = new Cube(); newCube.Origin.Initialize(newCube); InitializeFace(ref newCube, ref selectedSide.Parent, "maxZ"); CheckAllFaces(0, 0, 0, 0, 0, 0, ref newCube); Model.Add(newCube); break; } DevideCurveCube(Model.Count - 1, ref newCube); } else { IsAddingCube = false; } IsAddingCube = false; selectedSide.IsPointed = false; }