/// <summary> /// Szkielet zbudowany na podstawie pikiet /// </summary> /// <returns></returns> public bool ZbudujSzkielet() { //Muszą być co najmniej dwie pikiety (na których będą oparte oba brzegi koryta) if (_pikiety.Count < 2) { return(false); } int brzegLewyIndex = -1; int brzegPrawyIndex = -1; //Rozmieszczamy wszystkie pikiety równomiernie na szkicu (stała odległość) for (int i = 0; i < _pikiety.Count; i++) { Pikieta pikieta = _pikiety[i]; int alignedPosition = Alignment * i + _obszar.Top; pikieta.MoveTo(_obszar.Left + StylSzkicu.PikietyWidth, alignedPosition); if (pikieta.JestKorytem()) { //przy każdej pikiecie koryta aktualizujemy indeks prawego koryta //ostatnia pikieta koryta będzie prawym korytem brzegPrawyIndex = i; if (brzegLewyIndex < 0) //tylko pierwsza pikieta koryta będzie lewym korytem { brzegLewyIndex = i - 1; //brzeg zaczyna się jedną pikiete wcześniej } } if (pikieta.JestDroga()) { Droga droga = new Droga(i, i + 1); _drogi.Add(droga); } } if (brzegLewyIndex >= 0 && brzegPrawyIndex > 0 && brzegPrawyIndex > brzegLewyIndex) { //Tworzymy koryto Koryto = new Koryto(brzegLewyIndex + 1, brzegPrawyIndex + 1); //Tworzymy skarpę brzegu lewego Skarpa brzegLewy = new Skarpa(brzegLewyIndex, brzegLewyIndex + 1, true); _skarpy.Add(brzegLewy); //Tworzymy skarpę brzegu prawego Skarpa brzegPrawy = new Skarpa(brzegPrawyIndex + 1, brzegPrawyIndex + 2, true); _skarpy.Add(brzegPrawy); } return(true); }
/// <summary> /// Dodanie drogi do szkicu (od podanej pikiety) /// </summary> /// <param name="pikieta"></param> /// <returns></returns> public bool DodajDroga(Pikieta pikieta) { if (pikieta == null) { return(false); } for (int i = 1; i <= _pikiety.Count; i++) { if (pikieta.Numer == _pikiety[i - 1].Numer) { Droga droga = new Droga(i, i + 1); Drogi.Add(droga); return(_zmodyfikowany = true); } } return(false); }