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

hotspot2 - halber wert

dihes8010
Participant
habe eine strasse mit der Breite B

hotspot2 0, 0, unID, B, 1+128 :unID=unID+1
hotspot2 0, B, unID, B, 2 :unID=unID+1
hotspot2 0, -1, unID, B, 3 :unID=unID+1

weil die strasse bezüglich Achse symmetrisch ist,
möchte ich den halben Wert B also B/2 als hotspot von der Achse ziehen können

hab schon viel versucht

hotspot2 0, B/2, unID, B, 2 :unID=unID+1 !funktioniert nicht
mul2 !funktioniert nicht

danke für Hinweise
9 ANTWORTEN 9
Frank Beister
Advisor
Geht so nicht. Neuen Parameter anlegen und im Parameterskript

B = neu*2
PARAMETERS B=B
LOCK "B"

Und dann den "neu" mit dem Hotspot verbinden.
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
dihes8010
Participant
vielen Dank

hat geklappt
😄
snow
Rockstar
Darf ich mich hier mit dranhängen?
... hab etwas ähnliches:

Würde den Parameterwert gerne so definieren.



Dürfte wohl auch mit 'rot2' gehen... doch ohne, wohl eleganter.

Habe die "Methode" wie oben versucht... 1. Zeile im Parameterskript wäre eigentlich klar...
p_pl_a = A-p_pl
(geht aber nur so herum)

Sieht aber fast so aus, als ob es die 2. und 3. Zeile auch braucht, damit so etwas funktioniert.
Geht das auf diesem Weg überhaupt?
Archicad For Future
______________________________________

archicad versions 8-27 | mac os 13 | win 10
runxel
Legend
@Achmed

Du musst dir eigentlich nur die gewünschte Logik aussuchen.
Franks Lösung funktioniert natürlich, ist dann aber beschränkt, weil man "B" durch das LOCK dann nicht mehr direkt ändern kann.
Wenn man alle Parameter frei halten will, geht das nur mit etwas mehr Code im Objekt.
GLOB_MODPAR_NAME wird dein Freund sein.

z.B:

if GLOB_MODPAR_NAME = "p_pl_a" then
p_pl = A - p_pl_a
endif
parameters p_pl = p_pl


Aufpassen muss man jetzt, wenn du "A" änderst. Was soll dann passieren? Welche Abhängigkeiten hast du?
Für etwas schwierigere Fälle muss man dann eventuell noch einen Schattenparameter mitführen. (Der z.B. Verhältnisse mitschleift, die man nutzen kann, um Abhängigkeiten aufzulösen, welche man erst nach dem erneuten Durchlauf des Parameterskripts zum Schluss mit dem PARAMETERS Befehl updated.)
Lucas Becker | AC 27 on Mac | Author of Runxel's Archicad Wiki | Editor at SelfGDL | Developer of the GDL plugin for Sublime Text | My List of AC shortcomings & bugs | I Will Piledrive You If You Mention AI Again |

«Furthermore, I consider that Carth... yearly releases must be destroyed»
snow
Rockstar
Hey vielen Dank, shadow, dass du dich meiner Sache angenommen hast.

Aber, abgesehen davon, dass ich nicht wirklich kapiere, was 'GLOB_MODPAR_NAME' wirklich, wie bewirkt... und wozu es in aller Welt auch noch das 'parameters ... = ... am Schluss braucht, frage ich mich, ob das so herum, wie ich das haben will, auf diesem Weg funktionieren kann.

Mein Parameter 'p_pl' ist ja der, mit dem ich arbeiten will – ist der Abstand von rechts.
Den will ich immer eingeben können... und hier will ich auch zum verschieben anfassen.
(Ändert sich A – die Länge, wandert der Punkt (Add2...) mit den Herdplatten mit.

Dies aufgefasst, wäre
 p_pl_a = A - p_pl
wohl schon richtig herum gewesen – oder?

Wenn mein Hotspot nun aber nur mit 'p_pl_a' also dem "Hilfsparamter" funktionieren kann (weil das rechnen im hotspot2-Befehl selbst ja zu nichts führt...), dann "gibt der aber den Wert vor"... und das ganze kann dann nicht mehr funktionieren – oder?
Archicad For Future
______________________________________

archicad versions 8-27 | mac os 13 | win 10
snow
Rockstar
Edit Edit Edit

Skript mit
p_pl = A - p_pl_a
wäre wohl doch das richtigere.
Das "blöde" ist aber nach meiner Auffassung, dass man die Reihenfolge überhaupt einhalten muss... und das Gleichheitszeichen hier nicht für das gleiche wie in der Algebra steht. (Wäre es so, dann würde sich immer der 'andere' Wert ändern, egal auf welcher Seite der Gleichung man was ändert...) 😐

Wäre, um das "auszubügeln", denn GLOB_MODPAR_NAME gedacht?

Beim verschieben wird der ursprüngliche Abstand von 'A' bis zu den Herdplatten dazu addiert.



Gebe ich 'p_pl' wieder manuell ein, ändert sich 'p_pl_a' nicht mit.

(jaja... jetzt steigere ich mich da voll rein.. sorry 😠 ... aber manchma, bringt eine so was ja irgendwie doch weiter...)
Archicad For Future
______________________________________

archicad versions 8-27 | mac os 13 | win 10
runxel
Legend
Ich weiß nicht, was ich dir jetzt noch mitteilen soll. Eigentlich ist in meinem Beitrag schon alles gesagt und alles Handwerkszeug enthalten, was du brauchst.

Vielleicht noch mal ein bisschen Wiederholung.
Was GLOB_MODPAR_NAME ist, kann man sich entweder schon denken (GLOBaler MODifizierter PARameter NAME) oder im Handbuch schnell nachschlagen.
Du hast ja schon selbst gemerkt, dass in der Programmierung eine Zuweisung von Werten von rechts nach links gelesen wird. Der rechte Teil der "Gleichung" wird dem linken zugewiesen als Wert.
PARAMETERS spielt nun – wichtig! – einen Wert als Parameter zurück. Im GDL ist es so, dass alle Parameter zu Beginn eines Skriptdurchlaufs "kopiert" werden und als lokale Variablen zur Verfügung stehen, die überschreibbar sind. (Zu Testen, in dem du z.B. "A" im 2D-Skript mit einem Wert überschreibst, aber im 3D wird "A" wieder wie im Parameter sein. PARAMETERS ist eine Funktion, die einen berechneten Wert wieder allen Skripten zur Verfügung stellt, vereinfacht gesagt.)

Und jetzt sollte der Groschen gefallen sein:
Mit GLOB_MODPAR_NAME fragst du ab, welcher Parameter sich als letztes geändert hat, und es ist klar, warum man das braucht, im Zusammenspiel mit PARAMETERS.

Also, wie bereits gesagt, du musst nur deine Abhängigkeiten dir mal definieren, durchgehen, und in Code gießen. »Was soll passieren, wenn ich "A" ändere; was passiert wenn ich "B" ändere, usw.«
Lucas Becker | AC 27 on Mac | Author of Runxel's Archicad Wiki | Editor at SelfGDL | Developer of the GDL plugin for Sublime Text | My List of AC shortcomings & bugs | I Will Piledrive You If You Mention AI Again |

«Furthermore, I consider that Carth... yearly releases must be destroyed»
snow
Rockstar
Hey Danke nochmals für die Erklärungen!

Ich bin halt wie der Neuling im Handwerk, der noch nicht so recht weiß, mit welchen Werkzeugen man was macht... wie die funktionieren usw. Sich das entsprechende Basiswissen anzueignen ist nicht ganz leicht...

Im Handbuch hatte ich schon nachgeschlagen... nach mehrmaligem lesen aber immer noch nicht kapiert, was man mir mit dem einzigen Satz, der zu dem Begriff dort steht, "Zusätzlich enthält die globale Variable GLOB_MODPAR_NAME (Typ Text) den Namen des letzten vom Anwender geänderten Parameters.", sagen will.
Mit dem entsprechenden Hintergrundwissen ist das ganz anders.

Bei euch auf self-GDL konnte ich den Begriff irgendwie nicht finden...

(Im Handbuch gibt's noch was lustiges an der Stelle:

... scheinen Italiener mitgeschrieben zu haben 😉 )

Aber nach dem ganzen gequatsche nochmals zum Thema:
Das, was ich wollte, dass sich die Parameter gegenseitig beeinflussen, mit der derselben Auswirkung, wurde durch das einfügen einer zweiten 'IF-Definition möglich, eben mit umgedrehten Werten.
So funktioniert das ganze. 😄

(Allerdings wird im Tracker immer der Wert des Hilfsparameters angezeigt, weil ja der mit dem Hotspot verbunden sein muss.
So habe ich mir am Ende doch noch ein Skript mit add2... und rot2 zu dem Hotspot geschrieben, um das anders haben zu können...)
Archicad For Future
______________________________________

archicad versions 8-27 | mac os 13 | win 10
Frank Beister
Advisor