Beispiel #1
0
 public static void MarkAsNotTree(CTree pTree)
 {
     pTree.notTree = true;
     //to remove references from arrays
     DeleteTree(pTree);
     NotTrees.Add(pTree);
 }
Beispiel #2
0
        /// <summary>
        /// If not-tree is very close to some tree then it is probably part of that tree.
        /// Not-tree will be merged into the closest one.
        /// </summary>
        public static void TryMergeNotTrees()
        {
            IsMerging = true;
            DateTime mergeStartTime = DateTime.Now;

            CDebug.WriteLine("TryMergeNotTrees");

            //sort in descending order - trees will be processed from the end
            NotTrees.Sort((b, a) => b.peak.Center.Z.CompareTo(a.peak.Center.Z));
            //TODO: CHECK!!! THIS IS NOT DESCENDING ORDER???


            int treeCountBeforeMerge = NotTrees.Count;

            for (int i = NotTrees.Count - 1; i >= 0; i--)
            {
                CTree notTree = NotTrees[i];
                //if(notTree.Equals(335))
                //	CDebug.WriteLine("");

                //just debug
                //List<CTree> closeTrees2 = CProjectData.Points.treeNormalArray.
                //		  GetTreesInMaxStepsFrom(notTree.peak.Center, 1);

                List <CTree> closeTrees = new List <CTree>();
                //fisrt try to get a tree on the same detail field
                CTree t = CProjectData.Points.treeDetailArray.
                          GetFieldContainingPoint(notTree.peak.Center).GetSingleDetectedTree();
                if (t != null)
                {
                    closeTrees.Add(t);
                }

                //if no tree is on the same field get some in close distance
                if (closeTrees.Count == 0)
                {
                    closeTrees = CProjectData.Points.treeDetailArray.
                                 GetTreesInMaxStepsFrom(notTree.peak.Center, 2);
                }

                //merge not-tree with the closest tree but only if it is higher.
                //if not then it is probably some noise above the regular tree
                if (closeTrees.Count > 0 &&
                    closeTrees[0].GetTreeHeight() > notTree.GetTreeHeight() &&
                    !notTree.IsLocalMaximum())
                {
                    closeTrees[0].MergeWith(notTree);
                    NotTrees.RemoveAt(i);
                }
            }
            IsMerging = false;

            CDebug.Duration("Not-trees merge", mergeStartTime);
            CDebug.Count("Number of not-trees merged", treeCountBeforeMerge - Trees.Count);
        }