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

Symbol-Etiketten

andreaszeike
Newcomer
den ersten Beitrag habe ich gelöscht...

az

[ 09. Januar 2004, 18:42: Beitrag editiert von: Andreas Zeike ]
42 ANTWORTEN 42
Holger Kreienbrink
Graphisoft
Graphisoft
Nein dazu gibt es noch keinen Architipp. Habe die Diskussion aber auch nicht so genau verfolgt.

Wenn du einen Tipp schreibst, werde ich ihn im architipp veröffentlichen. Schick ihn einfach zu mir
Holger Kreienbrink
Director Product Intelligence
Munich, Germany
Archicad since Version 5....
If I sound too harsh, please forgive me: I am German.
andreaszeike
Newcomer
Hallo Holger,

...mach ich doch gern 🙂

Erst muss ich aber noch das Problem mit den Strings lösen!!
Anonymous
Nicht anwendbar
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> Das Problem tritt nur bei strings auf. val_fr zum Beispiel ist der Wert eines String-Parameters (type=4). Deshalb kann ich nicht sagen: if var_fr=0 then...

Wie kann man diese Hürde umgehen? Das gleiche Problem tritt beim importieren aus Dateien auf. AC ist es im allgemeinen egal, wenn ein Ausdruck mit abweichenden Typen im Skript steht. Nur: AC darf sie nicht abarbeiten. 😉 Klingt etwas doof, aber zeigt sich gleich:

Mit der Funktion vartype() läßt sich der Typ einer Variablen prüfen und dann entsprechend verfahren. Aber dieser Umweg ist vielleicht nicht nötig, denn die rrr=REQUEST ("ASSOCLP_PARVALUE"... - Funktion liefert ja den Typ schon mit zurück, oder? Und dann kann man in je ein 'if - then' verpackt einmal numerisch, einmal als string weiterverarbeiten. Aber Vorsicht! Schon in einer Konditionsprüfung </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">if rrr=0 or val_res="" then gibt es einen Fehler. Denn auch die Zweite Konditionsprüfung wird berechnet. Zumindest versucht. Fehlerfrei geht es so:
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> if rrr=0 then
if val_res="" then
...
endif
endif</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> Da kein Parameter gs_resol im Fenster-Objekt vorhanden ist, wird der Wert als val_resol=0 übergeben und resol wird im Etikett nicht angezeigt.

Sobald jedoch ein Parameter für resol im Objekt vorhanden ist, der aber keinen Wert enthält, funzt das Objekt so nicht mehr! Dazu kann der allseits geschmähte Parameter 'rrr' aus dem Statement rrr=REQUEST(...) verwendet werden, der 0 ist, wenn kein Ergebnis erzielt wurde. So ließen sich auch gängige Parameternamen abklappern.
Anonymous
Nicht anwendbar
Nochmal im Allgemeinen zu den Etiketten. Ich finde das ganze etwas unübersichtlich. Auch von den Begrifflichkeiten.

Warum gibt es nicht Marker, die zwingend aus einem Objekt heraus definiert werden müssen (ich brauche nicht Marker und Etikett in einem Fenster) und Etiketten, die ausschließlich extern gesetzt werden. Daß aber ein Etikett nur funktioniert, wenn es im Objekt deklariert wird und sich dann aber im Wesentlichen wie ein freies Objekt verhält ist verwirrend. Und es taucht ja auch noch in der Liste bei den frei platzierbaren Etiketten auf und funktioniert dann erstmal nicht, weil man dem Etikett nicht ansieht, bei welchem Objekt es nun korrekt funktioniert.

Ein Tutorial hilft zwar, aber ist nicht der Königsweg. Da verliert AC an Klarheit in diesem Punkt. 😞
andreaszeike
Newcomer
...ich auch!

Andererseits finde ich es gar nicht so schlecht, das dem user zwei Werkzeuge für ein Element gegeben wurden, zumal ich es immernoch nicht geschafft habe, das Rätsel des VARTYPE zu lösen...
:sauer:

Deine Erklärung hat mir da ehrlich gesagt nicht weiterhelfen können. Vielleicht frage ich noch einmal anders herum:

Wenn ich in einem Etikett die Frage 'frage=REQUEST ("ASSOCLP_NAME", "", name)' stelle, bekomme ich nach Prüfung mit 'xxx=vartype (name) : print xxx' eine Variable vom Typ 2 (String).

Mit 'TEXT2 0,0, name' wird mir der Wert der Variablen auch korrekt angezeigt, und ausgegeben wird mir auch richtig der Name des Objektes.


Die Prüfung der Frage 'frage=REQUEST ("Sill_height_dimension", "", brh)' ergibt im Etikett auch einen Typ2 (String), aber kein brauchbares Ergebnis (0).

Ein Ergebnis bekomme ich bei dieser Frage nur im Fenstermarker. Dort wird auch ein Typ2 (String) zurückgegeben, jedoch ergibt dieser mit 'TEXT2 0,0, brh' einen fehlerhaften Ausdruck nämlich: %*1,2m

Im Original-Fenstermarker wurde das mit </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> extra=""
AC_SillPrefix= "Brüstungshöhe "
AC_MarkerText_= AC_SillPrefix + str{2} (brh, AC_Glob_Elevation, extra)
text2 0,0, AC_MarkerText_
gelöst. So wird es korrekt angezeigt, das ist aber nicht auf das Etikett übertragbar - dort habe ich wie gesagt keinen String...

Was muss ich schreiben, um im Etikett einen korrekten Wert ausgegeben zu bekomen?

[ 10. Januar 2004, 20:29: Beitrag editiert von: Andreas Zeike ]
andreaszeike
Newcomer
Hallo Ove,

...ich das Problem auf eine etwas weniger elegante Art gelöst:

Man muss zwar nicht unbedingt die Variablen des Objektes im Etikett wiederholen, aber man kann. Und wer hindert mich, diese als boolean anzulegen? Gesagt, getan...

Alle Variablen erscheinen jetzt im Etiketten-Dialog in der Spalte "Symboletikett"(vorrausgesetzt, das Etikett hat einen Zeiger), und können an-und aus geschaltet werden.

Nicht gerade genial, aber es funzt. Und für die Dimensionen und Brüstungshöhe benutze ich meinen modifizierten Marker.

Gruß, az
Anonymous
Nicht anwendbar
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> Wenn ich in einem Etikett die Frage 'frage=REQUEST ("ASSOCLP_NAME", "", name)' stelle, bekomme ich nach Prüfung mit 'xxx=vartype (name) : print xxx' eine Variable vom Typ 2 (String). Das ist so seeeeehr unschön. Nochmal: Nach dem Statement </font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> rrr = REQUEST ("ASSOCLP_PARVALUE", expr, name_or_index, type, flags, dim1, dim2, value_par) steht in der Variablen 'type' der Typ des Parameters, den Du abgefragt hast. In der Variablen 'rrr' (oder bei Dir 'frage') steht der Status des Request-Befehls. Der ist null, wenn er fehlgeschlagen ist. Dann bleiben die Parameter unverändert, bzw. werden auf 0 gesetzt. Somit kannst Du prüfen, ob ein Parameter gefunden wurde/vorhanden ist.
Je nachdem, welcher Typ abgefragt wurde, wird Deine Variable 'value_par' auch so definiert.
Erwartest Du nun einen Stringwert und verwendest in der Folge des Skripts ungeprüft (durch den type-Wert, ob auch tatsächlich ein String gefunden wurde) String-Funktionen, kommt die Fehlermeldung. Der Text2-Befehl ist übrigens keine Stringfunktion per se, da er sowohl numerisches als auch Text ausgeben kann. Erst wenn Du im Argument eine Stringfunktion verwendest, würde es 'knallen'. Mein Vorschlag wäre folgender (Prinzip)
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> TexPar=""
rrr = REQUEST ("ASSOCLP_PARVALUE", "par_name", name_or_index, type, flags, dim1, dim2, value_par)

if rrr then
if type=4 then TexPar=value_par
if not(type=4) then TeXPar=str("%.4",value_par)
text2 0,0,"Inhalt: >"+TexPar+"<"
endif So, oder so ähnlich.

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> ...ich das Problem auf eine etwas weniger elegante Art gelöst:
Man muss zwar nicht unbedingt die Variablen des Objektes im Etikett wiederholen, aber man kann.hmmmm. Das finde ich nicht so ich sag mal vorsichtig 'sauber'. Zumindest nicht als Tipp.
Eine Unschönheit an GDL ist, daß es keine echten, sauberen Deklarationen gibt. Und daß es im Wesentlichen auch nur 2 Typen gibt: Real und String. Das kann man nur durch saubere Fallunterscheidungen wie mein Vorschlag oben umgehen.

[ 12. Januar 2004, 08:42: Beitrag editiert von: Ove Bodj ]
andreaszeike
Newcomer
Hallo Ove,

stimmt, ganz "sauber" fand ich das selbst auch nicht - aber es war mir nix besseres eingefallen. Dank für Deine "Filter-Routine" - die hilft!

Inzwischen habe ich auch rausbekommen, wieso das Marker-script nicht im Etikette-script funzt.

Probier mal folgenden Code im Etikett:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">! Print width/height

widhei_form=""
rrr=request ("Window_door_dimension","",widhei_form)
extra = ""
extraH = ""
AC_Prefix= "Fenster "

AC_MarkerText_2 = AC_Prefix + str{2} (widhei_form, WIDO_OPRSIDE_WIDTH, extra)
AC_MarkerText_3 = str{2} (widhei_form, WIDO_OPRSIDE_HEIGHT, extraH)
TEXT2 0, 0, AC_MarkerText_2 + " / " + AC_MarkerText_3Im Fenstermarker dagegen funzt diese Abfrage:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">widhei_form=""
rrr=request ("Window_door_dimension","",widhei_form)
extra = ""
extraH = ""
AC_MarkerText_2 = str{2} (widhei_form, AC_WIDO_A_SIZE, extra)
AC_MarkerText_3 = str{2} (widhei_form, AC_WIDO_B_SIZE, extraH)
TEXT2 0, 0, AC_MarkerText_2 + " / " + AC_MarkerText_3 Das einzige, was mir jetzt noch fehlt, ist die ID. Dafür habe ich noch keine Abfrage gefunden.

Gruß, az

PS: Thanxx für diesen heftigen GDL-Talk!!

[ 14. Januar 2004, 07:47: Beitrag editiert von: Andreas Zeike ]
andreaszeike
Newcomer
Hallo Ove,

ich habe Deine Filter-Routine jetzt mal getestet.

Das Dumme ist, das Type von zB "gs_list_cost" immer als 4 zurückgegeben wird - ist nunmal als String vereinbart worden, im Orig.-Objekt.

Ich glaube, das ist der Grund, warum der Code nicht funzt. schade... rrr ist übrigens immer =6, es sei denn Du würdest Variable in der REQUEST-Abfrage weglassen. Das geht aber nicht, denn "value" muss immer an letzter (sechster) Stelle stehen. (Rätselhaft: rrr bleibt =6, wenn ich eine weitere Variable in die Abfrage schummel...)

Gruß, az


PS: hier der Code, den ich benutzt habe (Fehler??)
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">
AC_MarkerText_1=""
rrr = REQUEST ("ASSOCLP_PARVALUE", "gs_list_cost", name, type,
flags, dim1, dim2, value)
IF rrr THEN
IF type=4 THEN AC_MarkerText_1=value
IF NOT(type=4) THEN AC_MarkerText_1=str("%.4",value)
TEXT2 0,0,"Preis" : TEXT2 15*AC_TextSize_1, 0, AC_MarkerText_1
ADD2 0, -2*AC_TextSize_1
TEXT2 0,0,name
ADD2 0, -2*AC_TextSize_1
ENDIF
andreaszeike
Newcomer
Hallo Ove,

verstehst Du das hier?

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif"> REQUEST ("matching_properties", type, name1,
name2, ...)

If type = 1, returns in the given variables individually associated property library part names, otherwise property library part names associated by criteria. If used in an associative label, the function returns the properties of the element the label is associated with.