vor 2 Wochen
Hallo zusammen,
Habe mich schon viel mit GDL befasst, aber noch nicht bei allem. Ist sehr viel zu lernen und ist komplex....
1)
Meine Frage ist (Bild unten), wie man bei einem erstellten Objekt die Länge anpassen kann (Beispiel Mass A und B).
2)
2. Frage betrifft flexible Hotspots die man nehmen und verschieben kann, trotz allen Tutorials bin ich immer noch nicht auf einen grünen Zweig gekommen, wie man dies programmieren muss. Es gibt schon paar GDL Beispiele mit Script, aber ich check es einfach immer noch nicht ganz.... (Graphical editing hotspot2 2D und hotspot 3D).
Danke im Voraus für eure Hilfe!
Gelöst! Gehe zu Lösung.
vor einer Woche - zuletzt bearbeitet vor einer Woche
und jetzt kommt der flexible Teil:
Du musst dich entscheiden, ob du die Flexibilität in die Koordinaten des Polys packst oder über Koordinatensystemtransformation gehst. Einfacher ist wahrscheinlich ersteres. Da kannst du auch ein ganz dünnes Brett bohren und die Gesamtabmessung (Breite des Objektes) für die Flexibilität nehmen. Dann brauchst du gar keinen beweglichen Fangpunkt.
breit2 = a-2*breit1
dick2 = 0.04
versatz2 = (dick1-dick2)/2
poly2_b{5} 4, 3, 0, 3, stiftV, 0,
0, 0, 1, 0, 0, 1, 0,
breit1,versatz2,sts,
breit1+breit2,versatz2,sts,
breit1+breit2,versatz2+dick2,sts,
breit1,versatz2+dick2,-1
add2 breit1+breit2,0
poly2_b{5} 4, 3, 0, 3, stiftV, 0,
0, 0, 1, 0, 0, 1, 0,
0,0,sts,
breit1,0,sts,
breit1,dick1,sts,
0,dick1,-1
del 1
Wenn du jetzt noch eine Zeile änderst, ist es ganz flexibel:
dick1 = b
Ich habe eben gesehen, dass bei deinen Koordinaten was nicht stimmen kann und ich auch einen Fehler im letzten Post habe. Ich korrigiere das mal eben. Und die Dicke der Abschnitte musst du so machen, wie du es haben willst.
vor 2 Wochen
Resp. flexibles Mass zwischen Mass A und Mass B (beim vorherigen Bild Beispiel).
vor einer Woche
Was möchtest du jetzt als Antwort. Gerade das Thema ist hinreichend oft hier und im int. Forum und Tutorials beschrieben worden. Klingt böse, aber wenn du nicht konkreter fragst, was du nicht verstehst kann ich nur sagen "I can explain it to you, but I can't understand it for you."
vor einer Woche
Guten Morgen,
Ich habe schon viele Tutoriales und Videos gesehen, aber es macht bei mir noch nicht richtig "klick"
Und wegen den editierbaren Hotspots habe ich mal was probiert, aber wenn ich die Fixpunkte verschiebe beim Objekt, verschiebt es sich, resp. ändert sich nicht, wie ich möchte...
vor einer Woche
Hast du den "Anhalter" gelesen? Die Antwort lautet 42. Sorry, aber das muss jetzt sein: Du stellst keine konkrete Frage. 1) wurde beantwortet. 2) ist keine Frage sondern "Ich verstehe das nicht, könnt ihr das ändern?"
Wenn dein Anliegen ist: "Hier ist ein Screenshot, kann mir das mal eben jemand programmieren" hoffe ich für dich, dass du eine gute Seele findest, die dir hilft.
Dann komme ich mal mit Fragen:
Hast du Programmiererfahrung? Welche?
Hast du eine Tutorial zum Programmieren in GDL gemacht?
Hast du das GDL-Handbuch oder GDL-Kochbuch gelesen?
Welche Tutorials zu den beweglichen Fangpunkten hast du angesehen?
Hast du schon was zu deinem Anliegen programmiert? Kann man das mal sehen?
vor einer Woche
Ich habe GDL Cookbook, GDL Center Graphisoft, Youtube Videos etc. angeschaut.
z.T. halt nur in Fremdsprache und wenn man dies übersetzen möchte, werden die Scripts auch auf deutsch übersetzt, was natürlich Fehler bringt. Und klar beim coden geht nichts über probieren und testen.
Anbei Code von dem Zwischenbalken (zum Glück, kann man die Form in den Script aufnehmen);
Zu Beginn Grundcode von der Schraffur (für mich als Übersicht)
>>>>>> Kleiner Balken (Mitte zwischen den Vierecken) in der Breite
pen 97
Wo müsste ich jetzt via Parameter die Zahlen anpassen oder ändern, um eben ein Objekt zu erstellen, wo dieser Mittelbalken eine flexible Länge hat?
vor einer Woche - zuletzt bearbeitet vor einer Woche
1. Du musst nicht 2 Polys machen. Einer reicht. frameFill dann 1+2 und nicht einmal 1 und einmal 2.
2. Du muss den Schraffurstift nicht vorher setzen. Der ist schon im Befehl enthalten.
3. Fange das Polygon nicht versetzt (0.1) an, sondern setze den Nullpunkt an eine vernünftige stelle (Links unten?)
4. Verwende vielleicht eine einfachere Variante von poly2. Schau mal auf selfgdl, da ist das auch ganz gut beschrieben
5. Verwende keine absoluten Koordinaten, nur Variablen oder Parameter:
stiftV = 97
sts =1
breit1 = 0.4
dick1 = 0.4
sts = 1
poly2_b{5} 4, 3, 0, 3, stiftV, 0,
0, 0, 1, 0, 0, 1, 0,
0,0,sts,
breit1,0,sts,
breit1,dick1,sts,
0,dick1,-1
vor einer Woche - zuletzt bearbeitet vor einer Woche
und jetzt kommt der flexible Teil:
Du musst dich entscheiden, ob du die Flexibilität in die Koordinaten des Polys packst oder über Koordinatensystemtransformation gehst. Einfacher ist wahrscheinlich ersteres. Da kannst du auch ein ganz dünnes Brett bohren und die Gesamtabmessung (Breite des Objektes) für die Flexibilität nehmen. Dann brauchst du gar keinen beweglichen Fangpunkt.
breit2 = a-2*breit1
dick2 = 0.04
versatz2 = (dick1-dick2)/2
poly2_b{5} 4, 3, 0, 3, stiftV, 0,
0, 0, 1, 0, 0, 1, 0,
breit1,versatz2,sts,
breit1+breit2,versatz2,sts,
breit1+breit2,versatz2+dick2,sts,
breit1,versatz2+dick2,-1
add2 breit1+breit2,0
poly2_b{5} 4, 3, 0, 3, stiftV, 0,
0, 0, 1, 0, 0, 1, 0,
0,0,sts,
breit1,0,sts,
breit1,dick1,sts,
0,dick1,-1
del 1
Wenn du jetzt noch eine Zeile änderst, ist es ganz flexibel:
dick1 = b
Ich habe eben gesehen, dass bei deinen Koordinaten was nicht stimmen kann und ich auch einen Fehler im letzten Post habe. Ich korrigiere das mal eben. Und die Dicke der Abschnitte musst du so machen, wie du es haben willst.
vor einer Woche
Der "Trick" ist jeden Befehl im Handbuch nachlesen und jeden (!) Parameter verstehen. Dann weißt du eigentlich, was du machen musst. Die Verwendung von Variablen/Parametern ist wie in der Mathematik. Das sind Platzhalter für flexibel bestückbare Werte.
vor einer Woche
Guckst Du hier:
https://www.selfgdl.de/2d-elemente-2/eingabesteuerung/hotspot2/
Das mit den flexiblen Hotspots ist im Grunde ganz einfach. Vorher aber etwas Mathematik: jeder Hotspot ist ein ein-dimensionaler Vektor, d.h. er hat einen Startpunkt (Basispunkt, Typ=1), eine Richtung (Typ=3) und eine Länge (der Punkt, der sich bewegt, Typ=2).
Typ 1: Linear beweglicher Punkt: Basispunkt
Typ 2: Linear beweglicher Punkt: Beweglicher Punkt
Typ 3: Linear beweglicher Punkt: Referenzpunkt (immer verborgen)
Hier die entsprechende Grafik
Was zunächst etwas verwirrend ist, ist, dass der Richtungspunkt (Referenzpunkt) in die entgegengesetzte Richtung schaut. Das ist aber nur Konvention.
Nehmen wir an, Du willst einen Punkt auf der X-Achse verschieben und der Hotspot soll auf x=1 und y=0 liegen. Dann liegt (z.B.) der Basispunkt auf (0,0) und der Referenzpunkt (Richtung des Vektors) auf (-1,0). Der Referenzpunkt kann auch auf -10 oder auf -0.01, wichtig ist nur, dass er im Koordinatensystem links vom Basispunkt liegt (wenn der bewegliche Punkt rechts vom Basispunkt ist).
Beispiel: Du hast eine Variabe hotspotX vom Typ real (Gleitkommazahl). In dieser Variable soll die Position des Hotspots auf der X-Achse gespeichert und der Hotspot angezeigt werden. Die Befehlsfolge zur Erzeugung dieses Vektors ist dann:
Funktionsbeschreibung:
!HOTSPOT2 x, y [, ID_nummer [, parametername_edit [, typ [, parametername_palette [, "Eigene Beschreibung"]]]]]
ID_nummer=1
HOTSPOT2 0, 0, ID_Nummer, hotspotX, 1 !Basisfangpunkt,
ID_Nummer=ID_Nummer+1
HOTSPOT2 0, hotspotX, ID_Nummer, hotspotX, 2 !beweglicher Fangpunkt
ID_Nummer=ID_Nummer+1
HOTSPOT2 0,-1, ID_Nummer, hotspotX, 3 !Referenzrichtung
Die ID_Nummern zählst Du einfach stumpf hoch. Archicad merkt sich das intern. Du selbst musst das nicht wissen, welche ID's zu welchem Hotspot gehören. In der Hotspot-Funktion wird nämlich Deine Variable hotspotX geändert und nachdem die Routine abgelaufen ist, steht die X-Position in der Variable.
Wenn sich der selbe Punkt auch in die Y-Richtung bewegen soll, machst Du das Gleiche, nur für die Y-Achse.
Aber lies der oben verlinkten Artikel durch. Danach ist es Dir ganz bestimmt klar. Es ist nicht kompliziert, nur viel Aufwand. Den bekommst Du aber z.B. über ein Koordinaten-Array und eine Schleife gut in den Griff.