public void GetVisibleRegions(ref List <BoundingBox> _regions, ref List <Point3D> _pointsE, ref List <Point3D> _pointsM,
                                      ViewFrustumFunctions _vff)
        {
            if (_vff == null)
            {
                return;
            }
            if (_regions == null)
            {
                _regions = new List <BoundingBox>();
            }
            if (_pointsE == null)
            {
                _pointsE = new List <Point3D>();
            }
            if (_pointsM == null)
            {
                _pointsM = new List <Point3D>();
            }

            bool notOutside = !_vff.IsOutsideFrustum(this.region);

            if (notOutside)
            {
                _regions.Add(this.region);
                Utils.LineWHistory.LinesWH2UniqueP3D(this.nodeLines, ref _pointsE, ref _pointsM, true);

                // check deeper into the tree
                if (this.hasChildren())
                {
                    for (int flags = this.activeNodes, index = 0; flags > 0; flags >>= 1, index++)
                    {
                        if ((flags & 1) == 1)
                        {
                            this.childNodes[index].GetVisibleRegions(ref _regions, ref _pointsE, ref _pointsM, _vff);
                        }
                    }
                }
            }
        }