Wir schätzen Ihren Input! Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil
am 2024-10-07 05:55 PM
Hallo,
vorweg ich bin Neu in ArchiCAD unterwegs und auch in der Python API, entschuldigt daher plumpe Fragen oder falsche Annahmen.
Das Ziel ist, allen Einrichtungen (Objekten) in einem Plan automatisch Etiketten mit den Objektparametern zuzuweisen, je nach den individuellen Eigenschaften des jeweiligen Objektes.
Genauer haben wir hier Regale, die aus mehreren Regalabschnitten bestehen (die Objekte). So sollen alle Objekte (Regalabschnitte) eine Abschnittsnummer bekommen, aber nur Am Anfang des Regals soll die Regalnummer stehen. Und nur die Objekte mit dem Parameter Elektro = wahr, sollen das Elektrosymbol bekommen.
Ich weiß, dass ArchiCAD mit 'suchen und aktivieren' eine gezielte Auswahl ermöglicht und das nach zuweisung des gewünschten Etikettes als Defaultetikett man mit "Ausgewählte Elemente etikettieren" diese auch damit schnell etikettieren kann. Favoriten Etikette mit der definierten Farbe, Format Größe etc. des Textes sind auch erstellt.
Problem 1: Es gibt keine Automatisierung bei der Auswahl der Filterparameter und des Etikettes, sodass der User hier viele simple Aufgaben machen muss, die auch ein Makro (AUfzeichnung wie in Excell oder Photoshop) machen könnte.
Problem 2: das größere Problem, ist die Positionierung. Unsere Elemente stammen aus einem IFC-Export und scheinbar verwendet hier ArchiCAD die Boundingbox, welche global und damit an der Welt,X,Y,Z-Rotation ausgerichtet ist und damit die Texte und Symbole, insbesondere bei schrägen langen Regalen teils sonst wo im Raum landen. Mit Morphs geht die Ausrichtung am Objekt besser, hat aber andere Nachteile, sodass wir diese nicht nutzen können, und Objekte nutzen müssen
Die Frage ist, wie bekomme ich das am besten mit Python hin?
1) Platzieren von einem als Favoritenetikett gespeichertes Etikett
2) Alternativ wie erstelle ich das Etikett mit den Texten und wie gebe ich da Farbe , Schriftgöße (Stifteset vor)?
3) Wie bekomme ich hier eine Platzierung hin, die sich an der Geometrie bzw. der lokalen und nicht der globalen Boundingbox orientiert. Also zum Beispiel Ankerpunkt linke obere Ecke mit einem Offset von 5x5 mm / pixel, oder so.
Ich würde mich sehr freuen, wenn ihr mir hier bei einzelnen Fragen oder allen weiterhelfen könnt. Danke im Voraus.
Auch hilfreiche Seiten zu den jeweiligen Themn sind willkommen.
Operating system used: Windows 10
Gelöst! Gehe zu Lösung.
am 2024-10-09 03:47 PM
In den Beispielscripten werden keine Etiketten erzeugt, sondern die Raum Nr. der Zonen bzw. Element ID der Stühle geändert.
Die Etiketten die das dann anzeigen sind aber schon in den zugehörigen Beispielplänen vorhanden.
Also ja, Eigenschaften (und ähnliches) ändern geht direkt mit der vorhanden Python API. Die Etiketten selber platzieren funktioniert nur mit Add-On.
am 2024-10-08 04:32 PM
Hi,
Spannendes Thema! Leider gibt's bei der Python API viele Einschränkungen. Unter anderem ist es damit nicht direkt möglich Elemente zu erzeugen/platzieren. Dazu braucht man die Hilfe von Add-Ons (C++ API). Mit einem Add-On könnte man in die Richtung direkt gehen, oder es gibt auch die Möglichkeit mithilfe eines Add-Ons mehr Befehle für die Python API zur Verfügung zu stellen. Das ist aber auch nicht ohne. Am weitesten fortgeschritten ist dabei das tapir-archicad-addon. Hab grad nachgeschaut, da gibt's leider noch nichts für Etiketten.
Also ohne Add-On Programmierung kommst du da nicht wirklich weit denke ich.
am 2024-10-09 10:06 AM
Hallo und vielen Dank für die Antwort, auch wenn sie ernüchternd ausfällt.
In den Beispielscripten zur Nummerierung von Zonen, Stühlen etc. werden ja auch Etiketten erzeugt mit der Nummer, eben. Oder ist das was anderes?
am 2024-10-09 03:47 PM
In den Beispielscripten werden keine Etiketten erzeugt, sondern die Raum Nr. der Zonen bzw. Element ID der Stühle geändert.
Die Etiketten die das dann anzeigen sind aber schon in den zugehörigen Beispielplänen vorhanden.
Also ja, Eigenschaften (und ähnliches) ändern geht direkt mit der vorhanden Python API. Die Etiketten selber platzieren funktioniert nur mit Add-On.