Ejemplo n.º 1
0
        SictNaacProcessWirkungTailMausErgeebnis MausWirkungFüüreAus(
            SictVorsclaagNaacProcessWirkung Wirkung,
            int ZiilFläceRandScrankeAkzeptanz,
            int ZiilFläceRandScrankeZuufal)
        {
            if (null == Wirkung)
            {
                return(null);
            }

            var WirkungZwekListeKomponente = Wirkung.WirkungZwekListeKomponente;

            {
                //	Temp Verzwaigung für Debug Breakpoint

                if (null != WirkungZwekListeKomponente)
                {
                    if (!WirkungZwekListeKomponente.Any((ZwekKomponente) => ZwekKomponente.ToLower().Contains("create")))
                    {
                    }
                }
            }

            var MausPfaadListeWeegpunktFläceAbhängigVonGbs = Wirkung.MausPfaadListeWeegpunktFläce;
            var MausPfaadMengeFläceZuMaideAbhängigVonGbs   = Wirkung.MausPfaadMengeFläceZuMaide;

            var MausPfaadTasteLinksAin = Wirkung.MausPfaadTasteLinksAin;
            var MausPfaadTasteRectsAin = Wirkung.MausPfaadTasteRectsAin;

            var Ergeebnis = new SictNaacProcessWirkungTailMausErgeebnis();

            if (!(true == MausPfaadTasteLinksAin) && !(true == MausPfaadTasteRectsAin) &&
                null == MausPfaadListeWeegpunktFläceAbhängigVonGbs)
            {
                //	Kaine Wirkung durc Maus angefordert
                Ergeebnis.Erfolg = true;
                return(Ergeebnis);
            }

            if (null == MausPfaadListeWeegpunktFläceAbhängigVonGbs)
            {
                return(Ergeebnis);
            }

            var PfaadEnthaltMeerereWeegpunkt = 1 < MausPfaadListeWeegpunktFläceAbhängigVonGbs.Length;

            var ProcessId = GbsFürZiilprozesWaalWindowProzesId();

            var ZiilWindowHandle = GbsAingaabeWaalZiilProcessMainWindowHandle;

            Bib3.Windows.User32.RECT ZiilWindowClientRect;
            Bib3.Windows.User32.GetClientRect(ZiilWindowHandle, out ZiilWindowClientRect);

            /*
             * 2015.03.03
             *
             *      var EveOnlnSensoWurzelSuuceLezteTask = this.EveOnlnSensoWurzelSuuceLezteTask;
             *
             *      var EveOnlnSensoWurzelSuuceLezteTaskTask = EveOnlnSensoWurzelSuuceLezteTask.Wert;
             *
             *      if (!EveOnlnSensoWurzelSuuceLezteTaskTask.IsCompleted)
             *      {
             *              return Ergeebnis;
             *      }
             *
             *      var GbsSuuceWurzel = EveOnlnSensoWurzelSuuceLezteTaskTask.Result;
             * */

            var MengeFläceAbhängigVonGbsAst =
                Optimat.Glob.ListeErwaitertAlsArray(MausPfaadListeWeegpunktFläceAbhängigVonGbs, MausPfaadMengeFläceZuMaideAbhängigVonGbs);

            /*
             * 2015.03.03
             *
             *      var MengeFläceErgeebnis =
             *              Optimat.EveOnline.SictProzesAuswertZuusctand.ListeFläceBerecneAusGbs(
             *              MengeFläceAbhängigVonGbsAst,
             *              ProcessId,
             *              GbsSuuceWurzel);
             * */

            var MengeFläceErgeebnis =
                MengeFläceAbhängigVonGbsAst
                .SelectNullable((Fläce) => new KeyValuePair <InProcessGbsFläceRectekOrto, OrtogoonInt?>(
                                    Fläce, Fläce.FläceTailSctaatisc));

            var MausPfaadListeWeegpunktFläceErgeebnis =
                MausPfaadListeWeegpunktFläceAbhängigVonGbs
                .Select((FläceAbhängigVonGbs) => MengeFläceErgeebnis.FirstOrDefault((Kandidaat) => Kandidaat.Key == FläceAbhängigVonGbs).Value)
                .Select((FläceNulbar) => FläceNulbar ?? OrtogoonInt.Leer)
                .ToArray();

            var MausPfaadMengeFläceZuMaideErgeebnis =
                (null == MausPfaadMengeFläceZuMaideAbhängigVonGbs) ? null :
                MausPfaadMengeFläceZuMaideAbhängigVonGbs
                .Select((FläceAbhängigVonGbs) => MengeFläceErgeebnis.FirstOrDefault((Kandidaat) => Kandidaat.Key == FläceAbhängigVonGbs).Value)
                .Select((FläceNulbar) => FläceNulbar ?? OrtogoonInt.Leer)
                .ToArray();

            Ergeebnis.MausPfaadListeWeegpunktFläceErgeebnis = MausPfaadListeWeegpunktFläceErgeebnis;
            Ergeebnis.MausPfaadMengeFläceZuMaideErgeebnis   = MausPfaadMengeFläceZuMaideErgeebnis;

            var MausPfaadListeWeegpunktFläceMiinusFläceZuMaide =
                MausPfaadListeWeegpunktFläceErgeebnis
                .Select((WeegpunktFläce) =>
            {
                var MengeTailfläce = new OrtogoonInt[] { WeegpunktFläce };

                if (null != MausPfaadMengeFläceZuMaideErgeebnis)
                {
                    foreach (var FläceZuMaide in MausPfaadMengeFläceZuMaideErgeebnis)
                    {
                        if (null == FläceZuMaide)
                        {
                            continue;
                        }

                        MengeTailfläce =
                            Bib3.Glob.ArrayAusListeFeldGeflact(
                                MengeTailfläce
                                .Select((VorherFläce) =>
                        {
                            if (null == VorherFläce)
                            {
                                return(null);
                            }

                            return(Optimat.EveOnline.Extension.FläceMiinusFläce(VorherFläce, FläceZuMaide));
                        })
                                .Where((t) => null != t)
                                .ToArray());
                    }
                }

                return(MengeTailfläce);
            })
                .ToArray();

            var RandDiferenz = ZiilFläceRandScrankeZuufal - ZiilFläceRandScrankeAkzeptanz;

            var MausPfaadListeWeegpunktFläceMiinusFläceZuMaideMiinusRand =
                MausPfaadListeWeegpunktFläceMiinusFläceZuMaide
                .Select((MausPfaadWeegpunktFläceMiinusFläceZuMaide) =>
            {
                if (null == MausPfaadWeegpunktFläceMiinusFläceZuMaide)
                {
                    return(null);
                }

                return
                (MausPfaadWeegpunktFläceMiinusFläceZuMaide
                 .Where((Fläce) => null != Fläce)
                 .Select((Fläce) => Fläce.Vergröösert(
                             -ZiilFläceRandScrankeAkzeptanz * 2,
                             -ZiilFläceRandScrankeAkzeptanz * 2))
                 .Where((KandidaatFläce) => 0 < KandidaatFläce.Grööse.A && 0 < KandidaatFläce.Grööse.B)
                 .Select((Fläce) => Fläce.VergröösertBescrankt(-RandDiferenz, -RandDiferenz, 0, 0))
                 .ToArray());
            })
                .ToArray();

            var MausPfaadBeginMengeFläce = MausPfaadListeWeegpunktFläceMiinusFläceZuMaideMiinusRand.FirstOrDefault();

            var MausPfaadEndeMengeFläce =
                MausPfaadListeWeegpunktFläceMiinusFläceZuMaideMiinusRand.LastOrDefault();

            var MausPfaadBeginFläce =
                MausPfaadBeginMengeFläce.OrderByNullable((Fläce) => Fläce.Betraag()).LastOrDefaultNullable();

            var MausPfaadEndeFläce =
                MausPfaadEndeMengeFläce.OrderByNullable((Fläce) => Fläce.Betraag()).LastOrDefaultNullable();

            if (null == MausPfaadBeginFläce ||
                (null == MausPfaadEndeFläce && PfaadEnthaltMeerereWeegpunkt))
            {
                return(Ergeebnis);
            }

            var MausPfaadBeginPunktNulbar = ZuufäligePunktAusFläce(MausPfaadBeginFläce);
            var MausPfaadEndePunktNulbar  = ZuufäligePunktAusFläce(MausPfaadEndeFläce);

            if (!PfaadEnthaltMeerereWeegpunkt)
            {
                MausPfaadEndePunktNulbar = MausPfaadBeginPunktNulbar;
            }

            Ergeebnis.MausPfaadBeginPunkt = MausPfaadBeginPunktNulbar;
            Ergeebnis.MausPfaadEndePunkt  = MausPfaadEndePunktNulbar;

            if (!MausPfaadBeginPunktNulbar.HasValue ||
                !MausPfaadEndePunktNulbar.HasValue)
            {
                return(Ergeebnis);
            }

            var MausPfaadBeginPunkt = MausPfaadBeginPunktNulbar.Value;
            var MausPfaadEndePunkt  = MausPfaadEndePunktNulbar.Value;

            var MengePunktZuPrüüfeAufScnitMitZiilWindowClientRect = new List <Vektor2DInt>();

            MengePunktZuPrüüfeAufScnitMitZiilWindowClientRect.Add(MausPfaadBeginPunkt);
            MengePunktZuPrüüfeAufScnitMitZiilWindowClientRect.Add(MausPfaadEndePunkt);

            var MausPfaadInZiilWindowClientRect =
                MengePunktZuPrüüfeAufScnitMitZiilWindowClientRect
                .All((MausPfaadWeegpunkt) =>
                     0 <= MausPfaadWeegpunkt.A &&
                     0 <= MausPfaadWeegpunkt.B &&
                     MausPfaadWeegpunkt.A <= ZiilWindowClientRect.Width &&
                     MausPfaadWeegpunkt.B <= ZiilWindowClientRect.Height);

            Ergeebnis.MausPfaadInZiilWindowClientRect = MausPfaadInZiilWindowClientRect;

            if (!MausPfaadInZiilWindowClientRect)
            {
                return(Ergeebnis);
            }

            var MausPfaadBeginPunktAlsWindowsPoint = AlsSystemWindowsPoint(MausPfaadBeginPunkt);
            var MausPfaadEndePunktAlsWindowsPoint  = AlsSystemWindowsPoint(MausPfaadEndePunkt);

            if (PfaadEnthaltMeerereWeegpunkt &&
                (true == MausPfaadTasteLinksAin || true == MausPfaadTasteRectsAin))
            {
                Bib3.Windows.User32.DragGebascdelsMitSleep20140211(
                    ZiilWindowHandle,
                    MausPfaadBeginPunktAlsWindowsPoint,
                    MausPfaadEndePunktAlsWindowsPoint,
                    true == MausPfaadTasteRectsAin,
                    MouseWartezaitMili);
            }
            else
            {
                if (true == MausPfaadTasteLinksAin)
                {
                    WirkungMouseClick(ZiilWindowHandle, (int)MausPfaadEndePunkt.A, (int)MausPfaadEndePunkt.B, false);
                }
                else
                {
                    if (true == MausPfaadTasteRectsAin)
                    {
                        WirkungMouseClick(ZiilWindowHandle, (int)MausPfaadEndePunkt.A, (int)MausPfaadEndePunkt.B, true);
                    }
                    else
                    {
                        WirkungMouseMove(ZiilWindowHandle, (int)MausPfaadEndePunkt.A, (int)MausPfaadEndePunkt.B);
                    }
                }
            }

            Ergeebnis.Erfolg = true;

            return(Ergeebnis);
        }
Ejemplo n.º 2
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);
        }