Exemplo n.º 1
0
        public IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            double width  = context.AutoRotate.Mirror ? Height : Width;
            double height = context.AutoRotate.Mirror ? Width : Height;

            foreach (var locationConditional in Location.Flatten(context))
            {
                var location = locationConditional.Value;
                if ((context.AutoRotate.FlipType & Circuit.FlipType.Horizontal) != 0)
                {
                    location.Offset = new CircuitDiagram.Primitives.Vector(location.Offset.X - width, location.Offset.Y);
                }
                if ((context.AutoRotate.FlipType & Circuit.FlipType.Vertical) != 0)
                {
                    location.Offset = new CircuitDiagram.Primitives.Vector(location.Offset.X, location.Offset.Y - height);
                }

                var command = new Rectangle(
                    location,
                    width,
                    height,
                    StrokeThickness,
                    Fill);

                yield return(new Conditional <IRenderCommand>(command, locationConditional.Conditions));
            }
        }
Exemplo n.º 2
0
        public override IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            foreach (var location in Location.Flatten(context))
            {
                foreach (var alignment in Alignment)
                {
                    foreach (var rotation in Rotation)
                    {
                        var command = new RenderText(
                            location.Value,
                            alignment.Value,
                            TextRuns)
                        {
                            Rotation = rotation.Value,
                        };

                        var conditions = ConditionTreeBuilder.And(new[]
                        {
                            location.Conditions,
                            alignment.Conditions,
                            rotation.Conditions,
                        });

                        yield return(new Conditional <IRenderCommand>(command, conditions));
                    }
                }
            }
        }
Exemplo n.º 3
0
        public IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            var commands = Commands.Select(x =>
            {
                if (context.AutoRotate.Mirror)
                {
                    x = x.Reflect();
                }
                if ((context.AutoRotate.FlipType & Circuit.FlipType.Horizontal) == Circuit.FlipType.Horizontal)
                {
                    x = x.Flip(true);
                }
                if ((context.AutoRotate.FlipType & Circuit.FlipType.Vertical) == Circuit.FlipType.Vertical)
                {
                    x = x.Flip(false);
                }
                return(x);
            }).ToList();

            foreach (var start in Start.Flatten(context))
            {
                var command = new RenderPath(
                    start.Value,
                    Thickness,
                    Fill,
                    commands);

                yield return(new Conditional <IRenderCommand>(command, start.Conditions));
            }
        }
        public IEnumerable <Conditional <ComponentPointOffset> > Flatten(FlattenContext context)
        {
            var offset = new ComponentPointOffset
            {
                Axis   = Axis,
                Offset = Offset,
            };

            yield return(new Conditional <ComponentPointOffset>(offset, ConditionTree.Empty));
        }
Exemplo n.º 5
0
 public IEnumerable <Conditional <ComponentPointOffset> > Flatten(FlattenContext context)
 {
     foreach (var value in Values)
     {
         var offset = new ComponentPointOffset
         {
             Axis   = Axis,
             Offset = value.Value * (Negative ? -1 : 1),
         };
         yield return(new Conditional <ComponentPointOffset>(offset, value.Conditions));
     }
 }
Exemplo n.º 6
0
        public IEnumerable <RenderDescription> Flatten(FlattenContext context)
        {
            // TODO: Group by/simplify conditions

            var flatConditions = new ConditionTree(ConditionTree.ConditionOperator.AND, context.AncestorConditions, Conditions);

            foreach (var command in Value.SelectMany(x => x.Flatten(context)))
            {
                var conditions = new ConditionTree(ConditionTree.ConditionOperator.AND, flatConditions, command.Conditions);
                yield return(new RenderDescription(conditions, new[] { command.Value }));
            }
        }
Exemplo n.º 7
0
        public IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            foreach (var centre in Centre.Flatten(context))
            {
                var command = new Ellipse(
                    centre.Value,
                    RadiusX,
                    RadiusY,
                    StrokeThickness,
                    Fill);

                yield return(new Conditional <IRenderCommand>(command, centre.Conditions));
            }
        }
Exemplo n.º 8
0
        public virtual IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            foreach (var location in Location.Flatten(context))
            {
                var command = new RenderText(
                    location.Value,
                    Alignment,
                    TextRuns)
                {
                    Rotation = Rotation,
                };

                yield return(new Conditional <IRenderCommand>(command, location.Conditions));
            }
        }
Exemplo n.º 9
0
        public IEnumerable <Conditional <ComponentPoint> > Flatten(FlattenContext context)
        {
            var allOffsets = Offsets.Select(x => x.Flatten(context));

            foreach (var offsets in allOffsets.CartesianProduct())
            {
                double xOffset = offsets.Where(x => x.Value.Axis == OffsetAxis.X != context.AutoRotate.Mirror).Sum(x => x.Value.Offset);
                double yOffset = offsets.Where(x => x.Value.Axis == OffsetAxis.Y != context.AutoRotate.Mirror).Sum(x => x.Value.Offset);
                var    point   = new ComponentPoint(RelativeToX, RelativeToX, new Vector(xOffset, yOffset)).Flip(context.AutoRotate.FlipType, context.AutoRotate.FlipState);

                var conditions = ConditionTreeBuilder.And(offsets.Select(x => x.Conditions));

                yield return(new Conditional <ComponentPoint>(point, conditions));
            }
        }
Exemplo n.º 10
0
        public IEnumerable<Conditional<IRenderCommand>> Flatten(FlattenContext context)
        {
            foreach (var start in Start.Flatten(context))
            {
                foreach(var end in End.Flatten(context))
                {
                    var command = new Line(start.Value, end.Value, Thickness);
                    var conditions = new ConditionTree(
                        ConditionTree.ConditionOperator.AND,
                        start.Conditions,
                        end.Conditions);

                    yield return new Conditional<IRenderCommand>(command, conditions);
                }
            }
        }
Exemplo n.º 11
0
        public override IEnumerable <Conditional <IRenderCommand> > Flatten(FlattenContext context)
        {
            foreach (var location in Location.Flatten(context))
            {
                foreach (var width in Width)
                {
                    var conditions = ConditionTreeBuilder.And(new[]
                    {
                        location.Conditions,
                        width.Conditions,
                    });

                    var command = new Rectangle(
                        location.Value,
                        width.Value,
                        Height,
                        StrokeThickness,
                        Fill);

                    yield return(new Conditional <IRenderCommand>(command, conditions));
                }
            }
        }
Exemplo n.º 12
0
        public IEnumerable <Conditional <ConnectionDescription> > Flatten(FlattenContext context)
        {
            foreach (var start in Start.Flatten(context))
            {
                foreach (var end in End.Flatten(context))
                {
                    foreach (var edge in Edge)
                    {
                        var conditions = ConditionTreeBuilder.And(
                            start.Conditions,
                            end.Conditions,
                            edge.Conditions);

                        var connection = new ConnectionDescription(
                            start.Value,
                            end.Value,
                            edge.Value,
                            Name);

                        yield return(new Conditional <ConnectionDescription>(connection, conditions));
                    }
                }
            }
        }