• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

IT-Talents.de Code Competitions

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #281
@KaPiTN: Du darfst nicht vergessen, du arbeitest in einer anderen Sprache ;)

Vielleicht habe ich deine Optionen gar nicht.... ;)

Aber bist du User bist du Loser :p - so ist das mit Libs, außer man schreibt sie selbst, dann kann man alles richtig machen, so fern die Ebene (noch tiefer) darunter, stimmt :D
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Die Lösung ist so einfach, daß sie ziemlich sicher umsetzbar ist. Nach Deiner Beschreibung läuft das bei Dir ziemlich gleich ab.

Denk nicht zu technisch. Die Mittel sind die, die allgemein das Werkzeug der "normalen" Sprachen sind.

Wobei Du natürlich eine Lösung finden wollen mußt. Ich will nicht der Kerl sein, der Dich mit irgend etwas nervt, was Dir eigentlich egal ist. :D;)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #283
Aber setzt es in nen Spoiler... ;)

Ansonsten, wenn du einen "Proof of concept" brauchst, nehme ich dir mal "heavy painting" auf... dann bekommst du ein Gefühl wie akkurat oder nicht das aufnimmt.... so reden wir ja über irgendwas unrelativiertes ohne Hand und Fuß. ;)
Meine, man muss sehen was "schnell" (wirklich schnell) ist.... :

 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Bei der fast reinen horizontalen Bewegung ist der Effekt schon recht deutlich. Ansonsten ist das aber doch recht zügig.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Ich habe ja nicht gesagt das es schlecht ist. Nur nicht perfekt.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #287
Wie du selbst sagst, bedank dich bei der LIB bzw. "OS" ;)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #289
Das klingt aber jetzt leicht säuerlich. ;)

Ist es nicht das was du sehen wolltest? :)
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Nein. Ist es nicht. Ich hätte gerne den Ehrgeiz gesehen, die durch die technischen Gegebenheiten begründeten Unzulänglichkeiten des Malvorganges mit etwas Code zu kompensieren. ;)
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #291
@KaPiTN: Hm, das ist ja eine Challenge, aber ich weiß ehrlich gesagt aktuell nicht, wie ich das von meiner Seite aus lösen könnte :o :)
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
@theSplit:
Das ist ja ne richtige kleine Stichelei bei euch beiden.
@KaPiTN:
Wenn ich es richtig verstanden habe, stört sich das teilweise Zellen "übersprungen" werden beim Malen. Wie man das wegbekommt?
Ich habe da mehrere Lösungsansätze, aber du verunsicherst mich mit der Stichelei ein wenig, ob ich da eine "korrekte" im Sinn habe.
Vorausgesetzt man benutzt ein MouseMove-Event
  • Geschwindigkeit des Codes soweit erhöhen, dass auch bei maximal schneller Bewegung keine Zwischenräume entstehen können. Das setzt aber voraus, dass die Events schnell genug feuern um pixelweise Bewegung der Maus zu signalisieren.
  • (Lineare) Interpolation von der Strecke zwischen dem vorherigen Punkt und dem neuen Punkt und anschließende Ermittlung der zugehörigen Zellen.
  • Wie der erste Punkt: Threading und dabei Pool und Worker nutzen. Vergesst den Punkt. Der war unsinnig.
  • Fast wie der erste Punkt. Asynchroner Funktionsaufruf von der Funktion, die die zu schaltenden Zettel bestimmt usw.

Ansonsten könnte ich mir aber auch vorstellen anstatt eine MouseMove-Events zu verwenden etwas wie ein MoveHover-Event (und MouseUnHover) zu nutzen. Die meisten Sprachen sollten das bieten und dann kann man entsprechende Events für die einzelnen Zellen registrieren. Ich würde mal behaupten, dass diese Events nicht von dem eigentlichen MouseMove-Event abhängen. Aber dafür müsste ich mich erstmal wiede in diese ganzen Events und so weiter einlesen.

War da was dabei?
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
@Roin:

Du hast das richtig verstanden. ich entschuldige mich bei allen, insbesondere bei Split, wenn das jetzt hier etwas schräg rüber gekommen ist. Es lag nicht in meiner Absicht zu sticheln.
Ich nahm nur an, daß man sich allgemein nicht mit einem suboptimalen Ergebnis zufrieden gibt.
Ich habe das Problem frühzeitig erwähnt und auch gesagt, daß es leicht lösbar ist und wollte zu dieser Lösung hinführen, ohne sie vorzugeben.

SPOILERALARM

Den "Ansonsten" Punkt habe ich theoretisch auch gesehen, aber wenn es für jede Zelle graphisch mehr als ein paar Pixel, sondern ein ganzes Objekt mit allem drum und dran gibt, dann erscheint mir das als oversized.

Wahrscheinlich funktioniert das auch gar nicht befriedigend, wenn da eine derartig große Anzahl von Objekten Events auslöst.

Die von mir gewählte Lösung hast Du auch erwähnt. Die einfache. Da Du die Häufigkeit der Events nicht beeinflussen kannst, auch die aus meiner Sicht einzig mögliche.

Noch ein mal. Ich wollte nur helfen, weder jemanden vorführen noch eine Lösung vorgeben.
 

Roin

Freier Denker

Registriert
22 Juli 2013
Beiträge
581
@KaPiTN:
Gut, das war mein aller erster Gedanke bei der ersten Erwähnung des Problems. Aber dadurch, dass ihr euch da so drüber unterhalten habt, habe ich mich dann doch verunsichern lassen, ob es die von dir angedachte Lösung ist.
Ich denke, das nimmt dir aber keiner Übel - genau für sowas ist dieser Thread ins Leben gerufen worden, oder sehe ich das falsch?
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #295
Guten Morgen die Herren: Nur so am Rande, ich fasse das nicht böse auf. Ich finde gut wenn jemand konstruktives Feedback geben will bzw. ne Idee hat, wie man was verbessern kann.

Ansonsten, ich finde die Überlegung sinning, aber ich wehre mich deßhalb ein wenig dagegen, weil ich aktuell nicht die Not sehe (siehe Video zum Painting!). Ich meine, wenn man mit der Maus nicht "fliegt" (ich glaube das Problem liegt nicht daran das etwas zu langsam ist, aber dass die Abfragen für den Event nicht "hoch" genug sind). Wenn man die Maus "normal" bewegt, werden die Events auch schnell genug erfasst. Ich habe im Video, mal sehr bewusst, die Maus "herumhuschen" lassen - da ergeben Sie dann "Lücken". Aber soweit ich das einschätzen kann ist das eine extrem Situation - und direkten Einfluss auf das "Erfassen" der Events durch die Lib, gibt es meines Wissen nicht, auch kann man nicht die "Abtastrate" erhöhen oder dem OS sagen das es öfter "feuern" soll.

Andere Anwendungen, ihr könnt gerne mal Photoshop testen - da "sollte" das Problem auch bestehen, leiden auch unter diesem "OS" flaschenhals, da das System zwar gefühlt 1 zu 1 reagiert, aber gewisse Signale - so weit ich im Bilde bin - limitiert abschießt oder abgibt um das System nicht künstlich "zu überlasten". Ich glaube jedenfalls mal so etwas gelesen zu haben. Natürlich wäre eine Queue eine Abhilfe - aber wenn der Event vom Fenster nicht mehr registriert wird (OS?, Lib?...) - dann kann man auch nichts mehr verbessern.

Deswegen sagte ich ja "relative Mousekoordinaten" zum letzen "MouseMotion-Event" zu erfassen, würde nicht ganz korrekt funktionieren, sagen wir die Bewegung ist so groß, das man eine Bewegung/Abstand von "x40" und "y50" hat, so müsste man ja theoretisch alle "4x5 (10x10 Pixel Zellen)" anmalen, eine geschwunge Linie oder ähnliches "würde" man damit gar nicht mehr erfassen können, man weiß zwar den Abstand, aber hat keine Informationen über die Bewegung selbst die gemacht wurde.

Ach ja, und ein Gedanke, wenn man die Priorität des Prozesses auf (Windows Term: "Echtzeit" setzt) - ja vielleicht werden dann unter Windows mehr "MouseMotions" erfasst. Unter Linux könnte man das auch über die Prozesspriorität, vielleicht noch beeinflussen.

Andere Ideen habe ich aber auf die schnelle nicht. ;)
 

Brother John

(schein)heilig
Veteran

Registriert
1 Aug. 2013
Beiträge
235
Guten Nachmittag, die Herren!

Eine feine Diskussion habt ihr gerade. Die perfekte Ausrede, um das Weiterprogrammieren rauszuschieben. ;)

Stimmt schon, dass Aussetzer bei schnellen Mausbewegungen auf Anhieb nach einem Detail aussehen. Aber das täuscht, und deswegen sehe ich schon Not und finde die Diskussion absolut sinnvoll. Wenn solche Effekte auftreten, deutet das auf grundsätzliche Probleme im eigenen Eventcode hin.

Was macht so ein übliches Dektop-Eventsystem eigentlich? Es benachrichtigt in gewissen zeitlichen Abständen über den gerade aktuellen Systemzustand. Zwischen den Events klaffen immer Lücken. Ein Eventsystem kann konzeptionell keinen kontinuierlichen Zustandsübergang abbilden. Es gibt nur Serien von Zustands-Snapshots ohne jede Garantie, dass die Lücken dazwischenn immer gleich groß oder immer klein genug sind, um ihre Existenz ignorieren zu können.

Für Mausbewegungen heißt das, dass sie nicht existieren – jedenfalls nicht im Eventsystem. In allen Systemen, die ich kenne, liefert der MouseMoveEvent nur eine einzelne Koordinate für die aktuelle Mausposition. Das ist reichlich viel statischer Zustand und herzlich wenig dynamische Bewegung, oder? Vielleicht sollte der Event besser MousePosition o.ä. heißen, weil dann wird klarer, womit man sich rumschlagen muss: Eine zeitlich gestaffelte Abfolge von Events, die die gerade aktuelle Mausposition melden. Die Bewegung entsteht erst im eigenen Code als Interpretation der Positionsevents.

Von dem Standpunkt aus gesehen, wird es klarer, warum Lücken in den vermeintlichen Bewegungsevents ganz normal sind? Und warum alle Überlegungen Richtung höherer »Abtastrate« in die falsche Richtung gehen?

Deswegen wäre es auch krass bösartig, solche Zeichnen-Aussetzer-Effekte in Photoshop zu sehen. Denn dann hätte dort jemand ganz grundlegende Fehler bei der eventgetriebenen Programmierung gemacht. … Andererseits … würde die Vorurteile gegenüber Adobe bestätigen. :D

Wie löst man sowas?
Siehe Roins zweiten Punkt in #292: Interpolation. Ein normaler Move-Event erlangt seine eigentliche Bedeutung erst zusammen mit dem vorhergehenden Move-Event. Erst dann hat man alle Daten, um eine Aussage über die Bewegung der Maus zu treffen. Deswegen ist das mit den relativen Mauskoordinaten genau die richtige Idee. Die große Frage ist, welche Art von Interpolation die sinnvollste ist. Zurück zum Photoshop-Beispiel: Das kommt auf den ausgewählten Zeichenmodus an: der Freihandstift wird vermutlich eine lineare Linie interpolieren, das Rechteck-Werkzeug braucht nur zwei gegenüberliegende Eckpunkte und tut sich entsprechend leichter.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #297
Nein. Ist es nicht. Ich hätte gerne den Ehrgeiz gesehen, die durch die technischen Gegebenheiten begründeten Unzulänglichkeiten des Malvorganges mit etwas Code zu kompensieren. ;)

Wie kann man blos etwas in einem Spoiler zitieren? :p

Aber mal auch darauf eingangen was Brother John sagt.... ich hab mich mal daran versucht und bin an folgenden Problemen etwas ratlos:

Mir ist der zurückgelegte Abstand von X und Y bekannt, jetzt tritt folgendes Problem auf, zeichne ich im 45 Grad winkel und schnell - müsste ich theoretisch 4 +- 2 Zellen "einfärben".

1) Das heißt, einmal den Index, auf dem die Maus sich gerade befindet...
b) und zweitens alle Zellen die sich bei x10 y5 Pixeln Abstand von meiner eigentlich Koordinate befinden... das sieht verdammt unschön aus.

Unter Strich sieht das wie folgt aus:
[src=c]//x = aktive Zellen (45 Grad angedeutet) Oben und Unten sind die aktuelle Mauskoodinaten, die erfasst sind

//Problem:

x
xxx
xxx
x

//So sollte es sein?

x
x
x
x

//Frage: Ist das Verhältnis X zu Y?
//Und wie viele Schritte gehen wir in X bzw. Y? Und % pro Schritt von X oder Y? - Die Mauskoodinaten sind int-Werte - Alles relative Mausabstände![/src]

Das Problem kommt auch bei Rundungen... ist die Frage, ich hab es so gemacht, ich habe x und y Prozentual "linear" erhöht mit % Anteil - und bin dann hochgewandert.
Ich hab also keinen Winkel berechnet.... um zum Beispiel zu sagen, wir bewegen uns in einem 45 Grad Winkel, also brauche wir keine 2 "extra" Zellen anmalen lassen?

Aber durch die Schrittweite wurden eben auch Zellen im Abstand von X + 0 und X + 10 angemalt und Y + 0 bis Y + 5 - wenn die Maus sich an einer Kante befindet, wird zwar heruntergerechnet, aber es kann auch 2 Zeilen auf einmal betreffen die mit eingeschlossen werden, das sieht sehr komisch aus.

Wenn man jetzt allerdings sagt, der Abstand zum letzen Move Event befindet sich in einem 35-55 Grad Winkel (ich hasse Trigonometrie) - könnte man theoretisch einfach "alle" treffenden Zellen von MOVE X1,Y1 bis X2,Y2 im 45 Grad Winkel auswählen lassen, aber wie sieht es aus bei 22 Grad?, bei einer 90 Grad Bewegung (die man so gut wie nie hinbekommt), ist es allerdings auch das Problem, das Zellen "ober"halb oder "unterhalb" getroffen werden, wenn man mit der Maus "schwankt" und die aktuelle Koordinate genau zwischen Zwei zellen liegt.

So ganz bin ich noch nicht hintergestiegen wie das genau funktionieren soll - oder wie man errechnet in welchem Abstand man X und dann mal Y erhöht um ein bestimmtes Koordinatenpaar zu aktivieren bzw. eine 45 Grad Linie zu halten.
 
Zuletzt bearbeitet:

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Wie kann man blos etwas in einem Spoiler zitieren? :p

Ich hatte angemerkt, daß ich Dich mit dem Thema nicht nerven möchte. und Du hast das geantwortet:

Aber setzt es in nen Spoiler... ;)
;)

Ich bin also nur Deinem Wunsch gefolgt. ;)

Zu Deinem Thema:
Wenn Du eine Maus-Koordinate hast, dann kennst Du durch die Zellengröße auch die Koordinate der Zelle(Oben links). Du hast also durch 2 Mauskoordinaten die Koordinaten von 2 Zellen. Im Idealfall liegen die im Abstand von einer Zellengröße. Wenn nicht, erhöhst Du einfach um eine Zellenbreite. Du setzt also eine neue Zelle. Wenn der Abstand diesmal auch nicht paßt, dann noch mal....
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.560
  • Thread Starter Thread Starter
  • #299
@KaPiTN:


Ich weiß nicht, ob das so einfach ist, als in einem Verhältniss von X und Y zu erhöhen.

Wie viele Schritte willst du machen in X oder Y ? - Und was zählt höher...

Ich hab höchstens eine For oder While schleifen, kann aber nicht beide Attribute gleichmäßig erhöhen ;)
Außer Prozentual. :)

Und dann treffe ich "wahllos" Zellen... die nicht betroffen sein sollten.
 

KaPiTN

♪♪♫ wild at heart ♪♫♫♪

Registriert
14 Juli 2013
Beiträge
29.138
Aber ich weiß es. :)

Ich verstehe Dein Problem nicht. Oder hast Du nicht verstanden, was ich beschrieben habe?

Willst Du noch darüber nachdenken oder möchtest Du Pseudocode?
 
Oben