예제 #1
0
        public StreamingSource(int[] message, SimpleShader simpleShader)
            : base(simpleShader, 0, 1)
        {
            Message = message;

            Size = new Vector2(Delta * (Message.Length + 1), Delta * 2);

            InstasingList.Add(new VisualUniforms(Color4.Black));
            for (int i = 0; i < Message.Length; i++)
            {
                var bit   = message[i];
                var glyph = new Glyph7x5(bit == 0?'0':'1',
                                         new Vector2(Delta * i + 4, 2),
                                         SimpleShader);
                BitMessage.Add(glyph);
                Childrens.Add(glyph);
            }
            var vertices = new List <Vector2>();

            vertices.AddRange(Polyline(new[]
            {
                new Vector2(Delta * Message.Length, 0),
                new Vector2(-1, 0),
                new Vector2(-1, Delta * 2),
                new Vector2(Delta * Message.Length, Delta * 2)
            }, 2));

            CreateOutput(0, ConnectorOrientation.Right, new Vector2(Delta * (Message.Length + 1), 0));

            Shape = vertices.ToArray();
        }
예제 #2
0
        public CrossCursor(SimpleShader simpleShader) : base(simpleShader)
        {
            InstasingList.Add(new VisualUniforms(Color.Black));

            int count = 4;

            for (int i = 0; i < count; ++i)
            {
                double arg = Math.PI * 2 * (i + 0.5) / count;
                float  cos = (float)Math.Cos(arg) * Delta / 2;
                float  sin = (float)Math.Sin(arg) * Delta / 2;

                _verticesDefaultCursor.AddRange(Line(cos, sin, 0, 0, 2));
            }

            _verticesWireCursor.AddRange(new []
            {
                new Vector2(0, 0),
                new Vector2(2, 0),
                new Vector2(0, 2),
                new Vector2(7, 5),
                new Vector2(5, 7),
                new Vector2(5, 7),

                new Vector2(6, 8),
                new Vector2(6, 8),
                new Vector2(8, 6),
                new Vector2(8, 10),
                new Vector2(10, 8),
            });



            Shape = _verticesDefaultCursor.ToArray();
        }
예제 #3
0
        public Field(int width, int height, SimpleShader simpleShader) : base(simpleShader)
        {
            Width            = width;
            Height           = height;
            EmploymentMatrix = new EmploymentMatrix(Width, Height);


            List <Vector2> vertices = new List <Vector2>();

            for (int i = 0; i <= Height; i += (int)Delta)
            {
                vertices.AddRange(Line(new Vector2(0, i), new Vector2(Width, i), 1f));
            }

            for (int i = 0; i <= Width; i += (int)Delta)
            {
                vertices.AddRange(Line(new Vector2(i, 0), new Vector2(i, Height), 1f));
            }
            Shape = vertices.ToArray();
            InstasingList.Add(new VisualUniforms(Color.LightGray));

            CrossCursor = new CrossCursor(simpleShader);



            SelectRectangle = new DrawingVisual(simpleShader);
            SelectRectangle.InstasingList.Add(new VisualUniforms(new Color4(0, 0, 0.5f, 0.2f)));
            SelectRectangle.IsVisible = false;
            Childrens.Add(SelectRectangle);
        }
예제 #4
0
        public StreamingSplitter(SimpleShader simpleShader)
            : base(simpleShader, 1, 2)
        {
            Size = new Vector2(Delta * 2, Delta * 2);
            InstasingList.Add(new VisualUniforms(Color4.Black));
            Shape = Circle(new Vector2(Delta, Delta), 0, 20);
            CreateInput(0, ConnectorOrientation.Left, new Vector2(0, Delta));

            CreateOutput(0, ConnectorOrientation.Right, new Vector2(Delta * 2, Delta));
            CreateOutput(1, ConnectorOrientation.Bottom, new Vector2(Delta, 0));
        }
예제 #5
0
 public void Dispose()
 {
     GL.DeleteBuffer(vId);
     GL.DeleteVertexArray(vao);
     _shape = null;
     InstasingList.Clear();
     foreach (var visuals in Childrens)
     {
         visuals.Dispose();
     }
     Childrens.Clear();
 }
예제 #6
0
        public Connector(SimpleShader simpleShader, ConnectorOrientation orientation, ConnectorType type)
            : base(simpleShader)
        {
            Orientation = orientation;
            Type        = type;
            InstasingList.Add(new VisualUniforms(Color4.Black));
            var vertices = new List <Vector2>();

            vertices.AddRange(Circle(new Vector2(0, 0), 3, 12));
            vertices.AddRange(Line(new Vector2(0, 0), new Vector2(Delta, 0), 2));
            switch (Type)
            {
            case ConnectorType.Input:
                vertices.AddRange(Polyline(new[]
                {
                    new Vector2(Delta / 2, Delta * 0.3f),
                    new Vector2(Delta * 0.9f, 0),
                    new Vector2(Delta / 2, -Delta * 0.3f),
                }, 2));
                break;

            case ConnectorType.Output:
                vertices.AddRange(Polyline(new[]
                {
                    new Vector2(Delta / 2, Delta * 0.3f),
                    new Vector2(Delta * 0.1f, 0),
                    new Vector2(Delta / 2, -Delta * 0.3f),
                }, 2));
                break;
            }
            Shape = vertices.ToArray();
            switch (Orientation)
            {
            case ConnectorOrientation.Left:
                Rotate = (float)0;
                break;

            case ConnectorOrientation.Top:
                Rotate = (float)Math.PI * 3 / 2;
                break;

            case ConnectorOrientation.Right:
                Rotate = (float)Math.PI;
                break;

            case ConnectorOrientation.Bottom:
                Rotate = (float)Math.PI / 2;
                break;
            }
        }
예제 #7
0
        public StreamingReceiver(SimpleShader simpleShader) : base(simpleShader, 1, 0)
        {
            Size = new Vector2(Delta * 8, Delta * 2);
            InstasingList.Add(new VisualUniforms(Color4.Black));

            var vertices = new List <Vector2>();

            vertices.AddRange(Polyline(new[]
            {
                new Vector2(Delta, 0),
                new Vector2(Delta * 8, 0),
                new Vector2(Delta * 8, Delta * 2),
                new Vector2(Delta, Delta * 2)
            }, 2));

            CreateInput(0, ConnectorOrientation.Left, new Vector2(0, 0));
            Shape = vertices.ToArray();
        }
예제 #8
0
        public StreamingWire(SimpleShader simpleShader) :
            base(simpleShader, 1, 1)
        {
            InstasingList.Add(new VisualUniforms(Color4.Black));
            MovingWire = new DrawingVisual(SimpleShader);
            MovingWire.InstasingList.Add(new VisualUniforms(Color4.Red));
            OldMovingWire = new DrawingVisual(SimpleShader);
            OldMovingWire.InstasingList.Add(new VisualUniforms(Color4.Red));
            MovingCircle = new DrawingVisual(SimpleShader);
            MovingCircle.InstasingList.Add(new VisualUniforms(Color4.Black));
            MovingCircle.Scale = new Vector2(0, 0);
            MovingCircle.Shape = Circle(Vector2.Zero, Thickness / 2, 10);
            Childrens.Add(OldMovingWire);
            Childrens.Add(MovingWire);
            Childrens.Add(MovingCircle);

            pathAnimation = new PathAnimation(this);
        }
예제 #9
0
 public Sumator(Shader shader) : base(0, shader)
 {
     InstasingList.Add(new VisualUniforms(Color4.Black));
     WiresIn.CollectionChanged += (s, e) =>
     {
         if (e.NewItems != null)
         {
             foreach (Wire wire in e.NewItems)
             {
                 wire.ValueChaged += OutWireUpdate;
             }
         }
         if (e.OldItems != null)
         {
             foreach (Wire wire in e.OldItems)
             {
                 wire.ValueChaged -= OutWireUpdate;
             }
         }
     };
 }
예제 #10
0
        public StreamingSummator(SimpleShader simpleShader, int inCount)
            : base(simpleShader, inCount, 1)
        {
            Size = new Vector2(Delta * 4, Delta * 4);
            InstasingList.Add(new VisualUniforms(Color4.Black));

            var vertices = new List <Vector2>();

            var center = new Vector2(Delta * 2, Delta * 2);

            vertices.AddRange(Round(center, Delta, 2, 60));
            var l = new Vector2(Delta * 1.5f, Delta * 2);
            var r = new Vector2(Delta * 2.5f, Delta * 2);

            vertices.AddRange(Line(l, r, 2));
            var u = new Vector2(Delta * 2, Delta * 2.5f);
            var d = new Vector2(Delta * 2, Delta * 1.5f);

            vertices.AddRange(Line(u, d, 2));

            CreateInput(0, ConnectorOrientation.Left, new Vector2(0, Delta * 2));
            CreateOutput(0, ConnectorOrientation.Right, new Vector2(Delta * 4, Delta * 2));

            if (Up)
            {
                CreateInput(1, ConnectorOrientation.Top, new Vector2(Delta * 2, Delta * 4));
            }
            else if (Down)
            {
                CreateInput(1, ConnectorOrientation.Bottom, new Vector2(Delta * 2, 0));
            }

            Shape = vertices.ToArray();

            GlyphPlus = new Glyph7x5(' ', new Vector2(Delta * 1, -5), SimpleShader);
            Childrens.Add(GlyphPlus);

            GlyphEqual = new Glyph7x5(' ', new Vector2(Delta * 3, -5), SimpleShader);
            Childrens.Add(GlyphEqual);
        }
예제 #11
0
        public StreamingRegister(SimpleShader simpleShader)
            : base(simpleShader, 1, 1)
        {
            Size = new Vector2(Delta * 6, Delta * 2);
            InstasingList.Add(new VisualUniforms(Color4.Black));
            var vertices = new List <Vector2>();

            vertices.AddRange(Rectangle(
                                  new Vector2(Delta, 0),
                                  new Vector2(Delta * 5, Delta * 2), 2));
            Shape = vertices.ToArray();

            CreateInput(0, ConnectorOrientation.Left, new Vector2(0, Delta));
            CreateOutput(0, ConnectorOrientation.Right, new Vector2(Delta * 6, Delta));

            GlyphWord.CollectionChanged += (s, e) =>
            {
                if (e.NewItems != null)
                {
                    foreach (Glyph7x5 glyph in e.NewItems)
                    {
                        Childrens.Add(glyph);
                    }
                }
                if (e.OldItems != null)
                {
                    foreach (Glyph7x5 glyph in e.OldItems)
                    {
                        Childrens.Remove(glyph);
                    }
                }
            };

            Word        = _word;
            MemoryGlyph = new Glyph7x5('0', new Vector2(Delta * 2.5f, Delta * 2 + 2), SimpleShader);
            Childrens.Add(MemoryGlyph);
        }
예제 #12
0
 public DigitalComponent(SimpleShader shader) : base(shader)
 {
     InstasingList.Add(new VisualUniforms(Color4.Black));
 }
예제 #13
0
파일: Wire.cs 프로젝트: olegbom/LinearCodes
 public Wire(SimpleShader shader) : base(shader)
 {
     InstasingList.Add(new VisualUniforms(ZeroColor4));
 }
예제 #14
0
 public Button(float radius, SimpleShader simpleShader) : base(simpleShader)
 {
     Radius = radius;
     InstasingList.Add(new VisualUniforms(DefaultColor4));
     Shape = Circle(new Vector2(0, 0), radius, 60);
 }