Attribute (Erweiterte Textfunktionen)

www.CAD6.de

Malz++Kassner CAD6 unterstützt "Attribute", die lokal in allen Arten von Objekten der aktuellen Zeichnung und in Bibliotheksblöcken definiert sind. Sie bestehen aus einem Namen und einem Wert, der entweder als Text, als Zahl oder als Verweis behandelt wird. Der Wert kann Referenzen zu Variablen und anderen Attributen, sowie Anweisungen enthalten.

 

 

Gültigkeitsbereiche der Attribute

Vier verschiedene Gültigkeitsbereiche für Attribut sind verfügbar:

 

Globale Attribute

Globale Attribute sind nur innerhalb von Blöcken (und in eingebettenen Instanzen) verfügbar. Ihr Wert gilt für den Block selbst und alle seine Instanzen. Es kann logisch von einem lokalen Attribut mit dem gleichen Namen überschrieben werden.

Globale Attribute werden innerhalb des Programms erhalten, d.h. sie werden zusammen mit den Blöcken und Instanzen kopiert.

 

Lokale Attribute

Lokale Attribute sind für alle Arten von Objekten verfügbar. Ihr Wert gilt für das Objekt selbst und alle Konturen und Punkte darin. In Blöcken dienen sie auch als Vorlage für Instanzen, die von diesem Block erzeugt werden sollen. Im Fall einer Instanz überschreibt ein lokales Attribut ein eventuell vorhandenes, globales Attribut gleichen Namens im referenzierten Block. Bei einem Objekt wie Kurve oder Fläche kann es logisch durch ein Kontur- oder Punkt-Attribute gleichen Namens überschrieben werden.

Lokale Attribute werden innerhalb des Programms erhalten, d.h. sie werden mit den Objekten kopiert und kombiniert.

 

Kontur-Attribute

Ein Kontur-Attribut gehört lokal zu einer Kontur innerhalb eines Objektes wie Kurve oder Fläche. Sein Wert gilt für diese Kontur und alle zur Kontur gehörenden Punkte. Es kann für jeden einzelnen Konturpunkt jeweils durch ein Punkt-Attribut gleichen Namens logisch überschrieben werden.

Kontur-Attribute werden innerhalb des Programms üblicherweise erhalten, sofern die Kontur als Ganzes bestehen bleibt. Beim Auflösen oder Wandeln von Objekten hingegen gehen Kontur-Attribute meist ohne Warnung verloren.

 

Punkt-Attribute

Ein Punkt-Attribut gehört lokal zu einem Punkt innerhalb eines Objektes wie Kurve oder Fläche. Sein Wert gilt nur für diesen Punkt.

Punkt-Attribute werden innerhalb des Programms üblicherweise erhalten, sofern das Objekte als Ganzes bestehen bleibt. Beim Auflösen, Wandeln, Trimmen oder Beschneiden von Objekten hingegen gehen Punkt-Attribute meist ohne Warnung verloren.

 

Die Gesamtanzahl jeder Attributart (global + lokal, Kontur, Punkt) pro jeweiligem Element (ein Objekt, eine Kontur, ein Punkt) ist begrenzt auf 200 pro Art.

 

Bitte beachten Sie: Da ein Objekt mehrere Kontur- und Punkt-Attribute gleichen Namens enthalten kann (für unterschiedliche Konturen und Punkte), können solche Attribute meist nicht eindeutig anhand ihres Namens wie Variablen identifiziert werden (eingeschlossen in das Zeichen ~) oder mittels Objektattribut-Anfrage gefunden werden.

 

Die vier Geltungsbereiche für Attribute bilden eine Hierarchie. Globale Attribute sind globale Vorgaben. Lokale Attribute überschreiben diese für das jeweilige Objekt. Kontur-Attribute überschreiben alle globalen und lokalen Attribute nur für die spezifische Kontur. Punkt-Attribute überschreiben alle globalen, lokalen, sowie Kontur-Attribute nur für den spezifischen Punkt.

 

Beispiel

Ein Objekt des Typs "Fläche" mit drei Konturen.

 

Die erste und zweite Kontur hat jeweils ein Kontur-Attribute namens "Breite" mit dem Wert "10,0". Die zweite Kontur hat zusätzlich Punkt-Attribute namens "Breite" für jeden einzelnen Punkt mit dem Wert "5,0". Und das Objekt hat ein lokales Attribute namens "Breite" mit dem Wert "20,0".

 

Beim Ermitteln der "endgültigen" Attributwerte für einen beliebigen Punkt der ersten Kontur sollte die Suche den Wert 10,0 für "Breite" ergeben (von Kontur-Attribut dieser Kontur). Bei der zweiten Kontur sollte die Suche nach "Breite" einen Wert von 5,0 ergeben (von Punkt-Attribute des jeweiligen Punktes). Und für die dritte Kontur sollte die Suche einen Wert von 20,0 ergeben (von lokalen Attribute des Objekts).

 

 

Inhaltstypen der Attribute

Auch wenn Attributwerte immer als einfache Texte gespeichert und meist auch als solche genutzt werden, sind für alle Gültigkeitsbereiche drei verschiedene Inhaltstypen verfügbar:

 

Text

Der Inhalt des Attributs wird immer in seiner ursprünglichen Textform benutzt. Darf beliebige Texte enthalten.

 

Zahl

Der Inhalt des Attributs wird als Zahl interpretiert. Während der Eingabe durch den Benutzer wird auf Gültigkeit geprüft.

 

URL

Der Inhalt des Attributs wird als URL interpretiert (entweder ein Internet-Link oder ein Dateiname). Während der Eingabe durch den Benutzer wird ein "Wählen"-Taster angeboten, mit dem ein Dateiname gewählt werden kann.

 

Die Maximallänge des Inhalts ist bei allen drei Inhaltstypen gleich (maximal 4,000 Zeichen).

 

 

Nutzung von Attributen in Text

Damit ein Attribut innerhalb von Texten bzw. Anweisungen ausgewertet werden kann, muss es von Tilde-Zeichen ~ (Ansi 126) begrenzt sein, zum Beispiel ~Variable~. Der Text

Preis: ~Preis~ Euro

 

enthält die Variable "Preis". Falls die Variable "Preis" existiert, wird sie ausgewertet, das heißt, die Zeichenfolge "~Preis~" wird durch den Wert bzw. den Inhalt der Variablen "Preis" ersetzt. Hat die Variable zum Beispiel den Wert 29,95, wird der folgende Text erzeugt:

Preis: 29,95 Euro

 

Enthält ein Text eine Variable, die nicht existiert, kann diese auch nicht ausgewertet werden. In diesem Fall wird die Variable dann durch den Text (***UNDEFINIERT***) ersetzt. Im obigen Beispiel wäre der resultierende Text:

Preis: (***UNDEFINIERT***) Euro

 

Um das explizite Tilde-Zeichen auszugeben verwenden Sie bitte stattdessen \~.

 

 

Anzeige von Attributen in Blöcken

Wenn Sie die Attribute innerhalb eines Blockes anzeigen wollen, müssen Sie dies wissen, bevor Sie den Block erstellen. Angenommen, Sie wollen einen Block erstellen, der die symbolische Darstellung eines elektrischen Widerstandes enthält. Das Symbol soll einen Text enthalten, der den jeweiligen Widerstandswert des Widerstandes anzeigt.

 

Der Widerstandswert wird dazu in einem lokalen Attribut des zu erzeugenden Blockes gespeichert, da dieses lokale Attribut für jede Instanz des Blockes einen anderen Wert haben kann. In unserem Beispiel soll dieses Attribut "Widerstand" heißen.

 

Lassen Sie uns nun einen solchen Block erstellen. Zuerst zeichnen Sie den Widerstand selbst. Dazu reicht ein Rechteck und eventuell zwei Linien als Anschlussstellen. Dann erstellen Sie einen Standardtext (Beschriften > Text > Standard), der nur den folgenden kurzen Text enthält:

~Widerstand~

 

Platzieren Sie diesen Text in das Rechteck des Widerstandes. Bitte beachten Sie, dass der auch Text gedreht und skaliert wird, wenn Sie später den Block selbst drehen oder skalieren! Stellen Sie sicher, dass die Textposition auch dann Sinn macht!

 

Nachdem Sie alle Bestandteile des Widerstandssymbols erstellt haben, erzeugen Sie daraus einen Block mit Hilfe des Befehles Bibliothek > Block > Erzeugen (Einsetzpunkt). Setzen Sie im Dialog, der dabei erscheint, das Markierungsfeld "Attribute editieren". Nach der Eingabe des Blocknamens und Betätigung des Tasters "OK" erscheint ein weiterer Dialog. Hier definieren Sie ein Attribut, also eine Variable, die nur für diesen Block gültig ist, mit dem Namen "Widerstand" und initialisieren es mit einem sinnvollen Wert, z.B. "100 ohm".

 

Nachdem Sie diesen Block erzeugt haben, können Sie das Widerstandssymbol nutzen. Erzeugen Sie mehrere Instanzen dieses Blockes mit dem Befehl Bibliothek > Block > Einsetzen. Stellen Sie dabei sicher, dass das Markierungsfeld "Attribute kopieren" im Blockauswahldialog gesetzt ist!

 

Sie werden feststellen, dass alle Widerstandssymbole den gleichen Text "100 ohm" anzeigen. Nun wählen Sie den Befehl Gestalten > Editieren > Text / Attribute und wählen Sie eines der Widerstandssymbole aus. Im Dialog, der jetzt erscheint, ändern Sie den Wert des Attributes "Widerstand" von "100 ohm" in "10 kohm". Nach Betätigen des Tasters "OK" zeigt das gewählte Widerstandssymbol nun "10 kohm" anstelle von "100 ohm" an.

 

Falls Sie die Attributwerte für jeden Block editieren wollen, den Sie platzieren, können Sie das Markierungsfeld "Attribute editieren" im Blockauswahldialog von Bibliothek > Block > Einsetzen setzen. Dann erscheint der Dialog "Attribute editieren" immer, wenn Sie einen Block einsetzen.

 

 

Implizite Attribute

Implizite Attribute sind eine spezielle Form der lokalen Attribute. Abhängig von seinem Typ besitzt jedes Objekt einen Teil davon, obwohl sie für den Anwender nicht zu sehen sind und normalerweise nur in Stücklisten verwendet werden. Sie speichern interne Informationen wie Blockname, Bibliotheksname, Position, etc.

 

Die folgenden impliziten Attribute sind verfügbar:

~*00~

Der Name des Blockes selbst.

~*01~

Der Name der Bibliothek, in der sich der Block befindet.

~*04~

X-Koordinate des Startpunkts / Einsetzpunkts gemäß des aktuellen Koordinatensystems.

~*05~

Y-Koordinate des Startpunkts / Einsetzpunkts gemäß des aktuellen Koordinatensystems.

~*06~

Drehwinkel in Grad.

~*07~

Horizontale Skalierung relativ zu 1.

~*08~

Vertikale Skalierung relativ zu 1.

~*09~

Horizontale Verzerrung (Scherung) in Grad.

~*10~

Positionsnummerkreis.

~*11~

Kommentar des Blocks oder der Instanz.

~*12~

Flächeninhalt des Objekts oder der Schraffur.

~*13~

Umfang des Objekts oder der Schraffur.

~*14~

Seitenzuordnung.

~*15~

Seitenkommentar.

~*16~

Ebenenname.

~*17~

Ebenenkommentar.

~*18~

Stiftname.

~*19~

Stfitkommentar.

~*20~

Linienmuster.

~*21~

Linienbreite in Millimetern.

~*22~

Linienfarbe.

~*23~

Füllfarbe.

 

 

Suche nach Attributen

Die globale Suche nach Attributen ermöglicht es, auf Attribute von unterschiedlichen Instanzen innerhalb der aktuellen Zeichnung zuzugreifen.

 

Eine Attributsuche hat eine der folgenden Formen:

~%(Bibliotheksname)(Blockname)"Attributename"~

Holt den Inhalt des Attributs Attributename in der ersten passenden Instanz, die gefunden wird.

~%(Bibliotheksname)(Blockname)*ImplizitesAttribut~

Holt den Wert des angegebenen impliziten Attributs ImplizitesAttribut (siehe Abschnitt weiter unten) in der ersten passenden Instanz, die gefunden wird.

~%(Bibliotheksname)(Blockname)"Attributename","Suchtext"@"Attributsuchname"~

Holt den Inhalt des Attributs Attributename in der ersten passenden Instanz, die gefunden wird und ein Attribut Attributsuchname mit dem Inhalt Suchtext besitzt. Beide Attributnamen dürfen gleich sein, d.h. Sie können eine Teiltextsuche machen, um dann den vollständigen Wert zu erhalten. Ist Attributsuchname leer, wird der Text in jedem Attribut gesucht. Ist Suchtext leer, genügt die Existenz eines Attributs mit dem angegebenen Namen. Sind beide leer, werden sie ignoriert (analog zur ersten Form).

~%(Bibliotheksname)(Blockname)*ImplizitesAttribut,"Suchtext"@"Attributsuchname"~

Holt den Wert des angegebenen impliziten Attributs ImplizitesAttribut (siehe Abschnitt weiter unten) in der ersten passenden Instanz, die gefunden wird und ein Attribut Attributsuchname mit dem Inhalt Suchtext besitzt. Beide Attributnamen dürfen gleich sein, d.h. Sie können eine Teiltextsuche machen, um dann den vollständigen Wert zu erhalten. Ist Attributsuchname leer, wird der Text in jedem Attribut gesucht. Ist Suchtext leer, genügt die Existenz eines Attributs mit dem angegebenen Namen. Sind beide leer, werden sie ignoriert (analog zur ersten Form).

 

Sind Bibliotheksname oder Blockname leer, passt jeweils jede Instanz. Enthält Bibliotheksname nur ein Sternchen '*', passt jeder interne Block. Wenn Bibliotheksname, Blockname, Attributename, Suchtext oder Attributsuchname mit einem Sternchen ‘*’ beginnt, wird die Suche als Teiltextsuche ohne Berücksichtigung von Groß- und Kleinschreibung durchgeführt. Wenn nicht, wird die Suche auf Übereinstimmung des ganzen Texten und der Groß- und Kleinschreibung durchgeführt. Um Häkchen innerhalb von Namen oder Texten zu verwenden, die selbst in Häkchen stehen, verwenden Sie bitte stattdessen \". Gleiches gilt für runde und eckige Klammern, falls der Text durch diese begrenzt wird.

 

Beispiel

Steuersequenz im Text:

~%(Produkte)()"Preis","*Motor"@"Beschreibung"~

 

Möglicher angezeigter Text:

29,95

 

Erläuterung:

Technisch gesehen durchläuft die Applikation alle Instanzen von Blöcken der Bibliothek "Produkte" in der aktuellen Zeichnung und prüft, ob diese ein Attribut mit dem Namen "Beschreibung" besitzen, welches u.a. den Text "Motor" enthält. Falls eine solche Instanz gefunden wird, wird deren Attribut "Preis" gesucht und dessen Inhalt zurückgegeben.

In normalen Worten: Die Applikation ermittelt den Preis der ersten eingesetzten Produkts, dessen Beschreibung das Wort "Motor" enthält.

 

 

Objektattribute

Objektattribute sind Variablen, die es erlauben, auf Attribute einzelner Objekte mittels derer eindeutigen ID zuzugreifen.

 

Die folgenden Objektmerkmale sind verfügbar:

~*a(UniqueID)Attributname~

Attribut Attributname des angegebenen Objekts.

 

Werden die Objektattribute in einem Text- oder Bemaßungsobjekt genutzt, welches mittels seiner LinkedID mit einem anderen Objekt verbunden ist, kann die eindeutige ID in den Klammern weggelassen werden und das Programm verwendet automatisch stattdessen LinkedID. Wird die eindeutige ID weggelassen und der Text oder die Bemaßung ist nicht mit einem anderen Objekte verbunden, sucht das Programm das übergeordnete Objekt (Gruppe oder Block), in dem sich der Text oder die Bemaßung befinden.

 

 

Sonstiges

Weitere Textanfragen werden vom Programm selbst für interne Zwecke genutzt:

~#AutoPosNum~

Eine automatisch generierte Positionsnummer.

 

Beginnend mit Release 2019 Service Pack 1 sind alle Texte, Namen, Variablen und Attribute Unicode-fähig. Im Speicher werden sie als UTF-16 gespeichert, im CAD6 Dateiformat als UTF-8.

 

CAD6studio Release 2024.1 - Copyright 2024 Malz++Kassner® GmbH