override public IEnumerable <SictAufgaabeParam> GbsAstOklusioonVermaidungBerecne( SictAufgaabeParamGbsAstOklusioonVermaidung OklusioonVermaidungParam, out IEnumerable <SictFläceRectekOrtoAbhängigVonGbsAst> MengeFläceZuMaide, out IEnumerable <OrtogoonInt> NaacOklusioonRestMengeFläce) { /* * 2015.03.12 * * Ersaz durc ToCustomBotSnapshot * * var GbsBaum = this.VonNuzerMeldungZuusctandTailGbsBaum; * */ var GbsBaum = this.ListeScnapscusLezteAuswertungErgeebnisNaacSimu; var MengeKandidaatOklusioon = MengeKandidaatOklusioonBerecne(); var MengeKandidaatOklusioonZuErhalte = new List <SictGbsAstOklusioonInfo>(); var MengeWindowZuErhalte = this.MengeWindowZuErhalte; if (null != MengeWindowZuErhalte) { foreach (var WindowZuErhalte in MengeWindowZuErhalte) { if (null == WindowZuErhalte) { continue; } var WindowZuErhalteHerkunftAdrese = WindowZuErhalte.GbsAstHerkunftAdrese; if (!WindowZuErhalteHerkunftAdrese.HasValue) { continue; } var WindowZuErhalteKandidaatOklusioon = ExtractFromOldAssembly.Bib3.Extension.FirstOrDefaultNullable(MengeKandidaatOklusioon, (Kandidaat) => Kandidaat.GbsElementIdent == WindowZuErhalteHerkunftAdrese); if (null != WindowZuErhalteKandidaatOklusioon) { MengeKandidaatOklusioonZuErhalte.Add(WindowZuErhalteKandidaatOklusioon); } } } return(GbsAstOklusioonVermaidungBerecne( OklusioonVermaidungParam, MengeKandidaatOklusioon, MengeKandidaatOklusioonZuErhalte, GbsBaum, out MengeFläceZuMaide, out NaacOklusioonRestMengeFläce)); }
override public IEnumerable <SictAufgaabeParam> GbsAstOklusioonVermaidungBerecne( SictAufgaabeParamGbsAstOklusioonVermaidung OklusioonVermaidungParam, out IEnumerable <SictFläceRectekOrtoAbhängigVonGbsAst> MengeFläceZuMaide) { IEnumerable <OrtogoonInt> NaacOklusioonRestMengeFläce; return(GbsAstOklusioonVermaidungBerecne( OklusioonVermaidungParam, out MengeFläceZuMaide, out NaacOklusioonRestMengeFläce)); }
static public IEnumerable <SictAufgaabeParam> GbsAstOklusioonVermaidungBerecne( SictAufgaabeParamGbsAstOklusioonVermaidung OklusioonVermaidungParam, IEnumerable <SictGbsAstOklusioonInfo> MengeKandidaatOklusioon, IEnumerable <SictGbsAstOklusioonInfo> MengeKandidaatOklusioonZuErhalte, GbsElement GbsBaum, out IEnumerable <SictFläceRectekOrtoAbhängigVonGbsAst> MengeFläceZuMaide, out IEnumerable <OrtogoonInt> NaacOklusioonRestMengeFläce) { MengeFläceZuMaide = null; NaacOklusioonRestMengeFläce = null; if (null == OklusioonVermaidungParam) { return(null); } var OklusioonVermaidungParamGbsElement = OklusioonVermaidungParam.GbsAst; if (null == OklusioonVermaidungParamGbsElement) { return(null); } var OklusioonVermaidungParamGbsAstFläce = OklusioonVermaidungParamGbsElement.InGbsFläce; if (null == OklusioonVermaidungParamGbsAstFläce) { return(null); } GbsElement OklusioonVermaidungParamGbsAst = null; NaacOklusioonRestMengeFläce = new OrtogoonInt[] { OklusioonVermaidungParamGbsAstFläce }; if (null == GbsBaum) { return(null); } if (null == MengeKandidaatOklusioon) { return(null); } var OklusioonVermaidungParamGbsAstHerkunftAdrese = (Int64?)OklusioonVermaidungParamGbsElement.Ident; var InternMengeFläceZuMaide = new List <SictFläceRectekOrtoAbhängigVonGbsAst>(); MengeFläceZuMaide = InternMengeFläceZuMaide; var ListeTailaufgaabe = new List <SictAufgaabeParam>(); var WeegpunktGbsObjektFläceKwadraatSaitelänge = Math.Min(OklusioonVermaidungParamGbsAstFläce.Grööse.A, OklusioonVermaidungParamGbsAstFläce.Grööse.B); var ListeTailwaiseOklusioon = new List <SictGbsAstOklusioonKombi>(); OrtogoonInt[] InsgesamtRestMengeTailfläce = new OrtogoonInt[] { OklusioonVermaidungParamGbsAstFläce }; foreach (var KandidaatOklusioon in MengeKandidaatOklusioon) { if (null == KandidaatOklusioon) { continue; } var KandidaatOklusioonGbsObjekt = KandidaatOklusioon.GbsElementScnapscus; if (null == KandidaatOklusioonGbsObjekt) { continue; } var KandidaatOklusioonFläce = KandidaatOklusioonGbsObjekt.InGbsFläce; GbsElement KandidaatOklusioonGbsAst = null; var OklusioonVonO0DurcO1MööglicNaacBaumsctruktuur = OklusioonVermaidungParamGbsAstHerkunftAdrese.HasValue ? OklusioonVonO0DurcO1MööglicNaacBaumsctruktuurBerecne( OklusioonVermaidungParamGbsAstHerkunftAdrese.Value, KandidaatOklusioonGbsObjekt.Ident, GbsBaum, out OklusioonVermaidungParamGbsAst, out KandidaatOklusioonGbsAst) : null; if (false == OklusioonVonO0DurcO1MööglicNaacBaumsctruktuur) { continue; } var KandidaatOklusioonFläceZuMaide = FläceRectekOrtoAbhängigVonGbsAstBerecne(KandidaatOklusioonGbsObjekt, GbsBaum); InternMengeFläceZuMaide.Add(KandidaatOklusioonFläceZuMaide); var WeegpunktFläceMiinusKandidaatOklusioonFläceMengeTailfläce = Optimat.EveOnline.Extension.FläceMiinusFläce(OklusioonVermaidungParamGbsAstFläce, KandidaatOklusioonFläce); InsgesamtRestMengeTailfläce = Bib3.Glob.ArrayAusListeFeldGeflact(InsgesamtRestMengeTailfläce.Select((Fläce) => Optimat.EveOnline.Extension.FläceMiinusFläce(Fläce, KandidaatOklusioonFläce))); if (null != WeegpunktFläceMiinusKandidaatOklusioonFläceMengeTailfläce) { var RestfläceGröösteKwadraatSaitelänge = AusMengeFläceBerecneGröösteKwadraatSaitelängeBerecne(WeegpunktFläceMiinusKandidaatOklusioonFläceMengeTailfläce); /* * 2014.04.29 * Korektur: ListeTailwaiseOkludiirendeUndRestKwadraatSaitelänge mus befült werde unabhängig davon ob das restlice grööste Kwadraat klainer geworde isc, * sunsct scteet waiter unte kain Kandidaat zum entferne zur Verfüügung. * * if (!(WeegpunktGbsObjektFläceKwadraatSaitelänge - 0.1f < RestfläceGröösteKwadraatSaitelänge)) * */ var Scnitfläce = OrtogoonInt.Scnitfläce(KandidaatOklusioonFläce, OklusioonVermaidungParamGbsAstFläce); if (!Scnitfläce.IsLeer) { // grööste Kwadraat in übrige Tailfäce isc klainer, zumindest tailwaise Okludiirt. ListeTailwaiseOklusioon.Add( new SictGbsAstOklusioonKombi( KandidaatOklusioon, OklusioonVermaidungParamGbsElement, Scnitfläce, RestfläceGröösteKwadraatSaitelänge)); } } } NaacOklusioonRestMengeFläce = InsgesamtRestMengeTailfläce; var InsgesamtRestMengeTailfläceGröösteKwadraatSaitelänge = AusMengeFläceBerecneGröösteKwadraatSaitelängeBerecne(InsgesamtRestMengeTailfläce); if (!(OklusioonVermaidungParam.RestFläceKwadraatSaitenlängeScrankeMin <= InsgesamtRestMengeTailfläceGröösteKwadraatSaitelänge) && 0 < ListeTailwaiseOklusioon.Count) { // übrige Tailfläce nit hinraicend groos, Oklusioon erfordert Reaktioon // Versuuce Oklusioon zu beende var ListeTailwaiseOkludiirendeOrdnet = ListeTailwaiseOklusioon // Window früüher scliise als andere (z.B. Menu oder Utilmenu oder Neocom) da andere oftmaals impliziit gesclose werden. .OrderBy((Kandidaat) => null == Kandidaat?.Okludiirende?.Window ? 0 : 1) .ThenBy((Kandidaat) => Kandidaat.NaacOklusioonRestFläceGröösteKwadraatSaitelänge) /* * 2015.09.01 * Änderung InGbsBaumAstIndex: Übernaame von noie Sensor InTreeIndex: Element occludes other Elements with lower Value. * .ThenBy((Kandidaat) => Kandidaat?.Okludiirende?.GbsAstInBaumIndex) */ .ThenByDescending((Kandidaat) => Kandidaat?.Okludiirende?.GbsAstInBaumIndex) .ToArray(); foreach (var TailwaiseOkludiirende in ListeTailwaiseOkludiirendeOrdnet) { if (0 < ListeTailaufgaabe.Count) { // !!!! Temp für Performanz und üübersictlickait Berict: nur aine Tailaufgaabe berecne break; } if (null == TailwaiseOkludiirende) { continue; } var OkludiirendeZuErhalte = (null == MengeKandidaatOklusioonZuErhalte) ? false : MengeKandidaatOklusioonZuErhalte .Any((KandidaatOklusioonZuErhalte) => KandidaatOklusioonZuErhalte.GbsElementIdent == TailwaiseOkludiirende.Okludiirende.GbsElementIdent); if (OkludiirendeZuErhalte) { // Okludiirende zu erhalte werde. z.B. Window Drones. // Versuuce Oklusioon zu beende oone Okludiirende zu Verberge: Z-Index von okludiirte waiter naac vorne bringe SictGbsAstOklusioonInfo Okludiirte = null; foreach (var KandidaatOkludiirte in MengeKandidaatOklusioon) { if (null == KandidaatOkludiirte) { continue; } var KandidaatOkludiirteGbsAstHerkunftAdrese = KandidaatOkludiirte.GbsElementIdent; if (!KandidaatOkludiirteGbsAstHerkunftAdrese.HasValue) { continue; } if (KandidaatOkludiirteGbsAstHerkunftAdrese == OklusioonVermaidungParamGbsAstHerkunftAdrese) { Okludiirte = KandidaatOkludiirte; break; } if (OklusioonVermaidungParamGbsAstHerkunftAdrese.HasValue) { var KandidaatOkludiirteGbsAst = GbsBaum.SuuceFlacMengeGbsAstFrühesteMitIdent(KandidaatOkludiirteGbsAstHerkunftAdrese.Value); if (null == KandidaatOkludiirteGbsAst) { continue; } if (null != KandidaatOkludiirteGbsAst.SuuceFlacMengeGbsAstFrühesteMitIdent(OklusioonVermaidungParamGbsAstHerkunftAdrese.Value)) { Okludiirte = KandidaatOkludiirte; break; } } } if (null != Okludiirte) { var OkludiirteWindow = Okludiirte.Window; if (null != OkludiirteWindow) { ListeTailaufgaabe.Add(AufgaabeParamAndere.KonstruktWindowHooleNaacVorne(OkludiirteWindow)); } } } else { var TailwaiseOkludiirendeGbsObjektScnapscus = TailwaiseOkludiirende?.Okludiirende?.GbsElementScnapscus; // ListeTailaufgaabe.Add(AufgaabeParamAndere.KonstruktGbsAstVerberge(TailwaiseOkludiirendeGbsObjektScnapscus)); ListeTailaufgaabe.Add(new AufgaabeParamGbsElementVerberge( TailwaiseOkludiirendeGbsObjektScnapscus, TailwaiseOkludiirende)); } } } return(ListeTailaufgaabe); }