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

Werkplankopf

andreaszeike
Newcomer
Hallo Heimo!!

in deiner Datei Werkplankopf.gsm, die ich mir gerade studienhalber mal aufgerufen habe, gibt´s die REQUEST-Anweisung die eine Fehlermeldung beim 2D-Script produziert. ausserdem habe ich einige Schriften nicht, aber das ändere ich im parameter-script (oder?)

Das gsm funzt trotz der Meldungen auf geniale Weise :yeah:

Wie bist Du beim Programmieren vorgegangen?

Hier die Meldungen, die ich bekam:

Ungenutzes Ergebnis aus Funktion

bei Zeile 332 von Datei Werkplankopf.gsm.
Ungenutzes Ergebnis aus Funktion

bei Zeile 333 von Datei Werkplankopf.gsm.
Fehler in Name oder Schrift-Familie nicht gefunden

bei Zeile 65 von Datei Werkplankopf.gsm.
Fehler in Name oder Schrift-Familie nicht gefunden

bei Zeile 69 von Datei Werkplankopf.gsm.
Fehler in Name oder Schrift-Familie nicht gefunden

bei Zeile 88 von Datei Werkplankopf.gsm.
Diese Datei macht große Probleme. Sie können die Operation mit Ctrl-/Befehlstaste-Punkt abbrechen.
Inkompatible Variable in Ausdruck

bei Zeile 387 von Datei Werkplankopf.gsm.
11 ANTWORTEN 11
Hmooslechner
Moderator
Das Problem mit den Schriften...

(Wir haben früher am Mac gearbeitet und dabei habe ich die Entdeckung gemacht, daß man damals im MS-Word 5 Schriftarten des jeweiligen Systems am Mac und am PC einbetten konnte.
Wenn die Word-Datei dann zB. am Mac geöffnet wurde, fand man, solange die Datei geöffnet war - eine Dummy-Datei im Papierkorb des Mac. Die mußte man nur in das Mac-Fontverzeichnis kopieren..)

In Win98-ME heißen die Länderspezifischen Zusätze zu den schriftarten zB. Arial "Western"
Im Win2k heißt das gleiche dann Arial "Westlich"
Wie Es genau am Mac heißt weiß ich nicht.
Leider muß im GSM die Schriftart genau mit Groß und Kleinschreibung genau stimmen - sonst gibts stattdessen irgendeine Archicad-Systemschrift.

Dazu mußt Du zuerst in den Texteinstellungs-Dialogboxen genau schauen, wie die Schriften dort wirklich heißen... und abschreiben, weil sichs nicht rauskopieren läßt..
(War schon ein Wunsch für neue Versionen, daß man Schriftarten aus einer Liste wählen können sollte - im GDL..)

Ich hoffe, daß es dies so mal tut..

Das mit der ungenutzten Funktion - ist eine Request-Abfrage, welche der Debugger offenbar nicht kennt, die aber doch funktioniert...????

Wie ich vorging:?

Zuerst nur mit Linien den gewünschten Rahmen..
Dann irgendwann mal die Firmen-Schrifteinträge
mit der Funktion, daß man aus der Zelle nicht rausschreiben können sollte - bzw, daß sich die Schriftgröße an die Zellenbreite anpaßt.
(Hier wäre eine fehlende Funktion in Archicad - GDL noch ein neuer Wunsch: Abfrage der Texthöhe)

Dann gabs irgendwann mal die anderen Texteinträge usw.. Es war ein drei-Jahres-Projekt.. Immer wieder mal eine wenig..
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
andreaszeike
Newcomer
dachte ich mir...

...und hat bereits gefunzt 🙂

Ganau das war der Grund.

Dein gsm funzte übrigens trotz der fehlermeldungen... mit Times als Schrift

Gruß, az
Hmooslechner
Moderator
UND ES GEHT DOCH!

Bisher habe ichs nicht geschafft - Text innerhalb eines definierten Rechteckes zu halten.
Bisher habe ich nur die Textbreite auslesen können - auch immer mit dem Problem des verstellbaren Maßstabes.
Dies allerdings sollte auch für die Höhe gehen und
ES GEHT!

folgender 2D-Code:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;">
!!!!Funktion Text in Boundingbox - Heimo Mooslechner 7/2002
pen Stiftlinie
line2 0, 0, 0, b !!!!!Bounding-Box
line2 0, 0, a, 0
line2 a, b, 0, b
line2 a, 0, a, b

hotspot2 0,0
hotspot2 a, b


m=1/1000*GLOB_SCALE




define Style "Dummy" Textstil, a*m, 5, 0 !!! Dummystil definieren
style Dummy
TextbreiteA=STW(Stringtext) !!Textbreite mit Dummystil ermitteln
VerhaeltnisA = a/TextbreiteA !!Verhältnis von Dummy-Textbreite zu A-Länge
define Style "DummyA" Textstil, a*VerhaeltnisA, 5, 0 !!!Dummystil für A-Breite definieren
style DummyA
pen stift
REQUEST ("Height_of_style", "DummyA", Texthoch) !!Texthöhe für diesen neuen A-Stil ermitteln
Texthoch=Texthoch*m


if texthoch < b then
text2 a/2, b/2, Stringtext
else
hochverhalt=texthoch/b
define Style "DummyB" Textstil, a*VerhaeltnisA/hochverhalt, 5, 0 !!!Dummystil für A-Breite definieren
style DummyB
text2 a/2, b/2, Stringtext
endif
nötige Parameter für dieses GDL:

A, =Breite
B, =Höhe
Stringtext, =gewünschter Text-String
Textstil, =gewünschte Schrift
stift, =Stiftfarbe der Schrift
Stiftlinie, =Stiftfarbe der Linie

Damit müßten sich alle Probleme mit Schriftgrößen in tabellenartigen GDLs lösen lassen.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
andreaszeike
Newcomer
cool!
Hmooslechner
Moderator
Ich werde das Ding in Zukunft immer bei GDL-Texteinträgen als Funktion nach dem end-Befehl drinnenhaben.
Da brauch ich dann nur alle nötigen Parameter
vorher festlegen - hinspringen und nach dem retour
habe ich den richtigen Textstil eingestellt.
Vielleicht auch als externen Funktionsaufruf?
Aber ich denke gscheiter ists alles innerhalb eines GDL zusammenzuhalten...
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Zitat:</font><hr /><font size="2" face="Verdana, Helvetica, sans-serif">Original erstellt von Andreas Zeike:

bei Zeile 332 von Datei Werkplankopf.gsm.
Ungenutzes Ergebnis aus Funktion
Hierzu schreibt David Nicholson-Cole:
"REQUEST kann zwar für sich verwendet werden, aber man erhält immer die Fehlermeldung "Ungenutztes
Ergebnis aus Funktion". Deshalb sollten Sie einen REQUEST-Ausdruck mit einer Hilfsvariablen x schreiben, z.B:
x=REQUEST(”RGB_of_Pen”, pcol,red,green,blue)"

Mit einem "x=" davor verschwindet die Fehlermeldung, und es funktioniert trotzdem.
andreaszeike
Newcomer
@ Jochen: danke! das erklärt vieles!

@ Heimo: ich halte externe Aufrufe für eine Gute Idee, den Usern die Möglichkeit zu geben, eigene Zeichnungselemente in das Objekt zu integrieren:

Beispielsweise ein eigenes Logo. Ich habe vor, das Objekt so umzuschreiben das durch einen Call-Befehl jeweils eine Zeichnung in den A0/1/2/3/4 -Rahmen eingesetzt wird, die der User vorher mit Hilfe einer Musterdatei erstellen muss bzw. kann - mit seinem eigenen Layout.

Diese wird dann als "Stempel.gsm" im Projektordner abgelegt und auf diese Weise per Aufruf des Mutterobjekts in den aktuellen Plan eingebunden.

Die Schriftfelder des Mutterobjektes müssen dazu lagevariabel programmiert werden - ich will dazu Variablen für die x/y-koordinaten anlegen. (eine primitive Vorversion ohne Variable habe ich bereits fertig, die funzt sehr gut!)

jetzt werde ich mir aber das mit dem REQUEST ("Height_of_style", "DummyA", Texthoch) erst einmal ansehen... is ja interessant!!

Thanxx so much, az
Hmooslechner
Moderator
Vielleicht ist eine kleine Erklärung in diesem Zusammenhang hilfreich.

Beachtet diese Zeile:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> m=1/1000*GLOB_SCALE (m hab ich es aus Schreibfaulheit genannt)

Damit umgehe ich folgendes:

Schriftarten werden mit dem Zeichnungsmaßstab mitskaliert. Die Werte, welche

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> TextbreiteA=STW(Stringtext) und

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> REQUEST("Height_of_style", "DummyA", Texthoch) liefern würden - wären ohne den Einbau von "m"
immer nur in einem Zeichnungsmaßstab richtig.
in anderen wäre die Schrift dann größer oder kleiner. Ich habe da selber einige Zeit gebraucht um "dahinterzusteigen"..

Deshalb gebe ich m schon bei dem 1. Dummy-stil an:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> define Style "Dummy" Textstil, a*m, 5, 0 !!! Dummystil definieren
ebenfalls nötig um dies zu gewährleisten ist dann folgende Verwendung von m:

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> REQUEST ("Height_of_style", "DummyA", Texthoch) !!Texthöhe für diesen neuen A-Stil ermitteln
Texthoch=Texthoch*m
Um dies wirklich zu verstehen - versuchts mal ohne.."m"

Grüße aus Salzburg.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Und nun zur "Funktionserstellung":

So könnte der Aufbau einer solchen Funktion (nach end) und deren Aufruf aussehen (vor end):

</font><blockquote><font size="1" face="Verdana, Helvetica, sans-serif">Code:</font><hr /><pre style="font-size:x-small; font-family: monospace;"> !!!!Funktion Text in Boundingbox - Heimo Mooslechner 7/2002
pen Stiftlinie
line2 0, 0, 0, b !!!!!Bounding-Box
line2 0, 0, a, 0
line2 a, b, 0, b
line2 a, 0, a, b

hotspot2 0,0
hotspot2 a, b
m=1/1000*GLOB_SCALE !!!!Zeichnungsmaßstabs-Abfrage



aatxt=a !!nötige Parameter-Übergabe-Definition
bbtxt=b
Textstil=Textstil
WoTextPunktt=WoTextPunkt
Stringtext=Stringtext

gosub 1234: !!holt sich von 1234: den passenden Textsatil

pen stift
text2 a/2, b/2, Stringtext




end !!!!!!!!!!!!!!!!!PROGRAMM ENDE!!!!!!!!!!!!!!!!


1234:
!!!!!Funktion: Testeschriftgröße A+B und gib mir einen Stil retour, der in die Box paßt
define Style "Dummy" Textstil, aatxt*m, WoTextPunkt, 0 !!! Dummystil definieren
style Dummy
TextbreiteA=STW(Stringtext) !!Textbreite mit Dummystil ermitteln
VerhaeltnisA = aatxt/TextbreiteA !!Verhältnis von Dummy-Textbreite zu aa-Länge
define Style "DummyA" Textstil, aatxt*VerhaeltnisA, WoTextPunkt, 0 !!!Dummystil für aa-Breite definieren
style DummyA
REQUEST ("Height_of_style", "DummyA", Texthoch) !!Texthöhe für diesen neuen aa-Stil ermitteln
Texthoch=Texthoch*m !!Zeichnungsmaßstab für Texthoch ausschalten
if texthoch < bbtxt then !!Falls Texthoch < b dann Breiten-Stil verwenden
else !!sonst: Höhenstil verwenden
hochverhalt=texthoch/bbtxt
define Style "DummyB" Textstil, aatxt*VerhaeltnisA/hochverhalt, WoTextPunkt, 0 !!!Dummystil für aa-Breite definieren
style DummyB
endif
return !!Gib mir den richtigen Stil für die Box retour Man übergibt an die in der Funktion genannten Parameternamen vor dem Aufruf die nötigen Werte.
Somit ist die Funktion im GDL beliebig wiederwertbar.

NOCHMALS:

Was macht die Funktion:

Du wirst es nicht schaffen, aus der mit A und B angegebenen Bounding-Box rauszuschreiben.
Sollte die Höhe B überschreiten, wird einfach der Text so klein, daß er in B wieder reinpaßt
Gleiches gilt für A
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia

Keine Antwort gefunden?

Andere Beiträge
im Board ansehen

Zurück zum Board

Neueste Lösungen durchsuchen

Akzeptierte Lösungen zeigen

Eine neue Diskussion starten!

Neues Thema erstellen