File: materialtest.py

package info (click to toggle)
darkradiant 3.9.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 41,080 kB
  • sloc: cpp: 264,743; ansic: 10,659; python: 1,852; xml: 1,650; sh: 92; makefile: 21
file content (185 lines) | stat: -rw-r--r-- 10,158 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
import os
import darkradiant as dr

# Some interface tests

print("bc_rat can be modified" if GlobalMaterialManager.materialCanBeModified('bc_rat') else "bc_rat cannot be modified")

bcRatCopy = GlobalMaterialManager.copyMaterial('bc_rat', 'bc_rat_copy')

print("Got a copy of bc_rat named {0}".format(bcRatCopy.getName()))
print("The copy can be modified" if GlobalMaterialManager.materialCanBeModified(bcRatCopy.getName()) else "The copy cannot be modified?")

try:
    bcRat = GlobalMaterialManager.getMaterial('bc_rat')
    bcRat.setEditorImageExpressionFromString('this is gonna blow')
except RuntimeError as e:
    print('An exception has been thrown: {}'.format(e))

print("Removing the copy again...")
GlobalMaterialManager.removeMaterial(bcRatCopy.getName())

print('Create an empty material named textures/python/blah...')
newMaterial = GlobalMaterialManager.createEmptyMaterial('textures/python/blah')

print("The new material can be modified" if GlobalMaterialManager.materialCanBeModified(newMaterial.getName()) else "The new material cannot be modified?")

renameResult = GlobalMaterialManager.renameMaterial(newMaterial.getName(), newMaterial.getName() + '_renamed')
print("The rename operation was successful" if renameResult else "The rename operation failed")

# Do something with the new material
print('The existing material reference now has the name {0}'.format(newMaterial.getName()))

filename = 'materials/_python_test.mtr'
newMaterial.setShaderFileName(filename)
newMaterial.setEditorImageExpressionFromString('textures/common/caulk')

newMaterial.setSortRequest(45.3)

print('Surface Type: {0}'.format(newMaterial.getSurfaceType()))
print('Cull type: {0}'.format(newMaterial.getCullType()))
print('Clamp type: {0}'.format(newMaterial.getClampType()))
print('Flags: {0}'.format(newMaterial.getMaterialFlags()))
print('Surface Flags: {0}'.format(newMaterial.getSurfaceFlags()))
print('Deform Type: {0}'.format(newMaterial.getDeformType()))
print('Deform Expression #1: {0}'.format(newMaterial.getDeformExpressionString(0)))
print('Deform Decl Name: {0}'.format(newMaterial.getDeformDeclName()))
print('Spectrum: {0}'.format(newMaterial.getSpectrum()))
print('DecalInfo.stayMilliSeconds: {0}'.format(newMaterial.getDecalInfo().stayMilliSeconds))
print('DecalInfo.fadeMilliSeconds: {0}'.format(newMaterial.getDecalInfo().fadeMilliSeconds))
print('DecalInfo.startColour: {0}'.format(newMaterial.getDecalInfo().startColour))
print('DecalInfo.endColour: {0}'.format(newMaterial.getDecalInfo().endColour))
print('Coverage: {0}'.format(newMaterial.getCoverage()))
print('Light Falloff Map Type: {0}'.format(newMaterial.getLightFalloffCubeMapType()))
print('Renderbump Arguments: {0}'.format(newMaterial.getRenderBumpArguments()))
print('FrobStage Type: {0}'.format(newMaterial.getFrobStageType()))

# There are a couple of pre-defined sort requests, corresponding to the engine code
newMaterial.setSortRequest(dr.Material.SortRequest.NEAREST)
newMaterial.setClampType(dr.Material.ClampType.NOREPEAT) # clamp
newMaterial.setCullType(dr.Material.CullType.NONE) # twosided
newMaterial.setPolygonOffset(0.3)
newMaterial.setMaterialFlag(dr.Material.Flag.NOSHADOWS)
newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.LADDER)
newMaterial.setSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID)
newMaterial.setSurfaceType(dr.Material.SurfaceType.WOOD)
newMaterial.setSpectrum(5)
newMaterial.setIsFogLight(1)
newMaterial.setIsBlendLight(0)
newMaterial.setDescription("New Material")

newMaterial.setFrobStageType(dr.Material.FrobStageType.DIFFUSE)
newMaterial.setFrobStageParameter(0, 0.4) # assign the same value to all RGB components
newMaterial.setFrobStageRgbParameter(1, dr.Vector3(0.1, 0.2, 0.3)) # assign RGB components separately

print('\n\Material definition with frobstage_diffuse:\n{0}\n{{{1}}}\n\n'.format(newMaterial.getName(), newMaterial.getDefinition()))

newMaterial.setFrobStageType(dr.Material.FrobStageType.TEXTURE)
newMaterial.setFrobStageMapExpressionFromString("textures/common/white")

print('\n\Material definition with frobstage_texture:\n{0}\n{{{1}}}\n\n'.format(newMaterial.getName(), newMaterial.getDefinition()))

stageIndex = newMaterial.addStage(dr.MaterialStage.Type.BLEND)

print('Material has now {0} stages'.format(newMaterial.getNumStages()))

newMaterial.removeStage(stageIndex)

diffuseStageIndex = newMaterial.addStage(dr.MaterialStage.Type.DIFFUSE)
diffuseStage = newMaterial.getStage(diffuseStageIndex)

bumpStageIndex = newMaterial.duplicateStage(diffuseStageIndex)
bumpStage = newMaterial.getStage(bumpStageIndex)

print('Material has now {0} stages'.format(newMaterial.getNumStages()))

# Edit some stage parameters
editableDiffuseStage = newMaterial.getEditableStage(diffuseStageIndex)
editableDiffuseStage.setStageFlag(dr.MaterialStage.Flag.IGNORE_ALPHATEST)
editableDiffuseStage.clearStageFlag(dr.MaterialStage.Flag.FILTER_LINEAR)
editableDiffuseStage.setMapType(dr.MaterialStage.MapType.CUBEMAP)
editableDiffuseStage.setMapExpressionFromString("env/sky1")
editableDiffuseStage.setBlendFuncStrings(["gl_one", "gl_dest_alpha"])
editableDiffuseStage.setAlphaTestExpressionFromString("sinTable[time]")
editableDiffuseStage.addTransformation(dr.MaterialStage.TransformType.SCALE, "time", "global0")
rotateIndex = editableDiffuseStage.addTransformation(dr.MaterialStage.TransformType.ROTATE, "time*0.5", "")
editableDiffuseStage.updateTransformation(rotateIndex, dr.MaterialStage.TransformType.SCALE, "time*0.5", "0.5")
editableDiffuseStage.removeTransformation(rotateIndex)
editableDiffuseStage.setColourExpressionFromString(dr.MaterialStage.ColourComponent.RGB, "0.4*time")
editableDiffuseStage.setConditionExpressionFromString("parm4 > 7")
editableDiffuseStage.setTexGenType(dr.MaterialStage.TexGenType.REFLECT)
editableDiffuseStage.setTexGenType(dr.MaterialStage.TexGenType.WOBBLESKY)
editableDiffuseStage.setTexGenExpressionFromString(0, "0.1")
editableDiffuseStage.setTexGenExpressionFromString(1, "0.2")
editableDiffuseStage.setTexGenExpressionFromString(2, "0.3")
editableDiffuseStage.setVertexColourMode(dr.MaterialStage.VertexColourMode.MULTIPLY)
editableDiffuseStage.setClampType(dr.Material.ClampType.NOREPEAT)
editableDiffuseStage.setPrivatePolygonOffset(-1.2)
editableDiffuseStage.setRenderMapSize(dr.Vector2(640, 480))

editableBumpStage = newMaterial.getEditableStage(bumpStageIndex)
editableBumpStage.setSoundMapWaveForm(1)
editableBumpStage.setMapType(dr.MaterialStage.MapType.VIDEOMAP)
editableBumpStage.setVideoMapProperties("videos/blah", 1)

for stage in newMaterial.getAllStages():
    print('Stage type: {0}'.format(stage.getType()))
    print('Stage map type: {0}'.format(stage.getMapType()))
    print('Stage map expression: {0}'.format(stage.getMapExpressionString()))
    print('Stage flags: {0}'.format(stage.getStageFlags()))
    print('Stage clamp type: {0}'.format(stage.getClampType()))
    print('Stage texgen type: {0}'.format(stage.getTexGenType()))
    print('Stage texgen expression #1: {0}'.format(stage.getTexGenExpressionString(0)))
    print('Stage blend func strings: {0},{1}'.format(stage.getBlendFuncStrings()[0], stage.getBlendFuncStrings()[1]))
    print('Stage colour expression RED: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RED)))
    print('Stage colour expression GREEN: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.GREEN)))
    print('Stage colour expression BLUE: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.BLUE)))
    print('Stage colour expression ALPHA: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.ALPHA)))
    print('Stage colour expression RGB: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RGB)))
    print('Stage colour expression RGBA: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RGBA)))
    print('Stage vertex colour mode: {0}'.format(stage.getVertexColourMode()))
    print('Stage render map size: {0}'.format(stage.getRenderMapSize()))
    print('Stage alpha test expression: {0}'.format(stage.getAlphaTestExpressionString()))
    print('Stage condition expression: {0}'.format(stage.getConditionExpressionString()))
    print('Stage vertex program: {0}'.format(stage.getVertexProgram()))
    print('Stage fragment program: {0}'.format(stage.getFragmentProgram()))
    print('Stage has {0} vertex parameters and {1} fragment maps'.format(stage.getNumVertexParms(), stage.getNumFragmentMaps()))
    print('Stage private polygon offset: {0}'.format(stage.getPrivatePolygonOffset()))

    for transform in stage.getTransformations():
        print('Stage transform type: {0}'.format(transform.type))
        print('Stage transform expression1: {0}'.format(transform.expression1))
        print('Stage transform expression2: {0}'.format(transform.expression2))

    for v in range(0, stage.getNumVertexParms()):
        parm = stage.getVertexParm(v)
        print('Stage Vertex Parm #{0}: {1}'.format(parm.index, ' '.join(parm.expressions)))

    for f in range(0, stage.getNumFragmentMaps()):
        fm = stage.getFragmentMap(f)
        print('Stage Fragment Map #{0}: {1} {2}'.format(fm.index, ' '.join(fm.options), fm.mapExpression))


newMaterial.swapStagePosition(diffuseStageIndex, bumpStageIndex)

print("The new material has been modified" if newMaterial.isModified() else "The new material is not modified?")

print('\n\nFull Material definition:\n{0}\n{{{1}}}\n\n'.format(newMaterial.getName(), newMaterial.getDefinition()))

GlobalMaterialManager.saveMaterial(newMaterial.getName())

print("After save, the material is not modified" if not newMaterial.isModified() else "After save, the material is still modified?")

newMaterial.clearMaterialFlag(dr.Material.Flag.NOSHADOWS)
newMaterial.clearSurfaceFlag(dr.Material.SurfaceFlag.NONSOLID)
newMaterial.setSurfaceType(dr.Material.SurfaceType.DEFAULT)

fullPath = GlobalFileSystem.findFile(filename) + filename
print(fullPath)
os.remove(fullPath)

print("Removing {0} again...".format(newMaterial.getName()))
GlobalMaterialManager.removeMaterial(newMaterial.getName())

print('--- Done ---')