Linie drehen, aber nicht um die eigene Achse.

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Linie drehen, aber nicht um die eigene Achse.

Re: Linie drehen, aber nicht um die eigene Achse.

von balu » Mi, 19.02.2014 20:36

Hallo R,
war nicht einfach
das glaub ich dir. Und dafür schon mal meinen Dank an dich. Danke :D.

Ich hatte heute noch mal nach dem Homo, öhm HomogenMatrixLine meinte ich natürlich, gesucht, aber irgendwie nix brauchbares dabei. Zumindest nicht direkt für StarBasic, sondern ehern für die Java Version in "OpenOffice". Da hatte ich, so meine ich mich zu errinern, wohl 2 Codes gefunden die ich aber nicht anwenden konnte, und ich möchte mich auch nicht noch zusätzlich mit Java rumschlagen.
hier eine Lösung bis 90° Drehwinkel, danach müßte man die Vorzeichen verändern:
Dein Code ist wohl schon mal nicht schlecht, aber leider ist es noch nicht ganz was ich wollte. Denn:
Name hat geschrieben: Wer kann mir also sagen wie ich den Rotationspunkt frei einstellen kann?
Das heißt; Der Dreh- und Angelpunkt ist von der Linie getrennt und weiter weg in X-, also nach Links verschoben. Kann natürlich sein das meine Schilderung nicht eindeutig war.

Ich will dir also nix böses, um Gottes willen! Nur damit Du mich nicht falsch verstehst.

Jetzt habe ich aber auch was zum selber tüfteln, da ich ja nun Dank dir endlich eine Ausgangsbasis habe auf der ich wohl aufbauen kann und endlich weiter komme -{so zumindest meine Hoffnung}-. Und wenn ich mein Ziel erreicht habe, werde ich dann das Ergebnis natürlich hier zeigen. Das wird aber jetzt schon noch ein paar Tage dauern.

Also noch mal ein Danke schön an dich für deine Bemühungen :D.



Gruß
balu

Re: Linie drehen, aber nicht um die eigene Achse.

von F3K Total » Mi, 19.02.2014 19:42

Hallo Balu,
war nicht einfach, hier eine Lösung bis 90° Drehwinkel, danach müßte man die Vorzeichen verändern:

Code: Alles auswählen

Dim oZeichnungsBlatt as Object, Doc as Object, LineShape As Object
Dim Point As New com.sun.star.awt.Point
Dim Size As New com.sun.star.awt.Size
dim nPosX as Long, nPosY as Long, Breit as Long, nWinkel as Long
dim sFarb as String

Sub Main2
    Doc = ThisComponent
    oZeichnungsBlatt = Doc.Sheets(0).DrawPage
    oDatBla = Doc.sheets.getByName("Tabelle1")
    nPosX = 10000
    nPosY = 10500
    Breit = 10000
    'nWinkel = 2000
    sFarb = &H000000
    for i = 0 to 9000 step 200
        nWinkel = i
        TestLinie
    next i
End Sub
'
'*****************************************************************************
'
Sub TestLinie
    Point.x = nPosX
    Point.y = nPosY
    
    Size.Width = Breit
    Size.Height = 1

    LineShape = Doc.createInstance("com.sun.star.drawing.LineShape")
    LineShape.Size = Size
    LineShape.Position = Point
    LineShape.LineColor = sFarb
    LineShape.LineStyle = com.sun.star.drawing.LineStyle.SOLID       
    LineShape.LineWidth = 10
    oZeichnungsBlatt.add(LineShape)
    oTransformation = LineShape.Transformation
    LineShape.RotateAngle = nWinkel
    dim oLine1 as new com.sun.star.drawing.HomogenMatrixLine3
    dim oLine2 as new com.sun.star.drawing.HomogenMatrixLine3
    with oLine1
        .Column1 = Breit * cos(PI()* nWinkel/18000)
        .Column2 = 0
        .Column3 = nPosX
    end with
    with oLine2
        .Column1 = 0
        .Column2 = Breit * sin(PI() * nWinkel/18000)
        .Column3 = nPosY-(Breit * sin(PI() * nWinkel/18000))
    end with 
    with oTransformation
        .Line1 = oLine1
        .Line2 = oLine2
    end with
    LineShape.Transformation = oTransformation
END SUB
Gruß R

Linie drehen, aber nicht um die eigene Achse.

von balu » Mi, 19.02.2014 01:08

Moin moin,

ich weiß einfach nicht wie ich dahin komme, aber ich möchte folgendes.

In Calc wird per Makro eine Horizontale Linie gezeichnet. Kein Problem, das funktioniert.
Die Linie soll anschließend gedreht werden, aber nicht um die eigene Achse wie es die Vorgabe ist. Um zu verdeutlichen was ich genau meine, folgen zwei Screenshots.

Also das ist ja die Vorgabe, und das möchte ich nicht.
Vorgabe-1.png
Vorgabe-1.png (13.05 KiB) 1017 mal betrachtet
Um die Linie so zu drehen reicht ja einfach diese Zeile im Code

Code: Alles auswählen

LineShape.RotateAngle = xxxx
nachdem die Linie zugefügt wurde.

Und das ist mein Wunsch.
Vorgabe-2.png
Vorgabe-2.png (13.26 KiB) 1017 mal betrachtet
Von Hand ist das ja alles kein Problem, blos per Makro finde ich nicht die Stellen wo ich da was einstellen kann.

Natürlich habe ich versucht da was im I-Net zu recherchieren, aber da habe ich wohl noch nicht die richtigen Suchparameter eingesetzt um fündig zu werden. Irgendwie hatte ich bis jetzt das Gefühl, als wäre

Code: Alles auswählen

.Transformation.Line?.Column?
ein Versuch wert. Und dann hatte ich in diesem Zusammenhang auch noch was von HomogenMatrix3 gelesen, aber ohne jegliche Beispiele schaff ich es nicht da etwas raus zu basteln. :roll:

Und ja, XRAY habe ich auch gequält. Aber wir beide sprechen nicht die gleiche Sprache.
Auch wenn es wirklich nicht viel ist, so habe ich eine kleine Testdatei angehängt mit der experimentiert werden kann.

Hab grad eben mal den Makrorecorder angeschmissen, und folgendes dabei gesehen.

Code: Alles auswählen

dispatcher.executeDispatch(document, ".uno:TransformDialog", "", 0, Array())
Also scheint meine Vermutung mit Transformation gar nicht so verkehrt. Nur wie weiter, keine Ahnung. Denn das wird ja nicht aufgezeichnet, leider.

Wer kann mir also sagen wie ich den Rotationspunkt frei einstellen kann? Mir reichts ja schon wenn ich nur den X-Wert eingeben könnte.

Wäre wirklich sehr schön wenn mir da jemand helfen kann :) . An die schon ansatzweise geplante und programmierte alternative mag ich gar nicht denken.


Gruß
balu
Dateianhänge
Linien-Test.ods
(9.9 KiB) 51-mal heruntergeladen

Nach oben