Notifications
Clear all

[Closed] Test for multi/sub object

Hi all,

I’m stuck with some script and any help would be much appreciated.

I have a maxscript that loops though the SceneMaterials and searches for a selection of textures, which names are obtained from a text file. When located a texture is placed into its opacity map.

Now the problem I have is when I get to a multi/sub object in the material list I get this error

Unknown property: "diffuseMap" in #Multi/Sub-Object:02 - Default(Standard:Material #46, Standard:Material #38, Standard:Material #39, Standard:Material #40, Standard:Material #41, Standard:Material #42)

So I need a way to test whether the current material is a multi/sub object.

Something like:
if( SceneMaterials[i] == multi/sub) then

Thanks

4 Replies
 lo1
if classof scenematerials[i] == multiMaterial
 JHN
if isKindOf scenematerials[i] multimaterial then...

To be complete…

Johan

A much better way to approach this than searching through the scenematerials for scenematerials[i].diffusemap is to use the getclassinstances function. This means it doesn’t matter if your map is in a multi-sub, a multi-sub within a multi-sub, a blend material, a composite etc…

example bit of psuedo code… doesn’t work…

For o in getclassinstances Standardmaterial where o.diffusemap != undefined and (matchpattern o.diffusemap.bitmap.file pattern:“something”) == true then o.opacitymap = bitmaptexture filename:(getfilenamepath o.diffusemap.bitmap.filename + getfilenamefile o.diffusemap.bitmap.filename + “_opacity.bmp”)

This will then work for all StandardMaterials regardless of where they are in material heirachy.

Thanks dude. That way works much better.

As a quick fix I made another script that would work on the selected material, but now I can combine them both

The funny thing is I came across that method but didn’t think it applied to my situation.