159 lines
5.5 KiB
Plaintext
Executable File
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 |