Kurve aus Koordinaten erstellen
#1
Hallo, zunächst einmal wünsche ich Allen ein frohes Weihachtsfest.

Ich habe da noch eine Frage;-)
Gibt es die Möglichkeit, in CorelDraw eine Tabelle mit x,y Koordinaten einzulesen und dann eine spline interpolierte Kuve mit diesen Daten zu zeichnen?
Vielleicht ein Makro?

Gruß, Norbert
Zitieren
#2
Hallo Norbert,
ein kommerzielles Macro gibt es hier http://corelvba.com/index.php?pages=chart_1
du müsstest das Macro 2-3 mal starten können bevor du es kaufen musst.

Willst du die Kurvenpunkte selber als x,y Koordinaten eingeben solltest du dir in Corel Draw das Andockfenster "Objektkoordinaten" genauer ansehen.

Gruß
Norre
Zitieren
#3
norre schrieb:Hallo Norbert,
ein kommerzielles Macro gibt es hier http://corelvba.com/index.php?pages=chart_1
du müsstest das Macro 2-3 mal starten können bevor du es kaufen musst.

Willst du die Kurvenpunkte selber als x,y Koordinaten eingeben solltest du dir das Andockfenster "Objektkoordinaten" genauer ansehen.

Gruß
Norre

Alls klar, danke norre.

Liebe Grüße, Norbert
Zitieren
#4
Hallo
unser Dr. mak Koter hat mal ein Makro geschrieben bei dem die Objektkoordinaten in eine Excelliste geschrieben werden (Hier), vielleicht geht das auch anderstrum?

Gruß
Norre
Zitieren
#5
Hallo,

norre schrieb:...vielleicht geht das auch anderstrum?

Ja, das geht auch:

[Bild: excelbsplinehzxiq.gif]

Das Makro ist in der angehängten Excel-Datei enthalten.

Excel und CorelDraw müssen laufen.
In CorelDraw muss eine Datei geöffnet sein.
Im VBA-Code muss die CorelDraw-Version angepasst werden:

Code:
Sub bspl()
    Dim CDraw
    Dim Erster As Integer, Letzter As Integer, z As Integer
    Dim H As Double
    Dim Version As String
    Dim wert As Boolean
    
    [color=#B22222]Version = "17"[/color]
    
    H = 29.7 / 2
    Erster = 1
    wert = True
    z = 1
    Do While wert
        z = z + 1
        If Cells(z, 1).Value > 0 Then Letzter = Cells(z, 1).Value
        wert = Cells(z, 1).Value > 0
    Loop

    Letzter = 20
    Set CDraw = GetObject("", "CorelDraw.Application." & Version)
    With CDraw
        .ActiveDocument.Unit = 4
        Set bs = .ActiveDocument.CreateBSpline(Letzter, False)
        For i = Erster To Letzter
            If i = Erster Or i = Letzter Then
                bs.ControlPoints(i).SetProperties Cells(i + 1, 1).Value, Cells(i + 1, 2).Value, True
            Else
                bs.ControlPoints(i).SetProperties Cells(i + 1, 1).Value, Cells(i + 1, 2).Value, False
            End If
        Next i
        .ActiveLayer.CreateBSpline bs
    End With
    Set CDraw = Nothing
End Sub

Für X6 müsste also Version = "16" stehen.
(Getestet mit Excel 2013 und CorelDraw X6/X7)

Falls es jemand lieber per Hand nachbauen möchte:
Die Formel in Zelle B2 ist: =SIN(A2)*5+(29,7/2)
(Neuerdings treiben ja die längst tot geglaubten Makro-Viren wieder ihr Unwesen)

Gruß

Koter


Angehängte Dateien
.zip   BSplineCDR1.zip (Größe: 14,08 KB / Downloads: 7)
Zitieren
#6
:daumen:Super,

das wird ja immer besser. Vielen Dank, Norbert

Edit: Habe es gerade mit X8 getestet und es funktioniert tadellos. Chapeau.
Zitieren
#7
Nur Interesse halber...
ich bin ja jetzt nicht so der Virtual Basic Programmierer (Menschen mit dem Namen Norbert haben noch mit Fortran IV gearbeitet und mit teco editiert MrGreen)

Für was wird denn die Konstante H ( H = 29.7 / 2 ) definiert und taucht dann nicht mehr auf ?

Aber für mich ist das überhaupt ein Rätsel, wie Excel die Daten in das Corel beamtconfused

Nochmals vielen Dank für diese tolle Erweiterung.

Frohes Fest

Norbert
Zitieren
#8
Hallo Namensvetter,
falls du auf Kurven stehst gäbe es bei Oberon noch den Funktionsplotter, nach 7Tagen kostenplichtig ;-)
https://oberonplace.com/products/plotter/index.htm

Gruß
Norre
Zitieren
#9
Hallo Norbert,

nowa schrieb:Für was wird denn die Konstante H ( H = 29.7 / 2 ) definiert und taucht dann nicht mehr auf ?

Das ist einfach Schlamperei. Die Variable wurde verwendet um die Kurve vertikal mittig zu positionieren.
Das habe ich dann aber in die Excel-Formel verlegt und dann vergessen es im VBA-Code zu löschen.

Es wird aber noch schlimmer:

Erst wird in der Do-Loop-Schleife die Variable „Letzter“ belegt und danach mit „Letzter = 20“ wieder überschrieben.
Es ist also egal wie viele Zeilen die Wertetabelle hat, das Makro nutzt nur die ersten 20.

Das Makro habe ich nur schnell hingepfuscht um zu zeigen dass es geht.

Diese Do-Loop-Schleife ist auch keine gute Lösung. Wenn etwas schief geht, laufen die Dinger gerne einmal (ergebnislos) bis zum nächsten Stromausfall.

In der Tabelle einen benannten Bereich anzulegen und diesen im Makro zu verwenden wäre die bessere Lösung:

Code:
Sub bspl()
    Dim CDraw As Object
    Dim Werte As Range
    Dim Letzter As Integer
    Dim Version As String
    
    
    Version = "17"
    
    Set Werte = Range("Werte")
    Letzter = Werte.Rows.Count
    
    Set CDraw = GetObject("", "CorelDraw.Application." & Version)
    
    With CDraw
        .ActiveDocument.Unit = 4
        Set bs = .ActiveDocument.CreateBSpline(Letzter, False)
        For i = 1 To Letzter
            bs.ControlPoints(i).SetProperties _
            Werte(i, 1).Value, Werte(i, 2).Value, i = 1 Or i = Letzter
        Next i
        .ActiveLayer.CreateBSpline bs
    End With
    
    Set CDraw = Nothing
End Sub

Die Formel für den Namen „Werte“ könnte so aussehen: =INDIREKT("A2:B"&ANZAHL2(Tabelle1!$B:$B))

nowa schrieb:...Aber für mich ist das überhaupt ein Rätsel, wie Excel die Daten in das Corel beamt...

Der „Beamer“ ist die COM-Schnitstelle. Das ist aber nicht der Anschluss mit dem wir früher unser Modem oder die Maus mit dem Rechner verbunden haben.
COM steht für „Component Object Model“. Die Zeile Set CDraw = GetObject("", "CorelDraw.Application." & Version) setzt eine Objektvariable die CorelDraw repräsentiert.
Damit kann Excel dann auf Objekte, Eigenschaften und Methoden von CorelDraw zugreifen.

Gruß und Frohes Fest

Koter
Zitieren
#10
Vielen herzlichen Dank für diese kompetente und verständliche Erklärung.

Einiges hatte ich mir ja schon gedacht und erkannt.

Frohes Fest, Norbert
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Loch erstellen Burghard 12 295 11.08.2019, 20:33
Letzter Beitrag: Burghard
  spezielles Polygon erstellen mike-ao 5 364 21.06.2019, 20:13
Letzter Beitrag: mike-ao
  Flyer erstellen Maik4000 1 223 21.05.2019, 06:35
Letzter Beitrag: norre
  Füllung erstellen Wenne 4 290 29.03.2019, 02:27
Letzter Beitrag: koter
  Doppelseite für Druckerei erstellen Kurtus 9 645 23.01.2019, 17:43
Letzter Beitrag: Suc
  Sehr komisch, warum kann ich hier kein neues Thema erstellen? HDT 8 485 21.10.2018, 15:27
Letzter Beitrag: Unkraut
  Aus mehreren gestückelten Linien eine Kurve erstellen bengchui 1 326 08.10.2018, 11:54
Letzter Beitrag: norre
  Logo mit Schrift in X5 erstellen ??? Max 2 288 30.05.2018, 14:32
Letzter Beitrag: Max
  Form erstellen canis 6 469 29.03.2018, 20:28
Letzter Beitrag: canis
  Matrix erstellen Marylinn 19 1.613 11.03.2018, 15:54
Letzter Beitrag: Marylinn