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); }
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); }