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

Bilder im GDL-Objekt speichern

Hmooslechner
Moderator
Offenbar gibt es die Möglichkeit, mehrere Bilder (Pixelbilder) im GDL-Objekt direkt zu speichern - über den Umweg des LP_XMLConverter's.

Dann sollte man "irgendwie" über den Bildindex des XMLs für das Userinterface die Bilder für Usermenüs durchschalten können.


Ich habe mich schon länger nicht mit den Usermenüs beschäftigt, weil ich eigentlich der Meinung bin, dass es für den User wesentlich einfacher ist, mit Hotspot-Anfassern direkt im Editor zu arbeiten. Nun möchte ich aber doch einmal die neuen Möglichkeiten des Userinterfaces im Stiegen-GDL nutzen - um die Konstruktionsarten durchzuschalten und habe mir einige Beispiele in der Standard-Bibloiothek angesehen - und treffe hier auf eine sehr unübersichtliche Komplexität des Themas.

Wie ich noch aus der 7er Version gewöhnt bin, mussten die Bilder in die Bibliothek kopiert werden und dann über einen Dateiaufruf über eine Textvariable mit dem Dateinamen ins Userinterface platziert werden.


Nun steht in der: http://www.graphisoft.com/ftp/techsupport/documentation/developer_docs/AC_10/APIDevKit/LPXML%20Docum... folgendes:

4.2 Handling built-in images

Library parts can contain "built-in" images. LP_XMLConverter eases the access of this feature, too.

The steps of usage are the following:

Create a folder for the image files and place images in it. The images can be of any format known by ArchiCAD.
Refer the images from the XML files using the following syntax:
<GDLPict MIME="image/png"
path="subfoldername/filename.png"
SubIdent="3"
platform="Win"
SectVersion="19"
SectionFlags="0">
</GDLPict>
The 'path' is relative to the main image folder, which is passed to the converter via the 'img' commandline parameter. 'SubIdent' is the inner identifier of the image. This ID can be used to access the image from the scripts.
Use the image in the scripts of the library part containing it. The actual image can be identified by the SubIdent value, as this example shows:
UI_INFIELD "parName", xPos, yPos, width, height,
1, 3, 5, 1, ! mind the "3"
56, 50, 40, 40,
1, "",
2, "",
3, "",
4, "",
5, ""



Ich bin einfach ein Fan davon, alles in einem einzigen GDl-Objekt vorhanden zu haben. Man gibt ein einziges Teil weiter und es funktioniert einfach, weil nichts fehlen kann - kein Macro, kein Bild. Bisher habe ich versucht, danach vorzugehen..

Wenn ich nach der alten Methode vorgehe - mit externen Bildern und vielleicht auch externen Macros - wird alles ein wenig unübersichtlich für mich...


Meine Frage: gibt es wirklich keine Möglichkeit, sich die Konvertierung ins XML zu sparen und die Bilder auf andere Weise direkt ins Bibliothekselement zu speichern?
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
10 ANTWORTEN 10
Anonymous
Nicht anwendbar
Hallo Heimo,
man kann die Bilder per "Hand" ins GDL-Objekt einfügen. Aber das ist nicht sehr komfortabel.
Wir machen es bei den ArchiCARD-Objekten ausschließlich mit dem XML-Konverter,
was wesentlich komfortabler ist, wenn auch immer noch etwas umständlich und nicht perfekt.
Vorteil mit dem XML Konverter ist, dass Du Bilder entfernen und hinzufügen kannst, wogegen die manuelle Methode nur ein einziges Mal bei einem Objekt funktioniert.
Wenn Du magst, schicke ich Dir Eine Anleitung, wie man den XML Konverter dazu benutzt.
Hmooslechner
Moderator
Ja gerne. Ich steh hier bei diesem Thema noch in einer geistigen Wüste 😁

Einmal manuell glaub ich kenn ich eh - für das Vorschaubild, dass man dann auch mit Index 0 im UI verwenden könnte - was aber bei Weitem nicht ausreicht.
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Anonymous
Nicht anwendbar
Einweg ist:

Bitmaps als Bilder in den Grundriss platzieren. uswählen und über Ablage>Als GDL-Objekt sichern absichern.

Problem. Es wird eine neue GUID vergeben nud das Objekt ist "nackt", also neu angelegt ohne Skript und Parameter.
Hmooslechner
Moderator
AM MAC:

Kann es sein, dass die "LP_XMLConverter.app" am Mac nicht automatisch bei der Archicad18Edu-Installation mit installiert wird? Jedenfalls finde ich das Tools-Verzeichnis am Mac nicht.

Nach Jochens Beschreibung sollte ich am MAC zwei neue Automator-Funktionen herstellen.
Den Automator habe ich gefunden - aber wie bringe ich den dazu, einen Patchbefehl wie angegeben zu akzeptieren?

In Jochens Anweisung gibt es beim 12er Archciad am Mac ein Verzeichnis mit Tools wo der Konverter drin ist. Das Verzeichnis existiert aber beim 18er nicht - oder ich finde es nicht...



Im Win8.1:

Bei der Windows-Version (WIN8.1) habe ich es (in etwa nach Jochens Anweisung) zumindest geschafft, LP_XMLConverter dazu zu bringen, ein GDL ins XML zu konvertieren. Allerdings manuell in der Konsole - nicht mit Patch! Allerdings hat die Konsole den Vorteil, dass ich nachlesen kann was so passiert, während mir nach einem Patch das Fenster sehr schnell wieder schließt. Es gibt einen Patchbefehl, der dies verhindert, aber den weiss ich nicht mehr - ist zu lange her..

Es für mich schon ein Problem, einen Patch zu schreiben, der funktioniert, weil im Verzeichnisnamen für das Archad-Programmverzeichnis ein Leerzeichen drin ist und dies im *.bat nicht funktioniert. Der Konverter liegt hier im Archicadverzeichnis direkt...

(Es gibt im "C:\Program Files\GRAPHISOFT\ArchiCAD 18\PreviousLP_XMLConverter" den alten 17er-konverter, den ich rauskopieren könnte - in ein verzeichnis ohne Leerzeichen, damit ein Batch funktioniert. Aber das wäre ja nicht Sinn der Sache.)

Einen Patch direkt ins Archicad-Verzeichnis reinzukopieren hat den Nachteil, dass ich bei jeder Änderung des Patch nach den Adminrechten gefragt werde - oder er mir nach dem Editieren des Patch-Textes einen Text draus machen will. Ich muss den Patch immer ausserhalb des Programmverzeichnisses bearbeiten - und dann im Programmverzeichnis löschen, dann den neuen reinkopieren (Adminrechte). Ist lästig..


Eine andere Möglichkeit wäre es, Archicad18 in einem neuen Verzeichnis neu zu installieren - ohne Leerzeichen im Namen. Was ich vermeiden will..


das Objekt „XML_Bit- map_Generator“:


In etwa weiss ich - was das Ding macht.

Falls ich es richtig verstehe:

Es schreibt mir automatisch einen Text, den ich dann an geeigneter Stelle ins zuvor erstellte XML einfüge, bevor ich es zurückkonvertiere.

Jochen schreibt darüber: "Gibt Textdatei in AC-Datenordner aus" - ABER - wo ist der "AC-Datenordner"? Ich finde den ausgegebenen Text einfach nicht!


Ich habe ja Zeit - und ich werde es schon lösen - aber irgendwie ist das so als ob man sich mit der rechten Hand am rechten Schulterblatt kratzen soll. Komplizierter hätte Graphisoft das nicht gestalten können! Wäre es wirklich zuviel verlangt, wenn Graphisoft hier funktionierende Beispiele mit installiert (oder es ordentlich dokumentiert)?
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Win8.1:

Da mit dem Patch - pausieren und Verzeichnisnamen mit Leerzeichen - habe ich nun gefunden.. Ist einfach zu lange her gewesen 😁



cd C:"\Program Files\GRAPHISOFT\ArchiCAD 18"

pause
LP_XMLConverter.exe l2x e:\GDL e:\GDL\LibraryXML

pause


So läufts!
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
den Datenordner Archicads für die Ausgabe des "XML_Bitmap_Converters.gsm" habe ich auch nun gefunden:

C:\Users\Heimo\AppData\Local\Graphisoft\ArchiCAD-64 Data Folder\ArchiCAD-64 18.0.0 AUT R1


Da such mal schön als nicht Angelernter - grins..


Auch hier habe ich mir einen Patch gemacht, der diesen Text rauskopiert - wo ich ihn haben will:

copy C:"\Users\Heimo\AppData\Local\Graphisoft\ArchiCAD-64 Data Folder\ArchiCAD-64 18.0.0 AUT R1\ui_dachzub_xml.txt" e:\GDL\LibraryXML
pause
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Die batch-Dateien funktionieren soweit.

der xml-Bitmap-Generator liefert mir dann einen Text zum importieren.

Eine Zeile daraus:

<GDLPict MIME="image/png" path="ui_dachzubehoer/9.png" SubIdent="2" platform="Win" SectVersion="19" SectionFlags="0"></GDLPict>



Im XML des umgewandelten Elementes liest es sich etwa so:

<?xml version="1.0" encoding="UTF-8"?>
<Symbol IsArchivable="no" IsPlaceable="yes" MainGUID="7B1F2557-6DB0-48A2-9576-1FE5B7A120BC" MigrationValue="Normal" Owner="1196638531" Signature="1196644685" Version="34">
<Ancestry SectVersion="1" SectionFlags="0" SubIdent="0" Template="no">
<MainGUID>F938E33A-329D-4A36-BE3E-85E126820996</MainGUID>
<MainGUID>103E8D2C-8230-42E1-9597-46F84CCE28C0</MainGUID>
</Ancestry>

<GDLPict MIME="image/png" SectVersion="19" SectionFlags="0" SubIdent="1" length_in_bytes="1868" platform="Win">
<![CDATA[
696D6167652F706E670089504E470D0A1A0A0000000D49484452000000320000
012C08020000000EF677B9000000017352474200AECE1CE90000000467414D41
0000B18F0BFC6105000000097048597300000E7400000E74016B24B3D6000006
........... editiert .......
16557FE3CE277ACB42685938A8D6E3E97492F0383C3CFC0FF77AA6BB49040E5F
0000000049454E44AE426082
]]>
</GDLPict>

<!-- GDL SCRIPT ===== GDL SCRIPT ===== GDL SCRIPT ===== GDL SCRIPT ===== GDL SCRIPT -->



Ich nehme an, dass ich meine Zeile unter den bestehenden
</GDLPict> 
einfügen muss.

Wenn ich das mache kommt aber dann beim Rückumwandeln-Batch folgende Meldung:

        Convert ... Stiegenauswahl.xml
e:\XML\Stiegenauswahl.xml(71) : error: Error in image section 'GDLPict'; Invalid
Image File - could not open for reading
Convert ... Wendeltreppe1.xml


Keine Ahnung was ich falsch mache..
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Hmooslechner
Moderator
Habe jetzt eine ganz andere Lösung:


Ich habe ein GDL und will neue Bilder hinzufügen.

Ich konvertiere es zu xml.


Dann markiere ich alle Bilder - auch die neuen - im Archicad und speichere es als neues GDL ab.

Das konvertiere ich auch.
Bisher alles so wie Jochens Lösung.



Dann gehe ich den umgekehrten Weg:

Ich kopiere einfach im XML editor die

Parameter-Sektion,
2D-Script-Sektion,
3D-Script-Sektion,
UL-Sektion
usw

vom alten Script ins neue. Somit habe ich ein NEUES Element mi alter Funktionalität, Parametern - aber mit neuen Bildern!


Im 2D kann man mit folgender Routine nachprüfen, welche Bilder unter welcher ID vorhanden sind:


for i = 1 to BildNr

picture2 i, 1, 1, 0

add2 0.5,-0.2
Text2 0,0,i
del 1
add2 1,0

next i


Es funktioniert!

Danke Jochen!
AC5.5-AC27EduAut, PC-Win10, MacbookAirM1, MacbookM1Max, Win-I7+Nvidia
Frank Beister
Moderator
Nur stimmt jetzt die GUID nicht mehr mit dem Originalobjekt überein. 😞

Gibt keine ALternative zum XML-Konverter.
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