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!

Türeigenschaft steuert Etikett

thopas
Booster

Ich habe an anderer Stelle praktisch die gleich Frage gestellt. Aber hier ist der Schwerpunkt auf GDL Programmierung. Kann mir jmd einen Hinweis geben, wie man Etikett-Eigenschaften wie z.B. die Hintergrundfarbe über eine Eigenschaft des Parent Objekts steuern kann? Als ich das vor ein paar Monaten probiert habe, war ich schnell bei kryptischen Eigenschaftsnummer und funktioniert hat es irgendwie trotzdem nicht. Hat jmd. eine Idee?

 

Operating system used: Windows

1 AKZEPTIERTE LÖSUNG

Akzeptierte Lösungen
Lösung

Mit ist nur nicht ganz klar, wie ich den richtigen Wert für die  _stPropertyID bekomme.

Unsere Etiketten suchen den Namen der Eigenschaft, kriegen die ID, lesen den Wert und machen was damit.

Wenn bei den Namen also keine allzu große Dynamik herrscht:

EigenschaftWert = ""
meine_ID = ""
for j = 20 to vardim1(parentProperties) step 4
if parentProperties [j] = NameEigenschaft then
	meine_ID = parentProperties [j-3]
	goto 100
endif
next j

100:
if meine_ID # "" then
	dim	propertyValues[]
	m = 0
	m = REQUEST ("Property_Value_Of_Parent", meine_ID, typeValue, dim1, dim2, propertyValues)
	if m > 0 then EigenschaftWert =  propertyValues [1]
endif

Jede Eigenschaft bildet ein Viererpäckchen im Array der 'parentProperties', darum 'step 4'.

Wenn ein Eigenschaftenname mehrmals (aber in verschiedenen Eigenschaften-Gruppen) vorkommt, musst Du die auch noch durchforsten.

Der Datentyp der Eigenschaft steht in 'typeValue', falls das von Interesse ist, sonst schnapp' Dir den Wert einfach aus dem Array 'propertyValues[1]'.

 

Der 'offizielle' Weg der Eigenschaften-Auswahl mit den Aufklapplisten aus dem GS-Beispiel war uns immer viel zu kompliziert...

https://gdl.graphisoft.com/tips-and-tricks/display-properties-with-labels

--
Stefan
AC ...-28, WIN10

Lösung in ursprünglichem Beitrag anzeigen

13 ANTWORTEN 13
thopas
Booster

Ohne es getestet zu haben scheinen mehrere Hinweise hier verborgen zu sein:

https://gdl.graphisoft.com/forums/topic/request-object-parameters-with-label

 
Der entscheidende Befehl ist wohl der Request mit der Variablen (kursiv) in die die Abfrage geschrieben wird
succ1 = REQUEST ("ASSOCLP_PARVALUE", "B", Dummy, Dummy, Dummy, Dummy, Dummy, temp_Skylight_B)

Ein fire_rating Zeile ist in der DW_marker auch zu finden.

 

Der "F Marker 27.gsm" baut dabei auf der "gs_DW_Marker.gsm" auf, die die eigentliche Abfrage macht. 

 

Mir ist noch nicht ganz klar, was nun ein Marker Objekt von einem normalen Objekt unterscheidet. Also wie erkennt ArchiCAD, dass mein Objekt gerne Daten aus einem anderen Bauteil hätte?

Meine eigene Antwort auf die letzte Frage ist, dass dies über Subtypen erkannt wird. Damit kann man auch einen Haufen von Parameter gleich in sein GDL übernehmen.

 

Eine nette Methode habe ich auf Youtube gefunden, ist aber ein ganz anderen Ansatz.

https://youtu.be/phIitZmaFCM?si=eH6x-iFq9xwXcTMB

 

Meine Frage ist nun, ob man vielleicht mit Call und Subtype Huckepack auf einem/r fertigen Marker/Tür reiten kann, so dass man nicht in ein Standardobjekt reinpfuschen muss, sondern einfach ein bestehendes Objekt um eine Darstellung/Funktion erweitert?

 

 

Frank Beister
Moderator

Du hast schon den richtigen Befehl gefunden. Schau sonst auch nochmal auf selfGDL .

 

Der Ablauf ist: 
Per REQUEST ("ASSOCLP_PARVALUE", den Wert abfragen, der das Etikett steuern soll.

Entscheidungsabfrage auf die die Darstellung des Etiketts reagiert.

 

sts = REQUEST ("ASSOCLP_PARVALUE", "B", iPara, typ, dPara, dim1, dim2, wert)
if sts then
  if wert > 2 then
    pen 15
    else
      if wert > 1 then
        pen 20
        else
        pen 25
      endif
    endif
  else
  pen 1
  endif

 

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

Hallo Frank,

 

Danke für die Antwort. Sie gibt mir schonmal etwas Sicherheit.

 

Für die Parameter von selbst erstellten GDL-Objekten ist das sicherlich eine gangbare Lösung. Was ich eigentlich gesucht habe, war eine Möglichkeit die Eigenschaften/Properties zu visualisieren. Ich hatte es nur nicht mehr geupdatet, weil sich keiner für das Problem zu interessieren schien.

 

Also im Eigenschaft-Etikett 27.gsm findet sich unter der sub "getPropertyValue" folgende Abfrage:

 

m = request ("Property_Value_Of_Parent", _stPropertyID, _typeValue, dim1, dim2, propertyValues)
Mit ist nur nicht ganz klar, wie ich den richtigen Wert für die  _stPropertyID bekomme.

 

Interessant finde ich den "Türstempel 27.gsm" vom Subtype Tür-Marker, dort ist nur ein 

"call "DW_stamp_macro" parameters all bWindow = 0" drin. Also praktisch optimal für eine eigene Erweiterung.

(In dw_stamp_makro unter der Sub "getPropData" ist, meine ich, lesenswert)

 

Wenn man richtig geschickt sein möchte, dann ist vielleicht 

call "PropertyParamRequest_m" parameters all bDebug = 1
aus Klassifizierungs- und Eigenschaftsetikett 27 interessant.

 

Gruß aus Düsseldorf

Thorsten

Was ist dann nochmal die Frage und v.a. was möchtest du machen? Ich kann da zu viel reininterpretieren. Und ja, Quellcode lesen ist mitunter interessant. GS-GDL-Quellcode hingegen meist nicht.

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

Mit ist nur nicht ganz klar, wie ich den richtigen Wert für die  _stPropertyID bekomme.

Unsere Etiketten suchen den Namen der Eigenschaft, kriegen die ID, lesen den Wert und machen was damit.

Wenn bei den Namen also keine allzu große Dynamik herrscht:

EigenschaftWert = ""
meine_ID = ""
for j = 20 to vardim1(parentProperties) step 4
if parentProperties [j] = NameEigenschaft then
	meine_ID = parentProperties [j-3]
	goto 100
endif
next j

100:
if meine_ID # "" then
	dim	propertyValues[]
	m = 0
	m = REQUEST ("Property_Value_Of_Parent", meine_ID, typeValue, dim1, dim2, propertyValues)
	if m > 0 then EigenschaftWert =  propertyValues [1]
endif

Jede Eigenschaft bildet ein Viererpäckchen im Array der 'parentProperties', darum 'step 4'.

Wenn ein Eigenschaftenname mehrmals (aber in verschiedenen Eigenschaften-Gruppen) vorkommt, musst Du die auch noch durchforsten.

Der Datentyp der Eigenschaft steht in 'typeValue', falls das von Interesse ist, sonst schnapp' Dir den Wert einfach aus dem Array 'propertyValues[1]'.

 

Der 'offizielle' Weg der Eigenschaften-Auswahl mit den Aufklapplisten aus dem GS-Beispiel war uns immer viel zu kompliziert...

https://gdl.graphisoft.com/tips-and-tricks/display-properties-with-labels

--
Stefan
AC ...-28, WIN10

Ich versuche eine möglichst einfach Lösung für das Visualisieren von Eigenschaften zu finden. 

Also z.B. einen unterschiedlich farbigen Punkt an jede Tür je nach Brandschutzeigenschaft. Möglich wäre auch, dass der z.B. Brandschutztext vom Türmarker farbig hinterlegt ist. Dafür werden ein paar Schlüsselfähigkeiten gebraucht. Eine davon ist die Eigenschaft abzufragen. Da dies aber (mit "Property_Value_Of_Parent" eine kryptische Nummer "_stPropertyID" braucht), werde ich wohl um ein Auswahlfeld im UI nicht herumkommen. So, die Fragen.
 
Gibt es eine Möglichkeit den Request über den Namen der Eigenschaft zu machen statt über die ID?
Falls nicht, ist es die einfachste Möglichkeit die ID zu generieren, wenn Sie über ein UI ausgewählt wird?

Achtung Werbung:

 

Da dieser Anwendungsfall öfters von unseren Kunden angefragt wurde, haben wir eine Lösung in unserer kommenden A-NULL Club-Bibliothek. (Hinweis: die ist kostenpflichtig!)

 

Wir haben das aus unserer Sicht recht geschickt gelöst, indem wir Einfärbungen ähnlich wie in den grafischen Überschreibungen über die Modelldarstellung lösen. Es kann dabei auf alle Eigenschaften eine Elements zugegriffen werden, oder alternativ über eine Auswertung auch auf alle Parameter.

 

Hier ein Teaser dazu, der Release ist für Ende September geplant.

 

 


Highlight.png
AC4.5-AC28 AUT, GER, INT www.a-null.com

Bei "Goto 100" springen bei mir alle Alarmglocken an, aber es geht ja ums Prinzip. 😉 Danke für die sehr hilfreichen Antworten.

Setup info provided by author