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
GELÖST!

Objekt Mass anpassen - Nachfrage für 2D und 3D Script

Andreas81ch
Advisor

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).

 

Bib GDL Script Nachfrage Mass anpassen.png

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!

 

ArchiCAD v6.5 - 28 (CHE Swiss Edition) - macOS / WIN (Switzerland / Schweiz)
Workstation office specs: mac OS sequoia 15.5, Apple M2 Max, 64 GB RAM
1 AKZEPTIERTE LÖSUNG

Akzeptierte Lösungen
Lösung

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.

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

Lösung in ursprünglichem Beitrag anzeigen

10 ANTWORTEN 10
Andreas81ch
Advisor

Resp. flexibles Mass zwischen Mass A und Mass B (beim vorherigen Bild Beispiel).

ArchiCAD v6.5 - 28 (CHE Swiss Edition) - macOS / WIN (Switzerland / Schweiz)
Workstation office specs: mac OS sequoia 15.5, Apple M2 Max, 64 GB RAM
Frank Beister
Moderator

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."

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

Guten Morgen,

Ich habe schon viele Tutoriales und Videos gesehen, aber es macht bei mir noch nicht richtig "klick"

 

Bib GDL Script Nachfrage Mass anpassen2.png

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...

 

ArchiCAD v6.5 - 28 (CHE Swiss Edition) - macOS / WIN (Switzerland / Schweiz)
Workstation office specs: mac OS sequoia 15.5, Apple M2 Max, 64 GB RAM

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?

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

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)

 

poly2_b{5} n, frameFill, fillCategory, distortionFlags,
fillPen, fillBackgroundPen,
fillOrigoX, fillOrigoY, fillAngle,
mxx, mxy, myx, myy,
gradientInnerRadius,
x1, y1, s1,
...,
xn, yn, sn



>>>>>> Kleiner Balken (Mitte zwischen den Vierecken) in der Breite

 

pen 97
fill "Nur Vordergrund-Stift"
poly2_b{5} 5, 2, 0, 3, 97, 0,
0, 0, 1, 0, 0, 1, 0,
0.1, 0.07, 1,
0.1, 0.03, 1,
0.5, 0.03, 1,
0.5, 0.07, 1,
0.1, 0.07, 1
pen 1
set line_type "Volllinie"
poly2_b{5} 5, 1, 0, 3, 1, 0,
0, 0, 1, 0, 0, 1, 0,
0.1, 0.07, 1,
0.5, 0.07, 1,
0.5, 0.03, 1,
0.1, 0.03, 1,
0.1, 0.07, 1

 

>>>>>>>>> grosser Balken (Mitte zwischen den Vierecken) in der Breite
 


pen 97

fill "Nur Vordergrund-Stift"
poly2_b{5} 5, 2, 0, 3, 97, 0,
0, 0, 1, 0, 0, 1, 0,
0.1, 0.07, 1,
0.1, 0.03, 1,
0.7, 0.03, 1,
0.7, 0.07, 1,
0.1, 0.07, 1
pen 1
set line_type "Volllinie"
poly2_b{5} 5, 1, 0, 3, 1, 0,
0, 0, 1, 0, 0, 1, 0,
0.1, 0.07, 1,
0.7, 0.07, 1,
0.7, 0.03, 1,
0.1, 0.03, 1,
0.1, 0.07, 1


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? 

ArchiCAD v6.5 - 28 (CHE Swiss Edition) - macOS / WIN (Switzerland / Schweiz)
Workstation office specs: mac OS sequoia 15.5, Apple M2 Max, 64 GB RAM

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
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
Lösung

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.

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
Moderator

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.

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
torben_wadlinger
Virtuoso

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

torben_wadlinger_0-1763985245421.png

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.