示例#1
0
        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();
            }
        }
示例#2
0
        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();
        }
示例#3
0
        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>();
        }
示例#4
0
        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();
        }
示例#5
0
        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;
        }
示例#7
0
        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;
        }