Ergebnis 1 bis 9 von 9

Thema: Buchstabenbreite auslesen [VBA]

  1. #1
    Neuer Benutzer Newbie
    Registriert seit
    01.09.2017
    Beiträge
    5

    Standard Buchstabenbreite auslesen [VBA]

    Hallo Experten!

    Ich bin 31, Anwendungsentwickler in der metallverarbeitetenden Industrie und entwickle unter anderem VBA-Tools für CorelDraw X5 die bei der Layouterstellung unserer Produkte helfen. Oft habe ich durch eigene Recherchen die Hürden des widerlichen VBA's überwunden, diesmal jedoch habe ich keine Chance und hoffe, jemand kann mir eine Idee bescheren...

    In unserem Betrieb wird ein Lasermarkierer eingesetzt, der die Oberfläche von Edelstahlflächen an-graviert. Dieses ältere Gerät kann jedoch Linien unter 0.16 mm nicht verarbeiten. Aus diesem Grund muss ich die Funktionalität meiner Tools erweitern - eine Überprüfung soll stattfinden, bevor die Verarbeitung beginnen kann. Für Elemente wie Kurven und Linien ist das kein Problem - muss ich doch lediglich die Eigenschaft "Shape.Outline" auslesen. Mein Problem bezieht sich jedoch auf Text bzw. Buchstaben. Ist der Text zu klein, können einzelne Buchstabenelemente ja durchaus zu klein für das Gerät sein. Gibt es eine Möglichkeit, die entsprechende Buchstabenbreite eines einzelnen Buchstaben auszulesen? Oder die Breite der Buchstabenlinien?

    Freundliche Grüße aus Hamburg

  2. #2
    Erfahrener Benutzer Profi Member
    Registriert seit
    24.03.2012
    Beiträge
    857

    Standard

    Hallo JP,

    willkommen im Forum!

    Du kannst mit CQL einen ShapeRange erstellen, der alle Objekte mit einer Linienbreite unter 0.16 mm enthält (inkl. Text):

    Code:
    Sub unter16()
        Dim s As Shape
        Dim zuDünn As ShapeRange
        Set zuDünn = ActivePage.Shapes.FindShapes(Query:="@outline.width < {.16 mm}")
        
        For Each s In zuDünn
            s.Outline.Color.RGBAssign 255, 0, 0
        Next
    End Sub
    Die For Each-Schleife in diesem widerlichen VBA-Code färbt alle zu dünnen Linien rot. Objekte ohne Umriss kann man so natürlich nicht sehen.
    Wie Dir die Breite eines Buchstaben bei dem Problem helfen könnte, habe ich nicht verstanden.

    Viele Grüße nach Hamburg

    Koter
    W7pro|Corel X4/X7(64 Bit)

  3. #3
    Neuer Benutzer Newbie
    Registriert seit
    01.09.2017
    Beiträge
    5

    Standard

    Hallo koter,

    die Outlines lese ich bereits aus - für Elemente mit Linienstärke habe ich kein Problem. Nun kann es ja aber sein, dass ein Buchstaben insgesamt dünner als 0.16 mm ist - also nicht nur ein eventueller Rand, sondern der ganze Buchstabe, oder der mittlere Strich eines "T"s. Denn der Laser kann natürlich nicht nur Linien unter dieser Stärke lasern, sondern auch alle anderen Elemente, die zu klein sind. Über einen Shape "MyText.SizeWidth" kann ich natürlich nicht gehen, da dies ja die Breite des gesamten Textes ausliest. Deshalb wollte ich auf einzelne Buchstaben zugreifen - aber wie macht man das? Hast Du eine Idee hierzu?

  4. #4
    Erfahrener Benutzer Profi Member
    Registriert seit
    24.03.2012
    Beiträge
    857

    Standard

    Hallo JP,

    ...Deshalb wollte ich auf einzelne Buchstaben zugreifen - aber wie macht man das? Hast Du eine Idee hierzu?
    um auf die einzelnen Buchstaben zuzugreifen, könnte man sie auf eine temporäre Ebene kopieren und sie in Kurven konvertieren. Aber wenn du nicht die Konturen sondern die Fläche zwischen ihnen auswerten willst, wird es schwierig:



    Ich kann mir nicht vorstellen, dass mein Grips ausreicht, um einen Algorithmus zu ersinnen, der zuverlässig die engsten stellen in jedem Buchstaben oder einer sonstigen Form findet und vermisst. Ich werde mir noch mal Gedanken darüber machen, komme aber wahrscheinlich erst am Wochenende dazu.

    Gruß

    Koter
    W7pro|Corel X4/X7(64 Bit)

  5. #5
    Neuer Benutzer Newbie
    Registriert seit
    01.09.2017
    Beiträge
    5

    Standard

    Sagen wir mal, dass mit den engsten Stellen eines Buchstabens sei etwas übertrieben - mir würde es bereits reichen, die gesamte Breite des Buchstabens herauszufinden. Aber die Syntax um die Eigenschaft Text ist so verwirrend:

    Gegeben ist ein Textobjekt "MyShape". Es enthält den Text "ABC". Ich möchte die Breite des Buchstaben "B" ermitteln.

    MyShape.Text.Story.Range(2, 2).SizeWidth -> gibt es nicht

  6. #6
    Erfahrener Benutzer Profi Member
    Registriert seit
    24.03.2012
    Beiträge
    857

    Standard

    Hallo JP,
    Gegeben ist ein Textobjekt "MyShape". Es enthält den Text "ABC". Ich möchte die Breite des Buchstaben "B" ermitteln.
    wie ich oben schon erwähnt habe, mit einer temporären Ebene oder einfach mit einem temporären, in Kurven konvertierten Objekt:

    Code:
    Sub BBreite()
        Dim TXT As Shape, TempS As Shape
        Dim Breite As Double
        Set TXT = ActiveLayer.Shapes("MyShape")
        Set TempS = TXT.Duplicate
        TempS.Text.Story = TXT.Text.Story.Characters(2)
        TempS.ConvertToCurves
        Breite = TempS.SizeWidth
        Debug.Print Breite
        TempS.Delete
    End Sub
    Nur aus Neugier: Wie kannst Du aus der Breite des ganzen Zeichens die schmalsten Elemente desselben ermitteln?

    Gruß

    Koter
    W7pro|Corel X4/X7(64 Bit)

  7. #7
    Neuer Benutzer Newbie
    Registriert seit
    01.09.2017
    Beiträge
    5

    Standard

    Also hat Corel tatsächlich keine eigene Zugriffsvariante für Buchstabenbreiten, es muss getrickst werden

    Ich werde Deine Idee mal ausprobieren, insbesondere performance-technisch bei vielen Buchstaben. Vielen Dank dafür!

    Natürlich ist die Buchstabenbreite nur ein lockerer Ansatz, aber es ist besser als der jetzige Zustand, nämlich nichts - ich könnte ein paar Alphabete mit verschiedenen Schriften lasern, um herauszufinden, wo es Probleme gibt und diese Werte dann verwenden, um die Überprüfung durchzuführen.

    EDIT: Da kommt mir eine Idee. Ich könnte doch für jedes Textfeld eine Kopie erzeugen, den Text dieses Feldes durch ein kleines L ersetzen, in Kurven konvertieren und die Breite auslesen. Dann erhalte ich eine ungefähre Ahnung davon, wie dick die Linien der Schrift sind - oder?
    Geändert von JP_dev (07.09.2017 um 08:40 Uhr)

  8. #8
    Erfahrener Benutzer Profi Member
    Registriert seit
    24.03.2012
    Beiträge
    857

    Standard

    Hallo JP,

    ...den Text dieses Feldes durch ein kleines L ersetzen, in Kurven konvertieren und die Breite auslesen. Dann erhalte ich eine ungefähre Ahnung davon, wie dick die Linien der Schrift sind - oder?
    Das mag ja bei einer Grotesk mit geringer Strichstärkenvariation noch klappen, bei einer Antiqua oder einer dicktengleichen Schrift wird es aber in den meisten Fällen scheitern. Denk nur einmal an die untere Serife beim kleinen L, die gehört ja auch zur Breite.

    Gruß

    Koter
    W7pro|Corel X4/X7(64 Bit)

  9. #9
    Neuer Benutzer Newbie
    Registriert seit
    01.09.2017
    Beiträge
    5

    Standard

    Stimmt, die Serifen habe ich völlig vergessen, obwohl unsere Kunden eigentlich fast schmucklose Schriften verwenden, da wir Typenschilder produzieren.

    Aber: Das Problem hat sich erledigt - warum? Ich habe gestern noch ein paar Tests mit dem Lasergerät gemacht und festgestellt, dass der Schriften mit einer Linienstärke unter 1.6 mm sehr wohl lasert - wenn diese als Kurven konvertiert sind. Es scheint, als habe das Gerät nur Probleme mit Linien-Objekten. Nach meiner Verwunderung erstellte ich eine Datei, in der ich ein kleines "L" und daneben eine Linie mit exakt der selben Stärke anlegte. Das L wird gelastert, die Linie nicht. Und für Linien habe ich die Überprüfung ja bereits programmiert. Von daher bin ich glücklich

    Trotzdem vielen Dank für Deine Mühe!

Ähnliche Themen

  1. Corel VBA Text aus Grafiktext auslesen
    Von Gexi im Forum Corel Draw
    Antworten: 4
    Letzter Beitrag: 07.11.2014, 16:24
  2. Dateiname der importierten Grafik auslesen
    Von Hamu72 im Forum Corel Draw
    Antworten: 5
    Letzter Beitrag: 07.11.2014, 09:29
  3. Farbnamen der Objekte Auslesen X5
    Von Sunny_co im Forum Corel Draw
    Antworten: 4
    Letzter Beitrag: 04.11.2014, 14:35
  4. Scharfe Schrift und Bildinformationen auslesen!
    Von Andek im Forum PhotoImpact
    Antworten: 2
    Letzter Beitrag: 01.11.2006, 20:34

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •