PDA

Vollständige Version anzeigen : Script-Fu Mausposition


bf
09.12.2006, 01:28
Habe Script-Fu ein wenig ausprobiert, kann aber keine Funktion finden, die es mir ermöglicht die Mausposition abzufragen.
Diese wird zwar unten links ausgegeben, aber weiß jemand wie man an diese über Script-Fu herankommt ?

klaus_harrer
09.12.2006, 11:35
Hallo

Ich beschäftige mich schon seit längeren mit Script-fu.
Soweit ich weiss gibt es so eine Funktion nicht.
Wäre auch nicht sinnvoll so eine Funktion einzubauen.
Wenn du ein Script ausführst ist der Mauszeiger auf den "OK" Button

Besser du erklärst was du eigentlich machen möchtest.

MfG
Klaus Harrer

renegArt
09.12.2006, 13:13
Wenn du ein Script ausführst ist der Mauszeiger auf den "OK" Button

*lach* guter hinweis!

ich kenn mich mit script-fu zwar nur sehr mäßig aus. aber bei der problemstellung geht es wohl darum, dass sich das script in den hintergrund pflanzen soll und während der arbeit in echtzeit die jeweilige manipulation modifiziert. also quasi ein script-fu-filter, der sich aufmalen lässt, statt auf eine vorgegebene auswahl zu wirken.

ich vermute mal, genau da fängt dann das große kopfschütteln an. denn irgendwer hätte sich mit sicherheit bereits auf diese möglichkeit gestürzt, wenn es sie gäbe. deine durchaus plausible antwort bestätigt mich in dem verdacht ;)

@bf: die gesamte api ist im toolboxmenü xtns > prozeduren browser "dokumentiert" (und offenbar selbst für geläufige schnittstellenfunktionen die einzige halbwegs brauchbare informationsquelle. jedenfalls hab ich bislang nix gescheiteres im netz gefunden). ich find' das teil selbst elend umständlich, aber wenn du dort nicht fündig wirst, haste verloren.

vielleicht gibbet wenigstens funktionen, die sich die mausposition in einem vorschau-fenster abgreifen, vergleichbar mit dem iwarp-filter. aber da bin ich wie gesagt selbst nicht firm genug, um über mutmaßungen rauszukommen.

bf
09.12.2006, 13:56
Genau das hatte ich befürchtet, aber ich dachte, vielleicht weiß ja jemand mehr als im Prozedurenbrowser steht.
Was ich machen möchte ? Ich möchte auf einem Bild Strecken vermessen. Ich weiß, dass es dafür das Messtool gibt, aber da ich die Streckenmaße in einem File speichern möchte, kann ich das nicht nutzen, da ich nicht an die Daten herankomme.
Weiß einer von euch, wie man sowas in einem Script bewerstelligen könnte ?

Libella
09.12.2006, 14:09
Wurzel von ((x1-x2)^2+(y1-y2)^2)

renegArt
09.12.2006, 14:11
Weiß einer von euch, wie man sowas in einem Script bewerstelligen könnte ?

wieviele messpunkte sind das denn? ggf. wäre es denkbar, vor der scriptausführung in jeweils eigenen ebenen einzumalen. die ebenen dann automatisch zuzuschneiden, wäre schon ein job fürs script und anschließend müssten sich die einzelnen ebenendimensionen mit 'ner prise pythagoras verwursten lassen. die jeweiligen ebenennamen könnten als beschriftung dienen.

frag mich nicht, wie das in scheme gecodet wird. aber vielleicht lässt sich dieser ansatz noch ausbauen. im konzept fehlt aber noch 'ne lösung, welche der beiden ebenendiagonalen maßgeblich ist, falls auch ein winkel gefordert wird. dafür müssten wohl irgendwie die vier eckpunkte auf transparenz abgefragt werden, um das auszuwerten.

renegArt
09.12.2006, 14:12
Wurzel von ((x1-x2)^2+(y1-y2)^2)

hach! da isser ja schon, der olle pythagoras :D

Libella
09.12.2006, 14:20
im konzept fehlt aber noch 'ne lösung, welche der beiden ebenendiagonalen maßgeblich ist, falls auch ein winkel gefordert wird.

Ist auch problemlos. Richtungswinkel zu einer der beiden Achsen gibts bequem per arcus tangens.

An Pythagoras gibts nichts auszusetzen, oder? Ich mein ausser natuerlich man steht auf dem Standpunkt "Wieso einfach, wenns auch kompliziert geht" ;).

renegArt
09.12.2006, 14:21
An Pythagoras gibts nichts auszusetzen, oder?

na, gips denn da nix moderneres?

Libella
09.12.2006, 14:33
Du kannst den Cosinussatz verwenden, wenn dir das lieber ist. Da kuerzt sich dann eh alles weg, was ueber den Pythagoras hinausgeht, weil Pythagoras nur ein Spezialfall des Cosinussatzes ist, fuer den Fall, dass der eingeschlossene Winkel rechtwinklig ist und der Rest durch die Multiplikation mit dem Cosinus vom rechten Winkel wegfaellt.

renegArt
09.12.2006, 14:35
Du kannst den Cosinussatz verwenden

danke für die info! ich find's immer nett, wenn mich jemand ernst nimmt :D

Libella
09.12.2006, 15:13
Bitte, gern doch ;).

bf
11.12.2006, 12:05
Die Berechnung an sich ist nicht das Problem.

Zitat von Libella Beitrag anzeigen
Wurzel von ((x1-x2)^2+(y1-y2)^2)

Hierbei ist das Problem an x1/y1 ranzukommen, die ich gerne aus dem Mausklick auslesen könnte.
Das Messen bezieht sich auf zwei drei gerade Strecken, die im Idealfall sogar ohne Winkel, also ganz senkrecht verlaufen.

renegArt
11.12.2006, 12:53
Hierbei ist das Problem an x1/y1 ranzukommen, die ich gerne aus dem Mausklick auslesen könnte.

yo, was spricht dagegen, die koordinaten nicht per mausklick zu sammeln, sondern vor scriptaufruf in besagte zwei bis drei zusätzliche ebenen zu malen, die dann vom script abgeklappert werden. die haben zwar evtl. doppelt so viele stützpunkte, wie gefordert (nämlich vier ecken). das ist dem pythagoras aber wurscht. interessant sind höhe und breite der ebene, und die sind an den jeweils gegenüberliegenden ebenenkanten identisch.

hat die ebene, die die maßlinie umschließt, in einer richtung eine ausbreitung von einem pixel, dann ist der winkel ein rechter, sonst muss eben nochmal libella mit ihrem trigono-dingsbums ran. wenn die ebene (per automatischem zuschneiden) eng an der maßlinie anliegt - sonst klappt's ja auch nicht mit der längenberechnung der hypotenuse -, sind die beiden für die winkelberechnung relevanten eckpunkte nicht transparent.

voraussetzung sind maßlinien, die mit dem stiftwerkzeug und einer pinselgröße von einem pixel erstellt wurden und ggf eine konvention für die ebenennamen, damit das script die maßlinien von regulären bildebenen unterscheiden kann, z.b. maß-a, maß-b, maß-c. alles was hinter dem prefix "maß-" zu stehen kommt, kann nebenbei noch als bezeichner für die ergebnisausgabe hergenommen werden.

eigentlich ein ganz simpler ansatz, der einen definierten einstieg und ein definiertes ende besitzt und also keinen hintergrundprozess zum abfangen der mausschubserei benötigt.

schumaml
11.12.2006, 13:26
Wäre es nicht sinnvoller, dafür Pfade zu nehmen? Dann sind die Strecken im Skript über die Endpunkte greifbar und auch direkt anschaulich im Bild repäsentiert.

Libella
11.12.2006, 14:34
Hoert sich gut und guenstig an. Aber ehrlich gesagt, scheints mir so, als will bf auf etwas ganz eigentuemlich Spezielles hinaus, rueckt aber nicht damit heraus, worauf genau. Vielleicht gibts da eine ganz simple Loesung fuer, wenn man nur wuesste, was da wirklich gewollt ist.

schumaml
11.12.2006, 14:43
Eben. Beschreibe das Ziel, nicht einen Schritt (http://www.lugbz.org/documents/smart-questions_de.html#goal) - man kann den Autor dieses Textes (http://www.lugbz.org/documents/smart-questions_de.html) (bzw. des englischsprachigen Originals (http://www.catb.org/%7Eesr/faqs/smart-questions.html)) für noch so arrogant und überheblich halten, er halt halt Recht :)

renegArt
11.12.2006, 16:06
Wäre es nicht sinnvoller, dafür Pfade zu nehmen? Dann sind die Strecken im Skript über die Endpunkte greifbar und auch direkt anschaulich im Bild repäsentiert.

dürfte am grundlegenden konzept wenig ändern. ich vermute mal, mit pfaden kann man sich den umweg zur bestimmung der vektorrichtung schenken, den ich bei der ebenenlösung versucht habe zu skizzieren. also ich seh' nix, was gegen pfade spräche.

Aber ehrlich gesagt, scheints mir so, als will bf auf etwas ganz eigentuemlich Spezielles hinaus

keine ahnung, warum sich bf auf seinen interaktiven ansatz kapriziert. der imho nicht realisierbar sein dürfte. sonst müsste es auch irgendwo möglichkeiten geben, solche hintergrundscripte abzuschießen, wenn sie nicht mehr gebraucht werden. den hinweis von klaus fand ich gar nicht schlecht, dass der mauszeiger sich mit ziemlicher sicherheit direkt über dem ok-button befinden wird.

bf's problemstellung ist inzwischen eigentlich klar und verständlich definiert, da kann's eigentlich nicht klemmen. vielleicht fehlt die lösung, die man nur noch abtippen braucht? da werd ich aber sicher nicht dran rumstümpern. wenn überhaupt, soll das mal wer machen, der sich damit auskennt.

bf
11.12.2006, 17:34
Ich find´s klasse, dass Ihr Euch solche Gedanken macht. Das mit den Ebenen verstehe ich aber leider nicht so ganz so, denn mein Problem ist, dass ich ein Photo habe und auf diesem Photo befindet sich eine Meßlatte, die eine vorgegebene Länge hat. Die Enden der Latte möchte ich anklicken können, um so die Länge der Latte auf dem Photo messen zu können, sprich die Latte auf dem Photo ist 1115 Pixel lang. Damit könnte ich weiterrechen wie weit ich von der Latte entfernt war, als ich das Photo aufgenommen habe.
Für solche Fälle gibt es das Meßtool, aber das kann man ja scheinbar nicht in einem Script verwenden, oder ?

schumaml
11.12.2006, 19:21
auf diesem Photo befindet sich eine Meßlatte, die eine vorgegebene Länge hat. Die Enden der Latte möchte ich anklicken können, um so die Länge der Latte auf dem Photo messen zu können, sprich die Latte auf dem Photo ist 1115 Pixel lang.

Ah, so langsam wird das interessant :)

Jetzt kommen wir nämlich in die Richtung Bildanalyse, und es stellt sich die Frage, ob man das nicht komplett automatisieren kann (wenn die Messlatte bzw. ihre Enden auffällig gefärbt sind, dann können man die ja per Auswahl nach Farbe automatisch finden).

Am besten ist es jetzt, wenn du mal ein Beispielbild in dein Album stellst und deinen kompletten Rechenweg hier vorstellst (ggf. erübrigt sich das nach dem Bild). Dann kann sich das jeder besser vorstellen und mehr Tipps zum Skript geben. Als vorläufiges Ziel könnte man mal ansetzen, dass du außer dem Verzeichnis zu den Bildern nichts mehr angeben möchtest.

lupus
11.12.2006, 21:10
Hallo bf,
Ich Die Enden der Latte möchte ich anklicken können, um so die Länge der Latte auf dem Photo messen zu können, sprich die Latte auf dem Photo ist 1115 Pixel lang.
Damit könnte ich weiterrechen wie weit ich von der Latte entfernt war, als ich das Photo aufgenommen habe.


Das wird dir IMHO nur gelingen wenn du den Zoomfaktor mit einrechnest. Interessanter wird es wenn du 2 Messlatten mit bekannten Abstand auf dem Bild hast

Aber befolge doch erstmal schumamls Rat. Dann sehen wir weiter ;-)

juergen

Libella
12.12.2006, 12:50
Das wird dir IMHO nur gelingen wenn du den Zoomfaktor mit einrechnest. Interessanter wird es wenn du 2 Messlatten mit bekannten Abstand auf dem Bild hast

Die Brennweite brauchst du auf jeden Fall schonmal, wobei noch eine Verzerrung hinzukommt, weil du nicht orthogonal knipst, was aber vermutlich fuer deine Zwecke zu vernachlaessigen ist. Aber was du auch noch brauchst und viel schwerer zu erreichen ist, ist die Sicherheit, dass diese Messlatte absolut rechtwinklig zur Aufnahmeebene liegt. Schon eine geringe Abweichung macht das Messergebnis naemlich unbrauchbar - in Metern. Wie bekommst du das hin? Naja, die Latte absolut lotrecht hinzustellen wird noch nicht so schwierig, das bekommt man mal eben mit einem Froschersatz und einem Lattenrichter hin, aber was ist mit dem Aufnahmegeraet? Wie bekommst du deinen Fotoapparat exakt ausgerichtet? Soviel ich weiss geben das normale Fotostative nicht her.

Es wird viel einfacher, schneller und vermutlich sogar exakter, wenn du einfach eine Schnur vom Stativ aus spannst. Es sei denn natuerlich, es geht dir direkt um kilometerlange Eisenbahngleisfluchten.

Sol Jara Sol
12.12.2006, 13:24
Wär Perl nicht ne Möglichkeit?

LG Sol Jara Sol

schumaml
12.12.2006, 14:05
Die Wahl der Programmiersprache kommt erst am Schluss - dann, wenn genau klar ist, was überhaupt gemacht werden soll.

bf
12.12.2006, 14:17
Also das mit der Verzerrung, Verzeichung, Zoomfaktor usw. ist mir klar, das ist hierbei erstmal nicht das Problem. Ich habe hier gerade kein Bild da, aber es ist nicht schwer vorzustellen. Es handelt sich um ein Bild mit einer Stange, die eine bestimmte Länge hat. Die Eckpunkte könnte man einfärben und dann mit ( ich weiß gerade nicht wie die Funktion heißt (bin nicht an meinem Rechner) ) der einen Funktion aus dem Prozeduren-Browser, die eine Selektion nach Farbwert macht herausbekommen, aber dann habe ich eine Selektion und immer noch keine Pixelwerte ???

renegArt
12.12.2006, 15:30
Das mit den Ebenen verstehe ich aber leider nicht so ganz

das wiederum versteh ich nicht. es geht um nichts weiter, als deine geliebten mausklicks aus dem script selbst rauszuzerren und in eine hilfskonstruktion zu packen, die vom script ausgewertet werden kann, weil sich damit die klicks zur laufzeit bereits erledigt haben. bei mir war's ne ebene, die eine gezeichnete messlinie eng umschließt, schumamls pfade tun's genauso. für's prinzip ist das wurscht, hauptsache die hilfskonstruktion verfügt über ein identifizierbaren anfang (entspricht deinem 1. mausklick), ein ebensolches ende (2. mausklick) und dazwischen findet ein bisschen länge statt, die sich errechnen lässt. wenn ich nicht auf dem schlauch stehe, war's genau das, wonach du gefragt hast.

dass dabei perspektivische verzerrungen berücksichtigt werden müssen, steht auf einem anderen blatt. das wird sich im zweidimensionalen universum von gimp allein nicht lösen lassen. nötig sind da imho vorkehrungen in der dreidimensionalen welt, in der das problem entsteht. das war aber auch erstmal nicht teil der aufgabenstellung.

Für solche Fälle gibt es das Meßtool, aber das kann man ja scheinbar nicht in einem Script verwenden, oder ?

macht das messtool denn was anderes, als 'ne linie pinseln und die dann auszuwerten?

Wie bekommst du deinen Fotoapparat exakt ausgerichtet? Soviel ich weiss geben das normale Fotostative nicht her.

stell die latte senkrecht. dann reichen zwei wasserwaagen, eine für die latte und eine für die knipse. ;) ganz ohne toleranzen wird's aber nicht gehen. architekten werden schon wissen, warum sie für ihr tachymetrisches equipment mehrere tausend öre auf den tisch blättern.

Froschersatz

:confused: was' das denn?

Libella
12.12.2006, 17:58
stell die latte senkrecht. dann reichen zwei wasserwaagen, eine für die latte und eine für die knipse. ;)

Rotfl! Dann macht einfach mal, ich klink mich hier an dieser Stelle aus und halte mir die Augen zu.

Einen Stehachsenfehler einfach so zu ignorieren fuehrt naemlich dazu, dass die ganze Arbeit nichts weiter als Zeitverschwendung ist.

Die Wasserwaage bringt aus zwei Gruenden nichts. Erstens hast du keine Garantie, dass die Gehaeuseoberseite rechtwinklig zur Zielachse liegt. Zweitens ist die Wasserwaage selbst dann nicht genau genug. Und drittens muesste die Zielachse selbst auch horizontriert werden, weil das Ding nunmal ne Kamera ist und kein Theodolit und spaetestens da kann man dann keine Wasserwaage mehr drauflegen.

Ein Frosch ist uebrigens son Knubbel auf dem Boden, zur Not tuts da auch ein Korken oder etwas aehnliches. Einfach etwas, das verhindert, dass die Endflaeche der Latte auf dem Boden steht, damit man die Latte lotrecht stellen kann, ohne sie auf einer Ecke zu balancieren.

renegArt
12.12.2006, 19:09
Die Wasserwaage bringt aus zwei Gruenden nichts.

bei hochwertigen balgenkameras sind wasserwagen eingebaut. allerdings wird das eher selten für die messtechnik eingesetzt, das ist richtitg. wie gesagt, vernünftiges werkzeug für derartige aufgaben kostet echtes geld und im regelfall misst man aus gutem grund die realität und nicht die fotografische reproduktion derselben.

das ändert aber nix daran, dass das eigentlich formulierte problem, sich zwei punkte in der bildebene zu greifen, eher trivial ist. wieviel die berechnungen taugen, die darauf aufsetzen, steht auf einem anderen blatt.

Libella
12.12.2006, 19:28
allerdings wird das eher selten für die messtechnik eingesetzt

Sehr selten ;). Diskutieren wir also einfach nicht weiter die Sinnlosigkeit des Unterfangens aus, sondern konzentrieren uns um die Kernfrage, wie man die Punkte in das Script reinbekommt ;).

bf
12.12.2006, 20:46
Genau das ist das Problem. Ich habe das mit den Pfaden und der Ebene noch mal überdacht. Setzen und anpassen geht ja, aber wie bekommt man die Daten der Eckpunkte heraus ?

renegArt
12.12.2006, 21:40
aber wie bekommt man die Daten der Eckpunkte heraus ?

gibt der prozedurenbrowser nix zum thema her? ich würde wetten abschließen, dass sich dazu passende api-funktionen finden lassen.

schumaml
12.12.2006, 22:08
gibt der prozedurenbrowser nix zum thema her?

Natürlich tut der das. Für eine Auswahl z.B. gimp-selection-bounds.

bf
13.12.2006, 20:36
Habe das mit gimp-selection-bounds mal ausprobiert. Um rauszufinden, wie die x- und y- Werte sind, wollte ich sie mir mal mit gimp-drawable-set-pixel mal ausgeben lassen, bekommen aber eine Fehlermeldung für den Farbwert, dass es der falsche Typ ist.
ICh poste mal das betreffende Stück Code:

(set! bounds (gimp-selection-bounds bild))
(set! x (cadr bounds))
(set! y (caddr bounds))

(set! farbe '(255 0 0))
(gimp-drawable-set-pixel drawable x y 3 farbe)


Sieht einer wo der Fehler liegt ?