public override bool PushExistingToChild(int index, out IDynamicOctree octant)
            {
                var item = Objects[index];

                if (base.PushExistingToChild(index, out octant))
                {
                    var root = FindRoot(this) as BoundableNodeOctree;
                    root.OctantDictionary[item.GUID] = octant;
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
Example #2
0
        public static void CreateOctreeLineModel(this IDynamicOctree tree, LineBuilder builder)
        {
            if (tree == null)
            {
                return;
            }
            var box = tree.Bound;

            Vector3[] verts = new Vector3[8];
            verts[0] = box.Minimum;
            verts[1] = new Vector3(box.Minimum.X, box.Minimum.Y, box.Maximum.Z); //Z
            verts[2] = new Vector3(box.Minimum.X, box.Maximum.Y, box.Minimum.Z); //Y
            verts[3] = new Vector3(box.Maximum.X, box.Minimum.Y, box.Minimum.Z); //X

            verts[7] = box.Maximum;
            verts[4] = new Vector3(box.Maximum.X, box.Maximum.Y, box.Minimum.Z); //Z
            verts[5] = new Vector3(box.Maximum.X, box.Minimum.Y, box.Maximum.Z); //Y
            verts[6] = new Vector3(box.Minimum.X, box.Maximum.Y, box.Maximum.Z); //X
            builder.AddLine(verts[0], verts[1]);
            builder.AddLine(verts[0], verts[2]);
            builder.AddLine(verts[0], verts[3]);
            builder.AddLine(verts[7], verts[4]);
            builder.AddLine(verts[7], verts[5]);
            builder.AddLine(verts[7], verts[6]);

            builder.AddLine(verts[1], verts[6]);
            builder.AddLine(verts[1], verts[5]);
            builder.AddLine(verts[4], verts[2]);
            builder.AddLine(verts[4], verts[3]);
            builder.AddLine(verts[2], verts[6]);
            builder.AddLine(verts[3], verts[5]);

            if (tree.HasChildren)
            {
                foreach (IDynamicOctree child in tree.ChildNodes)
                {
                    if (child != null)
                    {
                        CreateOctreeLineModel(child, builder);
                    }
                }
            }
        }
Example #3
0
 public override bool Add(SceneNode item, out IDynamicOctree octant)
 {
     if (base.Add(item, out octant))
     {
         if (octant == null)
         {
             throw new Exception("Output octant is null");
         }
         ;
         var root = FindRoot(this) as BoundableNodeOctree;
         if (!root.OctantDictionary.ContainsKey(item.GUID))
         {
             root.OctantDictionary.Add(item.GUID, octant);
         }
         return(true);
     }
     else
     {
         return(false);
     }
 }
Example #4
0
 protected override IDynamicOctree CreateNodeWithParent(ref BoundingBox bound, List <SceneNode> objList, IDynamicOctree parent)
 {
     return(new BoundableNodeOctree(bound, objList, parent, parent.Parameter, this.stack));
 }
Example #5
0
 protected BoundableNodeOctree(BoundingBox bound, List <SceneNode> objList, IDynamicOctree parent, OctreeBuildParameter paramter, Stack <KeyValuePair <int, IDynamicOctree[]> > queueCache)
     : base(ref bound, objList, parent, paramter, queueCache)
 {
 }