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

3D Hotspot Problem

Ma_Scht
Advocate
Hallo zusammen,
ich verstehe nicht was ich falsch mache. Ich möchte den BLOCK mit einem 3D-HoSpo drehen, aber immer wenn er auf 0 | 180 geht ist das drehen nicht mehr möglich.

Wenn ich dem DreWi-Parameter (so in Parameterliste definiert) dann einen Winkel # 0 | # 180 gebe, geht es wieder.

Mein Verständnis ist: Ich möchte in der X-Z-Ebene um die Y-Achse drehen. Ergo Y = 0. X-bleibt X und die Z-Ebene ist die Y-Ebene. Über COS und SIN hole ich mir die X & Y(eigentlich Z) Werte auf dem Kreisbogen.

Ursprung liegt in 0,0,0
Der Basispunkt liegt auf der X-Achse im Abstand r. Wenn DreWi = 0 ist der X-Wert = r und der Z-Wert = 0, aber

r=1
HOTSPOT 0, 0, 0, CNT ,DreWi,6 : CNT =CNT +1 !Mittelpunkt
HOTSPOT r, 0, 0, CNT ,DreWi,4+128: CNT =CNT +1!Basispunkt
HOTSPOT r*COS(DreWi), 0, r*SIN(DreWi), CNT ,DreWi,5 : CNT =CNT +1!Beweglicher

ROTy DreWi
BLOCK 1,0.5,0.1
DEL 1

ICH BEHELFE MICH mit
IF DreWi = 0 | DreWi = 360 THEN DreWi =0.01
IF DreWi = 180 THEN DreWi =180+0.01,
als Prüfung vor den eigentlichen Drehprozess,
aber das ist nicht präzise (auch mit einer weiteren 0) und außerdem sind es zeitfressende IF-Abfragen mit "ORs" drin, die ORs kann ich eh nicht leiden 🙂. Ich will meine Kiste schonen wo es geht 🙂

Ich vermute, es liegt am Basispunkt, aber eigenlich kann es dem Kasten doch egal sein, dass der Basispunkt auf der X-Achse liegt und ggf. 0 ist.

Habt Ihr einen Tip für mich?
Besten Dank und Viele Grüße
Mario
2 ANTWORTEN 2
Anonymous
Nicht anwendbar
Zu dieser Frage wurde mir neulich von Frank Beister geholfen; deshalb poste ich einfach seine Lösung als Kopie (Frank, ich hoffe, das ist okay):

"HOTSPOT 0, 0,                            0,unID, dreh_x, 6 : unID=unID+1 !Mittelpunkt
HOTSPOT hit, 0, 0,unID, dreh_x, 4 +128 : unID=unID+1 !Basispunkt
HOTSPOT 0,-hit, 0,unID, dreh_x, 7 : unID=unID+1 !Referenzpunkt für Winkelebene
HOTSPOT hit*COS(dreh_x), hit*SIN(dreh_x),0,unID, dreh_x, 5: unID=unID+1 !Beweglicher Punkt"


"Die Ursache kannst Du Dir selbst vorstellen. Ist der Winkel Null, dann hast Du einen Mittelpunkt und zwei identische Punkte. Diese erzeugen eine Gerade, aber keine Ebene. In welcher Ebene Du drehen willst, weiß dann ArchiCAD nicht. Es gibt unendlich viele davon. Du musst also sicherstellen, dass ArchiCAD immer weiß, in welcher Ebene Du die Drehung ausführen willst. Das machst Du durch Angabe des Normalenvektors auf diese Ebene. Er wird mit mit dem Maskwert 7 Definiert. Der Normalenvektor ist in Deinem Fall der Vektor (0/0/0)->(0/-hit/0), also in Richtung der Y-Achse."
Ma_Scht
Advocate
Danke Jochen, für Deine schnelle Antwort.
Dann ist in dem GDL-Handbuch die Angabe des HoSpo Typ "7" also doch korrekt. Ich dachte, das sei ein Schreibfehler (was ich aber insgeheim für unwahrscheinlich hielt). Werds gleich nochmal unter diesem Gesichtspunkt nachlesen.
Nun wird's helle.
Ja, hüstel, eine Gerade definiert keine Ebene, klar. Eieiei - wenn das meine Mathelehrerin lesen würde. Sie würde mich wohl abwatschen (Gott sei Dank gibt es keine Rohrstöcke mehr).
Das erklärt, warum mein "Krüppelweg" semi-funzte.

Thema vollumfänglich beantwortet. Danke sehr!
Beste Grüße
Mario