private static void AddSideLightingValue(string lightingString, ref LightingWindow sideLighting, ref int iLightingString) { // индекс стороны int indexSide = GetSideIndex(ref iLightingString, lightingString); int number = isLeaf ? roomNumber : 0; sideLighting = new LightingWindow(indexSide, number); }
private bool IsStoppor(LightingWindow lightingSideTop, LightingWindow lightingSideBot) { // Если боковое окно единственное в помещени, то такую квартиру нельзя ставить в глухой торец (без окна с торца на улицу) // Если сторона квартиры не соответствует стороне торца, такую секцию нельзя пропускать дальше // Только если индекс боковины не половинчатый - если не половинчатый, то боковое окно - будет заткнуто торцом и в комнате не останется окон if ((lightingSideTop != null && lightingSideTop.RoomNumber == 0) || (lightingSideBot != null && lightingSideBot.RoomNumber == 0)) { // Одно из боковых окон единственное в помещении - оно затыкается торцом return(true); } return(false); }
private static List <LightingWindow> GetLightingsOneSideRooms(string lightingString, bool isTop, out LightingWindow sideLighting, out Side side) { sideLighting = null; List <LightingWindow> lightingsRes = new List <LightingWindow>(); side = Side.None; if (string.IsNullOrEmpty(lightingString)) { return(lightingsRes); } isRange = false; isLeaf = false; prevIsSide = false; for (int i = 0; i < lightingString.Length; i++) { char item = lightingString[i]; if (char.IsDigit(item)) { prevIsSide = false; AddLightingValue((int)char.GetNumericValue(item), lightingsRes); continue; } if (item == 'B') { // Боковая освещенность AddSideLightingValue(lightingString, ref sideLighting, ref i); prevIsSide = true; continue; } isRange = false; isLeaf = false; if (item == '-') { isRange = true; continue; } if (item == '|') { roomNumber++; isLeaf = true; // изменение знака предыдущего индекса if (prevIsSide) { sideLighting.RoomNumber = roomNumber; } else { var roomLight = lightingsRes.Last(); roomLight.RoomNumber = roomNumber; } continue; } } // Определение стороны по боковой инсоляции if (sideLighting != null) { // освещенность заканчивается боковой инсоляцией if (prevIsSide) { // Верх - левая сторона: Низ - правая строна side = isTop ? Side.Left : Side.Right; } else { // Освещенность заканчивается обычными рядовым шагом, значит начиналась с боковой // Верх - правая сторона : Низ - левая строна side = isTop ? Side.Right : Side.Left; } } return(lightingsRes); }