dynamische Materialien
  • 13 May 2024
  • 2 Minuten zu lesen
  • Dunkel
    Licht
  • pdf

dynamische Materialien

  • Dunkel
    Licht
  • pdf

Artikel-Zusammenfassung

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"


War dieser Artikel hilfreich?