khanat-opennel-code/code/nel/tools/3d/plugin_max/scripts/nel_rename.ms
2017-03-15 17:43:49 +02:00

363 lines
7.8 KiB
Text

-- This script rename texture files in material
-- Include some NeL stuff
include "nel_utility.ms"
NelRenameSampleFilename = "c:/dir/name.ext"
NelRenameSample = "Bip01 toto"
NelRenamePropertiesMaterial = 1
NelRenamePropertiesNode = 2
NelRenameSelectionAlways = 1
NelRenameSelectionSearch = 2
NelRenameActionReplace = 1
NelRenameActionPrefix = 2
NelRenameActionPostfix = 3
NelRenameFilterDir = 1
NelRenameFilterDirName = 2
NelRenameFilterDirNameExt = 3
NelRenameFilterName = 4
NelRenameFilterNameExt = 5
NelRenameFilterExt = 6
rollout rename_rollout "Properties"
(
group "Global settings"
(
RadioButtons RenameWhat "Properties to rename" labels:#("Material", "Node") align:#left
RadioButtons SelectionMode "String selection" labels:#("Apply to all the string", "Search pattern in the string") align:#left
RadioButtons Action "Action to perform" labels:#("Replace", "Prefix", "Postfix") align:#left
Label RemplaceWithLabel "Remplace / Prefix / Postfix with:" align:#left
EditText RemplaceWith "" width:500 align:#left
RadioButtons PathNameFilter "Path name filter" labels:#("c:/dir", "c:/dir/name", "c:/dir/name.ext", "name", "name.ext", ".ext") align:#left
Label Sample "" align:#left
)
group "Replace"
(
Label FindWhatLabel "Find what:" align:#left
EditText FindWhat "" width:500 align:#left
CheckBox MatchWholeWordOnly "Match whole word only" checked:true
CheckBox MatchCase "Match case" checked:false
)
fn replaceString str pattern_to_search =
(
local result, position, match, temp_str
-- Default, doesn't match
match = false
if SelectionMode.state == NelRenameSelectionSearch then
(
-- Match all the word ?
if MatchWholeWordOnly.checked == true then
(
if str == pattern_to_search then
match = true
)
else
(
-- Find pattern
result = ""
temp_str = str
while (temp_str != "") do
(
-- Find the pattern in the temp_str ?
position = findString temp_str pattern_to_search
if position != undefined then
(
-- Contact the fist part
result = result + (substring temp_str 1 (position-1)) + RemplaceWith.text
-- Remove the pattern
temp_str = substring temp_str (position+pattern_to_search.count) -1
-- Match
match = true
)
else
(
-- Final
result = result + temp_str
temp_str = ""
)
)
-- If replace, return the result
if Action.state == NelRenameActionReplace then
return result
)
)
else if SelectionMode.state == NelRenameSelectionAlways then
(
-- Always match
match = true
)
-- Match ?
if match == true then
(
if Action.state == NelRenameActionReplace then
return RemplaceWith.text
else if Action.state == NelRenameActionPrefix then
return RemplaceWith.text + str
else if Action.state == NelRenameActionPostfix then
return str + RemplaceWith.text
)
else
(
return str
)
)
fn isFilename =
(
if RenameWhat.state == NelRenamePropertiesMaterial then
return true
else
return false
)
fn modifyString filename =
(
local dir, name, ext, find_what, prefix, name_to_modify, postfix
-- Find what
find_what = FindWhat.text
-- Get the bitmap file
if MatchCase.checked == false then
(
filename = lowercase filename
find_what = lowercase find_what
)
-- Filename
prefix = ""
name_to_modify = ""
postfix = ""
if isFilename() then
(
-- Extract different part of the path string
dir = adjustPathStringForScript ((getFilenamePath filename)) + "/"
name = getFilenameFile filename
ext = getFilenameType filename
-- Build the final filename
if PathNameFilter.state == NelRenameFilterDir then
(
name_to_modify = dir
postfix = name + ext
)
else if PathNameFilter.state == NelRenameFilterDirName then
(
name_to_modify = dir + name
postfix = ext
)
else if PathNameFilter.state == NelRenameFilterDirNameExt then
(
name_to_modify = dir + name + ext
)
else if PathNameFilter.state == NelRenameFilterName then
(
prefix = dir
name_to_modify = name
postfix = ext
)
else if PathNameFilter.state == NelRenameFilterNameExt then
(
prefix = dir
name_to_modify = name + ext
)
else -- if PathNameFilter.state == NelRenameFilterExt then
(
prefix = dir + name
name_to_modify = ext
)
)
else
(
name_to_modify = filename
)
-- Replace
return (prefix + (replaceString name_to_modify find_what) + postfix)
)
fn updateSample =
(
if isFilename() then
Sample.text = "Sample: \"" + NelRenameSampleFilename + "\" -> \"" + (modifyString NelRenameSample) + "\""
else
Sample.text = "Sample: \"" + NelRenameSample + "\" -> \"" + (modifyString NelRenameSample) + "\""
)
fn updateSearchMode =
(
if SelectionMode.state == NelRenameSelectionSearch then
(
MatchWholeWordOnly.enabled = true
FindWhat.enabled = true
MatchCase.enabled = true
)
else if SelectionMode.state == NelRenameSelectionAlways then
(
MatchWholeWordOnly.enabled = false
FindWhat.enabled = false
MatchCase.enabled = false
)
)
fn updatePathNameFilter =
(
PathNameFilter.enabled = isFilename()
)
on FindWhat changed text do
(
updateSample ()
)
on RemplaceWith changed text do
(
updateSample ()
)
on SelectionMode changed state do
(
updateSearchMode ()
updateSample ()
)
on Action changed state do
(
updateSample ()
)
on PathNameFilter changed state do
(
updateSample ()
)
on MatchWholeWordOnly changed state do
(
updateSample ()
)
on MatchCase changed state do
(
updateSample ()
)
on RenameWhat changed state do
(
updatePathNameFilter ()
updateSample ()
)
local countRenamed
fn renameMaterial material =
(
local find_what_lower, map, filename, position, mat
-- Text to find in lower case
find_what_lower = lowercase FindWhat.text
-- Std material
if ((classof material) == Standardmaterial) then
(
-- For each maps
for map in material.maps do
(
-- Map defined ?
if (map != undefined) then
(
-- Map is a bitmap file ?
if (classof map) == Bitmaptexture then
(
-- Get the bitmap file
filename = map.filename
-- Modify it
filename = modifyString filename
-- Change something ?
if (filename != map.filename) then
(
-- Remplace !
map.filename = filename
-- Count replaces
countRenamed = countRenamed + 1
)
)
)
)
)
if ((classof material) == Multimaterial) then
(
for mat in material.materialList do
(
renameMaterial mat
)
)
)
fn do_it =
(
-- Reset count
countRenamed = 0
-- For each node in the project
if (RenameWhat.state == NelRenamePropertiesMaterial) then
(
local mat
for mat in sceneMaterials do
(
-- Rename its material
renameMaterial mat
)
)
else
(
local node
for node in objects do
(
-- Rename its material
previousname = node.name
node.name = filename = modifyString node.name
if (node.name != previousname) then
countRenamed = countRenamed + 1
)
)
-- Add to total sum
return countRenamed
)
include "nel_batched_script.ms"
on rename_rollout open do
(
updateSearchMode ()
updateSample ()
)
)
--
gc ()
if rename_floater != undefined do
(
closerolloutfloater rename_floater
)
rename_floater = newRolloutFloater "NeL rename bitmap" 550 874
addrollout rename_rollout rename_floater rolledUp:false