Wir schätzen Ihren Input! Bitte nehmen Sie an der Umfrage zu Archicad 28 Startbildschirm und Lerninhalte/Schnell-Tutorials teil
vor 4 Wochen
Hallo zusammen
ich würde gerne ein Objekt (2D) erstellen, welches je nach Modelldarstellung oder frei wählbar (Komplett, Mittel, Einfach) dargestellt wird.
Im Objekt gibt es 3 Zeichnungen auf 3 Layern (Fragmenten?) verteilt.
Diese rufe ich einfach ab. Wie kann ich die Modelldarstellung einarbeiten? Sobald "Nach Modelldarstellung" im Objekt ausgewählt wird, muss die Darstellung von ausserhalb des Objektes abgerufen werden. Das Objekt sollte funktionieren wie das Waschbecken von Archicad (siehe Bild):
Ich habe dazu folgendes Video geschaut:
029 Archicad GDL Using Model View Options in Your Objects
Nur es klappt irgendwie nicht... Mein 2D Skript sah bisher immer recht simple aus:
Operating system used: Mac Intel-based
vor 4 Wochen
Du musst die Modelldarstellung 'fragen', wie sie gerade eingestellt ist.
Das (DE)-Waschbecken ruft ein weiteres Macro auf, in dem das hier zu finden ist:
if (iDetlevel2D = DETLEVEL_2D_MVO) then ! by MVO
_reqDetlevel2D = 0
_success = LIBRARYGLOBAL ("LibraryGlobals13", "iDetlevelMVO2D", _reqDetlevel2D)
if (_success > 0) then
_iDetlevel2D = _reqDetlevel2D
else
_iDetlevel2D = DETLEVEL_2D_DETAILED
endif
...
Dabei ist 'LIBRARYGLOBAL ("LibraryGlobals13", "iDetlevelMVO2D", _reqDetlevel2D)' die entscheidende Abfrage.
'LibraryGlobals13' eine weitere GDL, nämlich die entsprechende Seite im Modelldarstellungsdialog.
Darin gibt es einen 'iDetlevel...'-Parameter; das kleine i vorne sagt, dass es sich (sehr wahrscheinlich :)) um eine Ganzzahl handelt.
Der wird gelesen und dann in einem eigenen Parameter '_reqDetlevel2D' gespeichert.
Wenn Du den Datentyp Deines "abc"-Parameters auf Ganzzahl umstellst und in der obigen Abfrage statt '_req...' einsetzt, und dann noch diese Liste (Achtung; DE-Waschbecken!) entschlüsselst, kommst du - glaube ich - weiter:
! const values for iDetlevel2D:
DETLEVEL_2D_MVO = 1
DETLEVEL_2D_SCSENS = 2
DETLEVEL_2D_DETAILED = 3
DETLEVEL_2D_SIMPLE = 4
DETLEVEL_2D_DRAFT = 5
DETLEVEL_2D_SYMBOLIC = 6
vor 4 Wochen
Lieber Stefan
erst einmal vielen Dank für deine ausführliche Antwort. Ich konnte den Datentyp des Parameters auf Ganzzahl umstellen. Im Parameterskript
habe ich die Werte wie folgt hinterlegt:
if (iDetlevel2D = DETLEVEL_2D_MVO) then ! by MVO
_reqDetlevel2D = 0
_success = LIBRARYGLOBAL ("LibraryGlobals13", "iDetlevelMVO2D", _reqDetlevel2D)
if (_success > 0) then
_iDetlevel2D = _reqDetlevel2D
else
_iDetlevel2D = DETLEVEL_2D_DETAILED
endif
...
Dieses Skript führt in meinem 2D-Skript zu einem Fehler und das Objekt wird als schwarzer Punkt (fehlendes Objekt) im Grundriss angezeigt
! const values for iDetlevel2D:
DETLEVEL_2D_MVO = 1
DETLEVEL_2D_SCSENS = 2
DETLEVEL_2D_DETAILED = 3
DETLEVEL_2D_SIMPLE = 4
DETLEVEL_2D_DRAFT = 5
DETLEVEL_2D_SYMBOLIC = 6
Ich weiss nicht genau was dieses Skript macht? Ich habe gesehen, dass es im Objekt "Handwaschbecken" im Masterskript so geschrieben steht. Die Parameter werden aber im Parameterskript definiert oder verstehe ich etwas falsch?
Wie ich die Modelldarstellung und im besten Fall auch noch den Massstab (massstabsabhängig) einbaue, ist mir leider trotz deiner Mühen noch nicht ganz klar.
Nach meinem Verständnis müsste es (in deutsch) so funktionieren:
Sobald ich unter "2D-Detaillierungsgrad" "nach Modelldarstellung" wähle, fragt das Objekt in der Modelldarstellung den Detaillierungsgrad der Objekte ab. Als Antwort kommt eine 3 (komplett), 4 (mittel) oder 5 (einfach) zurück und im 2D Skript wird diese Zahl für den Fragment2 Befehl eingesetzt.
Beste Grüsse & danke für deine Hilfe
vor 4 Wochen
Hei, mal rückwärts:
Dein Deutsch-Verständnis schein korrekt, ergänzend noch: Wenn die Abfrage fehlschlägt, wird 'DETLEVEL_2D_DETAILED' genutzt.
Das 'const values for iDetlevel2D:'-Skript macht nichts anderes, als Zeichenfolgen in Ganzzahlen zu übersetzen, das ist schneller.
Fehler - bekommst Du denn eine Meldung? Was passiert, wenn Du auf 'Script prüfen' klickst?
Damit Deine ganze Chose ans Laufen kommt, müssen ja erstmal beide Teile für sich funktionieren, dann kann man die beiden verheiraten.
- die Darstellung, gesteuert über Deine Auswahlliste
- die Abfrage der Modelldarstellung
Bei ersterem warst Du - glaube ich - ja schon fertig. Letzteres kannst Du z.B. so prüfen:
- im Masterscript direkt hinter die LIBRARYGLOBAL-Abfrage text2 0, 0, _reqDetlevel2D
- alles dahinter ggf. auskommentieren und speichern
- in der Modelldarstellung hin- und herschalten
Dann sollte eine 2, 3 oder 4 auftauchen.
vor 3 Wochen
Hallo Stefan
Vielen Dank für deine Antwort. Kannst du mir angeben, welcher Code in welches Skript gehört?
Ich verliere da leider den Überblick. Das Objekt sieht wie folgt aus:
Die Abfrage der Modelldarstellung führt dazu, dass kein Objekt mehr angezeigt wird.
Ich danke dir für deine Hilfe.
Beste Grüsse
vor 3 Wochen
OT: Stelle statt Screenshots lieber CODE ein. Den können wir kopieren, korrigieren und zurück posten. Fürs nächste mal.
vor 3 Wochen
Uähh... Montag morgen...
Die Fehlermeldung im Master solltest Du selbst enschlüsseln können.
Die Fehlermeldung im 2D-Script ist natürlich bescheuert, 'Zeile 0' scheint der verzweifelte Versuch von Archicad zu sein, auf etwas vor Beginn des 2D-Scripts hinzuweisen... 🤣
Mal so aus der Hüfte...
Im Master:
- alle Auskommentierungen wieder einkommentieren
- die Kontroll-Textausgabe in Zeile 16 schieben, also hinter die LIBRARYGLOBAL-Abfrage
Im 2D-Script:
- Unterstriche vor 'iDetLevel2D' setzen, also zu '_iDetLevel2D' ändern
Was dann m.E. noch fehlt ist der Teil "Anwenderwunsch: NICHT nach MVO"...