abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 
abbrechen
Suchergebnisse werden angezeigt für 
Stattdessen suchen nach 
Meintest du: 

Wir schätzen Ihren Input!
Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil

Programmierung
Alles über Programmierung in GDL und Python

Hotspot

Rainer123
Contributor

Hallo,
Ich habe für 2 GDL Objekte im 3D Script je die selben Zeilen für meinen Hotspot geschrieben:

"

hotspot 0, 0, ZZYZX/2, _unID, A, 1+128 !BASE (hidden)
_unID = _unID + 1

hotspot -1, 0, ZZYZX/2, _unID, A, 3 !REFERENCE
_unID = _unID + 1

hotspot A, 0, ZZYZX/2, _unID, A, 2 !MOVING
_unID = _unID + 1

"

In der Innenansicht:
Bei ersten GDL Objekt-Hotspot kann ich die Breite "A" des Objekts verändern beim Zweiten nicht. Beim Zweiten fehlt mir beim Pop UP Fenster die Option "Knotenpunkt verschieben"

Im 3D:
Bei ersten GDL Objekt-Hotspot kann ich NUR die Breite "A" des Objekts verändern beim Zweiten kann ich Breite und Tiefe verändern.

Ziel ist, dass sich das Zweite Objekt wie das erste verhält.
Ich habe bereits versucht diese Zeilen an unterschiedlichen Stellen im Skript zun platzieren. Hat leider nichts geholfen.
Hat jemand eine Idee was hier schief läuft? Danke

 

Operating system used: Windows

6 ANTWORTEN 6
Hmooslechner
Moderator

Hast Du an der selben Stelle des editierbaren Hotspots, der nicht funktioniert, vielleicht einen anderen "toten" Hotspot eingesetzt?

 

Versuch Deinen editierbaren mal im GDL-Script zur Seite zu schieben (addx 2). ..Hotspotbefehele... (del 1) - ob er dann funkioniert.

 

Eine andere Möglichkeit wäre, dass _unid im 2. Fall zuvor nicht erstellt wurde.

AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia

"Toter" Hotspot ist es nicht. Hab die Hotspot verschoben.
_unid wurde in beiden Fällen vorher nicht erstellt. Ist es also auch nicht.

Hab immer wieder Teile des Skripts gelöscht und bin zum Schluss gekommen, dass es an den Strichlinien im 3D Skript liegt.

Hab dazu ein Subprogramm in beiden GDL Objekten. Ist aber unterschiedlich im Einsatz.

Also am Subprogramm selber liegts nicht, nur an dessen Anwendung.
... komm aber nicht auf den Fehler

 

Hier das Subprogramm
"Dashed Line":
!Input: ! - Line end points: (x1, y1, z1~z) and (x2, y2, z2)
! - Dash length: dashLength
if getValues then
x1 = get(1): y1 = get(1): z1 = get(1)
x2 = get(1): y2 = get(1): z2 = get(1)
dashLength = get(1)
getValues = 0
endif
!Return: NONE !Draw a dashed line
!Calculate the line length and direction vectors
ux = x2 - x1
uy = y2 - y1
uz = z2 - z1
L = sqr(ux^2 + uy^2 + uz^2)
ux = ux/L
uy = uy/L
uz = uz/L
!Calculate the length of the first and last dashes
nDashes = int(1 + (L + dashLength)/(2*dashLength))
extraLength = (nDashes*(2*dashLength)-dashLength)-L
startLength = dashLength - extraLength/2
!Draw the lines
add x1, y1, z1
lin_ 0, 0, 0,
startLength*ux, startLength*uy, startLength*uz
L1 = startLength + dashLength
repeat
L2 = min(L1 + dashLength, L)
lin_ L1*ux, L1*uy, L1*uz,
L2*ux, L2*uy, L2*uz
L1 = L2 + dashLength
until L1 > L
del 1
return

Hab dieses Subprogramm zwar auch in beiden GDL Objekten. Ist aber unterschiedlich im Einsatz.

"Toter" Hotspot ist es nicht. Hab die Hotspot verschoben.
_unid wurde in beiden Fällen vorher nicht erstellt. Ist es also auch nicht.

Hab immer wieder Teile des Skripts gelöscht und bin zum Schluss gekommen, dass es an den Strichlinien im 3D Skript liegt.

Hab dazu ein Subprogramm in beiden GDL Objekten. Ist aber unterschiedlich im Einsatz.

Also am Subprogramm selber liegts nicht, nur an dessen Anwendung.
... komm aber nicht auf den Fehler

 

Hier das Subprogramm
"Dashed Line":
!Input: ! - Line end points: (x1, y1, z1~z) and (x2, y2, z2)
! - Dash length: dashLength
if getValues then
x1 = get(1): y1 = get(1): z1 = get(1)
x2 = get(1): y2 = get(1): z2 = get(1)
dashLength = get(1)
getValues = 0
endif
!Return: NONE !Draw a dashed line
!Calculate the line length and direction vectors
ux = x2 - x1
uy = y2 - y1
uz = z2 - z1
L = sqr(ux^2 + uy^2 + uz^2)
ux = ux/L
uy = uy/L
uz = uz/L
!Calculate the length of the first and last dashes
nDashes = int(1 + (L + dashLength)/(2*dashLength))
extraLength = (nDashes*(2*dashLength)-dashLength)-L
startLength = dashLength - extraLength/2
!Draw the lines
add x1, y1, z1
lin_ 0, 0, 0,
startLength*ux, startLength*uy, startLength*uz
L1 = startLength + dashLength
repeat
L2 = min(L1 + dashLength, L)
lin_ L1*ux, L1*uy, L1*uz,
L2*ux, L2*uy, L2*uz
L1 = L2 + dashLength
until L1 > L
del 1
return

Mit get(1) holst du ja Werte aus dem linearen Parameterspeicher. 

Falls du (bzw der zuvor abgelaufene Programmteil) den Parameterspeicher zuvor nicht befüllt hast, kann das eventuell dazu führen, dass L=0 ist. Die Division durch 0 ist eventuell dann das Problem. 

ArchiCAD 25 / Windows 10
Hmooslechner
Moderator

Müsste ich mal probieren können, um es wirklich zu sagen. Poste das ganze GDL mal hier, dann sehen wir weiter.

AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia

hier die GDL Datei

Setup info provided by author