Fehlerhafte Knoten-Griffe automatisch finden
#31
Sorry, dass ich mich wieder einmische

Deine .cdr kann man übrigens z.B. mit X6 nicht öffnen.
Aber noch einmal die Frage: Was ist dein Ziel? Warum stören dich die "angeblich" falschen Richtungsvektoren?

Kein Mitglied des Forums weiss, was das Problem der Richtungen sind.

Gruss aus der Schweiz

Betriebssystem / Grafik-Software: Windows 11 / COREL X6
Zitieren
#32
(18.06.2024, 10:24)asterix schrieb: Und wenn ich noch länger darüber nachdenke Smile, dann wäre so ein Makro, das du ja oben schon gezeigt und erstellt hast, zum 180°-Drehen eines Knotens, eigentlich im Rahmen dieser manuellen Arbeiten durchaus eine große Hilfe. Dann hätte man in so einem Fall ein Makro, um kurze Griffe aufzuspüen und noch ein Makro, um die relevanten Knoten zu drehen. Also wenn du das schon erstellt hast, wäre das schon interessant mal auszuprobieren, falls es als Code in meiner Version funktioniert. Dein anderes Makro hat ja aber auch geklappt in meiner 2023 SE.

Siehe mein letzter Beitrag, ich denke, ich bin ganz froh mit dem Makro zum Markieren kurzer Griffe und ggf. einem Makro, wo man Knoten einfach um 180° drehen kann. Das ist doch eine Funktion, die allgemein nützlich sein kann, nicht nur für mich. Es kommt eben bei importieren Dateien vor, dass ein Knoten gedreht werden muss, damit die Kurve nicht abgeschnitten ist.

Betriebssystem / Grafik-Software: Windows 10, CorelDraw Suite 2023
Zitieren
#33
(18.06.2024, 12:43)Boerni schrieb: Kein Mitglied des Forums weiss, was das Problem der Richtungen sind.

Hallo Boerni,

vielleicht ja doch, es gibt ja viele stille Leser.
Vielleicht meldet sich noch jemand der helfen kann.

Mir geht es wie Dir, wenn Asterix aber ein Makro wünscht und ich verstehe,
was das Makro machen soll, dann bastele ich es zusammen (wenn ich es kann).
Ich muss ja nicht genau verstehen, wozu er es benutzen will.

(17.06.2024, 20:48)asterix schrieb: ...Aber bei der 180°-Drehung brauchen wir ggf. doch nicht mehr weiterforschen...

Hallo Asterix,

ich forsche sowieso nicht, dass musst Du selbst machen.
Mir fehlt dazu die Zeit und der Verstand.

(18.06.2024, 10:24)asterix schrieb: Und wenn ich noch länger darüber nachdenke Smile, dann wäre so ein Makro, das du ja oben schon gezeigt und erstellt hast, zum 180°-Drehen eines Knotens, eigentlich im Rahmen dieser manuellen Arbeiten durchaus eine große Hilfe. Dann hätte man in so einem Fall ein Makro, um kurze Griffe aufzuspüen und noch ein Makro, um die relevanten Knoten zu drehen. Also wenn du das schon erstellt hast, wäre das schon interessant mal auszuprobieren, falls es als Code in meiner Version funktioniert. Dein anderes Makro hat ja aber auch geklappt in meiner 2023 SE.

Ich hänge eine Zip-Datei an, in der sich eine GMS befindet.
Ich würde gerne wissen, ob Deine Version GMS-Dateien von X7 lesen kann.

Du musst die Zip entpacken und den Inhalt (Die GMS-Datei) in Deinen GMS-Ordner kopieren.

Wenn Du den VBA-Editor öffnest (Alt+F11) und den Befehl:
? Application.GMSManager.UserGMSPath
im Direktbereich eingibst und dann Enter Drückst, wird der Pfad zum GMS-Ordner angezeigt.
Wenn der Direktbereich nicht sichtbar ist, kannst Du ihn mit STRG+G einblenden.

Nach einem Neustart von CorelDraw sollte das Projekt „Endknotenbearbeitung1“ Makro-Manager
(Andockfenster Skripts) sichtbar sein.

Das Makro „KnotenBearbeiten“ im Modul „KnotenBearbeitung“ sollte die Steuerpunkte,
die kürzer als die Linienbreite sind finden und eine Wendung (Drehung um 180°) anbieten.

So Habe ich Deine Bitte aus Beitrag 30 verstanden.

Gruß

Koter


Angehängte Dateien
.zip   Endknotenbearbeitung1.zip (Größe: 11,29 KB / Downloads: 1)
Zitieren
#34
Hallo und danke, koter.

Zum Grund meines Themas nochmal, z.B. wenn in Zukunft jemand hier hereinschaut und wie so oft nur die letzten Beiträge anschaut.

Ich importiere Dateien, z.B. aus Clip Studio Paint, als SVG. Diese werden in CorelDraw auch korrekt geöffnet. Allerdings sind eben die Dateien schon vorher nicht ganz sauber, etwa bei den Start- und Endknoten. Diese sind teilweise verkehrt herum oder aber es gibt ganz kleine Biegungen am Ende der Kurve. Es ist einfach ein unsauberer Pfad am Anfang und am Ende. Das Ergebnis davon ist schlicht und einfach, dass manche Linien (=Umriss) abgeschnitten sind und nicht abgerundet am Ende. Das würde ich gerne korrigieren. Das meiste wird wohl manuell zu erledigen sein, aber Makros sind ja immer eine gute Hilfe.

Weiter oben hattest du, koter, schon ein Makro reinkopiert, das kurze Griffe findet, was auch funktioniert und hilfreich ist. Das müsste aus meiner Sicht auch nicht geändert werden.

Noch wichtiger (nach einer steilen Lernkurve) ist aber, dass man "per Klick" einen Knoten (Startknoten oder Endknoten) dann per Makro drehen kann, also um 180°. Und zwar per manueller Auswahl.

Daher wäre das eine Makro eigentlich schon fertig (kurze Griffe), und das zweite Makro könnte gerne ganz unabhängig davon sein. Das heißt, man entdeckt einen Knoten selbst und markierte diesen selbst und klickt dann einfach nur auf das Makro zum 180°-Drehen. 

koter hatte es oben auch schon gezeigt, vielleicht gibt es das 180°-Makro schon "einzeln"? Dann könntest du es hier mal reinkopieren und ich könnte es testen.

Das GMS von dir hat bei mir leider nicht geklappt, es gibt den Fehler 91 "Objektvariable oder With-Blockvariable nicht festgelegt" und der Debugger markiert: aV.SetViewArea oX, oY, oWidth, oHeight

Aber wie erwähnt bräuchte ich kein Gesamtmakro, sondern nur noch den Code für die 180°-Drehung. Also ohne vorherige Analyse der Knoten.

Betriebssystem / Grafik-Software: Windows 10, CorelDraw Suite 2023
Zitieren
#35
Hallo Asterix,

hab ich es also wieder nicht kapiert!

OK, versuch es mit diesem Makro:

Code:
Sub KnotenWenden()
   Dim s As Shape
   Dim C As Curve
   Dim KR As NodeRange
   Dim K As Node
   Dim KAnz As Double
   If ActiveSelectionRange.Count <> 1 Then Exit Sub
   Set s = ActiveShape
   Set C = s.Curve
   Set KR = s.Curve.Selection
   KAnz = s.Curve.Nodes.Count
   For Each K In KR
       If K.Index = 1 Then
           C.Segments.First.StartingControlPointAngle = C.Segments.First.StartingControlPointAngle + 180
           K.CreateSelection
           Exit For
       End If
       If K.Index = KAnz Then
           C.Segments.Last.EndingControlPointAngle = C.Segments.Last.EndingControlPointAngle + 180
           K.CreateSelection
           Exit For
       End If
   Next
End Sub

Du musst den Knoten mit dem Form-Werkzeug auswählen und dann das Makro starten.

Gruß

Koter
[-] 1 Benutzer bedankt sich bei koter für diesen Beitrag:
  • asterix
Zitieren
#36
Super vielen Dank, klappt!

Damit habe ich nun zwei sehr hilfreiche Makros, einmal für die kurzen Griffe, und einmal - ggf. auch unabhängig davon - zum Drehen der Knoten.

Ich denke, das ist eine gute Lösung für so einen Fall, hoffentlich auch für andere nützlich, wenn es mal zu unsauberen Kurven und Knoten gekommen ist.

Betriebssystem / Grafik-Software: Windows 10, CorelDraw Suite 2023
Zitieren
#37
Nun melde ich mich doch nochmal Smile. Aber nicht mit neuen Makro-Ideen, ich habe die beiden Makros heute schon sehr ausgiebig genutzt und Dutzende oder mehr Kurven und Knoten korrigiert.

Ich habe nur bei einem Knoten festgestellt, dass das Makro zum Wenden um 180° irgendwie nichts ausrichtet.
Daher aus Interesse die Frage, ob man (du Koter?) herausfinden kann, ob dies an dem Knoten liegt oder am Makro?

Wie gesagt, alle anderen Knoten konnte ich bisher problemlos wenden, also markieren und dein Makro ausführen, nur bei diesem hier tut sich nichts, auch keine Fehlermeldung.

Beispiel anbei, es geht um den Endknoten links.


Angehängte Dateien
.cdr   test3.cdr (Größe: 23,13 KB / Downloads: 6)

Betriebssystem / Grafik-Software: Windows 10, CorelDraw Suite 2023
Zitieren
#38
Hallo Asterix,

(20.06.2024, 20:45)asterix schrieb: ...Daher aus Interesse die Frage, ob man (du Koter?) herausfinden kann, ob dies an dem Knoten liegt oder am Makro?...

Der Steuerpunkt hat die Länge 0. Einem Steuerpunkt mit der die Länge 0
kann ein Winkel zugewiesen werden, das wird aber von CorelDraw ignoriert.

(20.06.2024, 20:45)asterix schrieb: ...nur bei diesem hier tut sich nichts, auch keine Fehlermeldung...

CorelDraw sieht das nicht als Fehler, also gibt es keine Meldung.

Wen Du es willst, baue ich eine Meldung ein.
Ich kann den Steuerpunkt auch vom Makro verlängern lassen.
Falls Du das willst, schreibe bitte ob das Makro dies automatisch machen soll,
oder erst auf Nachfrage.

Gruß

Koter
Zitieren
#39
Danke, habe ich nicht dran gedacht und wüsste auch nicht, wie ich das nachsehen kann. Aber ich brauche die genaue technische Info nicht, wenn das Makro das erledigt Smile.

Ja, das Makro kann gerne den Griff automatisch verlängern und dann den Knoten direkt drehen, also ohne Nachfrage.

Was sind denn überhaupt Griff-Längen von einem "normalen" Knoten? Ist das die Länge, die man auch auf dem Lineal dann sieht?

Denn das habe ich mich auch bei deinem anderen Makro gefragt, also bis zu welcher Griff-Länge werden die "kurzen" Griffe da markiert? (nur um es zu verstehen)

Betriebssystem / Grafik-Software: Windows 10, CorelDraw Suite 2023
Zitieren
#40
Hallo Asterix,

(21.06.2024, 20:03)asterix schrieb: ...Denn das habe ich mich auch bei deinem anderen Makro gefragt, also bis zu welcher Griff-Länge werden die "kurzen" Griffe da markiert? (nur um es zu verstehen)...

Das habe ich in Beitrag 11 erklärt:

(13.06.2024, 16:24)koter schrieb: ...der folgende Code markiert Steuerpunkte die kürzer sind als die Linienbreite...

Noch genauer: Kürzer als die Umrissbreite.
Falls Du das ändern willst, gib Bescheid.


(21.06.2024, 20:03)asterix schrieb: Was sind denn überhaupt Griff-Längen von einem "normalen" Knoten? Ist das die Länge, die man auch auf dem Lineal dann sieht?...

Ich nehme an, mit Griff-Länge meinst Du die Steuerpunkt-Länge.

Ich hole ein wenig aus:

Eine Kurve besteht aus einem oder mehreren Pfaden:
[Bild: Pfadelemente.jpg]
  • Ein Pfad besteht aus einem oder mehreren Segmenten.
  • Ein Segment verläuft zwischen zwei Knoten.
  • Ein Segment hat zwei Steuerpunkte.
    Ein gerades Segment hat keine Steuerpunkte.
  • Der Abstand vom Knoten zum Steuerpunkt ist die Steuerpunktlänge.
Ein Steuerpunkt gehört zum Segment und bestimmt dessen Verlauf.
Er gehört nicht zum Knoten. Der Knoten ist sein Ursprung.
Eine normale Steuerpunkt-Länge gibt es nicht.
Was Du mit einem „normalen“ Knoten meinst, weiß ich nicht.

Auf dem Lineal könntest Du die Länge nur sehen wenn der Steuerpunkt Parallel dazu verläuft.
Bei X7 kann man es in der Statusleiste unter „Entfernung“ sehen,
wenn man den Steuerpunkt bewegt.

(21.06.2024, 20:03)asterix schrieb: Ja, das Makro kann gerne den Griff automatisch verlängern und dann den Knoten direkt drehen, also ohne Nachfrage.

Der folgende Code enthält eine Prozedur und eine Funktion.
Falls Du doch noch eine Nachfrage willst, setze die Varible „Frage“ in der Funktion auf „True“.

Code:
Sub KnotenWenden()
   Dim s As Shape
   Dim C As Curve
   Dim sp As SubPath
   Dim seg As Segment
   Dim KR As NodeRange
   Dim KAnz As Double
   If ActiveSelectionRange.Count <> 1 Then Exit Sub
   Set s = ActiveShape
   Set C = s.Curve
   Set KR = s.Curve.Selection
   If KR.Count <> 1 Then Exit Sub
   KAnz = s.Curve.Nodes.Count
   For Each sp In C.SubPaths
       For Each seg In sp.Segments
           If seg.EndNode.Selected Then
               If LCheck(seg, False) Then Exit Sub
               seg.EndingControlPointAngle = seg.EndingControlPointAngle + 180
               seg.EndNode.CreateSelection
               Refresh
               Exit For
           End If
           If seg.StartNode.Selected Then
               If LCheck(seg, True) Then Exit Sub
               seg.StartingControlPointAngle = seg.StartingControlPointAngle + 180
               seg.StartNode.CreateSelection
               Refresh
               Exit For
           End If
       Next
   Next
End Sub

Function LCheck(seg As Segment, startN As Boolean) As Boolean
   Dim antwort
   Dim Fragen As Boolean
   Dim mld As String
   
   Fragen = False
   
   mld = "Die Steuerpunktlänge beträgt Null" & vbCrLf & "Steuerpunkt verlängern?"
   LCheck = True
   If startN Then
       If seg.StartingControlPointLength = 0 Then
           antwort = vbYes
           If Fragen Then antwort = MsgBox(mld, vbYesNo + vbQuestion, "Steuerpunktlänge")
           If antwort = vbYes Then
               seg.StartingControlPointLength = 0.001
               LCheck = False
           End If
       Else
           LCheck = False
       End If
   Else
       If seg.EndingControlPointLength = 0 Then
           antwort = vbYes
           If Fragen Then antwort = MsgBox(mld, vbYesNo + vbQuestion, "Steuerpunktlänge")
           If antwort = vbYes Then
               seg.EndingControlPointLength = 0.001
               LCheck = False
           End If
       Else
           LCheck = False
       End If
   End If
End Function

Gruß

Koter
Zitieren



Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Dokumentschriftarten finden und (einfach) ersetzen in CDR X6? Sascha B. 33 12.601 13.09.2024, 12:48
Letzter Beitrag: koter
Question QR-Codes automatisch generieren Lisa1992 1 226 31.05.2024, 07:02
Letzter Beitrag: Litschi
  Beim speichern Version automatisch auf alte Version stellen awitechnik 4 889 12.01.2024, 11:04
Letzter Beitrag: awitechnik
  Seriendrucktexte automatisch skalieren ben512 7 2.222 26.04.2023, 20:45
Letzter Beitrag: koter
  Textwerkzeug automatisch gedreht Nils 3 1.533 28.09.2022, 12:22
Letzter Beitrag: cutti
  Objekt aus Knoten mit Farbe füllen Spaceliner 7 1.672 02.08.2022, 10:11
Letzter Beitrag: Spaceliner
  2018: Knoten verbinden mtemp 6 2.510 26.04.2021, 07:28
Letzter Beitrag: norre
Star nicht verbundene Knoten Finden Karthagos 2 1.643 24.03.2020, 13:40
Letzter Beitrag: Karthagos
  Knoten mit Bedienfeld verschieben. chrisberlin 11 3.345 22.01.2020, 23:53
Letzter Beitrag: norre
  Landscape vs portrait druckformat nicht mehr automatisch siegbrunn 2 1.377 10.09.2019, 17:36
Letzter Beitrag: siegbrunn