public void Evaluate(int SpreadMax)
        {
            if (FRectangle.IsChanged || FGap.IsChanged)
            {
                FPacked.SliceCount = FRectangle.SliceCount;
                FID.SliceCount     = FRectangle.SliceCount;
                var rectlist = FRectangle.Select((wh, i) => new Rect(0, 0, wh.x, wh.y, i)).ToList();
                rectlist.Sort((a, b) => b.Area.CompareTo(a.Area));

                var    packer = new RectanglePacker();
                double dimw   = 0;
                double dimh   = 0;
                for (int i = 0; i < rectlist.Count; i++)
                {
                    var rect = rectlist[i];
                    FSuccess[0] = packer.Pack(rect.W + FGap[0].x, rect.H + FGap[0].y, out rect.X, out rect.Y);
                    rectlist[i] = rect;
                    FID[i]      = rect.ID;
                    FPacked[i]  = new Vector4D(rect.X, rect.Y, rect.W, rect.H);
                    dimw        = Math.Max(dimw, rect.X + rect.W);
                    dimh        = Math.Max(dimh, rect.Y + rect.H);
                }
                FDim[0] = new Vector2D(dimw, dimh);
            }
        }
 public void Evaluate(int SpreadMax)
 {
     if (DirectoryIn.IsChanged || UpdateIn.TryGetSlice(0))
     {
         ExistsOut.AssignFrom(DirectoryIn.Select(Directory.Exists));
     }
 }
Exemple #3
0
                #pragma warning restore
        #endregion fields & pins

        //called when data for any output pin is requested
        public void Evaluate(int SpreadMax)
        {
            if (FInput.IsChanged || FIndex.IsChanged)
            {
                FOutput.AssignFrom(FInput);
                foreach (int i in FIndex.Select(x => x % FInput.SliceCount).Distinct().OrderByDescending(x => x))
                {
                    FOutput.RemoveAt(i);
                }
            }
        }
Exemple #4
0
        public void Evaluate(int spreadMax)
        {
            if (!MiceIn.IsChanged)
            {
                return;
            }

            MouseOut.SliceCount = MiceIn.GetMaxSliceCount();
            for (int i = 0; i < MouseOut.SliceCount; i++)
            {
                var mice = MiceIn.Select((ms, j) => ms.SliceCount > 0 ? ms[j] ?? Mouse.Empty : Mouse.Empty);
                MouseOut[i] = new Mouse(Observable.Merge(mice.Select(m => m.MouseNotifications)), false);
            }
        }
Exemple #5
0
        public void Evaluate(int SpreadMax)
        {
            if (!SpreadUtils.AnyChanged(FInput, FArgumentsIn))
            {
                return;
            }

            FOutput.SliceCount = SpreadMax;
            for (int i = 0; i < SpreadMax; i++)
            {
                var arguments = FArgumentsIn.Select(a => a[i]);
                FOutput[i] = string.Format(FInput[i], arguments.ToArray());
            }
        }
Exemple #6
0
#pragma warning restore

        public void Evaluate(int SpreadMax)
        {
            var flow = FFlowControl[0];

            FChange.SliceCount = 0;

            switch (flow)
            {
            case FlowControlEnum.Block:
                FChange.AssignFrom(Enumerable.Repeat(false, 1));
                break;

            case FlowControlEnum.Default:
                if (FInput.IsChanged && !FInput.IsAnyInvalid())
                {
                    FOutput.FlushResult(FInput);
                    FChange.AssignFrom(Enumerable.Repeat(true, 1));
                }
                else
                {
                    FChange.AssignFrom(Enumerable.Repeat(false, 1));
                }
                break;

            case FlowControlEnum.Inspect:
                var change = FInput.Select(message => message.IsChanged);
                if (FInput.IsChanged || change.Any())
                {
                    FOutput.FlushResult(FInput);
                    FChange.AssignFrom(change);
                }
                else
                {
                    FChange.AssignFrom(Enumerable.Repeat(false, 1));
                }
                break;

            case FlowControlEnum.Force:
                FOutput.FlushResult(FInput);
                FChange.AssignFrom(Enumerable.Repeat(true, 1));
                break;

            default:
                FChange.AssignFrom(Enumerable.Repeat(false, 1));
                break;
            }
        }
Exemple #7
0
 public void Evaluate(int spreadMax)
 {
     if (KeyCodeIn.IsChanged)
     {
         KeyOut.AssignFrom(
             KeyCodeIn.Select(k =>
         {
             if (k < 0 || k > 255)
             {
                 return(Keys.None.ToString());
             }
             return(((Keys)k).ToString());
         }
                              )
             );
     }
 }
Exemple #8
0
 public void Evaluate(int spreadMax)
 {
     if (KeyIn.IsChanged)
     {
         KeyCodeOut.AssignFrom(
             KeyIn.Select(s =>
         {
             Keys result;
             if (Enum.TryParse <Keys>(s, true, out result))
             {
                 return((int)result);
             }
             else
             {
                 return((int)Keys.None);
             }
         }
                          )
             );
     }
 }
Exemple #9
0
        public void Evaluate(int SpreadMax)
        {
            var flow = FFlowControl[0];

            FChange.SliceCount = 0;

            SpreadMax = FInput.SliceCount;

            if (FForce[0])
            {
                flow = FlowControlEnum.Force;
            }

            switch (flow)
            {
            case FlowControlEnum.Default:
                if (FInput.IsChanged && !FInput.IsAnyInvalid())
                {
                    FOutput.FlushResult(FInput);
                    FChange.FlushItem(true);
                }
                else
                {
                    FChange.FlushItem(false);
                }
                break;

            case FlowControlEnum.Inspect:
                if (FInput.IsAnyInvalid())
                {
                    FChange.FlushItem(false);
                    break;
                }

                var change = FInput.Select(message => message.IsChanged);
                if (FInput.IsChanged || change.Any())
                {
                    if (FFilter[0])
                    {
                        FOutput.FlushResult(FInput.Where(message => message.IsChanged));
                    }
                    else
                    {
                        FOutput.FlushResult(FInput);
                    }
                    FChange.FlushResult(change);
                }
                else
                {
                    FChange.FlushResult(Enumerable.Repeat(false, SpreadMax));
                }
                break;

            case FlowControlEnum.SinceLastFrame:
                if (FInput.IsAnyInvalid())
                {
                    FChange.FlushItem(false);
                    break;
                }

                var changed = FInput.Select(message => message.HasRecentCommit());
                if (FInput.IsChanged || changed.Any())
                {
                    if (FFilter[0])
                    {
                        FOutput.FlushResult(FInput.Where(message => message.HasRecentCommit()));
                    }
                    else
                    {
                        FOutput.FlushResult(FInput);
                    }
                    FChange.FlushResult(changed);
                }
                else
                {
                    FChange.FlushResult(Enumerable.Repeat(false, SpreadMax));
                }
                break;

            case FlowControlEnum.Block:
                FChange.FlushItem(false);
                break;

            case FlowControlEnum.Force:
                FOutput.FlushResult(FInput);
                FChange.FlushResult(Enumerable.Repeat(true, SpreadMax));
                break;

            default:     // all bases covered?
                FChange.FlushItem <bool>(false);
                break;
            }
        }
        public void Evaluate(int SpreadMax)
        {
            if (!FEnabled[0])
            {
                wasDisabled = true;
                return;
            }

            // check for changes
            bool newData = false;

            // has number of functioncalls changed?
            if (FInSelector.SliceCount != functionCalls.Count && FInSelector[0] != null)
            {
                newData = true;
                functionCalls.AddRange(FInSelector.Select(item => item.FunctionCall));
            }

            // have functioncalls changed?
            if (!newData)
            {
                for (int i = 0; i < FInSelector.SliceCount; i++)
                {
                    if (FInSelector[i] != null && FInSelector[i].FunctionCall != functionCalls[i])
                    {
                        newData          = true;
                        functionCalls[i] = FInSelector[i].FunctionCall;
                    }
                }
            }

            // was there an update in selectors?
            if (!newData)
            {
                for (int i = 0; i < FInSelector.SliceCount; i++)
                {
                    if (FInSelector[i] != null && FInSelector[i].HasUpdate)
                    {
                        newData = true;
                        break;
                    }
                }
            }

            // re-enabled?
            if (!newData && wasDisabled)
            {
                wasDisabled = false;  newData = true;
            }

            // abort if nothing has changed
            if (!newData)
            {
                return;
            }

            if (FPreventDoubles[0]) // output only unique data
            {
                FVariables.SliceCount          = FFunctionCall.SliceCount = FFunctions.SliceCount =
                    FOutCSEntry.SliceCount     = FOutCustomSemantic.SliceCount =
                        FOutRSEntry.SliceCount = FOutResourceSemantic.SliceCount = 1;

                FFunctionCall[0].SliceCount       = FVariables[0].SliceCount = FFunctions[0].SliceCount =
                    FOutCSEntry[0].SliceCount     = FOutCustomSemantic[0].SliceCount =
                        FOutRSEntry[0].SliceCount = FOutResourceSemantic[0].SliceCount = 0;

                for (int i = 0; i < SpreadMax; i++)
                {
                    Selector selector = FInSelector[i];
                    if (selector != null)
                    {
                        // functioncalls
                        if (!FFunctionCall[0].Contains(selector.FunctionCall))
                        {
                            FFunctionCall[0].Add(selector.FunctionCall);
                        }
                        // variables
                        foreach (string variable in selector.Variables)
                        {
                            if (!FVariables[0].Contains(variable))
                            {
                                FVariables[0].Add(variable);
                            }
                        }
                        // functions
                        foreach (string funcdef in selector.Functions)
                        {
                            if (!FFunctions[0].Contains(funcdef))
                            {
                                FFunctions[0].Add(funcdef);
                            }
                        }
                        // custom semantic entries
                        foreach (string cs in selector.CustomSemanticEntries)
                        {
                            if (!FOutCSEntry[0].Contains(cs))
                            {
                                FOutCSEntry[0].Add(cs);
                            }
                        }
                        // custom semantics
                        foreach (IDX11RenderSemantic csIn in selector.GetCustomSemantics())
                        {
                            bool canAdd = true;
                            foreach (IDX11RenderSemantic cs in FOutCustomSemantic[0])
                            {
                                if (cs.Semantic == csIn.Semantic)
                                {
                                    canAdd = false;
                                }
                            }
                            if (canAdd)
                            {
                                FOutCustomSemantic[0].Add(csIn);
                            }
                        }

                        // resource semantic entries
                        foreach (string rs in selector.ResourceSemanticEntries)
                        {
                            if (!FOutRSEntry[0].Contains(rs))
                            {
                                FOutRSEntry[0].Add(rs);
                            }
                        }
                        // resource semantics
                        foreach (DX11Resource <IDX11RenderSemantic> rsIn in selector.GetResourceSemantics())
                        {
                            bool canAdd = true;
                            foreach (DX11Resource <IDX11RenderSemantic> rs in FOutResourceSemantic[0])
                            {
                                if (rs.Equals(rsIn))
                                {
                                    canAdd = false;
                                }
                            }
                            if (canAdd)
                            {
                                FOutResourceSemantic[0].Add(rsIn);
                            }
                        }
                    }
                }
            }
            else // ouput all selector data with correct bin sizes
            {
                FVariables.SliceCount          = FFunctionCall.SliceCount = FFunctions.SliceCount =
                    FOutCSEntry.SliceCount     = FOutCustomSemantic.SliceCount =
                        FOutRSEntry.SliceCount = FOutResourceSemantic.SliceCount = SpreadMax;

                for (int i = 0; i < SpreadMax; i++)
                {
                    FFunctionCall[i].SliceCount       = FVariables[i].SliceCount = FFunctions[i].SliceCount =
                        FOutCSEntry[i].SliceCount     = FOutCustomSemantic[i].SliceCount =
                            FOutRSEntry[i].SliceCount = FOutResourceSemantic[i].SliceCount = 0;

                    Selector selector = FInSelector[i];
                    if (selector != null)
                    {
                        FFunctionCall[i].Add(selector.FunctionCall);
                        FVariables[i].AssignFrom(selector.Variables);
                        FFunctions[i].AssignFrom(selector.Functions);
                        FOutCSEntry[i].AssignFrom(selector.CustomSemanticEntries);
                        FOutCustomSemantic[i].AssignFrom(selector.GetCustomSemantics());
                        FOutRSEntry[i].AssignFrom(selector.ResourceSemanticEntries);
                        FOutResourceSemantic[i].AssignFrom(selector.GetResourceSemantics());
                    }
                }
            }
        }