private static void DrawAndSaveBlockchainTree(List <NodeModel> models, string directoryPath, string fileName)
        {
            var imagePath = $@"{directoryPath}\{fileName}";
            var drawer    = new TreeDrawer(imagePath);

            drawer.DrawGraph(models);
        }
예제 #2
0
 private void Init()
 {
     if (_statusBar == null)
     {
         _statusBar = new StatusBarDrawer();
     }
     if (_paramPanel == null)
     {
         _paramPanel = new ParamPanelDrawer();
     }
     _cursorChangeRect = new Rect(_currentViewWidth, 0f, 5f, position.height);
     if (Selection.activeObject is AiBehaviour && EditorUtility.IsPersistent(Selection.activeObject))
     {
         _target = (AiBehaviour)Selection.activeObject;
         _statusBar.Blackboard        = _target;
         _paramPanel.Blackboard       = _target;
         _treeDrawer                  = new TreeDrawer(_statusBar.CurrentTree);
         _statusBar.OnSelectedAiTree += _treeDrawer.RebuildTreeView;
     }
     else if (Selection.activeGameObject != null && Selection.activeGameObject.GetComponent <AiController>() != null && Selection.activeGameObject.GetComponent <AiController>().Behaviour != null)
     {
         _target = Selection.activeGameObject.GetComponent <AiController>().Behaviour;
         _statusBar.Blackboard        = _target;
         _paramPanel.Blackboard       = _target;
         _treeDrawer                  = new TreeDrawer(_statusBar.CurrentTree);
         _statusBar.OnSelectedAiTree += _treeDrawer.RebuildTreeView;
     }
     Repaint();
 }
예제 #3
0
 private void OnProjectChange()
 {
     if (Selection.activeObject == null && Selection.activeGameObject == null)
     {
         _treeDrawer            = null;
         _target                = null;
         _statusBar.Blackboard  = null;
         _paramPanel.Blackboard = null;
     }
     if (_target == null)
     {
         Init();
     }
 }
예제 #4
0
        public static CompositeSpriteBatchDrawer[] HallowedTree()
        {
            int[]      tileSets = { 3 };
            TreeDrawer drawer   = MakeTreeDrawer(tileSets, "5_2", topFrames: 9, branchFrames: 9, minHeight: 2, maxHeight: 4);

            drawer.trunkHeadstartFrames = 3;
            return(new CompositeSpriteBatchDrawer[]
            {
                drawer,
                new ClutterDrawer(GetTexture("Terraria/Tiles_110"),
                                  new int[] { Main.rand.Next(20), -1, -1, Main.rand.Next(20) },
                                  height: 20),
                new TileDrawer(GetTexture("Terraria/Tiles_109"), 39)
            });
        }
예제 #5
0
        void UpdateData()
        {
            MainTree.Nodes.Clear();

            if (Projects.Length == 0)
            {
                return;
            }

            StartModelIndex.Items.Clear();
            if (ProjectsList.SelectedIndex != -1)
            {
                StartModelIndex.Items.AddRange(Projects[ProjectsList.SelectedIndex].Competition.Teams.TeamClumps.ToArray());
                StartModelIndex.SelectedIndex = 0;
                //return;
            }

            var CC = Projects[ProjectsList.SelectedIndex];
            var C  = CC.Competition;

            TeamsCount.Text  = "Количество команд: " + C.Teams.Count.ToString();
            PeopleCount.Text = "Количество участников: " + C.Teams.Participants().Count.ToString();
            ModelsCount.Text = "Количество моделей в соревновании: " + C.Teams.TeamClumps.Count.ToString();
            RoundsCount.Text = "Количество проведённых туров: ~" + C.Teams.GetTeams()[0].Rounds.Count;

            string MJ = (CC.MainJudge.Length < 5) ? ((CC.MainJudge == "" | CC.MainJudge.Length < 2) ? ("Не задан") : ("[!] " + CC.MainJudge)) : (CC.MainJudge);
            string SK = (CC.Scorekeeper.Length < 5) ? ((CC.Scorekeeper == "" | CC.Scorekeeper.Length < 2) ? ("Не задан") : ("[!] " + CC.Scorekeeper)) : (CC.Scorekeeper);
            string LS = (CC.LaunchSupervisor.Length < 5) ? ((CC.LaunchSupervisor == "" | CC.LaunchSupervisor.Length < 2) ? ("Не задан") : ("[!] " + CC.LaunchSupervisor)) : (CC.LaunchSupervisor);

            MainJudge.Text    = "Главный судья: " + MJ;
            Scorekeeper.Text  = "Секретарь: " + SK;
            HeadOfAStart.Text = "Начальник старта: " + LS;


            var TCs = C.Teams?.TeamClumps;

            TreeDrawer.DrawCompetitionStructure(MainTree, TCs, C);
        }
예제 #6
0
 private void Init()
 {
     if (_statusBar == null) {
         _statusBar = new StatusBarDrawer();
     }
     if (_paramPanel == null) {
         _paramPanel = new ParamPanelDrawer();
     }
     _cursorChangeRect = new Rect(_currentViewWidth, 0f, 5f, position.height);
     if (Selection.activeObject is AiBehaviour && EditorUtility.IsPersistent(Selection.activeObject)) {
         _target = (AiBehaviour)Selection.activeObject;
         _statusBar.Blackboard = _target;
         _paramPanel.Blackboard = _target;
         _treeDrawer = new TreeDrawer(_statusBar.CurrentTree);
         _statusBar.OnSelectedAiTree += _treeDrawer.RebuildTreeView;
     } else if (Selection.activeGameObject != null && Selection.activeGameObject.GetComponent<AiController>() != null && Selection.activeGameObject.GetComponent<AiController>().Behaviour != null) {
         _target = Selection.activeGameObject.GetComponent<AiController>().Behaviour;
         _statusBar.Blackboard = _target;
         _paramPanel.Blackboard = _target;
         _treeDrawer = new TreeDrawer(_statusBar.CurrentTree);
         _statusBar.OnSelectedAiTree += _treeDrawer.RebuildTreeView;
     }
     Repaint();
 }
예제 #7
0
        public static void Main(string[] args)
        {
            ClearImagesDirectory();

            var input = File.ReadAllText(args[0]);

            var root = new Node {
                Type = NodeType.Null, Weight = 0
            };
            var nyt = root;

            var treeDrawer = new TreeDrawer();
            var dataWriter = new TableWriter();

            var nodesByCharacter = new Dictionary <char, Node>();
            var statsTable       = new List <StatsTableRow>();
            var rows             = new DataTableRow[0];

            foreach (char c in input)
            {
                if (nodesByCharacter.TryGetValue(c, out var existingCharacterNode))
                {
                    existingCharacterNode.Weight++;
                }
                else
                {
                    var parentNode       = Node.NewInternal;
                    var newCharacterNode = Node.NewCharacter(c);
                    nodesByCharacter.Add(c, newCharacterNode);

                    var oldNytParent = nyt.Parent;

                    if (oldNytParent is null)
                    {
                        root = parentNode;
                    }
                    else
                    {
                        oldNytParent.SetChildren(parentNode, oldNytParent.Right);
                    }

                    parentNode.SetChildren(nyt, newCharacterNode);
                }

                //treeDrawer.DrawNodesToFile($"{ResultsDirectory}/tree{i}.png", NodeUtils.PrepareDrawNodes(root).ToDictionary(dn => dn.OrderNumber));

                var characterNodesWithOrderNumberByCharacter = NodeUtils.FlattenNodes(new[] { root })
                                                               .Reverse()
                                                               .Select((node, index) => (node, index))
                                                               .Where(t => t.node.Type == NodeType.Character)
                                                               .ToDictionary(t => t.node.Character);

                rows = root.BuildDataTable(string.Empty).Select(t => new DataTableRow(
                                                                    characterNodesWithOrderNumberByCharacter[t.character].index,
                                                                    t.character,
                                                                    t.occurrences,
                                                                    t.code)).OrderByDescending(r => r.OrderNumber)
                       .ToArray();

                var probabilityByChar     = GetProbabilityByChar(rows);
                var averageCodeWordLength = CalculateAverageCodewordLength(rows, probabilityByChar);
                var entropy = CalculateEntropy(probabilityByChar.Values);

                statsTable.Add(new StatsTableRow(c, averageCodeWordLength, entropy));

                dataWriter.WriteToFile(
                    $"{ResultsDirectory}/tree{rows.Sum(r => r.Occurrences)}.csv",
                    new[] { "Order number", "Character", "Occurrences", "Codeword" },
                    rows);

                Console.WriteLine($"Odczytano znak [{c}], pomyślnie zapisano grafikę oraz tabelę danych.");
            }

            dataWriter.WriteToFile(
                $"{ResultsDirectory}/_stats.csv",
                new[] { "Character", "Average Codeword Length", "Entropy" },
                statsTable);

            var compressed = CompressText(
                rows.ToDictionary(r => r.Character, r => r.CodeWord),
                input);

            File.WriteAllBytes($"{ResultsDirectory}/compressed.huf", compressed);

            Console.WriteLine("Kodowanie zakończone");
            Console.ReadKey();
        }
예제 #8
0
 void RedrawTree()
 {
     TreeDrawer.DrawCompetitionStructure(MainTree);
 }
예제 #9
0
 private void OnProjectChange()
 {
     if (Selection.activeObject == null && Selection.activeGameObject == null) {
         _treeDrawer = null;
         _target = null;
         _statusBar.Blackboard = null;
         _paramPanel.Blackboard = null;
     }
     if (_target == null) {
         Init();
     }
 }