Exemplo n.º 1
0
        static void DrawGradient(Controls.OpenGL.GLControl glControl)
        {
            if (SceneBackground == null)
            {
                SceneBackground           = new STLModel3D();
                SceneBackground.Triangles = new TriangleInfoList();

                var gradientColor1 = new Byte4Class(255, 19, 20, 21);
                var gradientColor2 = new Byte4Class(255, 39, 42, 61);

                var triangle = new Triangle();
                triangle.Vectors[0].Position = new Vector3Class(-1f, -1f, 0f);
                triangle.Vectors[0].Color    = gradientColor2;
                triangle.Vectors[1].Position = new Vector3Class(1f, 1f, 0);
                triangle.Vectors[1].Color    = gradientColor1;
                triangle.Vectors[2].Position = new Vector3Class(-1f, 1f, 0);
                triangle.Vectors[2].Color    = gradientColor1;

                SceneBackground.Triangles[0].Add(triangle);

                triangle = new Triangle();
                triangle.Vectors[0].Position = new Vector3Class(-1f, -1f, 0f);
                triangle.Vectors[0].Color    = gradientColor2;
                triangle.Vectors[1].Position = new Vector3Class(1f, -1f, 0);
                triangle.Vectors[1].Color    = gradientColor2;
                triangle.Vectors[2].Position = new Vector3Class(1f, 1f, 0);
                triangle.Vectors[2].Color    = gradientColor1;

                SceneBackground.Triangles[0].Add(triangle);

                SceneBackground.Loaded = true;
                SceneBackground.BindModel();
                SceneBackground.UpdateBinding();
            }

            GL.Viewport(0, 0, glControl.Width, glControl.Height);
            GL.MatrixMode(MatrixMode.Projection);
            GL.LoadIdentity();
            GL.MatrixMode(MatrixMode.Modelview);
            GL.LoadIdentity();
            GL.Disable(EnableCap.DepthTest);
            GL.Disable(EnableCap.Lighting);
            GL.PolygonMode(MaterialFace.Front, PolygonMode.Fill);

            GL.EnableClientState(ArrayCap.ColorArray);
            GL.EnableClientState(ArrayCap.VertexArray);

            foreach (var vboIndex in SceneBackground.VBOIndexes)
            {
                GL.BindBuffer(BufferTarget.ArrayBuffer, vboIndex);
                GL.ColorPointer(4, ColorPointerType.UnsignedByte, Vertex.Stride, new IntPtr(0));
                GL.VertexPointer(3, VertexPointerType.Float, Vertex.Stride, 4);
                GL.DrawArrays(PrimitiveType.Triangles, 0, SceneBackground.Triangles[0].Count * 3);
            }

            GL.DisableClientState(ArrayCap.ColorArray);
            GL.DisableClientState(ArrayCap.VertexArray);

            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Lighting);
        }
Exemplo n.º 2
0
        internal static void DetermineIfFaceDownContoursHasEdgeDown(ConcurrentDictionary <LowestPointPolygon, Dictionary <float, List <PolyNode> > > facingDownContours, SortedDictionary <float, PolyTree> modelContours, float materialSupportConeOverhangDistance, STLModel3D stlModel, Dictionary <int, float> sliceIndexKeys)
        {
            var maxMaterialSupportConeOverhangDistance = 100 * materialSupportConeOverhangDistance * CONTOURPOINT_TO_VECTORPOINT_FACTOR;

            //foreach(var facingDownContourItemAsync in facingDownContours)
            Parallel.ForEach(facingDownContours, facingDownContourItemAsync =>
            {
                {
                    var facingDownContourItem   = facingDownContourItemAsync;
                    var facingDownContour       = facingDownContourItem.Key;
                    var facingDownSliceIndex    = facingDownContour.SliceIndex;
                    var facingDownEndSliceIndex = facingDownSliceIndex + facingDownContourItem.Value.Count;

                    var contoursOnSameHeight         = modelContours[facingDownContour.SliceHeight];
                    var totalCurrentPolygonTriangles = new Dictionary <TriangleConnectionInfo, bool>();

                    var otherPolygonTriangles      = new Dictionary <TriangleConnectionInfo, bool>();
                    var totalOtherPolygonTriangles = new Dictionary <TriangleConnectionInfo, bool>();

                    //find nextr triange indexes till end sliceheight

                    if (stlModel.SliceIndexes.Count > facingDownContour.SliceIndex + 40)
                    {
                        var facingDownEndSliceIndexHeight = sliceIndexKeys[facingDownContour.SliceIndex + 40];
                        totalCurrentPolygonTriangles      = Helpers.TriangleHelper.GetConnectedTrianglesAbove(facingDownContour.Polygon.TriangleConnections, facingDownContour.SliceHeight, facingDownEndSliceIndexHeight, stlModel);


                        //other contours
                        foreach (var t in contoursOnSameHeight._allPolys)
                        {
                            if (!t.IsHole)
                            {
                                if (t != facingDownContour.Polygon)
                                {
                                    foreach (var triangleConnection in t.TriangleConnections.Keys)
                                    {
                                        if (!otherPolygonTriangles.ContainsKey(triangleConnection))
                                        {
                                            otherPolygonTriangles.Add(triangleConnection, false);
                                        }
                                    }
                                }
                            }
                        }

                        var t2 = Helpers.TriangleHelper.GetConnectedTrianglesEdgeDown(otherPolygonTriangles.Keys.ToArray(), totalCurrentPolygonTriangles, facingDownContour.SliceHeight, facingDownEndSliceIndexHeight, stlModel);

                        if (t2)
                        {
                            facingDownContour.HasEdgeDown = true;

                            foreach (var k in facingDownContour.Polygon.TriangleConnections)
                            {
                                stlModel.Triangles[k.Key.ArrayIndex][k.Key.TriangleIndex].UpdateColor(new Byte4Class(128, 0, 0, 255), true);
                            }
                        }
                    }
                }
            }
                             );


            stlModel.UpdateBinding();
        }