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!

GDL-Objekte werden ungewollt zu Projektursprung versetzt

Mr Valdez
Participant

Hallo ins Forum,
ich habe eine Frage zum Skripten mit GDL.

 

Ich habe angefangen, bei der Planung für den Deckenspiegel mit selbst erstellten 2D-Objekten als Symbole für die Leuchten etc. zu arbeiten und möchte diese auch den anderen in meinem Büro zur Verfügung stellen.

 

Weil nicht alle Lust haben werden, sich mit GDL auseinanderzusetzen (/herumzuschlagen), habe ich jeweils nur einen Hotspot in die Mitte gesetzt. So wollte ich sicherstellen, dass das Objekt (nur) über die Einstellungen geändert und vor allem die Größe angepasst werden kann, ohne dass man erst ins Skript wechseln muss, um die Parameter zu entsperren. Trotzdem wäre sichergestellt, dass nicht beim Verschieben o.ä. versehentlich die Größe geändert wird.
Soviel als Hintergrund zu meiner Frage.

Das Problem ist, dass manche Objekte nach Veränderungen auf den Projektursprung vesetzt werden. Konkret: platziere ich z.B. eine Leuchte L1, öffne das Einstellungsmenü und wandle sie über die Objektbibliothek in eine Leuchte L15 um, so springt diese Leuchte nach Übernehmen der Änderung von ihrer eigentlichen Position an den Projektursprung. Ich bin schon so weit, dass ich das Problem behebe, wenn ich doch wieder mehrere Hotspots platziere.
Gleichzeitig habe ich aber eine weitere Leucht L29, die im Gegensatz zu L15 (quadratisch) kreisförmig ist, bei der das Problem nicht auftritt. Das verwundert mich sehr.
Die Parameter sind in beiden Fällen (bis auf die unterschiedliche Größe) gleich, und auch im Skript finde weder ich noch ChatGPT eine entscheidende Abweichung jenseits der geometrischen Unterschiede.

 

Skript L15:

parameters  A = 0.62

drawindex   10
pen         pen_fix
!hotspot2 -A/2,-A/2
!hotspot2  A/2,-A/2
!hotspot2 -A/2, A/2
!hotspot2  A/2, A/2

hotspot2 0, 0

pen         pen_sym
set line_type line_full
line_property 0

rect2 -A/2, -A/2, A/2, A/2
 
!Schrift
    define style{2} "Arial 2 mm" "Arial", 2, 0

    paragraph   "para1" 1, 0, 0, 0, 1
        set style "Arial 2 mm"
            "L15"
    endparagraph

    textblock   "tblock1" 0, 1, 0, 0.75, 1, 1,
            "para1"

    richtext2   -A/2, -A/2, "tblock1"

rot2 45

line2 -0.1, 0, 0.1, 0
line2 0, -0.1, 0, 0.1


Skript L29:

parameters  A = 0.202


drawindex 10
pen pen_fix

hotspot2 0, 0

pen pen_sym
set line_type line_full
line_property 0

circle2  0, 0, A/2

!Schrift
    define style{2} "Arial 2 mm"    "Arial", 2, 0

    paragraph   "para1" 1, 0, 0, 0, 1
        set style "Arial 2 mm"
        "L29"
    endparagraph

    textblock   "tblock1"   0, 1, 0, 0.75, 1, 1,
        "para1"

    richtext2   -A/2, -A/2, "tblock1"

rot2 45
line2 -0.1, 0, 0.1, 0
line2 0, -0.1, 0, 0.1

 

Danke für eure Hilfe. Vielleicht noch ein Hinweis: ich habe mir das GDL-Programmieren erst vor ein paar Wochen angefangen beizubringen und keine Vorerfahrungen in Coding. Solange ich keine ganz groben Fehler gemacht habe oder die Nachvollziehbarkeit für euch zu stark eingeschränkt ist, seid bitte gnädig mit mir.

 

Liebe Grüße
Mr Valdez

3 AKZEPTIERTE LÖSUNGEN

Akzeptierte Lösungen
Lösung
archig
Advisor

Ich kann es gerade nicht austesten, daher nur Blindflug 😉

In welchem Skript bist du denn ?  Das ist relevant, weil nicht jeder Befehl überall funktioniert. 

  • Im Parameterskript sollte der Parameters Befehl stehen: parameters  A 0.202 
  • Im 2D Skript der Rest.
  • Die übrigen Skriptfenster sollten leer sein. 
  • Das Fenster 2D-Symbol sollte auch leer sein, also alle Ebenen 1-16 sichtbar machen, und prüfen, ob da noch irgendwo was ist; ggfs löschen
  • Den hotspot2 00 Befehl solltest du um den Index erweitern, z.B. so: hotspot2 0, 0, 10001.

Probier mal, ob es so klappt

ArchiCAD 25 / Windows 10

Lösung in ursprünglichem Beitrag anzeigen

Lösung

Das ist nicht falsch was du da gemacht hast, aber deswegen nicht weniger trickreich.

  • AC versucht aus Performancegründen die Größe des Objektes zu ermitteln. Für Z gibt es dazu zwei feste (blaue) Parameter, für X und Y nimmt es A und B. Ausgehend von 0/0 (!).
  • Dass 0/0 bei dir in der Mitte ist und dein Objekt von -a/2 / -b/2 zu a/2 / b/2 geht wünscht sich AC nicht, sollte aber prinzipiell gehen.
  • Definierst du KEINE Hotspots im Skript setzt AC zumindest einen an 0/0 oder, wenn in den Objektoptionen aktiviert automatisch an den 4 Ecken von a/b. 
  • Wenn du Hotspots definierst, sollten sie immer eine durchgängige, eindeutige ID haben. Am besten erzeugt in immer der gleichen Reihenfolge
  • Im Einstellungsdialog des Objektwerkzeuges kannst du in der 2D Vorschau DEN Hotspot festlegen (klick), der der Absetzpunkt des Objektes sein soll und der lageneutral bei Veränderungen bleiben soll. Ob das durchgängig konsequent funktioniert, kann ich dir nicht sagen, aber DAS wäre ein möglicher Grund für dein Problem.

Ich würde zur Sicherheit und wegen der Sauberkeit es auch so codieren:

MASTERSKRIPT:
A = 0.202
B = A

PARAMETERSKRIPT:
PARAMETERS A=A, B=B
LOCK "A", "B"
HIDEPARAMETER "B"

 

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

Lösung
Mr Valdez
Participant

Ich habe das Problem jetzt 'gelöst', auch wenn ich die genaue Ursache nicht kenne: das Problem betrifft nur bereits platzierte Objekte, in deren Skript ich dann nochmal etwas verändert habe. Lösche ich das bestehende Objekt aus dem Modell und platziere es aus der Bibliothek neu, habe ich das Problem nicht mehr. Teilweise hat es auch gereicht, in den Objekteinstellungen (nicht dem Editor) die Größe einmal zu verändern.

Es scheint also tatsächlich nicht am Skript gelegen zu haben, sondern nur durch die Überschreibung nach Änderungen herborgerufen worden zu sein.

 

Eure Hinweise habe ich/werde ich trotzdem weitestgehend übernehmen. Falls die Erklärung nicht ausführlich genug war und eurerseits noch Fragen offen sind, kann ich das auch nochmal genauer ausführen. Ich weiß nicht, wie interessant mein Problem für euch war.

Ansonsten nochmals danke euch allen!
Gruß Mr Valdez

Lösung in ursprünglichem Beitrag anzeigen

9 ANTWORTEN 9
Lösung
archig
Advisor

Ich kann es gerade nicht austesten, daher nur Blindflug 😉

In welchem Skript bist du denn ?  Das ist relevant, weil nicht jeder Befehl überall funktioniert. 

  • Im Parameterskript sollte der Parameters Befehl stehen: parameters  A 0.202 
  • Im 2D Skript der Rest.
  • Die übrigen Skriptfenster sollten leer sein. 
  • Das Fenster 2D-Symbol sollte auch leer sein, also alle Ebenen 1-16 sichtbar machen, und prüfen, ob da noch irgendwo was ist; ggfs löschen
  • Den hotspot2 00 Befehl solltest du um den Index erweitern, z.B. so: hotspot2 0, 0, 10001.

Probier mal, ob es so klappt

ArchiCAD 25 / Windows 10

Ich hatte das 2D-Skript geteilt, sorry. Alles andere war entsprechend leer.
Auch nach den Korrekturen bleibt das Problem aber leider (außer dass bei Nichtausblenden der anderen Hotspots das Objekt im Grundriss nicht verzerrt werden kann, sondern nur verschoben).
Trotzdem schon mal danke, auch für den Hinweis mit dem Parameters-Befehl.

Jochen Suehlo
Moderator

Was genau meinst Du mit : "Konkret: platziere ich z.B. eine Leuchte L1, öffne das Einstellungsmenü und wandle sie über die Objektbibliothek in eine Leuchte L15 um" ?
Speicherst Du ein bereits platziertes GDL-Objekt nochmal neu als neues GDL-Objekt?

Jochen Suehlo . AC12-28 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de

@Jochen Suehlo Nein, so meinte ich das nicht.
Wenn ich im Grundriss ein Objekt platziere und die Objekteinstellungen (Strg-T) öffne, wird mir ja am linken Rand die Objektbibliothek angezeigt, wo ich das oder die ausgewählten Objekte auch durch ein anderes Bibliotheksobjekt ersetzen kann (ist vielleicht ein besserer Begriff als 'Umwandeln').
Das ist, was ich meinte; ich hoffe, so ist die Formulierung verständlicher.

Ich habe das ausgetestet. Der Parameters-Befehl gehört in jedem Fall ins PARAMETER-Script.
Das mit dem Springen auf den Ursprung kann ich nicht nachvollziehen. Ich kann mir auch nicht vorstellen, dass das das Script macht.
Ich kann mich auch nicht erinnern, dass ich so einen Fall schon mal gehabt hätte.
Welches Archicad und welches Betriebssystem verwendest Du denn?
Hast Du die Tipps von archig befolgt?

Jochen Suehlo . AC12-28 . MAC OSX 14.4 . WIN11
GDL object creation: b-prisma.de

@Jochen Suehlo Die Tipps habe ich befolgt und entsprechend den Parameters-Befehl ins entsprechende Skript verschoben.
Die Archicad-Version ist 27.0.0; Betriebssystem Win11 Pro, Version 23H2.
Um das nicht zu unterschlagen, hier meine Änderungen bei beim Parameter-Menü. Ich hatte das vorher nicht erwähnt, weil bei anderen Objekten die gleichen Bezeichnungen nicht zu Problemen geführt haben.
Die Benennungen hier waren für den Fall, dass andere aus meinem Büro das Objekt modifizieren wollen und sollte Orientierung geben, womit ich gearbeitet habe und was sie (vermeintlich) vernachlässigen können.

Screenshot 2025-03-17 105622.png

Lösung

Das ist nicht falsch was du da gemacht hast, aber deswegen nicht weniger trickreich.

  • AC versucht aus Performancegründen die Größe des Objektes zu ermitteln. Für Z gibt es dazu zwei feste (blaue) Parameter, für X und Y nimmt es A und B. Ausgehend von 0/0 (!).
  • Dass 0/0 bei dir in der Mitte ist und dein Objekt von -a/2 / -b/2 zu a/2 / b/2 geht wünscht sich AC nicht, sollte aber prinzipiell gehen.
  • Definierst du KEINE Hotspots im Skript setzt AC zumindest einen an 0/0 oder, wenn in den Objektoptionen aktiviert automatisch an den 4 Ecken von a/b. 
  • Wenn du Hotspots definierst, sollten sie immer eine durchgängige, eindeutige ID haben. Am besten erzeugt in immer der gleichen Reihenfolge
  • Im Einstellungsdialog des Objektwerkzeuges kannst du in der 2D Vorschau DEN Hotspot festlegen (klick), der der Absetzpunkt des Objektes sein soll und der lageneutral bei Veränderungen bleiben soll. Ob das durchgängig konsequent funktioniert, kann ich dir nicht sagen, aber DAS wäre ein möglicher Grund für dein Problem.

Ich würde zur Sicherheit und wegen der Sauberkeit es auch so codieren:

MASTERSKRIPT:
A = 0.202
B = A

PARAMETERSKRIPT:
PARAMETERS A=A, B=B
LOCK "A", "B"
HIDEPARAMETER "B"

 

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
archig
Advisor

Falls Zeichnungsteile aus dem 2D Symbol Fenster verwendet werden (mit fragment2), dann können dort auch Fixpunkte enthalten sein, die die Reihenfolge der Hotspots durcheinanderbringen. 

 

Ich hatte Positionsänderungen bei eigenen Objekten auch schon beobachtet, wenn ein bereits platziertes Objekt durch ein anderes Objekt ersetzt wird. 

Wenn du dein Objekt mit der Mitte am 0/0 Punkt geskriptet hast, dann sollte der Mittelpunkt im Objektdialog auch markiert sein, bevor du das Objekt durch ein anderes Objekt ersetzt. 

 

ArchiCAD 25 / Windows 10
Lösung
Mr Valdez
Participant

Ich habe das Problem jetzt 'gelöst', auch wenn ich die genaue Ursache nicht kenne: das Problem betrifft nur bereits platzierte Objekte, in deren Skript ich dann nochmal etwas verändert habe. Lösche ich das bestehende Objekt aus dem Modell und platziere es aus der Bibliothek neu, habe ich das Problem nicht mehr. Teilweise hat es auch gereicht, in den Objekteinstellungen (nicht dem Editor) die Größe einmal zu verändern.

Es scheint also tatsächlich nicht am Skript gelegen zu haben, sondern nur durch die Überschreibung nach Änderungen herborgerufen worden zu sein.

 

Eure Hinweise habe ich/werde ich trotzdem weitestgehend übernehmen. Falls die Erklärung nicht ausführlich genug war und eurerseits noch Fragen offen sind, kann ich das auch nochmal genauer ausführen. Ich weiß nicht, wie interessant mein Problem für euch war.

Ansonsten nochmals danke euch allen!
Gruß Mr Valdez