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); } }
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); } } } }
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); } }
protected override IDynamicOctree CreateNodeWithParent(ref BoundingBox bound, List <SceneNode> objList, IDynamicOctree parent) { return(new BoundableNodeOctree(bound, objList, parent, parent.Parameter, this.stack)); }
protected BoundableNodeOctree(BoundingBox bound, List <SceneNode> objList, IDynamicOctree parent, OctreeBuildParameter paramter, Stack <KeyValuePair <int, IDynamicOctree[]> > queueCache) : base(ref bound, objList, parent, paramter, queueCache) { }