protected void UpdateFiltered()
 {
     FilteredNode = Filter(RootNode, n => n is RenderableList ||
                           (_filter?.Filter(n.Name) ?? n.Name?.IndexOf("ROAD", StringComparison.Ordinal) == 1));
     FilteredNode.UpdateBoundingBox();
     TrianglesCount = FilteredNode.BoundingBox.HasValue ? FilteredNode.GetTrianglesCount() : 0;
     IsDirty        = true;
 }
        private void filterBtn_OnClick(object sender, EventArgs e)
        {
            SearchCriteriaForm criteraForm = new SearchCriteriaForm(false);

            if (filteredNodes.Count > 0)
            {
                filterBtn.Enabled = false;
                searchBtn.Enabled = false;
                resultTree.BeginUpdate();

                unfilterNodes();

                resultTree.EndUpdate();
                filterBtn.Enabled = true;
                searchBtn.Enabled = true;
                filterBtn.Text    = "Filter";
            }
            else
            {
                if (criteraForm.ShowDialog(this) == DialogResult.OK)
                {
                    filterBtn.Enabled = false;
                    searchBtn.Enabled = false;
                    resultTree.BeginUpdate();

                    if (!filterNode(resultTree.Nodes[0], criteraForm.GetSearchCriteria()))
                    {
                        foreach (TreeNode childNode in resultTree.Nodes[0].Nodes)
                        {
                            FilteredNode filteredNode = new FilteredNode(childNode, resultTree.Nodes[0]);
                            filteredNodes.Add(filteredNode);
                        }

                        resultTree.Nodes[0].Nodes.Clear();
                    }

                    resultTree.EndUpdate();
                    filterBtn.Enabled = true;
                    searchBtn.Enabled = true;

                    if (filteredNodes.Count > 0)
                    {
                        filterBtn.Text = "Unfilter";
                    }
                }
            }
        }
        private bool filterNode(TreeNode rootNode, SearchCriteria criteria)
        {
            bool nodeMatch = rootNode.Tag == null ? false :
                             rootNode.CompareSearchCriteria(criteria);

            if (rootNode.Nodes.Count > 0)
            {
                List <TreeNode> failedNodes = new List <TreeNode>();

                foreach (TreeNode childNode in rootNode.Nodes)
                {
                    if (filterNode(childNode, criteria))
                    {
                        nodeMatch = true;
                    }
                    else
                    {
                        failedNodes.Add(childNode);
                    }
                }

                if (nodeMatch && failedNodes.Count > 0)
                {
                    foreach (TreeNode failedNode in failedNodes)
                    {
                        if (failedNode.Tag != null)
                        {
                            FilteredNode filteredNode = new FilteredNode(failedNode, rootNode);
                            filteredNodes.Add(filteredNode);

                            rootNode.Nodes.Remove(failedNode);
                        }
                    }
                }
            }

            return(nodeMatch);
        }
Exemple #4
0
        protected override void DrawOverride()
        {
            EnsureAiLaneAllRight();
            Camera.UpdateViewMatrix();

            // just in case
            DeviceContext.ClearRenderTargetView(_buffer0.TargetView, Color.Black);
            DeviceContext.ClearRenderTargetView(_buffer1.TargetView, Color.Black);
            DeviceContext.ClearRenderTargetView(RenderTargetView, Color.Transparent);

            // render to buffer-0
            DeviceContext.OutputMerger.SetTargets(_buffer0.TargetView);

            DeviceContext.OutputMerger.BlendState = null;
            DeviceContext.Rasterizer.State        = DeviceContextHolder.States.DoubleSidedState;
            FilteredNode.Draw(DeviceContextHolder, Camera, SpecialRenderMode.Simple);
            DeviceContext.Rasterizer.State = null;

            // blur to buffer-0 using buffer-1 as temporary
            DeviceContextHolder.GetHelper <TrackMapBlurRenderHelper>().Blur(DeviceContextHolder, _buffer0, _buffer1);

            // outline map and add inset shadow to buffer-1 (alpha is in green channel for optional FXAA)
            DeviceContextHolder.GetHelper <TrackMapRenderHelper>().Draw(DeviceContextHolder, _buffer0.View, _buffer1.TargetView);

            // move alpha from green channel to alpha-channel
            if (UseFxaa)
            {
                // applying FXAA first
                DeviceContextHolder.GetHelper <FxaaHelper>().Draw(DeviceContextHolder, _buffer1.View, _buffer0.TargetView);
                DeviceContextHolder.GetHelper <TrackMapRenderHelper>().Final(DeviceContextHolder, _buffer0.View, RenderTargetView, !ShotMode);
            }
            else
            {
                // directly
                DeviceContextHolder.GetHelper <TrackMapRenderHelper>().Final(DeviceContextHolder, _buffer1.View, RenderTargetView, !ShotMode);
            }
        }