Transformationsmatrix

  • Wenn man in GeoDraw mit den Grafiktools ein Objekt erstellt, dann ist der Kreisbogen das einzige Objekt, das bereits transformiert "auf die Welt kommt". Das ist leicht zu bestätigen, indem man gleich nach der Erzeugung auf "Transformation zurücknehmen" klickt.

    Ich beschäftige mich zur Zeit damit, bestehende Objekte durch Transformationsmatrizen in Größe und Form zu verändern. Mir ist es bisher aber nicht gelungen, nach einer durchgeführten Transformation die zugehörige Matrix wieder auszulesen. Inbesondere beim Kreisbogen wäre eine Möglichkeit zum Auslesen interessant.

    Gibt es jemanden, der sich mit diesem Thema beschäftigt (hat) ?

  • Hallo Wilfried,

    bei mir reagiert ein Kreisbogen direkt nach der Erzeugung nicht auf Transformation zurücknehmen. Im Gegensatz zu den anderen Objekten bewirkt Transformation zurücknehmen aber auch Zurücksetzen einer Skalierung.

    Es gibt eine API dafür, im alten und im neuen SDK, die ich in R-BASIC auch an diversen Stellen benutzt habe (also funktioniert sie)
    D:\G6\pcgeos\CInclude\graphics.h(1139): _pascal GrGetTransform(GStateHandle gstate, TransMatrix *tm);

    LG
    Rainer

    PS. guggst du hier. Hinter den DebugSchowInfo steckt ein sprintf() und eine Übergabe an mein Debug-Text Objekt

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Ha, jetzt ist's klar! Ich hab den Kreisbogen nicht über die Werkzeigeleiste, sondern über "Bearbeiten" -> "Erstellen" angelegt. Da ist er von hause aus 50pt Radius groß. Dann macht "Transformation zurücknehmen auch nix mehr :)

    Bei mir war der Kreisbogen gar nicht in der Werkzeugleiste, weil er per Default dort nicht ist.

    Btw. Die Übersetzung der Werkzeuge (Optionen->Werkzeugleisten einrichten -> Werkzeuge zeigen/verbergen) bedarf dringend eine Updates. Die meisten der Zeiger sind keine Zeiger! Die englischen Originale sind in Ordnung.

    LG
    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Zu welchem Zweck liest du die Matrix aus?

    R-BASIC kann Transformations-Maritzen setzen, aber auch das Koordinatensystem schieben, skalieren, rotieren usw. Da muss ich mir die aktuelle oder neue Martix schon mal merken.

    Das Ganze ist trotzdem recht knifflig, manchmal muss ich GrSetDefaultTransform() rufen, bevor irgendetwas richtig funktioniert. Das ist sehr viel Try and Error dabei.

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • <<Rainer:

    Btw. Die Übersetzung der Werkzeuge (Optionen->Werkzeugleisten einrichten -> Werkzeuge zeigen/verbergen) bedarf dringend eine Updates. Die meisten der Zeiger sind keine Zeiger! Die englischen Originale sind in Ordnung.>>

    Ganz deiner Meinung.

    Wie wär's mit:

    Zeiger
    Rotationszeiger
    Lupe
    Textobjekt
    Gerade Linie
    Rechteck
    Eckengerundetes Rechteck
    Ellipse
    Kreisbogen
    Polylinie
    Polykurve
    Spline

  • Ich stimme dir weitgehend zu, wäre allerdings für:

    Zeiger -> Zeigerwerkzeug resp. Zeiger-Werkzeug
    Rotationszeiger -> Drehzeigerwerkzeug (Drehzeiger-Werkzeug)
    Lupe -> Lupen-Werkzeug

    Im Gegensatz zu den anderen Dingen legst du damit ja keine Objekte an, deswegen "Werkzeug"

    Polyline -> Verbunden Linien
    Polykurve -> Verbunden Kurven

    Das ist m.E. einfach mehr selbsterklärend

    Rainer

    P.S. Die anderen Sachen müssten auch noch mal gecheckt werden, z.B.

    .. sollte "Neu zeichnen" oder "Ansicht (besser Anzeige) aktualisieren" heißen.

    Ich persönlich bin ja dafür, das "scrollen" zu lassen, man könnte aber auch "Seite nach Links schieben" schreiben. Ist m.E. aber nicht "Computer-like".

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Moin.

    Ich weiß, meine Ansichten sind vielleicht etwas altbacken oder auch einfach nur falsch... aber ich möchte jetzt auch meinen Senf dazugeben.

    Niemand - und damit meine ich den Otto-Normal-Benutzer - weiß oder hat eine Ahnung, was eine Poly-Linie oder -Kurve ist und schon gar nicht ein Spline. Da wäre ich dann schon eher für Rainers Vorschläge oder die Begriffe, die ich in der Hilfe verwendet habe = Linienzug oder gekrümmte Linie. Und Zoom... na ja, kann man machen...

    Gruß Achim


    PC/GEOS unter Linux in der DOSEMU = UNSCHLAGBAR!

  • .. sollte "Neu zeichnen" oder "Ansicht (besser Anzeige) aktualisieren" heißen.

    Ich persönlich bin ja dafür, das "scrollen" zu lassen, man könnte aber auch "Seite nach Links schieben" schreiben. Ist m.E. aber nicht "Computer-like".

    "Ansicht aktualisieren" ist gut. "Scrollen" ist auch ok. "Blick nach links", wenn man es unbedingt deutsch haben will.

  • Gut dass jeder aus der von dir angesprochenen Zielgruppedie Bedeutung z.B. des Begriffs Vektorgrafik kennt.;)

    Entschuldige, aber ich muß dir widersprechen. Ich habe diesen Begriff schon oft gehört, habe aber keine wirkliche Vorstellung davon, was er denn nun bedeutet.

    Gruß Achim


    PC/GEOS unter Linux in der DOSEMU = UNSCHLAGBAR!

  • Yupp, es ist nun mal so, dass wir sehr im täglichen Leben sehr viele Begriffe verwenden, ohne genau zu wissen, was sich dahinter verbirgt. Meistens ist das auch nicht nötig **. Ich bin deshalb immer dafür, die "üblichen" Begriffe zu benutzen. Ein krampfhaftes eindeutschen-auf-möglichst-simplen-Level klingt dann meistens etwas komisch, wenn es nicht gar inhaltlich falsch wird. "Blick nach links" wäre für mich so ein komischer Fall. Spline ist eben ein Fachbegriff, den aber kaum jemand kennt. Es gibt m.W. auch keine griffige Übersetzung dazu. Deswegen sollte man ihn stehen lassen. Wer es ausprobiert kommt schnell dahinter, was das Ding kann und wie es sich von den anderen beiden unterscheidet.

    Konzeptionell sind Menüpunkte m.E. eigentlich Anweisungen an dem Computer, etwas zu tun. "Vergrößern" heißt: bitte vergrößere das Bild (oder was auch immer). Explizit schreiben ("Vergrößere das Dokument") wird das niemand, das klingt eben komisch. Nach meiner Meinung sollte man das immer im Hinterkopf haben, wenn man eine gute Übersetzung finden will.

    Zoom löst das Problem mit der inversen Lupe (wusste ich bisher gar nicht :) übrigens nicht, weil zoom eben auch nur "vergrößern" heißt. Lupe ist für mich aber eine griffige, sehr anschauliche Beschreibung der Funktion - in solchen Fällen würde ich persönlich die deutsche Variante bevorzugen.

    Rainer

    ** Wer weiß schon wirklich, warum eine Induktionsherd so heißt oder wofür das AM/FM bei einem Radio steht bzw. das CC bei Emails?

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Eine erzwungene Eindeutschung halte ich auch für nicht angebracht.

    Nun sieht das Symbol dieses Grafikwerkzeugs ja tatsächlich wie eine Lupe aus und ist von den Erzeugern ungeschickt gewählt, weil die scheinbare Bedeutung dieses Werkzeugs eingeschränkt wird. Man kann man damit nicht einzelne Objekte vergrößert betrachten wie bei der Bitmap-Lupe. Deshalb würde ich als Beschreibung, wenn nicht "Zoom", dann "Ansichtsgröße verändern" nehmen. Leider ist dann auch nicht offensichtlich, wie man das Werkzeug zur Verkleinerung benutzt:(.

    Wilfried

  • Zurück zum Thema:)

    Bisher ist es mir nicht gelungen, die Transformationsmatrix eines transformierten Grafikobjekts auszulesen.

    Die GrObjClass Instance Data enthalten:

    @instance ChunkHandle GOI_normalTransform = NullChunk;

    Wie kann ich darauf zugreifen, wenn ich den Optr des Objekts habe?

  • An der Stelle muss ich jetzt passen. Ich habe mich nie mir GrObject-Objekten beschäftigt.
    Drei Ideen hätte ich:

    1. Ich würde mir die MSG_VIS_DRAW eines einfachen Objekts ansehen, um zu sehen, ob dort etwas spezielles passiert.

    2. (Arbeitshypothese) Es könnte sein, dass das Setzen einer Transformationsmatrix quasi dazu führt, dass ein zusätzliches gstate (oder ein GString?) "dazwischen" geschaltet wird, dass dann die Transformationsmatrix enthält.

    3. Frag Falk direkt :)

    Rainer

    Es gibt 10 Arten von Menschen - die einen wissen was binär ist, die anderen nicht.

  • Hallo Falk,

    wo hast du geguckt? Du hast die Quelle nicht genannt.

    Ich habe in grobjTransformUtils.asm dies gefunden:

    GOI_normalTransform.OT_degrees - may have changed

    und

    mov si,ds:[si].GOI_normalTransform

    ds:[si] zeigt wohl zum Objekt. Aber wie mach ich das in GOC? Den Optr des Objekts habe ich. Und mit ObjDerefVis(objekt) bekomme ich den Zeiger auf die Daten. Also müsste ich doch mit

    GrObjTransMatrix tm;

    pself= ObjDerefVis(objekt);

    tm = pself->GOI_normalTransform.OT_transform;

    ans Ziel gelangen, oder was sagst du dazu?