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

Call-Befehl - Größe des Objektes auslesen

Hmooslechner
Moderator
Ich habe bisher immer vermieden, über einen Call-Befehl ein externes GDL einzubinden, weil ich der Auffassung bin, daß ein Objekt vollständig sein soll - was die Weitergabe erleichtert.

Deshalb bin ich da wissensmäßig eher "nackt".

Nun habe ich mich aber mit einem meiner früheren Objekte beschäftigt - der gebogenen Rampe mit Profilmanager-Profil, weil eine Frage der Absturz-Sicherung im Youtube aufgetaucht war.

Da es nicht möglich ist, daß die normale Geländerfunktion einer GDL-Kante folgt, kam ich auf den Gedanken, selber eine Geländerfunktion dazu-zu-stricken.

Dabei dachte ich, dass es "schön" sein könnte, wenn der User selbst mit wenigen 3D-Elementen seine Geländerpfosten herstellt und dann als Bibliothekselment abspeichern können sollte - ähnlich wie es bei der normalen Geländerfunktion ja auch geht.

Nun stehe ich aber vor dem Problem, dass ich ja eine Möglichkeit finden muss, den Einfügepunkt (Grundriss) dieses Elementes zu bestimmen, damit es dann - hereingeholt - richtig sitzt.

Im Call-Befehl gibt es ja die Möglichkeit, die "returned_parameter" irgendwie rauszubekommen - aber da "stehe ich nun an".

Ich habe mir gedacht, dass ich es als Group zuvor reinhole, damit ich diese Maße auslesen kann, um es dann später mit Placegroup um die Mitte versetzt wirklich zu platzieren.


..
!! zuvor nur zum Auslesen der Parameter
group "Steher"
call "Pfostenname" parameters RETURNED_PARAMETERS. !!! (Versatz= halbe Breite)
endgroup
killgroup "Steher"



!!! später dann in der Schleife:
for i = 1 to Aufloesung+1 step Jedewievielte

addx Raddt[i][1]
addy Raddt[i][2]+Versatz
addz KuKo2[i][2]-unterhoehe
hotspot 0,0,0

rotz BogenTeilW*(i-1)-90
!block 0.03, 0.03, 1

call "Pfostenname" parameters RETURNED_PARAMETERS Breite, Tiefe
!placegroup "Steher"

del 4
....


Wer kennt sich damit aus?
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
10 ANTWORTEN 10
archig
Expert
Im GDL Handbuch steht ja

CALL macro_name_string [,]
PARAMETERS [ALL][name1=value1, ..., namen=valuen][[,]
RETURNED_PARAMETERS r1, r2, ...]

das heisst, du hast im Makro die Parameter r1, r2 drin, und die sind mit Werten versehen; z.B. r1=2.5 und r2=3.8
Die kennt das aufrufende Skript erstmal nicht; nach dem Aufruf dann aber schon (wenn ich das recht verstehe)
Nach dem Aufruf kannst du die also nutzen, und zum Beispiel ein Rechteck zeichnen, wenn du aus dem 2D Skript aufgerufen hast: rect r1, r2
ArchiCAD 25 / Windows 10
archig
Expert
das mit dem group ist, soweit ich das sehe, nicht notwendig
ArchiCAD 25 / Windows 10
Hmooslechner
Moderator
Der group-Befehl soll nur verhindern, dass es gleich direkt eingesetzt wird.
Ich will das Teil ja Axial einsetzen und nicht vom Rand aus.

Ich will die Parameter des Call-Objektes ja nicht ändern - also a und b sollen bleiben wie sie sind, wenn ich sie reinhole. Ich will sie nach dem reinholen nur kennen.

Wenn ich aber bei parameters danach a angebe, dann ändert er mir diese Größe. Ohne sie anzhugeben - wier komme ich dann bei "returned_parameter"s dazu? Oder muss ich sie bei "parameters" immer angeben?
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hallo Heimo, ich hab dir in discord ein Objekt geschickt.
Das kann sowohl original Grösse als auch Verzerrung.
Mac OSX - up to date

GER Archicad Full, Up to date
archig
Expert
Der group-Befehl soll nur verhindern, dass es gleich direkt eingesetzt wird.
Ich will das Teil ja Axial einsetzen und nicht vom Rand aus.

das würde ich versuchen, im Parameterskript zu erledigen

Ich will die Parameter des Call-Objektes ja nicht ändern - also a und b sollen bleiben wie sie sind, wenn ich sie reinhole. Ich will sie nach dem reinholen nur kennen.

ich hab das noch nie probiert, aber dafür ist offenbar der END Befehl geeignet.
also in der Art:
end 125, a, b, 14

RETURNED_PARAMETERS r1, r2, r3, r4
bewirkt dann offenbar, dass r1=125 ist, r2=a, usw
ArchiCAD 25 / Windows 10
Anonymous
Nicht anwendbar
Du rufst im aufrufenden Objekt das Makro auf, z.B. wie folgt:
CALL "Flexi_Zone_Dictionary" PARAMETERS ALL int_language = int_language  RETURNED_PARAMETERS dict_words

Im aufgerufenen Objekt musst Du die dort berechneten Variablen oder Parameter wieder zurückschicken. Das kann dann wie folgt aussehen:

END dict_words

Damit schicke ich in dem Beispiel einen kompletten DICTIONARY-Parameter ans aufrufende Objekt zurück. Im Makro befinden sich die Übersetzungen für das Objekt; die Sprache wird mit int_language abgefragt und nur die entsprechende Sprachversion in dem Dictionary zurückgegeben.

Ob Du irgendetwas in GROUPs einpackst, spielt für den Makroaufruf erstmal keine Rolle.
Du kannst das Makro ja auch an beliebiger Stelle im Script aufrufen (Koordinaten-Transformationen) und auch konditional, also durchaus ohne GROUPs.
Hmooslechner
Moderator
Danke Jochen.

Leider geht das an der "Usabilität" vorbei, wenn ein Normalanwender, der sich mit Morphs oder Ähnlichem einen Geländersteher gebastelt hat , diesen danach als Bibliothekselement abgespeichert hat, dann noch in den Script rein muss.

Ich hatte gehofft, dies ohne weiter nötige Aktion des Users am aufgerufenen GDL einbinden zu können.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
archig
Expert
Ja, die Rückgabe von Werten erfordert offenbar diesen end befehl.
Für deinen Fall z.B. so
! im Objekt mit dem Gelaenderpfosten
! 3d Geometrie
end a,b,zzyzx

!!!
!im aufrufenden Objekt
CALL Gelaenderpfosten[,]
PARAMETERS [ALL][name1=value1, ..., namen=valuen][[,]
RETURNED_PARAMETERS pfosten_a, pfosten_b, pfosten_h]

die Zeile end a,b,zzyzx müsste nach dem eigenen Erstellen des Pfostens als Objekt nachträglich noch im Skript eingefügt bzw geändert werden.
ArchiCAD 25 / Windows 10
Hmooslechner
Moderator
Ich werde es wahrscheinlich trotzdem einbauen und ein Tutorial dafür machen.

Als Alternative im Grundriss wären x-y-Verschiebe-Vektiren mit Hotspots zum Selber-Rücken innerhalb des Elementes selber, wenn es eingesetzt ist.

Mal sehen, wo es mich "hintreibt".
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia