Files
2025-09-29 00:52:08 +02:00

159 lines
5.5 KiB
Plaintext
Executable File

filein (RsConfigGetWildWestDir() + "script/3dsmax/_config_files/wildwest_header.ms")
struct DefaultLayersStruct
(
--//////////////////////////////////////////////////////////////////////////////////////
--PRIVATE
--//////////////////////////////////////////////////////////////////////////////////////
private
projectLayerDef = RsConfigGetEtcDir() + "config/generic/DefaultLayers.xml",
layersByType = #(),
--//////////////////////////////////////////////////////////////////////////////////////
fn parseLayerDefs =
(
--parse xml for layer types and names
local xmlStream = xmlStreamHandler xmlFile:projectLayerDef
xmlStream.open()
--get me layertypes
local root = xmlStream.root
local types = root.selectNodes "Type"
--get the layersByTypes
for t = 0 to types.count - 1 do
(
local thisType = types.itemOf t
local thisTypeName = thisType.GetAttribute "name"
local layerNodes = thisType.selectNodes "./Layer[@name]"
local layerNames = for n = 0 to layerNodes.count - 1 collect (layerNodes.itemOf n).getAttribute "name"
append layersByType (DataPair type:thisTypeName layers:layerNames)
)
xmlStream.close()
),
--//////////////////////////////////////////////////////////////////////////////////////
--PUBLIC
--//////////////////////////////////////////////////////////////////////////////////////
public
--//////////////////////////////////////////////////////////////////////////////////////
fn getProjectLayerDef =
(
projectLayerDef
),
--//////////////////////////////////////////////////////////////////////////////////////
fn parseLayers =
(
parseLayerDefs()
),
--//////////////////////////////////////////////////////////////////////////////////////
fn getLayerNames type =
(
(for item in layersByType where item.type == type collect item.layers)[1]
),
--//////////////////////////////////////////////////////////////////////////////////////
fn haveLayers =
(
return layersByType.count > 0
),
--//////////////////////////////////////////////////////////////////////////////////////
fn getlayersByType =
(
for l in layersByType collect l.type
),
--//////////////////////////////////////////////////////////////////////////////////////
fn createLayers type prefix:"" =
(
local layerNames = getLayerNames type
for name in layerNames do
(
if prefix != "" and name != "DONT_EXPORT" then name = prefix+"_"+name else ""
local newLayer = LayerManager.newLayerFromName name
)
--open the layer manager to show what we wrought
macros.run "Layers" "LayerManager"
)
)
try(destroyDialog CreateDefaultLayers)catch()
rollout CreateDefaultLayers "Create Default Layers" width:200
(
--//////////////////////////////////////////////////////////////////////////////////////
-- VARS
--//////////////////////////////////////////////////////////////////////////////////////
local defLayers = DefaultLayersStruct()
local rolloutWidth = 200 --CreateDefaultLayers.width
--//////////////////////////////////////////////////////////////////////////////////////
-- UI
--//////////////////////////////////////////////////////////////////////////////////////
dotNetControl rsBannerPanel "Panel" pos:[0,0] height:32 width:rolloutWidth
local banner = makeRsBanner dn_Panel:rsBannerPanel wiki:"Create Default Layers" filename:(getThisScriptFilename())
label lblType "Type: " across:2 align:#left
dropdownlist ddlMapType tooltip:"Content type"
label lblContainerPrefix "Container: " across:2 align:#left tooltip:"Container Prefix"
dropdownlist ddlContainerPrefix
label lblPrefix "Prefix: " across:2 align:#left
edittext edtPrefix width:135 offset:[-50, 0] tooltip:"User defined prefix"
button btnCreateLayers "Create Layers" width:(rolloutWidth-10)
--//////////////////////////////////////////////////////////////////////////////////////
-- FUNCTIONS
--//////////////////////////////////////////////////////////////////////////////////////
--//////////////////////////////////////////////////////////////////////////////////////
-- EVENTS
--//////////////////////////////////////////////////////////////////////////////////////
--//////////////////////////////////////////////////////////////////////////////////////
on btnCreatelayers pressed do
(
if not defLayers.haveLayers() then return false
if ddlMaptype.selected == undefined or ddlMaptype.selected == "" then return false
local prefix = if ddlContainerPrefix.selected != "None" then ddlContainerPrefix.selected else edtPrefix.text
--get the dropdown selection and create the layers for the type
defLayers.createLayers ddlMaptype.selected prefix:prefix
)
--//////////////////////////////////////////////////////////////////////////////////////
on CreateDefaultLayers open do
(
banner.setup()
if gRsPerforce.connected() == false then gRsPerforce.connect()
gRsPerforce.sync (defLayers.getProjectLayerDef()) silent:true
--populate the dropdown with the content types available
defLayers.parseLayers()
--finished parsing xml, now show the results in the dropdown
ddlMapType.items = defLayers.getLayersByType()
--populate the container dropdown prefix list
local sceneContainers = for o in $objects where classOf o == Container collect o.name
append sceneContainers "None"
if sceneContainers.count == 0 then
(
ddlContainerPrefix.items = #("None")
)
else
(
ddlContainerPrefix.items = sceneContainers
)
)
)
createDialog CreateDefaultLayers