示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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);
        }