abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
Programmierung
Alles über Programmierung in GDL und Python

Eigene Properties über gdl Programmierung?

thopas
Booster

Hallo Experten,

hat jmd schonmal eigene Eigenschaften über GDL programmiert? Ist das überhaupt möglich?

 

Ich hatte schonmal das Problem, dass ich Eigenschaften einer Zone in einer Tür brauchte. Da die Verknüpfung ja schon da ist, könnte man ja auf die Idee kommen, diese auch auszulesen. Ich hatte das damals über ein Data Analytics Workflow erledigt, was etwas aufwendig/fehleranfällig war.

 

Meinungen sind gerne willkommen.

 

Gruß vom Rhein

Thorsten

11 ANTWORTEN 11
Jochen Suehlo
Moderator

Vielleicht so etwas hier: 
https://www.youtube.com/watch?v=WTwxOS8SzF4
Aber außer solch einem Workaround ist es leider nicht möglich.

Jochen Suehlo . AC12-27 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de

Danke, ich schätze die Ideen von LukasO. Ich finde aber das Reinskripten in Standardobjekte, wie sage ich das vorsichtig, unsauber. Außerdem bin ich mir nicht ganz sicher, ob es meine Frage trifft.

 

Gut zum ersten, wie ich das in ArchiCAD gesehen habe gibt es eine Standardtür. Mit einer Art Vererbung werden z.B. die Sprache angepasst aber auch Untertypen von Türen erstellt. Meine Child-Tür ruft die Parent-Tür auf macht die Sprache richtig und fügt irgendeine Funktionalität hinzu. Ist jetzt zusammengefasst und wahrscheinlich auch nicht ganz exakt. So wird sichergestellt, dass alle Türen gleiche Grundparameter haben. Wie das jetzt genau geht habe ich noch nicht verstanden, aber ich habe gesehen, dass ArchiCAD das nutzt. Das wäre sozusagen die sauberere Methode. Ich möchte meine Bömmelmethode und meine Bömmelattribute zu einer Tür hinzufügen, also erstelle ich ein neues Objekt, welches Tür mit Bömmel heißt und einen Zeiger auf die Tür + die Eigenschaften/Methoden des Bömmels erhält.

 

Zum Zweiten, Ich habe jetzt eine Zone mit dem Schallschutzwert 45db und möchte, dass meine Tür von dieser Zone auch einen Schallschutz von 45db hat. Die Tür weiß ja in welchem Raum (von wo nach wo) sie sich befindet, also gibt es auch die logische Verbindung zwischen Raum-Schallanforderung und Tür-Schallanforderung. Aber in den Expressions der Tür kann man nur auf Parameter der Tür zugreifen und nur auf bestimmte des verbundenen Raumes. Also muss man diese relationale Abfrage händisch erstellen.

 

Ich gebe zu, dass ist ne sauschwere Frage, aber vielleicht findet sich hier ja jmd., der Spass an sowas hat.

Die Interaktion von Elementen in Archicad sind beschränkt. Es gibt deutlich mehr als z.B. in Allplan (Smartpart) möglich sind, aber man muss trotzdem wissen, was ohne "wilde" Workarounds geht. Ich hatte hier mal irgendwo ein paar Screenshots eingestellt, welche (Art) Eigenschaften in welchem Kontext verfügbar sind. 

Instanzen von GDL-Objekte (also platzierte Objekte) "kennen" sich nicht untereinander und können sich nicht aktiv "befragen". Ausnahme: Etiketten und Modelleinstellungsobjekte. Es werden eine Reihe von Umgebungswerten als globale oder spezielle Objekt-Parameter (die blauen) im Objekt zur Verfügung gestellt. V.a. für Türen+Fenster wichtig. Auch kann man ein paar globale Informationen und von speziellen, assoziierten Elementen abfragen, aber das ist keine richtige Interaktion zwischen verschiedenen Objekten. Z.B. können Türen und Fenster den Aufbau der Wand, in der sie sitzen abfragen. Ich glaube Objekte können auch Raumstempelwerte abfragen, aber dies funktioniert AFAIK nicht im Parameter Skript. Und nur da kannst du den Wert eines Objektparameters manipulieren. 

 

Deine Master-Makro - Idee musst du als 1 Objekt sehen. Hier wird lediglich der Quellcode in mehrere Teile zerlegt, um nicht bei jedem ähnlichen Problem alles doppelt zu coden und zu pflegen. Platziert wird eine Instanz, die für die Darstellung evt. mehrere Makroobjekte aufruft. Dabei können zwar die Makros die Eigenschaften des Master Objektes manipulieren, aber nicht neu anlegen! Und das hat auch nichts mit anderen platzierten Instanzen zu tun. Du kannst nicht aus einer Tür heraus im Quellcode per CALL ein Raumstempelobjekt aufrufen und das liefert Werte einer speziellen, platzierten Instanz.

 

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm

... mal abgesehen von der (von Lukas pfiffig überwundenen) Barriere zwischen GDL-Parametern und Archicad-Parametern.

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm

Danke für die ausführliche Antwort.


@Frank Beister  schrieb:

Die Interaktion von Elementen in Archicad sind beschränkt. Es gibt deutlich mehr als z.B. in Allplan (Smartpart) möglich sind, aber man muss trotzdem wissen, was ohne "wilde" Workarounds geht. Ich hatte hier mal irgendwo ein paar Screenshots eingestellt, welche (Art) Eigenschaften in welchem Kontext verfügbar sind. 

Instanzen von GDL-Objekte (also platzierte Objekte) "kennen" sich nicht untereinander und können sich nicht aktiv "befragen". Ausnahme: Etiketten und Modelleinstellungsobjekte. Es werden eine Reihe von Umgebungswerten als globale oder spezielle Objekt-Parameter (die blauen) im Objekt zur Verfügung gestellt. V.a. für Türen+Fenster wichtig. Auch kann man ein paar globale Informationen und von speziellen, assoziierten Elementen abfragen, aber das ist keine richtige Interaktion zwischen verschiedenen Objekten. Z.B. können Türen und Fenster den Aufbau der Wand, in der sie sitzen abfragen. Ich glaube Objekte können auch Raumstempelwerte abfragen, aber dies funktioniert AFAIK nicht im Parameter Skript. Und nur da kannst du den Wert eines Objektparameters manipulieren. 

 


Das trifft die Frage gut, ob das möglich ist.


 

Deine Master-Makro - Idee musst du als 1 Objekt sehen. Hier wird lediglich der Quellcode in mehrere Teile zerlegt, um nicht bei jedem ähnlichen Problem alles doppelt zu coden und zu pflegen.


Die Idee hab ich nur aus den Standard-Objekten vorgelesen. Als Beispiel habe ich gerade nur was aus der INT Version gefunden. Alle Felder Leer bis auf Master und da steht nur ein Verweis mit ein paar Zusätzen. Also keine geometrischen Informationen in dem Objekt.

thopas_0-1733734250697.png


Platziert wird eine Instanz, die für die Darstellung evt. mehrere Makroobjekte aufruft. Dabei können zwar die Makros die Eigenschaften des Master Objektes manipulieren, aber nicht neu anlegen! Und das hat auch nichts mit anderen platzierten Instanzen zu tun. Du kannst nicht aus einer Tür heraus im Quellcode per CALL ein Raumstempelobjekt aufrufen und das liefert Werte einer speziellen, platzierten Instanz.

Ich komme hier mit Master und Makro durcheinander. Soll das gecalled Objekt den Aufrufer manipulieren (ich glaube auch, dass das echt nen Sonderfallfall ist, wo die Logik des Bömmels in der Tür sein muss) oder kann der Aufrufende das aufgerufene Objekt nicht manipulieren (also Objekt "Tür mit Bömmel" liest die Tiefe der Tür aus und Bömmel (in der "Tür mit Bömmel" oder als eigenes Makro) hängt sich davor)?

Vergiss mal den Begriff "Makro" und stell dir vor, du würdest an jeder CALL Stelle den kompletten Makro-Objekt-Quellcode einkopieren. So funktioniert das. Und ja, das Makroobjekt hat ja in dem Kontext keine Parameterliste, deren Einstellungen/Werte aus der Instanz im Projektraum gespeichert wird, weil nur das Hauptobjekt dort liegt (und dessen Parameter(einstellungen) im Projekt gespeichert werden). Deswegen müssen im Hauptobjekt und Makro diejenigen Parameter in der Liste identisch benannt sein, die vom Parameter-Skript aus mittels PARAMETERS Befehl manipuliert werden sollen.

Verrenne dich nicht: "...aber dies funktioniert AFAIK nicht im Parameter Skript." kann ein Kliller für dein Ansinnen sein.

 

Früher konnte man aus Archicad einen Dump des Projektes machen und bekam für jedes platzierte Element im Projekt den Auszug aus der dahinter liegenden Datenbank als Textdatei:

Wand: AnfangXYZ, EndeXYZ, Material, Stift, ...

Objekt: Position XYZ, Objektname, Parameterliste nebst Einstellungswerten

 

So sieht es heute unter der Haube auch noch aus. Das kennst du, wenn du mal alle Bibliotheken auslinkst. Dann siehst du nur die Position des HAUPTobjektes, Welche Makros da dazu gehören steht erst im GDL-Skript und nicht im Projekt und daher auch nicht deren Parameter.

 

das Lernen an Graphisoftobjekten ist bei komplexen Objekten schwierig, weil diese meist auf einem genrisch programmierten Makroobjekt basieren und von einer um die GDL-Texte beraubten Kopie aus aufgerufen werden, wobei Parameter die Ausprägung des gesamten Objektes bestimmen.

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm

@Frank Beister  schrieb:

Früher konnte man aus Archicad einen Dump des Projektes machen und bekam für jedes platzierte Element im Projekt den Auszug aus der dahinter liegenden Datenbank als Textdatei:

Wand: AnfangXYZ, EndeXYZ, Material, Stift, ...

Objekt: Position XYZ, Objektname, Parameterliste nebst Einstellungswerten


Oh - geil! Damit könnte man ja... viel machen.

Und heute geht das nicht mehr?

 

--
Stefan
AC ...-28, WIN10

Das war oneway abfragen und nicht manipulieren. das wurde durch SQL-Abfragen ersetzt. ich weiß nicht, ob das noch geht. dazu brauchst du -> Angepasste Menüs.

bim author since 1994 | bim manager since 2018 | author of selfGDL.de | openGDL | skewed archicad user hall of fame | author of bim-all-doors.gsm

Wenn man "Alles" im Dump hat, also auch die dazugehörige 'Eindeutige ID', könnte man sich eine Momentaufnahme von irgendwas wieder zurück in die Eigenschaften einlesen.

An Optionen-Sets mit Mehrfach-Auswahl kommt man da z.B. ja nicht ran. 🙄

--
Stefan
AC ...-28, WIN10