Hallo liebe Forengemeinde,
ich habe mir mal wieder eine harte Nuss vorgenommen, diesmal ein Makro das alle auf der Zeichnung vorhandenen Kantenbrüche und Oberflächenangaben sammeln und über beim Schriftkopf eintragen soll. Für die Oberflächensymbole gibts sowas ja eigentlich schon im PowerWorks, aber ich hätte gern eine rundum-sorglos-Lösung geschaffen.
Die Oberflächensymbole sind auch nicht das größte Problem, eher die Kantenbrüche, für die wir Blöcke nutzen.
Momentan möchte ich das Makro noch nicht in seiner ganzen "Pracht" hier posten, da der Code noch recht wirr ist und noch viel fehlt. Wenn's denn mal fertig ist, kann ich es aber gern hier zur Verfügung stellen.
Vorher gilt es allerdings noch ein paar Hürden zu nehmen, vielleicht könnt ihr mir dabei helfen!
Problem 1:
Ich füge einen Block (Kantenbruch) ein, anhand einer Vorlage über ".SketchManager.MakeSketchBlockFromFile", siehe unten. Der eingefügte Block enthält einen Bezugshinweistext für den Wert des Kantenbruchs, dieser Bezugshinweis ist als Attribut definiert.
Wie kann ich den gerade eben eingefügten Block gleich auswählen und dem Attribut den richtigen Wert zuweisen?
Problem 2:
Irgendwie komm ich mit dem Definieren des Einfügepunkts von Blöcken nicht ganz klar. In meinem Makro sieht das so aus:
Code:
Koordinaten(0) = PunktX '= Breite des aktiven Blattes minus 0.015
Koordinaten(1) = PunktKBY '= 0.105, da immer auf gleicher Höhe
Koordinaten(2) = 0
Set Einfügepunkt = swMathUtil.CreatePoint(Koordinaten)
Set BlockDefinition = SketchMgr.MakeSketchBlockFromFile(Einfügepunkt, "M:\Blöcke\Kantenbruch\Schriftkopf innen einfach.sldblk", False, 1, 0)
Allerdings fügt es mir die Blöcke immer weit rechts außerhalb des Blattes ein, zudem weit höher als die Y-Koordinate zulassen würde. Beim Einfügen eines Bezugshinweises bei denselben Koordinaten gibts keine Probleme, der landet an der richtigen Stelle. Woran kann das liegen?
Problem 3:
Die auf der Zeichnung eingetragenen Kantenbrüche werden in 3 Arrays gesammelt, das funktioniert über das Auslesen der Attribut-Werte auch ganz prima. Sieht dann folgendermaßen aus:
Auf der Test-Zeichnung vorhanden sind Kantenbrüche mit +0,05; -0,1; -0,2; -0,2; -0,1/-0,2; -0,1/-0,2; -0,1/-0,3; +1/+0,5
Das wird auch problemlos in die Arrays übertragen:
WerteEinzel:
(0) = +0,05
(1) = -0,1
(2) = -0,2
(3) = -0,2
WerteDoppeltOben:
(0) = -0,1
(1) = -0,1
(2) = -0,1
(3) = +1
WerteDoppeltUnten:
(0) = -0,2
(1) = -0,2
(2) = -0,3
(3) = +0,5
Ich möchte gern die doppelten Werte wegkürzen, damit keine Kantenbrüche doppelt eingetragen werden. Ich bin leider kein großer Experte was Arrays angeht... ließe es sich bewerkstelligen dass die doppelten Werte verschwinden, die Nummerierung der Array-Elemente aber erhalten bleibt? Und wie könnte ich das bei den zwei Arrays für die zweiseitigen Kantenbrüche lösen, dass doppelte Werte nur gelöscht werden wenn der obere UND untere Wert mehrfach vorhanden ist?
Problem 4:
Momentan noch nicht so dringend, da ich mich erstmal mit dem Kantenbruch-Teil beschäftige, aber... gibt es eine Möglichkeit die Breite eines Oberflächensymbols auszulesen? Der Gedanke war, die Oberflächenzeichen dann genauso wie die Kantenbruch-Blöcke über Koordinaten über dem Schriftfeld einzufügen, nur sind die Symbole ja leider nicht immer gleich breit...
Freue mich schon auf euren Input und bedanke mich gleich mal im Voraus!
Beste Grüße,
Michael
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP