- 13 May 2024
- 2 Minutes to read
- Print
- DarkLight
- PDF
dynamische Materialien
- Updated on 13 May 2024
- 2 Minutes to read
- Print
- DarkLight
- PDF
Materialien dynamisch anlegen
Um nicht alle Materialien händisch anlegen zu müssen. Ist es möglich Materialien durch das durchlaufen des Abhängigkeitsmakros, im Materialeditor anzulegen.
Annahme: Wir besitzen einen Frageparameter FpStoffe, in dem X viele verschiedene Stoffe zur Auswahl stehen. Diese Stoffe wollen wir allesamt, anhand des Antwortcodes im Materialeditor anlegen. Um nicht alle einzeln hinterlegen zu müssen, ist nun folgendes Vorgehen notwendig:
Über die PROCEDURE CreateMaterial werden die einzelnen Materialien in den Materialeditor geschrieben.
Der Procedure-Aufruf erfolgt im Abhängigkeitsmakro des Frageparameters, für den die Materialien hinterlegt werden sollten. Anhand unseres Beispiels, wäre dies der Frageparameter FpStoffe. Somit werden alle Antworten durchlaufen und für jede Antwort ein dazugehöriges Material angelegt.
PROCEDURE DpmFpStoffe
!Procedure Aufruf um Material je Antwort anzulegen
IdMaterial = 0 !Hilfsvariable
RUN LIB3D.CreateMaterial(IdMaterial, FpStoffe, 130, 60, "Markise\Stoffe\" + FpStoffe + ".bmp", TRUE)
!IdMaterial..............Hilfsvariable
!FpStoffe................zum Beispiel: Stoff100, Stoff101,...als Antwort wird als Stoff100 auch im Materialeditor hinterlegt
!130......................Breite des Bildes 130 Pixel Textur ebenfalls 130 Pixel breit
!60........................Höhe des Bildes 60 Pixel Textur ebenfalls 60 Pixel hoch
!Bild liegt im Ordner Markise\Stoffe\[Name des Bildes].bmp [Name des Bildes] ist gleich dem Antwortcode
!zuletzt TRUE übergeben
IF PRMCTL_DLG = FALSE THEN BEGIN
!Beliebiger Code
ENDIF
END
Achten Sie darauf, dass zuvor im Unterdrückungsmakro oder Abhängigkeitsmakro keine Antworten ausgeblendet werden.
Sollte der Materialeditor geöffnet sein muss dieser geschlossen werden und darf während die Procedure durchläuft, nicht geöffnet werden. Nun muss die Konfiguration einmal durchlaufen werden. Beim Parameter FpStoffe wird nun für jede Antwort das Material angelegt. Dies kann einige Zeit in Anspruch nehmen.
Sollten alle Materialien hinterlegt sein, die Procedure CreateMaterial wieder im Abhängigkeitsmakro auskommentieren/löschen.
PROCEDURE CreateMaterial
DEFINE PARAMETER OUTPUT idMaterial, INPUT cMaterialname, INPUT nSizeBreite, INPUT nSizeHoehe, INPUT cTexturfile, INPUT bPixel
!idMaterial………….ID mit der das Material angelegt werden soll (einfach im Dpm vor dem Procedure-Aufruf auf 0 setzen)
!cMaterialname…..Materialname welcher im Materialeditor hinterlegt werden sollte
!nSizeBreite.........Breite des Bildes und der Textur (in Pixel)
!nSizeHoehe……….Höhe des Bildes und der Textur (in Pixel)
!cTexturfile…………Pfad + Name des Bildes, vom Ordner IMG weg z.B. HT\Glas\g65.JPG (jener Pfad der auch im MatEditor angegeben werden würde)
!bPixel……………….immer TRUE
IF GSERVER = TRUE THEN BEGIN
idMaterial = Kernel.CreateMaterial("Default","Default",cMaterialname)
Kernel.SetAmbientColor( idMaterial, 255, 255, 255 )
Kernel.SetDiffuseColor( idMaterial, 254, 254, 254 )
Kernel.SetSpecularColor( idMaterial, 255, 255, 255, 128)
/* Kernel.SetColorProperties( idMaterial, Mirror, Transparency, RefractionIndex )
SetTexture( idMaterial, MappingMode, Projection, SizeU, SizeV, ScaleToFit,TextureFile, UsePixelMask )
MappingMode
0 = Linear
1 = zylindrisch
2 = sphärisch
Projection
1 = entlang X Achse
2 = entlang Y Achse
3 = entlang Z Achse
SizeU, SizeV
Grösse der Textur im Realmass (mm)
U = Bildbreite, V = Bildhoehe
ScaleToFit
0 = SizeU und SizeV sind gültig
1 = SizeU und SizeV sind ungültig. Die Textur wird so auf das Objekt projeziert, das sie genauso gross wie die umhüllende Box des Objektes ist.
TextureFile
Name der Bitmapdatei. Enthält diese Angabe einen Leerstring, so beudeutet dies, das diesem Material keine Textur zugeordnet ist.
UsePixelMask
0 = keine Pixelmask
1 = das Pixel in der linken unteren Bildecke dient als Maskenfarbe. Alle Pixel des Bildes die die gleiche Farbe aufweisen, werden durchsichtig gerendert.
*/
Kernel.SetTexture(idMaterial, 0, 2, nSizeBreite, nSizeHoehe, 0,cTexturfile, bPixel)
Kernel.SaveMaterialsToFile("Default","Default") !Material wird im Standartordner
! <ISS Pfad>\MasterData\iss_<Eigner><Stammdatenversion>\OBJ\material.col gespeichert
ENDIF
END
Dynamische Farbänderung
Für diverse grafische Darstellung gibt es eine Funktion um bestehende Materialien farblich zu ändern.
Beispiel Griff:
Der Griff ist im Standard ein Edelstahlgriff. Dieser kann aber im Konfigurator auch mit anderen Farben belegt werden. Vom Hersteller existiert aber nur dieses eine Bild.
Es ist möglich, dass dieser Griff in anderen Farben dargestellt wird.
Mit folgender Procedure kann die Farbe verändert werden:
public\lib3D.SetModifiedElementMaterial(nIDTmp, "textur", "overlays=overlaytextur")
Beispiel:
RUN public\lib3D.SetModifiedElementMaterial(nIDTmp, "textur", "overlays=m1-RAL6018")
overlay=RAL4711 -> Katalog und Hersteller heißen "Default"
overlay=RAL4711|Hugo -> Katalog ist "Hugo", Hersteller ist "Default"
overlay=RAL4711|Hugo|Pepi -> Katalog ist "Hugo", Hersteller ist "Pepi"