Exemple #1
0
    public void addNewCurtainUnitWithZNegStartAt(int woco_z)
    {
        ZCurtainUnit zcu = new ZCurtainUnit(woco_z);

        // greater than end
        if (woco_z > this.worldEndZ)
        {
            sections.Add(zcu);
            return;
        }

        if (woco_z < this.worldStartZ)
        {
            sections.Insert(0, zcu);
            return;
        }

        int insert_at = 0;

        //check contiains
        for (int i = 0; i < sections.Count; ++i)
        {
            ZCurtainUnit _zcu = sections[i];
            if (_zcu.zRange.contains(woco_z))
            {
                throw new Exception("trying to add a woco z that we already contain...");
            }

            if (_zcu.zRange.start < woco_z)
            {
                if (i == 0)
                {
                    throw new Exception("confusing: why did we get here then (adding new curtain unit..)");
                }

                insert_at = i - 1;
                break;
            }
        }

        sections.Insert(insert_at, zcu);
    }
Exemple #2
0
    public ZCurtain(int woco_z_start)
    {
        ZCurtainUnit first = new ZCurtainUnit(woco_z_start);

        sections.Add(first);
    }
Exemple #3
0
 public ZCurtainUnit(int z_start, bool startOpen)
 {
     this = new ZCurtainUnit(new SimpleRange(z_start, 1), startOpen, false);
 }
Exemple #4
0
    private void extendCurtainToIncludeWocoZ(int woco_z, bool extendInZPosForMiddle, Range1D adjacentSurfaceContinuityZPosNeg, Range1D airRange, bool setTerminalStatus)
    {
        // greater than end
        if (woco_z >= this.worldEndZ)
        {
            ZCurtainUnit lastcu = sections[sections.Count - 1];
            lastcu.zRange = lastcu.zRange.extendRangeToInclude(woco_z);
            sections[sections.Count - 1] = lastcu;
            if (setTerminalStatus)
            {
                setDiscontinuityEndWithSurfaceRange(adjacentSurfaceContinuityZPosNeg, airRange);
            }
            return;
        }

        if (woco_z <= this.worldStartZ)
        {
            ZCurtainUnit firstcu = sections[0];
            firstcu.zRange = firstcu.zRange.extendRangeToInclude(woco_z);
            sections[0]    = firstcu;
            if (setTerminalStatus)
            {
                setDiscontinuityStartWithSurfaceRange(adjacentSurfaceContinuityZPosNeg, airRange);
            }
            return;
        }

        if (sections.Count == 1)
        {
            ZCurtainUnit zcu = sections[0];
            if (zcu.zRange.contains(woco_z))
            {
                return;
            }
        }

        if (sections.Count < 2)
        {
            return;
        }         // can't be anthing more to do!

        // Between ranges
        // now we need bool extend in z pos

        SimpleRange  zRange;
        SimpleRange  nextZRange;
        bool         combineWithNext = false;
        int          i = 0;
        ZCurtainUnit zcurtain_unit;
        ZCurtainUnit nextZCurtain_unit;

        for (; i < sections.Count - 1; ++i)
        {
            zcurtain_unit     = sections[i];
            nextZCurtain_unit = sections[i + 1];

            zRange     = zcurtain_unit.zRange;
            nextZRange = nextZCurtain_unit.zRange;

            if (zRange.contains(woco_z))
            {
                return;
            }

            if (zRange.extent() <= woco_z && nextZRange.start > woco_z)
            {
                if (extendInZPosForMiddle)
                {
                    zRange = SimpleRange.SimpleRangeWithStartAndExtent(zRange.start, woco_z + 1);
                }
                else
                {
                    nextZRange = SimpleRange.SimpleRangeWithStartAndExtent(woco_z, nextZRange.extent());
                }

                //connected up now?
                if (zRange.extent() == nextZRange.start)
                {
                    zRange.range           += nextZRange.range;
                    zcurtain_unit.endIsOpen = nextZCurtain_unit.endIsOpen;
                    sections.RemoveAt(i + 1);                     // remove next
                }
                else
                {
                    nextZCurtain_unit.zRange = nextZRange;
                    sections[i + 1]          = nextZCurtain_unit;
                }

                zcurtain_unit.zRange = zRange;
                sections[i]          = zcurtain_unit;
                break;
            }
        }
    }