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

Glasfassaden-Matrix

Hmooslechner
Moderator
Hier beginne ich einmal Wild ins Blaue...

Zuerst überlege ich mir meine Parameter
Dann erstelle ich im 3D-Scriptfenster ein ungefähres Vorgehen
Dann kommt die 2D-Darstellung an die Reihe.

Hier das Bild des Vorgehens einmal so voraus.. <img src="http://www.salzburg.co.at/hmooslechner/images/GlasMatrix001a.gif" alt="" />

Beachtet die Kommentare im GDL-Script!
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
14 ANTWORTEN 14
Hmooslechner
Moderator
Nächster Schritt:
Hier habe ich gegenüber der vorherigen Version die Zeilenfunktion eingearbeitet
Dabei ist zu beachten, daß man irgendeine Funktion einbauen muß, welche verhindert,
daß zu viele Kämpfer-Spalten erstellt werden.
Ich habe zur Erläuterung mit einer If-Schleife die letzte überflüssige Spalte verhindert.
<img src="http://www.salzburg.co.at/hmooslechner/images/GlasMatrix001b.gif" alt="" />

Zwischendurch wird eine neue Variable eingeführt - Kämpfertiefe (extra)

Dann kann man mit einer extra Funktion die Füllungen definieren.
Hier könnte eine Programm-Verzweigung zweckmäßig sein - goto - Anweisung
von einer If-Funktion abhängig - von der gewünschten Füllung abhängig
aus der Matrix ausgelesen...
Jetzt gehts für mich ins Neuland..
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Frage:
warum kann ich in einer Matrixvariable im Index nicht mit GDL-Variablenm arbeiten?

zB:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">

For n=0 to Spalten
SummeSpalten=SummeSpalten+BSpalten[1][n] !n als Zählervariable
next n

AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Da ich den index einer Matrixvariable zur Spaltenbreiteneingabe nicht nutzen kann - hier eine Version,bei der die Spaltenbreiten des Elementes mittels extra Parameter angegeben werden.
wird A auf 0 gesetzt - werden die eingegebenen Spaltenbreiten zur Gesamtbreite Summiert
wird A angegeben, werden die Spaltenbreiten
prozentuell auf A umgerechnet
es kann auch gleichmäßig aufgeteilt werden - Parameter glm
<img src="http://www.salzburg.co.at/hmooslechner/images/GlasMatrix001c.gif" alt="" />

und hier noch der gesamte 3D-Code:
beachtet hier die Umrechnung der Spaltenbreiten am Anfang der Schleife!

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> !!Glsafassadenbauteil mit einfachsten Grundelementen zum Forumskurs 5/2002 Heimo Mooslechner


!Berechnung verschiedener Spaltenbreiten - Summenbildung der Spaltenbreiten
if Spalten=1 then SpSumme=s0
if Spalten=2 then SpSumme=s0+s1
if Spalten=3 then SpSumme=s0+s1+s2
if Spalten=4 then SpSumme=s0+s1+s2+s3
if Spalten=5 then SpSumme=s0+s1+s2+s3+s4
if Spalten=6 then SpSumme=s0+s1+s2+s3+s4+s5
if Spalten=7 then SpSumme=s0+s1+s2+s3+s4+s5+s6
if Spalten=8 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7
if Spalten=9 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7+s8
if Spalten=10 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7+s8+s9

if A=0 then

else !Falls A nicht 0, dann Umrechnung auf %-Werte
SPprozent=a/SpSumme
s0=SPprozent*s0
s1=SPprozent*s1
s2=SPprozent*s2
s3=SPprozent*s3
s4=SPprozent*s4
s5=SPprozent*s5
s6=SPprozent*s6
s7=SPprozent*s7
s8=SPprozent*s8
s9=SPprozent*s9
endif

!!Nochmalige Spaltensumme falls sich die geändert hat...
if Spalten=1 then SpSumme=s0
if Spalten=2 then SpSumme=s0+s1
if Spalten=3 then SpSumme=s0+s1+s2
if Spalten=4 then SpSumme=s0+s1+s2+s3
if Spalten=5 then SpSumme=s0+s1+s2+s3+s4
if Spalten=6 then SpSumme=s0+s1+s2+s3+s4+s5
if Spalten=7 then SpSumme=s0+s1+s2+s3+s4+s5+s6
if Spalten=8 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7
if Spalten=9 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7+s8
if Spalten=10 then SpSumme=s0+s1+s2+s3+s4+s5+s6+s7+s8+s9




i=0 ! Startschleife mit Stehern
for i = 0 to Spalten
if glm=1 then !
kbr=((SpSumme-BSteher)/Spalten)-Bsteher
else
if i=0 then kbr= S0-Bsteher
if i=1 then kbr= S1-Bsteher
if i=2 then kbr= S2-Bsteher
if i=3 then kbr= S3-Bsteher
if i=4 then kbr= S4-Bsteher
if i=5 then kbr= S5-Bsteher
if i=6 then kbr= S6-Bsteher
if i=7 then kbr= S7-Bsteher
if i=8 then kbr= S8-Bsteher
if i=9 then kbr= S9-Bsteher

endif
Block BSteher, Tsteher, EH ! Steher Breite, Tiefe, Elementhöhe

for z= 0 to Zeilen ! Beginn Zeilen
if i<Spalten then ! letzte Kämpferspalte verhindern
addx BSteher ! um Steherbreit nach X
Block kbr, Tsteher, Bsteher ! Kämpfer
del 1 ! zurück um Steherbreite
else
endif ! Ende letzte Zeilenreihe
addz (EH-Bsteher)/Zeilen ! Kämpferhöhe = hier Steherbreite
next z
del Zeilen+1 ! Ende Zeilen, Koordinaten-Stack zurücksetzten
Spaltenbreite=(SpSumme-BSteher)/Spalten ! (A-BSteher)=Gesamtbreite - 1x Steherbreite / Spaltenanzahl
!Breitenfaktor=
if glm=1 then
addx Spaltenbreite ! Koordinaten nach rechts schieben - gleichmäßig
else
if i=0 then addx S0
if i=1 then addx S1
if i=2 then addx S2
if i=3 then addx S3
if i=4 then addx S4
if i=5 then addx S5
if i=6 then addx S6
if i=7 then addx S7
if i=8 then addx S8
if i=9 then addx S9
if i=10 then addx S10
endif




next i ! Ende Startschleife Steher
del Spalten + 1 ! Koordinatenversatz zurücksetzen


Liest das eigentlich jemand?
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
David Kehr
Graphisoft
Graphisoft
ja...ich
Hmooslechner
Moderator
Eine kurze Zusammenfassung bisher:

Zuerst habe ich mir überlegt, welche Parameter ich für das Teil brauchen könnte un diese im Parameterfenster angelegt.

Dann habe ich begonnen, mit dem einfachsten 3D-Bauteil eine Reihe zu bilden - den Stehern des realen Bauteiles entsprechend. for i=1 to..

Innerhalb dieser Reihen-Schleife habe ich die Höhenrasterung ebenfalls als Grob-Gerüst eingebau - in gleicher Weise mit for.

Nun mußte ich - um verschiedene Abstände der Spalten erstellen zu können - neue Parameter für die Spaltenbreiten festlegen. Diese werden innerhalb der Spaltenschleife mit dem Spaltenzähler als Breite der Spalte übergeben.

Nun wäre es an Euch,
die selbe Funktion für die Zeilenhöhen-Anderung zu programmieren - also - Parameter festlegen, Zähler der Zeilen-schleife nutzen, um den nächsten Parameter auszulesen und zur Höhe der jeweiligen Zeile zu definieren.

Viel Spaß!
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
Hallo Heimo,
bei der GlasMatrix verstehe ich nicht ganz, welchem Zweck die als "Matrix", "Bspalten", "Hzeilen" bezeichneten Parameter dienen.
Ich vermute, Du willst sie bei einer späteren, noch nicht gezeigten Erweiterung des Objektes verwenden?
Ich halte die Verwendung einer Auswahlliste für die Entscheidung, ob man "A" festlegt, oder ob sich eine Autosumme ergeben soll für anwenderfreundlicher als die Verwendung von einem Wert von 0 für Parameter A; ich brauchte einige Zeit, um dahinter zu kommen, wie es (mit A=0)geht.

Gruß Dodo
Hmooslechner
Moderator
Hallo Dodo!

Endlich wer, der sich doch dafür interessiert... 🙂

Zur Frage:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> ....welchem Zweck die als "Matrix", "Bspalten", "Hzeilen" bezeichneten Parameter dienen.
Ich vermute, Du willst sie bei einer späteren, noch nicht gezeigten Erweiterung des Objektes verwenden?
Genau - Aber ich fand bisher noch keine Möglichkeiten, einem Matrixparameter benannte Parameter zuzuordnen

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> For n=0 to Spalten
SummeSpalten=SummeSpalten+BSpalten[1][n] !n als Zählervariablenext n Die Entscheidung - einen Parameter mit 0 abzufragen und dafür andere schon gesetzte Parameter zur Berechnung heranzuziehen kam mir nur aus dem Grund, weil ich ein fauler Mensch bin. Ich habe lange nur so für den Eigenbedarf dahinprogrammiert und da macht man sichs dann oft leicht..., weil man ja eh weiß wies funktioniert. Für andere zu programmieren - nun - da muß ich wohl umdenken :dozey:
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
Hallo Heimo,
ich hatte vor kurzem auch gerade so eine "Pfosten-Riegel-Fassade" mit Matrix und insgesamt 3 Wertetabellen (arrays) erstellt.

Die Wertetabellen sind extrem hilfreich und vereinfachen das 3D-Script enorm. Man kann die Parameter direkt in die Wertetabellen eingeben, was allerdings meiner Meinung nach etwas unkomfortabel ist. Besser man gibt die Parameter in einem User Interface ein, was für den Anwender am einfachsten zu kapieren ist.

Damit das klappt, muss man mit dem PARAMETERS-Befehl die einzelnen Werte der Wertetabelle mit den Parametern der Einzellängen bzw. Einzelhöhen belegen.

Ich habe hier mal ein Script, wie so etwas vom Prinzip her funktioniert, beigefügt.

Mit der Wertetabelle "matrix" ist man in der Lage für jedes einzelne Feld zu definieren, ob man dort eine Glasfüllung, ein Paneel, ein Fenster, eine Tür oder was sonst haben möchte.

Hier nun die Parameterliste:

<img src="http://www.gdl-talk.de/Mooslechner_PR_Para.gif" alt="" />

Und die Scripte:

! Pfosten-Riegel-Konstruktion
! Parameter-Script
!##################################################

VALUES "anz" 1,2,3,4,5,6,7,8,9
VALUES "hit" 1,2,3,4,5,6,7,8,9

PARAMETERS A=laenge+pb
PARAMETERS b=h

PARAMETERS feldb[1][1]=0
PARAMETERS feldb[1][2]=b1
PARAMETERS feldb[1][3]=b2
PARAMETERS feldb[1][4]=b3
PARAMETERS feldb[1][5]=b4
PARAMETERS feldb[1][6]=b5
PARAMETERS feldb[1][7]=b6
PARAMETERS feldb[1][8]=b7
PARAMETERS feldb[1][9]=b8
PARAMETERS feldb[1][10]=b9

PARAMETERS feldoch[1]=0
PARAMETERS feldoch[2]=h1
PARAMETERS feldoch[3]=h2
PARAMETERS feldoch[4]=h3
PARAMETERS feldoch[5]=h4
PARAMETERS feldoch[6]=h5
PARAMETERS feldoch[7]=h6
PARAMETERS feldoch[8]=h7
PARAMETERS feldoch[9]=h8
PARAMETERS feldoch[10]=h9

! Pfosten-Riegel-Konstruktion
! Master-Script
!##################################################

! Ermittlung der Länge des Bauteils

IF anz>1 THEN
c2=1
IF anz>2 THEN
c3=1
IF anz>3 THEN
c4=1
IF anz>4 THEN
c5=1
IF anz>5 THEN
c6=1
IF anz>6 THEN
c7=1
IF anz>7 THEN
c8=1
IF anz>8 THEN
c9=1
IF anz>9 THEN
c10=1
ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:

laenge=b1+c2*b2+c3*b3+c4*b4+c5*b5+c6*b6+c7*b7+c8*b8+c9*b9+c10*b10 !Länge

!-------------------------------------

!Ermittlung der Höhe des Bauteils

IF hit>1 THEN
d2=1
IF hit>2 THEN
d3=1
IF hit>3 THEN
d4=1
IF hit>4 THEN
d5=1
IF hit>5 THEN
d6=1
IF hit>6 THEN
d7=1
IF hit>7 THEN
d8=1
IF hit>8 THEN
d9=1
IF hit>9 THEN
d10=1
ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF:ENDIF

h=h1+h2*d2+h3*d3+h4*d4+h5*d5+h6*d6+h7*d7+h8*d8+h9*d9+h10*d10+rb !Höhe

! Pfosten-Riegel-Konstruktion
! 3D-Script
!##################################################

FOR i=1 TO anz
ADDx feldb[1]
achs=feldb[1][i+1]
GOSUB 10: !Pfosten

FOR k=1 TO hit+1
ADDz feldoch[k]
GOSUB 20
NEXT k
DEL hit+1

NEXT i
DEL anz

ADDx laenge
GOSUB 10:
DEL 1

END:
!'''''''''''''''''''''''''''''''''''''''''''''''''''

10: ! Pfosten

MATERIAL pmat

PRISM 4,h,
0,0,
0,pd,
pb,pd,
pb,0

RETURN

!----------

20: !Riegel

MATERIAL pmat

PRISM 4,rb,
pb,0,
pb,rd,
achs,rd,
achs,0

RETURN

Gruß Dodo
Anonymous
Nicht anwendbar
Original erstellt von hmooslechner:
Liest das eigentlich jemand?

Ich lese die Beiträge sehr regelmässig. Leider fehlt mir die Zeit dazu, alles auszuprobieren und meinen Senf dazu zu geben. Wer weis ob de3r überhaupt gut wäre.

Aber bitte weiter so.

Danke Helmut

Keine Antwort gefunden?

Andere Beiträge
im Board ansehen

Zurück zum Board

Neueste Lösungen durchsuchen

Akzeptierte Lösungen zeigen

Eine neue Diskussion starten!

Neues Thema erstellen