30 Zeilen effektiv erforderlicher Quelltext eines GDL-Laien um die Geschosse aus einer Zeichenfolge mit von bis rauszukitzeln. Wenn da ein/e richtige/r Programmierer/in dran sitzt, sind das weniger als die Hälfte an Zeilen und sicher auch effektiver im Durchrechnen.
Damit kann man steuern, ob ein Objekt bei x Gebäuden mit unterschiedlichen Geschosshöhen nur in den Geschossen eines Gebäudes angezeigt wird.
Maßstab 1:10 in AC.
Gruß Mario
!!!!! Folgende Roputine holt aus der beliebig langen Zeichenkette die Zahlen raus
!!!!! Das sollen die Geschosse werden
TEXT2 0,2.25, "Routine holt Zahlen aus mit Kommas getrennter Zeichenkette"
TEXT2 0,2.15, "Das Zeichen '|' steht für VON BIS. Freizeichen sind erlaubt aber wirkungslos"
TEXT2 0,2.05, "Reiehnfolge der Geschossangaben nebensächslich. Bei VON BIS Angaben muss der kleinere Wert links stehen"
TEXT2 0,1.95, "viele Geschosse = viele Schleifendurchläufe = längere Aufbauzeit"
TEXT2 0,1.75, "Zeichnet Kreis, wenn das aktuelle Geschoss mit einem aus der Liste "
TEXT2 0,1.65, "übereinstimmt. Einstellung für Objekt: AUF ALLEN GESCHOSSEN ANZEIGEN"
TEXT2 0,1.55, "TEXT2-Ausgaben werden immer angezeigt. Dienen dem Verständnis."
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!! Hier die Geschosse eingeben
darstInGeschoss = "-32, -22|-18,01,55| 66,75"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!! Es muss ein Komma am ende stehen, um Auswertung korrekt abzuschließen
darstInGeschoss = darstInGeschoss + ","
TEXT2 0.0,1.0, darstInGeschoss
DIM welcheGeschosse[]
DIM welcheGeschosseInteger[]
i = 1 !!! Schleifenzähler
helpi = 0 !!!! kann aus Routine entfernt werden, ist nur für die TEXT2-Positionierung erforderlich
DO
stelleDesKommas = STRSTR (darstInGeschoss, ",")
TEXT2 0.00,0.1*i-helpi, stelleDesKommas
welcheGeschosse = STRSUB(darstInGeschoss,0,stelleDesKommas-1)
TEXT2 0.75,0.1*i-helpi, welcheGeschosse
!!!! Wenn ein "|" enthalten ist, Ergänzung der Geschosse dazwischen
stelleDesVertStri = STRSTR (welcheGeschosse, "|")
TEXT2 1.00,0.1*i-helpi, stelleDesVertStri !!! ist ein INTEGER
IF stelleDesVertStri THEN
vonGeschoss = STRSUB(welcheGeschosse,0,stelleDesVertStri-1)
hlp = SPLIT(vonGeschoss, "%n", vonGeschoss) !!! mach vonGeschoss zu einem INTEGER
bisGeschoss = STRSUB(welcheGeschosse,stelleDesVertStri+1,100) !!! 100 Stellen reichen auf in Abu Dhabi
hlp = SPLIT(bisGeschoss, "%n", bisGeschoss) !!! mach bisGeschoss zu einem INTEGER
differenz = bisGeschoss - vonGeschoss
TEXT2 1.10,0.1*i-helpi, vonGeschoss
TEXT2 1.25,0.1*i-helpi, bisGeschoss
TEXT2 1.50,0.1*i-helpi, differenz
TEXT2 1.75,0.1*i-helpi, i
welcheGeschosseInteger=vonGeschoss
FOR j = 1 TO differenz
i = i + 1
helpi = helpi +0.10
welcheGeschosseInteger=vonGeschoss+j
NEXT j
ELSE
!!! macht Geschosse ohne "|" zu einem INTEGER. Somit liegen alle Geschosse als INTEGER vor
hlp = SPLIT(welcheGeschosse, "%n", welcheGeschosseInteger)
TEXT2 1.75,0.1*i-helpi, i
ENDIF
restString = STRSUB(darstInGeschoss,stelleDesKommas,1000)
darstInGeschoss = restString
TEXT2 2.25,0.1*i-helpi, restString
stelleDesKommas = STRSTR(darstInGeschoss, ",") !!! Hier wird das führende Komma eliminiert
restString = STRSUB(darstInGeschoss,stelleDesKommas+1,100)
darstInGeschoss = restString
TEXT2 3.00,0.1*i-helpi, restString
exitflag = SPLIT(restString, "%n", xy)
i = i + 1
WHILE exitflag <> 0
i = i-1 !!! um den letzten Durchlauf zurücksetzen
TEXT2 0,-0.4, "Ausgabe der Zahlen als INTEGER"
FOR j = 1 TO i
TEXT2 0.2*j-0.2,-0.5, welcheGeschosseInteger[j]
NEXT j
!!!!!!!!! Kreis zeichnen wenn aktuelles Geschoss in darstInGeschoss enthalten ist
hlp = REQUEST ("STORY", "", aktuelleGeschossNummer)
FOR j = 1 TO i
IF aktuelleGeschossNummer = welcheGeschosseInteger[j] THEN
CIRCLE2 0,0,1
ENDIF
NEXT j
END: !!!!!!!!!! END END END END