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

beweglicher text

Anonymous
Nicht anwendbar
Hallo forum.
Für diverse Objekte würde ich gerne einen text generieren, der sich auf der Zeichenebene verschieben und drehen läßt.
Ich habe versucht das Problem mit editierbaren Hotspots, an welche ich den text hänge, zu lösen.
Leider bin ich gescheitert, da ich die verwendung
der Hotspot-Befehle im 2d-skript nicht ganz durchschaue. Kann mir jemand helfen?
3 ANTWORTEN 3
Frank Beister
Advisor
Aus dem Kopf und ohne AC zur Hand und mit Garantie auf kleine Fehler:

----------------------------

Syntax:
hotspot2 x,y [,ID [,parametername, typ [,parameterliste]]

Wertebereiche:
x, Typ real
y, Typ real
ID, Typ integer (ab ArchiCAD 6.5)
parametername, gültiger Parametername aus der Parameterliste des Objektes, der beweglich sein soll (ab ArchiCAD 8.0)
typ (1 bis 6) Typ integer (ab ArchiCAD 8.0)
parameterliste

Erläuterung:
Erzeugt einen Fangpunkt an der Stelle x/y. Dieser wird im Vorschaufenster des Objekteditors zwar als Kreuz angezeigt, ist im Plan platziert später aber unsichtbar. Um langes Suchen mit dem Cursor zu vermeiden sollten diese also in der nähe von sichtbaren Elementen des Objektes liegen. Auf diesen Fangpunkt kann vermaßt werden. Damit ArchiCAD bei mehreren und je nach Darstellung evt. wechselnden Fangpunkten den korrekten assoziiert, kann dem Fangpunkt eine Identifizierungsnummer (ID) zugewiesen werden, die objektweit jedoch eindeutig sein muß. Es ist zu raten dazu eine Variable zu verwenden, die nach jedem HOTSPOT2 hochgezählt wird.
Ab ArchiCAD 8 können mehrere Fangpunkte gemeinsam einen beweglichen Fangpunkt definieren. Prinzipiell gibt es zwei unterschiedlich Typen: Linear und Winkel. Bei den linearen können auch zwei bewegliche Fangpunkte zusammenfallen, die dann 2 Parameter gleichzeitig verändern. Sie müssen allerdings dann auch theoretisch beweglich sein und sich nicht gegenseitig durch Richtung oder Wertebereiche/Schrittweiten ausschließen. Außerdem müssen sie den maßstäblichen Längen entsprechen. Vor den hotspot2-Befehlen ausgeführte MUL2-Befehle müssen mit den Fangpunkten korrespondieren.

Linear bewegliche Fangpunkte:
Es wird ein Vektor bestimmt, der die Längenangabe eines Parameters darstellt. Jeder Vektor hat einen Ausgangspunkt (Basis, typ ) und ein Ende (Beweglicher Punkt). Da ein Vektor (Parameter) auch die Länge Null haben kann, wäre in diesem Fall eine Richtung nicht definiert und jede möglich. Um das zu vermeiden muß ein Referenzvektor gesetzt werden, der die (negative) Richtung des Längenvektors angibt.

Nehmen wir mal einen Parameter c als Längenparameter.

HOTSPOT2 0, 0, 01,c,1 !Basisfangpunkt
HOTSPOT2 0, c, 02,c,2 !beweglicher Fangpunkt
HOTSPOT2 0,-1, 03,c,3 !Referenzrichtung

Der bewegliche Vektor ist also 01->02 (vertikal). Der bewegliche Fangpunkt an 0/c. Es ist sicherzustellen, daß im Moment der Erzeugung der Fangpunkte die Länge von 01->02 (hier im Beispiel also von 0/0 nach 0/c) auch tatsächlich dem Wert entspricht, der in dem Parameter zu diesem Zeitpunkt abgelegt ist. Die Referenzrichtung ist mit 01->03 definiert.
Will man den Basisfangpunkt unsichtbar machen, addiert man 128 zu dem Basistyp:

HOTSPOT2 0, 0, 01,c,1+128 !Basisfangpunkt

Der Referenzfangpunkt ist immer unsichtbar.

Nehmen wir noch einen weiteren Parameter d als Längenparameter. Nun aber in die andere Richtung, horizontal:

HOTSPOT2 0,0, 04,d,1 !Basisfangpunkt
HOTSPOT2 d,0, 05,d,2 !beweglicher Fangpunkt
HOTSPOT2 -1,0, 06,d,3 !Referenzrichtung

Der Basispunkt muß nicht bei 0/0 liegen. Hier liegt er nun bei d/0:

HOTSPOT2 d, 0, 01,c,129 !Basisfangpunkt
HOTSPOT2 d, c, 02,c,2 !beweglicher Fangpunkt
HOTSPOT2 d,-1, 03,c,3 !Referenzrichtung

Ebenso in der anderen Richtung. Der Vektor liegt nun auf der Höhe von c:

HOTSPOT2 0,c, 04,d,129 !Basisfangpunkt
HOTSPOT2 d,c, 05,d,2 !beweglicher Fangpunkt
HOTSPOT2 -1,c, 06,d,3 !Referenzrichtung

Durch diese Translation liegen nun beide beweglichen Fangpunkte aufeinander. Damit lassen sich mit einem Drag und drop beide Werte verändern. Eine Kombination mit dem Fanpunkttyp Winkel ist nicht möglich.

Die Definition eines beweglichen Winkelfangpunktes ist ähnlich. Bei einem Winkel ist aber noch neben dem eigentlichen Winkel ein weiteres Maß nötig: Der Radius des Winkelbogens. Nennen wir den mal "r". Satt eines Basispunktes gibt es nun eine Basislinie, die sich durch Winkelzentrum und einen Basispunkt definiert. Üblicherweise nimmt man hierfür die Richtung der X-Achse, da sonst umfangreiche trigonometrische Operationen nötig sind. Zuvorige Transformationen des Koordinatensystems mit ADD2 und ROT2 sind zulässig.

Definieren wir nun den Mittelpunkt des Winkels, z.B. des Parameters w:
hotspot2 0,0, 07,w,6 !Mittelpunkt

Der Basispunkt auf der X-Achse liegt im Abstand r. Die Addition von 128 macht ihn wieder unsichtbar:
hotspot2 r,0,08,w,4+128 !Basispunkt

Und nun den beweglichen Punkt, der auf der Kreislinie liegen muß (Radius r):
hotspot2 r*cos(w),r*sin(w),09,w,5 !Beweglicher Punkt

Zusammen könnte das so aussehen:

txt="demo2"
r=stw(txt)

HOTSPOT2 d, 0, 01,c,129 !Basisfangpunkt
HOTSPOT2 d, c, 02,c,2 !beweglicher Fangpunkt
HOTSPOT2 d,-1, 03,c,3 !Referenzrichtung

HOTSPOT2 0,c, 04,d,129 !Basisfangpunkt
HOTSPOT2 d,c, 05,d,2 !beweglicher Fangpunkt
HOTSPOT2 -1,c, 06,d,3 !Referenzrichtung

add2 c,d

hotspot2 0,0, 07,w,6 !Mittelpunkt
hotspot2 r,0, 08,w,4+128 !Basispunkt
hotspot2 r*cos(w),r*sin(w),09,w,5 !Beweglicher Punkt

rot2 w

text2 0,0,txt

del 2
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
Advisor
Leider kann ich den Text wegen Timeout nicht mehr korrigieren. Es waren ein paar kleine Fehler drin. Hier korrigiert:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">! Parameter:
! c: Vertikaler Versatz, Typ Länge
! d: Horizontaler Versatz, Typ Länge
! w: Rotation, Typ Winkel

txt="Beweg mich! Dreh mich"
r=stw(txt)/1000*GLOB_SCALE !Textbreite als Radius

HOTSPOT2 0,0,99 !Fangpunkt am Objekteinsetzpunkt

! Vertikale Richtung
HOTSPOT2 d, 0, 01,c,1+128 !Basisfangpunkt
HOTSPOT2 d, c, 02,c,2 !beweglicher Fangpunkt
HOTSPOT2 d,-1, 03,c,3 !Referenzrichtung

! Horizontale Richtung
HOTSPOT2 0,c, 04,d,1+128 !Basisfangpunkt
HOTSPOT2 d,c, 05,d,2 !beweglicher Fangpunkt
HOTSPOT2 -1,c, 06,d,3 !Referenzrichtung

add2 d,c

! Drehung
hotspot2 0,0, 07,w,6 !Mittelpunkt
hotspot2 r,0, 08,w,4+128 !Basispunkt
hotspot2 r*cos(w),r*sin(w),09,w,5 !Beweglicher Punkt

! Eindrehen und Textausgabe
rot2 w
text2 0,0,txt
del 2
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
Anonymous
Nicht anwendbar
thanx für die schnellen Antworten.
Ausprobieren kann ichs leider erst wenn ich weniger Arbeit habe. Ich werds aber schnellst möglich tun und berichten.