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

Masterscript - 2D - 3D - Sript

Hmooslechner
Rockstar
Womit ich mich bei meiner "Wald und Wiesen - Programmiererei" wirklich immer wieder "schwer tue":

Das Masterscript wird immer VOR dem 2D und 3D - Script ausgeführt.

Jedesmal neu.

Wenn man also im Masterscript 2D oder 3D - Anweisungen ausführen läßt - werden diese anstandslos "gemacht", aber das Problem liegt darin, dass die jeweils so ermittelten Variablen NICHT ins andere Script weitergegeben werden.

Es gibt Ausnahmen: Variablen mit editierbaren hotspots übergeben die Werte schon.

Es kommt also bei mir sehr oft vor, dass ich ganze Berechnungsfolgen sowohl im 2D und dann nochmals als Kopie im 3D ausführen muss - was eigentlich eine Laufzeitverschwendung ist.


Weiters problematisch:


Man kann 2D und 3D Koordinatentransfers auch im Masterscript ausführen lassen.

Leider aber werden 2D und 3D Koordinatentransfers unterschiedlich geschrieben - interpretiert.

im 2D: add2 x, y muss später oft mit del 1 zurückgenommen werden.

im 3D: addx x, addy y muss - ganz anders - später oft mit del 2 zurückgenommen werden.

Dabei geschieht genau das Selbe!

Wenn die Syntax in 2D und 3D gleich wäre, gäbe es keine Del-Anzahl - Fehler zwischen 2D und 3D. Eigentlich ist es nicht einzusehen, warum addx nicht im 2D funktionieren sollte... und addz im 2D nicht einfach mitgezählt aber ignoriert wird.)


Funktionsnamen im Masterscript:

Benannte Funktionen muss man im Masterscript etwas anders behandeln, als im 2D oder 3D - script.

Ich bin mittlerweile daran gewöhnt, gleich im 2D oder 3D-Script ein END: einzufügen, und drunter die einzelnen Unterprogrammteile anzuordnen und mit return zurückzuspringen. Dies hält den Programmablauf übersichtlicher.

Ein echtes End kann es im Masterscript nicht geben, denn dann würden 2D und 3D-script später nicht mehr ausgeführt werden.

Also setzt man eine manuelle Endmarke (nur irgendeinen Sprungnamen wie "masterend":) ans Ende des Masterscriptes und springt nach den allgemeinen Berechnungen dorthin weiter. Dann kann man dazwischen benannte Unterprogramme einbauen und mit return beenden und diese sind dann auch von 2D und 3D - script aus "greifbar". (einmal schreiben - 2D und 3D können es dann.)

Dies zu erkennen hat bei mir aber gedauert... grins.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
3 ANTWORTEN 3
Frank Beister
Advisor
Das Masterskript wird vor JEDEM anderen Skript ausgeführt. In dem Kontext der jeweiligen Laufzeit sind manche Befehle ohne Funktion und demnächst sogar gar nicht erlaubt und führen zu Fehlermeldungen. Dort sollten also NUR Befehle stehen, die in allen Kontexten verfügbar sind.

Den Workaround mit Unterprogrammen im Masterskript hast Du erkannt. Diese lassen sich übrigens auch aus den anderen Skripten heraus aufrufen. Nicht nur aus dem Master-Skript. Ist aber eine eher schwer nachzuvollziehende Art zu programmieren.

Stell Dir einfach vor, das Masterskript stünde am Anfang jedes anderen Skriptes.

Und: Die Befehlssyntax ist in jedem Kontext gleich, vorausgesetzt, der Befehl ist für den Kontext auch gedacht.
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
Hmooslechner
Rockstar
Und: Die Befehlssyntax ist in jedem Kontext gleich, vorausgesetzt, der Befehl ist für den Kontext auch gedacht.


Eben nicht - weil die Koordinatentransformationen in 2D und 3D unterschiedlich "zählen". Somit kann man den selben Text nicht für 2D und 3D benutzen. Wäre doch schön.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
Doch Heimo, ist sie. Transformationen, die gültig sind werden gezählt. Die im Kontext nicht erlaubten, nicht. Ist eigentlich einfach.

Ich glaube wir werden jetzt etwas fundamental, wenn wir Änderungswünsche an ADDx und ADDy haben. 😉