0876456a22
Further GUI Editor improvements
3479 lines
90 KiB
Text
3479 lines
90 KiB
Text
-- Some pathes to configure
|
|
|
|
old_zone_path = "w:\\database\\landscape\\zones\\"
|
|
ligo_root_path = "w:\\database\\landscape\\ligo\\max\\"
|
|
ligo_material_path = "materials\\"
|
|
ligo_transition_path = "transitions\\"
|
|
-- ligo_export_path path where to put (*.zone,*ligozone and *.tga)
|
|
-- 3 pathes are created under this one :(zones, zoneLigos and zoneBitmaps)
|
|
ligo_export_path = "w:\\database\\landscape\\ligo\\"
|
|
|
|
-- Some extensions
|
|
|
|
ligo_material_ext = ".ligomat"
|
|
ligo_transition_ext = ".ligotrans"
|
|
ligo_zone_ext = ".ligozone"
|
|
nel_zone_ext = ".zone"
|
|
|
|
-- Some filters
|
|
|
|
ligo_material_filter = "Ligo Material (*.ligomat)|*.ligomat|All Files (*.*)|*.*|"
|
|
ligo_transition_filter = "Ligo Transition (*.ligotrans)|*.ligotrans|All Files (*.*)|*.*|"
|
|
ligo_zone_filter = "Ligo Zone (*.ligozone)|*.ligozone|All Files (*.*)|*.*|"
|
|
|
|
-- Some prefix
|
|
|
|
ligo_material_prefix = "material-"
|
|
ligo_transition_prefix = "transition-"
|
|
ligo_zonematerial_prefix = "zonematerial-"
|
|
ligo_zonetransition_prefix = "zonetransition-"
|
|
ligo_zonespecial_prefix = "zonespecial-"
|
|
|
|
-- Some globals
|
|
|
|
rootpath = (getdir #maxroot)
|
|
title_msgbox = "NeL Ligo tools"
|
|
NoError = 1
|
|
|
|
-- Some structures
|
|
|
|
struct zone_transformation ( symmetry, rotation )
|
|
|
|
-- Structures methods
|
|
|
|
fn xor b1 b2 = (not (b1 and b2)) and (b1 or b2)
|
|
|
|
fn compose transfo0 transfo1 =
|
|
(
|
|
ret = zone_transformation false 0
|
|
|
|
-- Compose the symmetry
|
|
ret.symmetry = xor transfo0.symmetry transfo1.symmetry
|
|
|
|
-- Compose the rotation
|
|
ret.rotation = transfo0.rotation
|
|
if transfo1.symmetry == true then
|
|
ret.rotation = 4 - ret.rotation
|
|
ret.rotation = mod (ret.rotation + transfo1.rotation) 4
|
|
|
|
return ret
|
|
)
|
|
|
|
-- NoError - color 0 255 0
|
|
-- NoEdgeVertices - color 0 0 0
|
|
-- OpenedEdge - color 255 0 0
|
|
-- MultipleEdge - color 0 0 0
|
|
-- VertexList - color 255 255 0
|
|
-- NotInserted - color 0 0 255
|
|
-- Inserted - color 255 0 255
|
|
-- FlatZone - color 0 0 0
|
|
-- MustHave4Edges - color 0 0 0
|
|
-- NotSymetrical - color 0 255 255
|
|
-- NotSameVerticesNumber - color 0 0 0
|
|
-- NotSameVertex - color 128 0 0
|
|
-- NoCornerFound - color 0 0 0
|
|
-- UnknownError - color 255 255 255
|
|
|
|
ErrorColor = #(color 0 255 0, color 0 0 0, color 255 0 0, color 0 0 0, color 255 255 0, color 0 0 255, color 255 0 255, color 0 0 0, color 0 0 0, color 0 255 255, color 0 0 0, color 128 0 0, color 0 0 0, color 128 0 128, color 128 128 0, color 0 128 128, color 255 255 255)
|
|
|
|
TransitionIds = #( #( 1, 2 ), #( undefinded, 3 ), #( 5, 4 ), #( 6, 7, 8, 9 ) )
|
|
EdgeType = #( #(2, 2, -4, 4), #(4, 2, 2, -3), #(1, 3, 2, -3), #(-3, 3, 2, 2), #(1, 1, 3, -4), #(1, 4, -4, 1), #(4, 2, -4, 1), #(4, 2, -3, 1), #(3, -3, 1, 1))
|
|
TransitionPosition = #( [0,0,0], [1,0,0], [1,1,0], [1,2,0], [0,2,0], [0,3,0], [1,3,0], [2,3,0], [3,3,0] )
|
|
|
|
-- Neigbor data
|
|
|
|
NeighborDeltaRot = #( 180, 270, 0, 90 )
|
|
NeighborDeltaPos = #( [-1,0,0], [0,-1,0], [1,0,0], [0,1,0] )
|
|
NeighborName = #( "[NELLIGO] Left help zone", "[NELLIGO] Bottom help zone", "[NELLIGO] Right help zone", "[NELLIGO] Top help zone" )
|
|
|
|
-- Transition transform
|
|
|
|
TransitionScale = #( false, false, false, false, true, false, false, false, false)
|
|
TransitionRot = #( 2, 1, 3, 0, 1, 3, 0, 0, 0)
|
|
TransitionPos = #( [0, 0, 0], [-1, 0, 0], [-1, -1, 0], [-1, -2, 0], [0, -2, 0], [0, -3, 0], [-1, -3, 0], [-2, -3, 0], [-3, -3, 0])
|
|
TransitionType = #( "CornerA", "CornerA", "Flat", "CornerA", "CornerB", "CornerB", "Flat", "Flat", "CornerB")
|
|
TransitionNum = #( 22, 12, 22, 11, 12, 11, 11, 12, 22)
|
|
TransitionNumBis = #( 5, 4, 2, 3, 7, 6, 0, 1, 8)
|
|
|
|
-- Some appdata
|
|
|
|
ligo = 1304892483
|
|
ligo_passable_app = ligo
|
|
ligo_rotate_app = 1266703978
|
|
ligo_symmetry_app = 1266703979
|
|
ligo_instance_app = 1266703980
|
|
ligo_use_boundingbox = 1342141818
|
|
|
|
-- Project file list
|
|
|
|
project_file_list = #()
|
|
project_cur_file = ""
|
|
|
|
-- Functions
|
|
|
|
-- Add properties
|
|
fn addProperties node propsArray =
|
|
(
|
|
-- The passable properties
|
|
if (getappdata node ligo_passable_app) != undefined then
|
|
append propsArray #( "passable", "yes")
|
|
else
|
|
append propsArray #( "passable", "no")
|
|
)
|
|
|
|
-- Select all zone
|
|
fn selectAllPatch =
|
|
(
|
|
clearselection ()
|
|
for i in geometry do
|
|
(
|
|
if (classof i) == RklPatch then
|
|
(
|
|
if (i.isFrozen == false) then
|
|
(
|
|
selectmore i
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
-- Minimise
|
|
fn minimise =
|
|
(
|
|
if (viewport.numViews == 1) then
|
|
max tool maximize
|
|
)
|
|
|
|
-- Is a material
|
|
fn isMaterial name =
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile name) "-"
|
|
|
|
-- Valid name ?
|
|
return ((tokenArray.count == 2) and (tokenArray[1] == "material"))
|
|
)
|
|
|
|
-- Is a transition
|
|
fn isTransition name =
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile name) "-"
|
|
|
|
-- Valid name ?
|
|
return ((tokenArray.count == 3) and (tokenArray[1] == "transition"))
|
|
)
|
|
|
|
-- Refresh project list
|
|
fn refresh_project_list =
|
|
(
|
|
project_file_list = getFiles (ligo_root_path + "*.max")
|
|
-- Refresh rollouts
|
|
-- material template
|
|
if material_rollout != undefined then
|
|
(
|
|
material_rollout.refresh_list ()
|
|
)
|
|
-- material zone
|
|
if material_zone_rollout != undefined then
|
|
(
|
|
material_zone_rollout.refresh_mat_list ()
|
|
material_zone_rollout.refresh_zone_list material_zone_rollout.MaterialDDL.selected
|
|
)
|
|
-- transition template
|
|
if transition_rollout != undefined then
|
|
(
|
|
transition_rollout.refresh_mat_list ()
|
|
transition_rollout.refresh_list ()
|
|
)
|
|
-- transition zone
|
|
if transition_zone_rollout != undefined then
|
|
(
|
|
transition_zone_rollout.refresh_trans_list ()
|
|
transition_zone_rollout.refresh_list transition_zone_rollout.TransitionDDL.selected
|
|
)
|
|
-- special zone
|
|
if special_zone_rollout != undefined then
|
|
(
|
|
special_zone_rollout.refresh_zone_list ()
|
|
)
|
|
)
|
|
|
|
-- Is this node a debug markers ?
|
|
fn isDebugMarker node =
|
|
(
|
|
return matchPattern node.name pattern:"[NELLIGO]*"
|
|
)
|
|
|
|
-- Delete debug markers
|
|
fn DeleteDebugMarkersFn =
|
|
(
|
|
-- Array to delete
|
|
arrayToDelete = #()
|
|
|
|
-- For each error names
|
|
for i = 1 to rootNode.children.count do
|
|
(
|
|
-- Node id
|
|
id = rootNode.children.count-i+1
|
|
|
|
if (isDebugMarker rootNode.children[id]) == true then
|
|
(
|
|
append arrayToDelete rootNode.children[id]
|
|
)
|
|
)
|
|
|
|
-- For each node to delete
|
|
for i = 1 to arrayToDelete.count do
|
|
(
|
|
-- Node id
|
|
delete arrayToDelete[i]
|
|
)
|
|
)
|
|
|
|
-- Add a painter modifier to visible objects
|
|
fn AddPainterModToVisible =
|
|
(
|
|
-- Unselect non NeL patch mesh
|
|
max select none
|
|
|
|
-- For each error names
|
|
for node in geometry do
|
|
(
|
|
-- Is a NeL zone ?
|
|
if (classof node) == RklPatch then
|
|
(
|
|
-- Is visible ?
|
|
if node.isHidden == false then
|
|
(
|
|
-- Is not an instance ?
|
|
if (getappdata node ligo_instance_app) == undefined then
|
|
(
|
|
-- Select it
|
|
selectmore node
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- For each node to delete
|
|
modPanel.addModToSelection (NeL_Painter ())
|
|
)
|
|
|
|
-- Get the material names in a transition file name
|
|
fn get_material_name_in_transition_name transName result =
|
|
(
|
|
-- Decompose in token
|
|
tokenArray = filterString (getFilenameFile transName) "-"
|
|
|
|
-- Look for token "transition"
|
|
if tokenArray.count== 3 then
|
|
(
|
|
if tokenArray[1] == "transition" then
|
|
(
|
|
-- Get the two names
|
|
result[1] = tokenArray[2]
|
|
result[2] = tokenArray[3]
|
|
|
|
-- Ok
|
|
return true
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
Messagebox (transName+" is not a valid transition project name. ( should be : transition-materialName[1]-materialName[2].max )") title:title_msgbox beep:true
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get the material names in a material project file name
|
|
fn get_material_name_in_material_name matProjName matName =
|
|
(
|
|
-- Decompose in token
|
|
tokenArray = filterString (getFilenameFile matProjName) "-"
|
|
|
|
-- Look for token "transition"
|
|
if tokenArray.count == 2 then
|
|
(
|
|
if tokenArray[1] == "material" then
|
|
(
|
|
-- Get the two names
|
|
matName[1] = tokenArray[2]
|
|
|
|
-- Ok
|
|
return true
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
Messagebox (matProjName+" is not a valid material project name. ( should be : material-materialName.max )") title:title_msgbox beep:true
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get the material and zone name in a zone project file name
|
|
fn get_material_and_zone_name_in_zone_project_name zoneNameSrc result =
|
|
(
|
|
-- Decompose in token
|
|
tokenArray = filterString (getFilenameFile zoneNameSrc) "-"
|
|
|
|
-- Look for token "zone"
|
|
if tokenArray.count == 3 then
|
|
(
|
|
if tokenArray[1] == "zonematerial" then
|
|
(
|
|
-- Get the two names
|
|
result[1] = tokenArray[2]
|
|
result[2] = tokenArray[3]
|
|
|
|
-- Ok
|
|
return true
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
Messagebox (zoneNameSrc+" is not a valid zone material project name. ( should be : zonematerial-materialName-zoneName.max )") title:title_msgbox beep:true
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get the material and zone name in a zone project file name
|
|
fn get_material_and_zone_name_in_special_project_name zoneNameSrc result =
|
|
(
|
|
-- Decompose in token
|
|
tokenArray = filterString (getFilenameFile zoneNameSrc) "-"
|
|
|
|
-- Look for token "zone"
|
|
if tokenArray.count == 2 then
|
|
(
|
|
if tokenArray[1] == "zonespecial" then
|
|
(
|
|
-- Get the name
|
|
result[1] = tokenArray[2]
|
|
|
|
-- Ok
|
|
return true
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
Messagebox (zoneNameSrc+" is not a valid zone special project name. ( should be : zonespecial-zoneName.max )") title:title_msgbox beep:true
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get the transition and zone name in a transition zone project file name
|
|
fn get_transition_and_zone_name_in_zone_project_name zoneNameSrc result =
|
|
(
|
|
-- Decompose in token
|
|
tokenArray = filterString (getFilenameFile zoneNameSrc) "-"
|
|
|
|
-- Look for token "zone"
|
|
if tokenArray.count == 4 then
|
|
(
|
|
if tokenArray[1] == "zonetransition" then
|
|
(
|
|
-- Get the two names
|
|
result[1] = tokenArray[2]
|
|
result[2] = tokenArray[3]
|
|
result[3] = tokenArray[4]
|
|
|
|
-- Ok
|
|
return true
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
Messagebox (zoneName+" is not a valid zone transition project name. ( should be : zonetransition-materialName[1]-materialName[2]-zoneName.max )") title:title_msgbox beep:true
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Show errors
|
|
fn show_errors node debug id =
|
|
(
|
|
-- Get the error message
|
|
code_array = #()
|
|
id_array = #()
|
|
message_array = #()
|
|
error_msg = NeLLigoGetErrorZoneTemplate code_array id_array message_array id
|
|
|
|
-- No error ?
|
|
if error_msg == NoError then
|
|
(
|
|
return false
|
|
)
|
|
else
|
|
(
|
|
-- Show an error message
|
|
messageBox (NeLLigoGetErrorString error_msg) title:title_msgbox beep:true
|
|
|
|
-- Debug ?
|
|
if debug == true then
|
|
(
|
|
-- Number of patch vertices
|
|
vertCount = GetRykolVertexCount node
|
|
|
|
-- Create a box for each vertex error
|
|
error_array = #()
|
|
for i=1 to vertCount do
|
|
(
|
|
-- Set the error code
|
|
error_array[i] = NoError
|
|
)
|
|
|
|
-- Set the code error
|
|
for i=1 to code_array.count do
|
|
(
|
|
-- Set the error code
|
|
error_array[id_array[i]] = code_array[i]
|
|
)
|
|
|
|
-- Get the snap
|
|
snap = NeLLigoGetSnap ()
|
|
|
|
-- The node tm
|
|
tm = node.objectTransform
|
|
|
|
-- Draw a box for each errors
|
|
for i=1 to vertCount do
|
|
(
|
|
-- Error ?
|
|
if error_array[i] != NoError then
|
|
(
|
|
-- Get a color
|
|
boxColor = color 0 0 0
|
|
if error_array[i] <= ErrorColor.count then
|
|
boxColor = ErrorColor[error_array[i]]
|
|
|
|
-- Create a box
|
|
Box name:("[NELLIGO] " + NeLLigoGetErrorString error_array[i]) lengthsegs:1 widthsegs:1 heightsegs:1 length:snap width:snap height:snap pos:((GetRykolVertexPos node i) * tm) isSelected:off wirecolor:boxColor
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
return true
|
|
)
|
|
|
|
-- Export a ligo material
|
|
fn export_and_check_and_debug_material checkOnly debug displayMB =
|
|
(
|
|
-- Select a file ?
|
|
if $ == undefined then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if $ == $selection then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select only one 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Set the current directory
|
|
|
|
filename = ""
|
|
tmpArray = #()
|
|
-- Get the material name
|
|
if (get_material_name_in_material_name maxFileName tmpArray) == true then
|
|
(
|
|
-- Final path
|
|
filename = ligo_root_path+ligo_material_path+tmpArray[1]+ligo_material_ext
|
|
)
|
|
|
|
if filename != "" then
|
|
(
|
|
if (NeLLigoExportMaterial $ filename checkOnly true) == false then
|
|
(
|
|
-- Backup selection
|
|
backupSelect = $selection as array
|
|
|
|
res = show_errors $ debug 1
|
|
|
|
-- Restaure
|
|
select backupSelect
|
|
|
|
return res
|
|
)
|
|
else
|
|
(
|
|
-- Success
|
|
if checkOnly == true then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "No error" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if displayMB == true then
|
|
messageBox (filename+" export success") title:title_msgbox
|
|
)
|
|
|
|
return true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get the transition zone coordinate
|
|
fn getTransitionZoneCoordinates node x y =
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Object center
|
|
center = node.center
|
|
|
|
-- Get X and Y coordinates
|
|
x[1] = (center.x / cellSize) as Integer
|
|
y[1] = (center.y / cellSize) as Integer
|
|
|
|
-- Valid Y coordinate ?
|
|
if (y[1] < 0) or (y[1] >= TransitionIds.count) then
|
|
(
|
|
messageBox ("The zone "+nodeArray[zone].name+" is not well positionned. Check the transition scheme.") title:title_msgbox beep:true
|
|
return false
|
|
)
|
|
else
|
|
(
|
|
-- Valid X coordinate ?
|
|
if (x[1] < 0) or (x[1] >= TransitionIds[y[1]+1].count) then
|
|
(
|
|
messageBox ("The zone "+nodeArray[zone].name+" is not well positionned. Check the transition scheme.") title:title_msgbox beep:true
|
|
return false
|
|
)
|
|
)
|
|
|
|
return true
|
|
)
|
|
|
|
-- Export a ligo transition
|
|
fn export_and_check_and_debug_transition_template checkOnly debug displayMB =
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a file ?
|
|
if $ == undefined then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select one or several 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Array of selection
|
|
nodeArray = #()
|
|
if $ == $selection then
|
|
(
|
|
nodeArray = $selection as array
|
|
)
|
|
else
|
|
(
|
|
append nodeArray $
|
|
)
|
|
|
|
-- Ok flag
|
|
ok = true
|
|
findOne = false
|
|
|
|
-- Cell Size
|
|
if cellSize != undefined then
|
|
(
|
|
-- Array of transitions zones
|
|
transitionZone = #()
|
|
for zone = 1 to 9 do
|
|
append transitionZone undefined
|
|
for zone = 1 to nodeArray.count do
|
|
(
|
|
-- Not a debug object ?
|
|
if (isDebugMarker nodeArray[zone]) == false then
|
|
(
|
|
-- Find one
|
|
findOne = true;
|
|
|
|
-- Get the zone coordinates
|
|
x = #()
|
|
y = #()
|
|
ok = getTransitionZoneCoordinates nodeArray[zone] x y
|
|
|
|
-- No error ?
|
|
if ok == true then
|
|
(
|
|
-- Transition number
|
|
id = TransitionIds[y[1]+1][x[1]+1]
|
|
|
|
-- Store it
|
|
transitionZone[id] = nodeArray[zone]
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Continue ?
|
|
if (findOne == true) then
|
|
(
|
|
if (ok == true) then
|
|
(
|
|
-- Select the two materials
|
|
materialName = #()
|
|
ok = get_material_name_in_transition_name maxFileName materialName
|
|
|
|
-- Make material file names with
|
|
materialName1 = ligo_root_path+ligo_material_path+materialName[1]+ligo_material_ext
|
|
materialName2 = ligo_root_path+ligo_material_path+materialName[2]+ligo_material_ext
|
|
|
|
-- Two material selected ?
|
|
if ok == true then
|
|
(
|
|
filename = ""
|
|
|
|
-- Get the destination file name
|
|
materialName = #()
|
|
if (get_material_name_in_transition_name maxFileName materialName) == true then
|
|
(
|
|
filename = ligo_root_path+ligo_transition_path+materialName[1]+"-"+materialName[2]+ligo_transition_ext
|
|
)
|
|
else
|
|
(
|
|
filename = undefined
|
|
)
|
|
|
|
-- Selected ?
|
|
if filename != undefined then
|
|
(
|
|
if (NeLLigoExportTransition transitionZone filename materialName1 materialName2 checkOnly true) == false then
|
|
(
|
|
-- Backup the selection
|
|
backupSel = $selection as array
|
|
|
|
returnError = true
|
|
for zoneError = 1 to 9 do
|
|
(
|
|
if (transitionZone[zoneError] != undefined) then
|
|
(
|
|
-- Select the node
|
|
if (show_errors transitionZone[zoneError] debug zoneError) == false then
|
|
returnError = false
|
|
)
|
|
)
|
|
|
|
-- Re select
|
|
select backupSel
|
|
|
|
return returnError
|
|
)
|
|
else
|
|
(
|
|
-- Success
|
|
if checkOnly == true then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "No error" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if displayMB == true then
|
|
messageBox (filename+" export success") title:title_msgbox
|
|
)
|
|
|
|
return true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
else
|
|
(
|
|
if displayMB == true then
|
|
messageBox "No zone selected" title:title_msgbox beep:true
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Export a ligo zone
|
|
fn export_and_check_and_debug_zone checkOnly debug displayMB =
|
|
(
|
|
-- Select a zone
|
|
if $ == undefined then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if $ == $selection then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select only one 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
|
|
-- Get the material name with the project name
|
|
result = #()
|
|
if (get_material_and_zone_name_in_zone_project_name maxFileName result) == true then
|
|
(
|
|
matname = result[1]
|
|
zonename = result[2]
|
|
|
|
-- Make a full path
|
|
filename = ligo_root_path+ligo_material_path+matname+ligo_material_ext
|
|
|
|
-- Don't check flag ?
|
|
ligo_use_boundingbox_data = getAppData $ ligo_use_boundingbox
|
|
if (ligo_use_boundingbox_data != undefined) and (ligo_use_boundingbox_data == "1") then
|
|
dontCheck = true
|
|
else
|
|
dontCheck = false
|
|
|
|
if (dontCheck == false) and ( (NeLLigoCheckZoneWithMaterial $ filename true) == false ) then
|
|
(
|
|
-- Backup selection
|
|
backupSelect = $selection as array
|
|
|
|
res = show_errors $ debug 1
|
|
|
|
-- Restaure
|
|
select backupSelect
|
|
|
|
return res
|
|
)
|
|
else
|
|
(
|
|
-- Success
|
|
|
|
if checkOnly == true then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "No error" title:title_msgbox beep:true
|
|
|
|
return true
|
|
)
|
|
else
|
|
(
|
|
-- Select an output filename
|
|
-- filename = ligo_root_path+ligo_zone_path+matname+"-"+zonename+ligo_zone_ext
|
|
filename = ligo_export_path + matname + "-" + zonename + ligo_zone_ext
|
|
|
|
-- Make an array of properties
|
|
props = #( #("zone", (matname + "-" + zonename)), #("material", result[1]) )
|
|
|
|
-- Add the properties
|
|
addProperties $ props
|
|
|
|
-- Export the files ( The ligozone (*.ligozone), the NeL zone (*.zone), and the snap shot (*.tga) )
|
|
if (NeLLigoExportZone $ filename props true true) == true then
|
|
(
|
|
-- Success message
|
|
if displayMB == true then
|
|
messageBox (filename+" export success") title:title_msgbox
|
|
|
|
return true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Hide all zones
|
|
fn hideAllZone =
|
|
(
|
|
for node in geometry do
|
|
(
|
|
if (classof node) == RklPatch then
|
|
(
|
|
hide node
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Export a ligo transition
|
|
fn export_and_check_and_debug_transition_zone checkOnly debug displayMB =
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a file ?
|
|
if $ == undefined then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select one or several 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Array of selection
|
|
nodeArray = #()
|
|
if $ == $selection then
|
|
(
|
|
nodeArray = $selection as array
|
|
)
|
|
else
|
|
(
|
|
append nodeArray $
|
|
)
|
|
|
|
-- Ok flag
|
|
ok = true
|
|
findOne = false
|
|
|
|
-- Cell Size
|
|
if cellSize != undefined then
|
|
(
|
|
-- Array of transitions zones
|
|
transitionZone = #()
|
|
for zone = 1 to 9 do
|
|
append transitionZone undefined
|
|
for zone = 1 to nodeArray.count do
|
|
(
|
|
-- Not a debug object ?
|
|
if (isDebugMarker nodeArray[zone]) == false then
|
|
(
|
|
-- Find one
|
|
findOne = true;
|
|
|
|
-- Get the zone coordinates
|
|
x = #()
|
|
y = #()
|
|
ok = getTransitionZoneCoordinates nodeArray[zone] x y
|
|
|
|
-- No error ?
|
|
if ok == true then
|
|
(
|
|
-- Transition number
|
|
id = TransitionIds[y[1]+1][x[1]+1]
|
|
|
|
-- Store it
|
|
transitionZone[id] = nodeArray[zone]
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Continue ?
|
|
if (findOne == true) then
|
|
(
|
|
if (ok == true) then
|
|
(
|
|
-- Select the two materials
|
|
names = #()
|
|
ok = get_transition_and_zone_name_in_zone_project_name maxFileName names
|
|
|
|
-- Two material selected ?
|
|
if ok == true then
|
|
(
|
|
-- Make transition file with them
|
|
transitionName = ligo_root_path + ligo_transition_path + names[1] + "-"
|
|
transitionName = transitionName + names[2] + ligo_transition_ext
|
|
|
|
-- Export success
|
|
result = true
|
|
|
|
-- For each zone selected
|
|
for zone = 1 to 9 do
|
|
(
|
|
-- Defined ?
|
|
if transitionZone[zone] != undefined then
|
|
(
|
|
-- Check the zone
|
|
if (NeLLigoCheckZoneWithTransition transitionZone[zone] transitionName (zone-1) true) == true then
|
|
(
|
|
-- Not check only ?
|
|
if checkOnly == false then
|
|
(
|
|
-- Zone name
|
|
zoneBaseName = names[1] + "-" + names[2] + "-" + names[3] + "-" + ((zone-1) as string)
|
|
|
|
-- Get the destination filename for export
|
|
filename = ligo_export_path + zoneBaseName + ligo_zone_ext
|
|
|
|
-- Make an array of properties
|
|
props = #( #("zone", zoneBaseName), #("transname", (names[1]+"-"+names[2]) ), #("transtype", TransitionType[zone] ), #("transtype", TransitionType[zone] ), #("transnum", (TransitionNumBis[zone] as string) ) )
|
|
|
|
-- Add the properties
|
|
addProperties transitionZone[zone] props
|
|
|
|
-- Transform the zone
|
|
c = instance transitionZone[zone]
|
|
|
|
-- Hide all zones
|
|
hideAllZone ()
|
|
|
|
-- Show the zone
|
|
unhide c
|
|
|
|
-- Change the name
|
|
c.name = "[NELLIGO] tmp export"
|
|
|
|
-- The matrix
|
|
mt = transitionZone[zone].transform
|
|
backupPos = mt.pos
|
|
mt.pos = [0,0,0]
|
|
|
|
-- Scale ?
|
|
if TransitionScale[zone] == true then
|
|
(
|
|
mt = scale mt [-1,1,1]
|
|
setappdata c ligo_symmetry_app "1"
|
|
)
|
|
|
|
-- Rotate
|
|
if TransitionRot[zone] != 0 then
|
|
(
|
|
mt = rotateZ mt (90*TransitionRot[zone])
|
|
setappdata c ligo_rotate_app (TransitionRot[zone] as string)
|
|
)
|
|
|
|
-- Translation
|
|
mt = translate mt ( (TransitionPos[zone] * cellSize) + backupPos)
|
|
|
|
-- Transform the node
|
|
c.transform = mt
|
|
|
|
-- Export the zone
|
|
if (NeLLigoExportZone c filename props true true) == true then
|
|
(
|
|
)
|
|
else
|
|
(
|
|
result = false
|
|
)
|
|
|
|
-- Delete
|
|
delete c
|
|
)
|
|
)
|
|
else
|
|
(
|
|
-- Backup selection
|
|
backupSelect = $selection as array
|
|
|
|
res = show_errors transitionZone[zone] debug 1
|
|
|
|
-- Restaure
|
|
select backupSelect
|
|
|
|
result = false
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Success message
|
|
if (result == true) then
|
|
(
|
|
if checkOnly == true then
|
|
(
|
|
-- Success
|
|
if displayMB == true then
|
|
messageBox "No error" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Success message
|
|
if displayMB == true then
|
|
messageBox ("Export success") title:title_msgbox
|
|
)
|
|
|
|
-- Success
|
|
return true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
|
|
-- Export a special zone
|
|
fn export_and_check_and_debug_special_zone checkOnly debug displayMB =
|
|
(
|
|
-- Select a zone
|
|
if $ == undefined then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if $ == $selection then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "Please select only one 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
|
|
-- Get the material name with the project name
|
|
result = #()
|
|
if (get_material_and_zone_name_in_special_project_name maxFileName result) == true then
|
|
(
|
|
zonename = result[1]
|
|
|
|
if (NeLLigoCheckZoneWithMaterial $ "" true) == false then
|
|
(
|
|
-- Backup selection
|
|
backupSelect = $selection as array
|
|
|
|
res = show_errors $ debug 1
|
|
|
|
-- Restaure
|
|
select backupSelect
|
|
|
|
return res
|
|
)
|
|
else
|
|
(
|
|
-- Success
|
|
|
|
if checkOnly == true then
|
|
(
|
|
if displayMB == true then
|
|
messageBox "No error" title:title_msgbox beep:true
|
|
|
|
return true
|
|
)
|
|
else
|
|
(
|
|
-- Select an output filename
|
|
-- filename = ligo_root_path+ligo_zone_path+matname+"-"+zonename+ligo_zone_ext
|
|
filename = ligo_export_path + zonename + ligo_zone_ext
|
|
|
|
-- Make an array of properties
|
|
props = #( #("zone", zonename), #("material", "special") )
|
|
|
|
-- Add the properties
|
|
addProperties $ props
|
|
|
|
-- Export the files ( The ligozone (*.ligozone), the NeL zone (*.zone), and the snap shot (*.tga) )
|
|
if (NeLLigoExportZone $ filename props true true) == true then
|
|
(
|
|
-- Success message
|
|
if displayMB == true then
|
|
messageBox (filename+" export success") title:title_msgbox
|
|
|
|
return true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Error
|
|
return false
|
|
)
|
|
|
|
-- Get a transition zone
|
|
fn getTransition id =
|
|
(
|
|
-- Gor all in geometry
|
|
for node in geometry do
|
|
(
|
|
-- Get its coordinates
|
|
x = #()
|
|
y = #()
|
|
if (getTransitionZoneCoordinates node x y) == true then
|
|
(
|
|
-- Good id ?
|
|
if (id == TransitionIds[y[1]+1][x[1]+1]) then
|
|
return node
|
|
)
|
|
)
|
|
|
|
-- Return nothing
|
|
return undefined
|
|
)
|
|
|
|
-- Compare 2 dates
|
|
fn date_older_or_equal_than date1 date2 =
|
|
(
|
|
tabDate1 = filterstring date1 "/ :"
|
|
tabDate2 = filterstring date2 "/ :"
|
|
|
|
-- Year comparison
|
|
if ((tabDate1[3] as integer) < (tabDate2[3] as integer)) then
|
|
return true
|
|
if ((tabDate1[3] as integer) > (tabDate2[3] as integer)) then
|
|
return false
|
|
|
|
-- Month comparison
|
|
-- French Date ?
|
|
if (tabDate1.count == 6) then
|
|
(
|
|
if ((tabDate1[2] as integer) < (tabDate2[2] as integer)) then
|
|
return true
|
|
if ((tabDate1[2] as integer) > (tabDate2[2] as integer)) then
|
|
return false
|
|
)
|
|
-- Not french date so this is an english date
|
|
else
|
|
(
|
|
if ((tabDate1[1] as integer) < (tabDate2[1] as integer)) then
|
|
return true
|
|
if ((tabDate1[1] as integer) > (tabDate2[1] as integer)) then
|
|
return false
|
|
)
|
|
|
|
-- Day comparison
|
|
-- French Date ?
|
|
if (tabDate1.count == 6) then
|
|
(
|
|
if ((tabDate1[1] as integer) < (tabDate2[1] as integer)) then
|
|
return true
|
|
if ((tabDate1[1] as integer) > (tabDate2[1] as integer)) then
|
|
return false
|
|
)
|
|
-- Not french date so this is an english date
|
|
else
|
|
(
|
|
if ((tabDate1[2] as integer) < (tabDate2[2] as integer)) then
|
|
return true
|
|
if ((tabDate1[2] as integer) > (tabDate2[2] as integer)) then
|
|
return false
|
|
)
|
|
|
|
-- MidDay comparison if english date
|
|
if (tabDate1.count == 7) then
|
|
(
|
|
if ((tabDate1[7] == "AM") and (tabDate2[7] == "PM")) then
|
|
return true
|
|
if ((tabDate1[7] == "PM") and (tabDate2[7] == "AM")) then
|
|
return false
|
|
)
|
|
|
|
-- Hour
|
|
if ((tabDate1[4] as integer) < (tabDate2[4] as integer)) then
|
|
return true
|
|
if ((tabDate1[4] as integer) > (tabDate2[4] as integer)) then
|
|
return false
|
|
|
|
-- Minute
|
|
if ((tabDate1[5] as integer) < (tabDate2[5] as integer)) then
|
|
return true
|
|
if ((tabDate1[5] as integer) > (tabDate2[5] as integer)) then
|
|
return false
|
|
|
|
-- Seconds
|
|
if ((tabDate1[6] as integer) < (tabDate2[6] as integer)) then
|
|
return true
|
|
if ((tabDate1[6] as integer) > (tabDate2[6] as integer)) then
|
|
return false
|
|
|
|
-- equal date
|
|
return true
|
|
)
|
|
|
|
-- Put in upper case
|
|
fn uppercase instring =
|
|
(
|
|
local upper, lower, outstring
|
|
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
lower="abcdefghijklmnopqrstuvwxyz"
|
|
|
|
outstring = copy instring
|
|
|
|
for i = 1 to outstring.count do
|
|
(
|
|
j = findString lower outstring[i]
|
|
if (j != undefined) then
|
|
outstring[i] = upper[j]
|
|
else
|
|
outstring[i] = instring[i]
|
|
)
|
|
outstring -- value of outstring will be returned as function result
|
|
)
|
|
|
|
-- Roll out
|
|
|
|
rollout material_rollout "Material Template"
|
|
(
|
|
group "Check, debug and export"
|
|
(
|
|
|
|
Button ExportAllMaterial "Export all material" width:140 align:#center
|
|
Button ExportAllMaterialNonOk "Export all material non-ok" width:140 align:#center
|
|
Button ExportMaterial "Export material template" width:140 align:#center
|
|
Button ShowHelpZones "Show help zones" width:140 align:#center
|
|
Button DeleteDebugMarkers "Delete debug markers" width:140 align:#center
|
|
Checkbox CheckOnly "Check only" checked:false enabled:true
|
|
Checkbox Debug "Debug" checked:false enabled:true
|
|
|
|
)
|
|
|
|
group "Projects management"
|
|
(
|
|
|
|
Listbox MaterialProject "Material projects" height:8 align:#center
|
|
Button DelMaterial "Delete selected material" width:140 align:#center
|
|
Label MaterialName "Material name:" align:#left
|
|
EditText NewMaterialName "" width:140 align:#left
|
|
Button AddMaterial "Add material" width:140 align:#center
|
|
|
|
)
|
|
|
|
fn refresh_list =
|
|
(
|
|
-- Array
|
|
tmpArray = #()
|
|
|
|
-- Make an array of material project
|
|
for curFileName in project_file_list do
|
|
(
|
|
-- Valid name ?
|
|
if (isMaterial curFileName) == true then
|
|
(
|
|
curFileDate = getFileModDate curFileName
|
|
expFileDate = ""
|
|
expFileNameBase = #()
|
|
if (get_material_name_in_material_name curFileName expFileNameBase) == true then
|
|
(
|
|
-- Exported File Name
|
|
expFileName = ligo_root_path + ligo_material_path + expFileNameBase[1] + ligo_material_ext
|
|
if (getFiles expFileName).count != 0 then
|
|
expFileDate = getFileModDate expFileName
|
|
)
|
|
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (expFileDate != "") and (date_older_or_equal_than curFileDate expFileDate) then
|
|
(
|
|
append tmpArray ("[ok]"+tokenArray[2])
|
|
)
|
|
else
|
|
(
|
|
append tmpArray ("[..]"+tokenArray[2])
|
|
)
|
|
)
|
|
)
|
|
|
|
MaterialProject.items = tmpArray
|
|
)
|
|
|
|
on ExportAllMaterial pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list ()
|
|
for curMat in MaterialProject.items do
|
|
(
|
|
minimise ()
|
|
curFileName = ligo_root_path + ligo_material_prefix + (substring curMat 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_material false false false
|
|
refresh_list ()
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Material Template End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportAllMaterialNonOk pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list ()
|
|
for curMat in MaterialProject.items do
|
|
(
|
|
minimise ()
|
|
if (substring curMat 1 4) == "[..]" then
|
|
(
|
|
curFileName = ligo_root_path + ligo_material_prefix + (substring curMat 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_material false false false
|
|
refresh_list ()
|
|
)
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Material Template Non-Ok End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportMaterial pressed do
|
|
(
|
|
minimise ()
|
|
if (project_cur_file != "") then
|
|
(
|
|
saveMaxFile project_cur_file
|
|
)
|
|
export_and_check_and_debug_material CheckOnly.checked Debug.checked true
|
|
refresh_list ()
|
|
)
|
|
|
|
on DeleteDebugMarkers pressed do
|
|
(
|
|
DeleteDebugMarkersFn ()
|
|
)
|
|
|
|
on ShowHelpZones pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a zone
|
|
if ($ == undefined) or ($ == $selection) then
|
|
(
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Make a refenrence
|
|
r = instance $
|
|
setappdata r ligo_instance_app "1"
|
|
r.transform = translate (rotateZ (translate r.transform -r.pos) 0) r.pos
|
|
r.pos += [cellSize,0,0]
|
|
setappdata r ligo_rotate_app "0"
|
|
l = instance $
|
|
setappdata l ligo_instance_app "1"
|
|
l.pos += [-cellSize,0,0]
|
|
l.transform = translate (rotateZ (translate l.transform -l.pos) 180) l.pos
|
|
setappdata l ligo_rotate_app "2"
|
|
t = instance $
|
|
setappdata t ligo_instance_app "1"
|
|
t.pos += [0,cellSize,0]
|
|
t.transform = translate (rotateZ (translate t.transform -t.pos) 90) t.pos
|
|
setappdata t ligo_rotate_app "1"
|
|
b = instance $
|
|
setappdata b ligo_instance_app "1"
|
|
b.pos += [0,-cellSize,0]
|
|
b.transform = translate (rotateZ (translate b.transform -b.pos) -90) b.pos
|
|
setappdata b ligo_rotate_app "3"
|
|
|
|
r.name = "[NELLIGO] Right help zone"
|
|
l.name = "[NELLIGO] Left help zone"
|
|
t.name = "[NELLIGO] Top help zone"
|
|
b.name = "[NELLIGO] Bottom help zone"
|
|
freeze r
|
|
freeze l
|
|
freeze t
|
|
freeze b
|
|
)
|
|
)
|
|
|
|
on material_rollout open do
|
|
(
|
|
refresh_list ()
|
|
)
|
|
|
|
on DelMaterial pressed do
|
|
(
|
|
if (MaterialProject.selected != undefined) then
|
|
(
|
|
matName = substring MaterialProject.selected 5 100
|
|
fileName = ligo_root_path + ligo_material_prefix + matName + ".max"
|
|
if queryBox ("Do you want to delete "+fileName+" ?") beep:no then
|
|
(
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the .ligomat file associated
|
|
filename = ligo_root_path + ligo_material_path + matName + ligo_material_ext
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the .zone file associated
|
|
filename = ligo_root_path + ligo_material_path + matName + nel_zone_ext
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
refresh_project_list ()
|
|
refresh_list
|
|
)
|
|
)
|
|
)
|
|
|
|
on AddMaterial pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Valid name ?
|
|
if (NewMaterialName.text == "") then
|
|
(
|
|
Messagebox ("Choose a name for your new material") title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open a new project
|
|
max file new
|
|
|
|
-- Project name
|
|
projectName = ligo_root_path+ligo_material_prefix+NewMaterialName.text+".max"
|
|
|
|
-- Open the project
|
|
if (loadMaxFile projectName) == false then
|
|
(
|
|
-- Create a patchgrid
|
|
Quadpatch lengthsegs:5 widthsegs:5 length:cellSize width:cellSize pos:[cellSize/2,cellSize/2,0] isSelected:on
|
|
|
|
-- Add a modifer to convert it
|
|
max modify mode
|
|
modPanel.addModToSelection (PatchObjectToNelPatchObject ())
|
|
|
|
-- Collapse the node
|
|
collapseStack $
|
|
|
|
-- Set the tile step
|
|
SetRykolTileSteps $ -2
|
|
|
|
-- Save the max file
|
|
saveMaxFile projectName
|
|
loadMaxFile projectName
|
|
project_cur_file = projectName
|
|
|
|
-- Refresh max project
|
|
refresh_project_list ()
|
|
refresh_list ()
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on MaterialProject doubleClicked id do
|
|
(
|
|
-- Save current file
|
|
--if (project_cur_file != "") then
|
|
-- saveMaxFile project_cur_file
|
|
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open the new file
|
|
project_cur_file = substring MaterialProject.items[id] 5 100
|
|
material_zone_rollout.MaterialDDL.selection = finditem material_zone_rollout.MaterialDDL.items project_cur_file
|
|
material_zone_rollout.refresh_zone_list project_cur_file
|
|
project_cur_file = ligo_root_path + ligo_material_prefix + project_cur_file + ".max"
|
|
loadMaxFile (project_cur_file)
|
|
refresh_list ()
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
rollout transition_rollout "Transition Template"
|
|
(
|
|
group "Check, debug and export"
|
|
(
|
|
|
|
Button ExportAllTransition "Export all transition" width:140 align:#center
|
|
Button ExportAllTransNonOk "Export all transition non-ok" width:140 align:#center
|
|
Button ExportTransition "Export transition template" width:140 align:#center
|
|
Button HideOtherZones "Hide other zones" width:140 align:#center
|
|
Button UnhideOtherZones "Unhide other zones" width:140 align:#center
|
|
Button ShowHelpZones "Show help zones" width:140 align:#center
|
|
Button DeleteDebugMarkers "Delete debug markers" width:140 align:#center
|
|
Button AddPaintMod "Add paint mod to visible" width:140 align:#center
|
|
Checkbox CheckOnly "Check only" checked:false enabled:true
|
|
Checkbox Debug "Debug" checked:false enabled:true
|
|
|
|
)
|
|
|
|
group "Projects management"
|
|
(
|
|
|
|
Listbox TransitionProject "Transition projects" height:8 align:#center
|
|
Button DelTransition "Delete selected transition" width:140 align:#center
|
|
Dropdownlist NewTransitionName0DDL "Material 0:" width:140 align:#left
|
|
Dropdownlist NewTransitionName1DDL "Material 1:" width:140 align:#left
|
|
Button AddTransition "Add transition" width:140 align:#center
|
|
|
|
)
|
|
|
|
fn refresh_mat_list =
|
|
(
|
|
tmpArray = #()
|
|
for proj in project_file_list do
|
|
(
|
|
tokenArray = filterString (getFilenameFile proj) "-"
|
|
if (isMaterial proj) then
|
|
append tmpArray tokenArray[2]
|
|
)
|
|
NewTransitionName0DDL.items = tmpArray
|
|
NewTransitionName1DDL.items = tmpArray
|
|
)
|
|
|
|
fn refresh_list =
|
|
(
|
|
tmpArray = #()
|
|
|
|
-- Make an array of zonematerial project
|
|
for curFileName in project_file_list do
|
|
(
|
|
if (isTransition curFileName) == true then
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
curFileDate = getFileModDate curFileName
|
|
|
|
-- exported file date
|
|
expFileDate = ""
|
|
-- expFileName = ligo_export_path + "zoneLigos\\" + tokenArray[1] + "-" + tokenArray[2] + ligo_zone_ext
|
|
expFileName = ligo_root_path + ligo_transition_path + tokenArray[2] + "-" + tokenArray[3] + ligo_transition_ext
|
|
|
|
if (getFiles expFileName).count != 0 then
|
|
expFileDate = getFileModDate expFileName
|
|
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (expFileDate != "") and (date_older_or_equal_than curFileDate expFileDate) then
|
|
(
|
|
append tmpArray ("[ok]" + tokenArray[2] + "-" + tokenArray[3])
|
|
)
|
|
else
|
|
(
|
|
append tmpArray ("[..]" + tokenArray[2] + "-" + tokenArray[3])
|
|
)
|
|
)
|
|
)
|
|
|
|
TransitionProject.items = tmpArray
|
|
)
|
|
|
|
on ExportAllTransition pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list ()
|
|
for curTrans in TransitionProject.items do
|
|
(
|
|
minimise ()
|
|
curFileName = ligo_root_path + ligo_transition_prefix + (substring curtrans 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_transition_template false false false
|
|
refresh_list ()
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Transition Template End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportAllTransNonOk pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list ()
|
|
for curTrans in TransitionProject.items do
|
|
(
|
|
minimise ()
|
|
if (substring curTrans 1 4) == "[..]" then
|
|
(
|
|
curFileName = ligo_root_path + ligo_transition_prefix + (substring curtrans 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_transition_template false false false
|
|
refresh_list ()
|
|
)
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Transition Template Non-Ok End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportTransition pressed do
|
|
(
|
|
minimise ()
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
export_and_check_and_debug_transition_template CheckOnly.checked Debug.checked true
|
|
refresh_list ()
|
|
)
|
|
|
|
on HideOtherZones pressed do
|
|
(
|
|
-- For each node
|
|
for node in geometry do
|
|
(
|
|
-- Is a NeL patch mesh ?
|
|
if (classof node) == RklPatch then
|
|
(
|
|
-- Is not a debug marker ?
|
|
if (isDebugMarker node) == false then
|
|
(
|
|
-- It is node selected ?
|
|
if node.isSelected == false then
|
|
(
|
|
-- Hide it
|
|
hide node
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on UnhideOtherZones pressed do
|
|
(
|
|
-- For each node
|
|
for node in geometry do
|
|
(
|
|
-- Is a NeL patch mesh ?
|
|
if (classof node) == RklPatch then
|
|
(
|
|
-- Is not a debug marker ?
|
|
if (isDebugMarker node) == false then
|
|
(
|
|
-- It is node selected ?
|
|
if node.isSelected == false then
|
|
(
|
|
-- Hide it
|
|
unhide node
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on ShowHelpZones pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a file ?
|
|
if $ == undefined then
|
|
(
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if $ == $selection then
|
|
(
|
|
messageBox "Please select only one 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Select the two materials
|
|
materialName = #()
|
|
ok = get_material_name_in_transition_name maxFileName materialName
|
|
|
|
-- Make material file names with
|
|
materialName[1] = ligo_root_path+ligo_material_path+materialName[1]+ligo_material_ext
|
|
materialName[2] = ligo_root_path+ligo_material_path+materialName[2]+ligo_material_ext
|
|
|
|
-- Selected ?
|
|
if ok == true then
|
|
(
|
|
-- Get the zone coordinate
|
|
x = #()
|
|
y = #()
|
|
if (getTransitionZoneCoordinates $ x y) == true then
|
|
(
|
|
-- Copy the pos
|
|
posX = x[1]
|
|
posY = y[1]
|
|
|
|
-- Transition number
|
|
id = TransitionIds[posY+1][posX+1]
|
|
|
|
-- For the 4 edges
|
|
for edge = 1 to 4 do
|
|
(
|
|
-- Our zone
|
|
ref = undefined
|
|
zone = undefined
|
|
|
|
-- First transfor, to place good edge on the left
|
|
firstTransfo = zone_transformation false 0
|
|
|
|
-- Second transfor, to place good edge on the good destination edge
|
|
secondTransfo = zone_transformation false 0
|
|
|
|
-- Reference painter ?
|
|
refPainter = false
|
|
|
|
-- Translation to do
|
|
trans= point3 0 0 0
|
|
|
|
-- This is an instance
|
|
instan = false
|
|
|
|
-- What kind of edge
|
|
if (EdgeType[id][edge]==1) or (EdgeType[id][edge]==-1) then
|
|
(
|
|
-- Load material one
|
|
ref = NeLImportzone ((getFilenamePath materialName[1])+(getFilenameFile materialName[1])+nel_zone_ext) true
|
|
refPainter = true
|
|
)
|
|
else if (EdgeType[id][edge]==2) or (EdgeType[id][edge]==-2) then
|
|
(
|
|
-- Load material two
|
|
ref = NeLImportzone ((getFilenamePath materialName[2])+(getFilenameFile materialName[2])+nel_zone_ext) true
|
|
refPainter = true
|
|
)
|
|
else if (EdgeType[id][edge]==3) or (EdgeType[id][edge]==-3) then
|
|
(
|
|
-- Reference transition 2
|
|
zone = getTransition 2
|
|
|
|
-- Rotation
|
|
firstTransfo.symmetry = true
|
|
firstTransfo.rotation = 1
|
|
|
|
-- Translation
|
|
trans = [-cellSize,0,0]
|
|
|
|
-- The same ?
|
|
if id == 2 then
|
|
instan = true
|
|
)
|
|
else if (EdgeType[id][edge]==4) or (EdgeType[id][edge]==-4) then
|
|
(
|
|
-- Reference transition 1
|
|
zone = getTransition 1
|
|
|
|
-- Rotation
|
|
firstTransfo.symmetry = true
|
|
firstTransfo.rotation = 0
|
|
|
|
-- The same ?
|
|
if id == 1 then
|
|
instan = true
|
|
)
|
|
|
|
-- Defined ?
|
|
if zone != undefined then
|
|
(
|
|
-- Reference it
|
|
ref = instance zone
|
|
if instan == true then
|
|
setappdata ref ligo_instance_app "1"
|
|
)
|
|
if ref != undefined then
|
|
(
|
|
-- New name
|
|
ref.name = NeighborName[edge]
|
|
|
|
-- Show it
|
|
unhide ref
|
|
|
|
-- Freeze it
|
|
freeze ref
|
|
SetRykolTileSteps ref -2
|
|
|
|
-- Get an identity matrix
|
|
mt = matrix3 1
|
|
|
|
-- Rotation
|
|
mt = translate mt ([-cellSize/2,-cellSize/2,0] + trans)
|
|
|
|
if EdgeType[id][edge] >= 3 then
|
|
(
|
|
-- Destintation edge in inverted ? Symmetry
|
|
secondTransfo = compose (zone_transformation false 3) (zone_transformation true 1)
|
|
)
|
|
|
|
-- Final transformation
|
|
secondTransfo = compose secondTransfo (zone_transformation false (NeighborDeltaRot[edge] / 90))
|
|
finalTransfo = compose firstTransfo secondTransfo
|
|
|
|
-- Final symmetry
|
|
if finalTransfo.symmetry == true then
|
|
(
|
|
mt = scale mt [-1,1,1] true
|
|
)
|
|
|
|
-- Final rotation
|
|
mt = rotateZ mt (90*finalTransfo.rotation)
|
|
|
|
-- Set appdata
|
|
if finalTransfo.symmetry == true then
|
|
symmetryValue = 1
|
|
else
|
|
symmetryValue = 0
|
|
setappdata ref ligo_symmetry_app (symmetryValue as string)
|
|
setappdata ref ligo_rotate_app (finalTransfo.rotation as string)
|
|
|
|
-- Final translation
|
|
pos = (NeighborDeltaPos[edge] + [posX,posY,0]) * cellSize
|
|
mt = translate mt ([cellSize/2,cellSize/2,0] + pos)
|
|
|
|
-- Final rotation and position
|
|
ref.transform = ref.transform * mt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on DeleteDebugMarkers pressed do
|
|
(
|
|
DeleteDebugMarkersFn ()
|
|
)
|
|
|
|
on AddPaintMod pressed do
|
|
(
|
|
AddPainterModToVisible ()
|
|
)
|
|
|
|
on transition_rollout open do
|
|
(
|
|
refresh_mat_list ()
|
|
refresh_list ()
|
|
)
|
|
|
|
fn isValidTransition matName1 matName2 =
|
|
(
|
|
if (matName1 == "") or (matName2 == "") then
|
|
return false
|
|
if (matName1 == matName2) then
|
|
(
|
|
Messagebox ("Choose different names for first and second material.") title:title_msgbox beep:true
|
|
return false
|
|
)
|
|
-- Does the transition already exist ?
|
|
for i = 1 to 2 do
|
|
(
|
|
if (i == 1) then
|
|
testName = uppercase (matName1 + "-" + matName2)
|
|
else
|
|
testName = uppercase (matName2 + "-" + matName1)
|
|
for trans in TransitionProject.items do
|
|
(
|
|
testName2 = uppercase (substring trans 5 100)
|
|
if (testName == testName2) then
|
|
(
|
|
Messagebox ("The transition already exists.") title:title_msgbox beep:true
|
|
return false
|
|
)
|
|
)
|
|
)
|
|
return true
|
|
)
|
|
|
|
on DelTransition pressed do
|
|
(
|
|
if (TransitionProject.selected != undefined) then
|
|
(
|
|
transName = substring TransitionProject.selected 5 100
|
|
fileName = ligo_root_path + ligo_transition_prefix + transName + ".max"
|
|
if queryBox ("Do you want to delete "+fileName+" ?") beep:no then
|
|
(
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the .ligotrans associated
|
|
fileName = ligo_root_path + ligo_transition_path + transName + ligo_transition_ext
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the 9 .zone files
|
|
for i = 0 to 8 do
|
|
(
|
|
fileName = ligo_root_path + ligo_transition_path + transName + "-" + (i as string) + nel_zone_ext
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
)
|
|
refresh_project_list ()
|
|
refresh_list
|
|
)
|
|
)
|
|
)
|
|
|
|
on AddTransition pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Valid name ?
|
|
if (isValidTransition NewTransitionName0DDL.selected NewTransitionName1DDL.selected) == true then
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open a new project
|
|
max file new
|
|
|
|
-- Project name
|
|
projectName = ligo_root_path + ligo_transition_prefix + NewTransitionName0DDL.selected
|
|
projectName = projectName + "-" + NewTransitionName1DDL.selected + ".max"
|
|
|
|
-- Open the project
|
|
if (loadMaxFile projectName) == false then
|
|
(
|
|
for i = 1 to 9 do
|
|
(
|
|
-- Zone transition
|
|
position = (TransitionPosition[i]*cellSize) + [cellSize/2,cellSize/2,0]
|
|
|
|
-- Create some patchgrid
|
|
Quadpatch lengthsegs:5 widthsegs:5 length:cellSize width:cellSize pos:position isSelected:on
|
|
|
|
-- Add a modifer to convert it
|
|
max modify mode
|
|
modPanel.addModToSelection (NeLConvert ())
|
|
|
|
-- Collapse the node
|
|
collapseStack $
|
|
|
|
-- Set the tile step
|
|
SetRykolTileSteps $ -2
|
|
)
|
|
|
|
-- Save the max file
|
|
saveMaxFile projectName
|
|
loadMaxFile projectName
|
|
project_cur_file = projectName
|
|
|
|
-- Refresh max project
|
|
refresh_project_list ()
|
|
refresh_list ()
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on TransitionProject doubleClicked id do
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open the max project
|
|
project_cur_file = substring TransitionProject.items[id] 5 100
|
|
transition_zone_rollout.TransitionDDL.selection = finditem transition_zone_rollout.TransitionDDL.items project_cur_file
|
|
transition_zone_rollout.refresh_list project_cur_file
|
|
project_cur_file = ligo_root_path + ligo_transition_prefix + project_cur_file + ".max"
|
|
loadMaxFile project_cur_file
|
|
refresh_list ()
|
|
)
|
|
)
|
|
)
|
|
|
|
rollout material_zone_rollout "Material Zone"
|
|
(
|
|
group "Check, debug and export"
|
|
(
|
|
|
|
Button ExportAllZone "Export all zone" width:140 align:#center
|
|
Button ExportAllZoneNonOk "Export all zone non-ok" width:140 align:#center
|
|
Button ExportZone "Export zone" width:140 align:#center
|
|
Button ShowHelpZones "Show help zones" width:140 align:#center
|
|
Button DeleteDebugMarkers "Delete debug markers" width:140 align:#center
|
|
Button AddPaintMod "Add paint mod to visible" width:140 align:#center
|
|
Checkbox CheckOnly "Check only" checked:false enabled:true
|
|
Checkbox Debug "Debug" checked:false enabled:true
|
|
|
|
)
|
|
|
|
group "Projects management"
|
|
(
|
|
|
|
Dropdownlist MaterialDDL "Material" height:8 align:#center
|
|
Listbox ZoneProject "Zones" height:8 align:#center
|
|
Button DelZone "Delete selected zone" width:140 align:#center
|
|
Label ZoneName "Zone name:" align:#left
|
|
EditText NewZoneName "" width:140 align:#left
|
|
Button AddZone "Add zone" width:140 align:#center
|
|
Button CopyZone "Copy selected zone" width:140 align:#center
|
|
|
|
)
|
|
|
|
fn refresh_mat_list =
|
|
(
|
|
tmpArray = #()
|
|
append tmpArray "-- ALL --"
|
|
for proj in project_file_list do
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile proj) "-"
|
|
if (isMaterial proj) then
|
|
append tmpArray tokenArray[2]
|
|
)
|
|
MaterialDDL.items = tmpArray
|
|
)
|
|
|
|
fn refresh_zone_list currentMaterial =
|
|
(
|
|
tmpArray = #()
|
|
|
|
-- Make an array of zonematerial project
|
|
for curFileName in project_file_list do
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
|
|
-- Valid name ?
|
|
if (currentMaterial == "-- ALL --") or (tokenArray[2] == currentMaterial) then
|
|
if (tokenArray.count == 3) and (tokenArray[1] == "zonematerial") then
|
|
(
|
|
curFileDate = getFileModDate curFileName
|
|
|
|
-- exported file date
|
|
expFileDate = ""
|
|
expFileNameBase = #()
|
|
if (get_material_and_zone_name_in_zone_project_name curFileName expFileNameBase) == true then
|
|
(
|
|
expFileName = ligo_export_path + "zoneLigos\\" + expFileNameBase[1] + "-" + expFileNameBase[2] + ligo_zone_ext
|
|
if (getFiles expFileName).count != 0 then
|
|
expFileDate = getFileModDate expFileName
|
|
)
|
|
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (expFileDate != "") and (date_older_or_equal_than curFileDate expFileDate) then
|
|
(
|
|
if (currentMaterial == "-- ALL --") then
|
|
append tmpArray ("[ok]"+tokenArray[2]+"-"+tokenArray[3])
|
|
else
|
|
append tmpArray ("[ok]"+tokenArray[3])
|
|
)
|
|
else
|
|
(
|
|
if (currentMaterial == "-- ALL --") then
|
|
append tmpArray ("[..]"+tokenArray[2]+"-"+tokenArray[3])
|
|
else
|
|
append tmpArray ("[..]"+tokenArray[3])
|
|
)
|
|
)
|
|
)
|
|
ZoneProject.items = tmpArray
|
|
)
|
|
|
|
on ExportAllZone pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_zone_list MaterialDDL.selected
|
|
for curZone in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
curFileName = ligo_root_path + ligo_zonematerial_prefix
|
|
if (MaterialDDL.selected != "-- ALL --") then
|
|
curFileName = curFileName + MaterialDDL.selected + "-"
|
|
curFileName = curFileName + (substring curZone 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_zone false false false
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Zone End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportAllZoneNonOk pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_zone_list MaterialDDL.selected
|
|
for curZone in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
if (substring curZone 1 4) == "[..]" then
|
|
(
|
|
curFileName = ligo_root_path + ligo_zonematerial_prefix
|
|
if (MaterialDDL.selected != "-- ALL --") then
|
|
curFileName = curFileName + MaterialDDL.selected + "-"
|
|
curFileName = curFileName + (substring curZone 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_zone false false false
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Zone Non-Ok End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportZone pressed do
|
|
(
|
|
minimise ()
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
export_and_check_and_debug_zone CheckOnly.checked Debug.checked true
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
|
|
on DeleteDebugMarkers pressed do
|
|
(
|
|
-- Delete the markers
|
|
DeleteDebugMarkersFn ()
|
|
)
|
|
|
|
on AddPaintMod pressed do
|
|
(
|
|
AddPainterModToVisible ()
|
|
)
|
|
|
|
on ShowHelpZones pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a zone
|
|
if ($ == undefined) or ($ == $selection) then
|
|
(
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Array of index
|
|
zoneUsed = #()
|
|
zoneFilled = #()
|
|
|
|
-- Get the mask
|
|
-- resMinX = #()
|
|
-- resMinY = #()
|
|
resWidth = #()
|
|
resHeight = #()
|
|
-- if (NeLLigoGetZoneMask $ zoneUsed resMinX resMinY resWidth resHeight true) == true then
|
|
if (NeLLigoGetZoneMask $ zoneUsed resWidth resHeight true) == true then
|
|
(
|
|
-- Width and height
|
|
-- minx = resMinX[1]
|
|
-- miny = resMinY[1]
|
|
width = resWidth[1]
|
|
height = resHeight[1]
|
|
|
|
-- Number of vertices
|
|
zoneCount = width*height
|
|
|
|
-- Fill it
|
|
for i=1 to zoneCount do
|
|
(
|
|
append zoneFilled false
|
|
)
|
|
|
|
-- Node matrix
|
|
nodeTM = $.transform
|
|
|
|
-- The imported zone
|
|
imported = undefined
|
|
|
|
-- For each cells
|
|
for y = 0 to (height-1) do
|
|
for x = 0 to (width-1) do
|
|
(
|
|
-- Id of the zone
|
|
zoneId = x+y*width+1
|
|
|
|
-- Already filled ?
|
|
if ((zoneFilled[zoneId] == false) and (zoneUsed[zoneId] == false)) then
|
|
(
|
|
-- Ok ?
|
|
ok = false
|
|
|
|
-- No, must be filled ?
|
|
for neighbor = 1 to 4 do
|
|
(
|
|
-- Delta pos
|
|
deltaPos = NeighborDeltaPos[neighbor]
|
|
|
|
-- New x and y
|
|
newX = x+deltaPos.x
|
|
newY = y+deltaPos.y
|
|
|
|
-- Clip
|
|
if ((newX >= 0) and (newY >= 0) and (newX < width) and (newY < height)) then
|
|
(
|
|
-- Neighbor id
|
|
nId = newX+newY*width+1
|
|
|
|
-- Good ?
|
|
if (zoneUsed[nId] == true) then
|
|
(
|
|
-- Ok
|
|
ok = true
|
|
exit
|
|
)
|
|
)
|
|
)
|
|
|
|
-- Exited ?
|
|
if (ok == true) then
|
|
(
|
|
-- Filled
|
|
zoneFilled[zoneId] = true
|
|
|
|
-- Impoted ?
|
|
if (imported == undefined) then
|
|
(
|
|
-- Get the material file name
|
|
result = #()
|
|
get_material_and_zone_name_in_zone_project_name maxFileName result
|
|
|
|
-- Material filename
|
|
filename = ligo_root_path+ligo_material_path+result[1]+nel_zone_ext
|
|
|
|
-- Import it
|
|
imported = NeLImportZone filename true
|
|
|
|
-- Import success ?
|
|
if imported != undefined then
|
|
(
|
|
-- Imported transform
|
|
imported.transform = translate imported.transform ([x-1, y-1, 0]*cellSize)
|
|
importedTransform = transMatrix ([-x+1, -y+1, 0]*cellSize)
|
|
|
|
-- It is our reference
|
|
importedRef = imported
|
|
)
|
|
else
|
|
importedRef = undefined
|
|
)
|
|
else
|
|
(
|
|
importedRef = instance imported
|
|
setappdata importedRef ligo_instance_app "1"
|
|
)
|
|
|
|
-- Ok ?
|
|
if importedRef != undefined then
|
|
(
|
|
-- New position of the zone
|
|
importedRef.transform = translate (importedRef.transform*importedTransform) ([x-1, y-1, 0]*cellSize)
|
|
|
|
-- New name
|
|
importedRef.name = "[NELLIGO] edge zone"
|
|
|
|
-- Freeze it
|
|
freeze importedRef
|
|
SetRykolTileSteps importedRef -2
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on material_zone_rollout open do
|
|
(
|
|
refresh_mat_list ()
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
|
|
on DelZone pressed do
|
|
(
|
|
if (ZoneProject.selected != undefined) then
|
|
(
|
|
if (MaterialDDL.selected == "-- ALL --") then
|
|
zoneNameTmp = (substring ZoneProject.selected 5 100)
|
|
else
|
|
zoneNameTmp = MaterialDDL.selected + "-" + (substring ZoneProject.selected 5 100)
|
|
fileName = ligo_root_path + ligo_zonematerial_prefix + zoneNameTmp + ".max"
|
|
if queryBox ("Do you want to delete "+fileName+" ?") beep:no then
|
|
(
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .tga
|
|
fileName = ligo_export_path + "zoneBitmaps\\" + zoneNameTmp + ".tga"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .zone
|
|
fileName = ligo_export_path + "zones\\" + zoneNameTmp + ".zone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .ligozone
|
|
fileName = ligo_export_path + "zoneLigos\\" + zoneNameTmp + ".ligozone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
|
|
refresh_project_list ()
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
)
|
|
|
|
on AddZone pressed do
|
|
(
|
|
-- Valid name ?
|
|
if (NewZoneName.text == "") then
|
|
(
|
|
Messagebox "Choose a name for your new zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if (MaterialDDL.selected == "-- ALL --") then
|
|
(
|
|
Messagebox "Please select a valid material template." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
existingFile = ligo_root_path + ligo_material_prefix + MaterialDDL.selected + ".max"
|
|
newFile = ligo_root_path + ligo_zonematerial_prefix + MaterialDDL.selected + "-" + NewZoneName.text + ".max"
|
|
if (copyFile existingFile newFile) == false then
|
|
(
|
|
Messagebox ("Cannot create file :"+newFile) title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
loadMaxFile newFile
|
|
project_cur_file = newFile
|
|
refresh_project_list ()
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on CopyZone pressed do
|
|
(
|
|
if (NewZoneName.text == "") then
|
|
(
|
|
Messagebox "Choose a name for your new zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if (ZoneProject.selection == 0) then
|
|
(
|
|
Messagebox "Please select a valid material zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if (MaterialDDL.selected == "-- ALL --") then
|
|
(
|
|
tokenArray = filterString (substring ZoneProject.selected 5 100) "-"
|
|
existingFile = ligo_root_path + ligo_zonematerial_prefix + tokenArray[1] + "-" + tokenArray[2] + ".max"
|
|
newFile = ligo_root_path + ligo_zonematerial_prefix + tokenArray[1] + "-" + NewZoneName.text + ".max"
|
|
)
|
|
else
|
|
(
|
|
fileName = substring ZoneProject.selected 5 100
|
|
existingFile = ligo_root_path + ligo_zonematerial_prefix + MaterialDDL.selected + "-" + fileName + ".max"
|
|
newFile = ligo_root_path + ligo_zonematerial_prefix + MaterialDDL.selected + "-" + NewZoneName.text + ".max"
|
|
)
|
|
print ("Copying "+existingfile+" to "+newfile)
|
|
if (copyFile existingFile newFile) == false then
|
|
(
|
|
Messagebox ("Cannot create file :"+newFile) title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
loadMaxFile newFile
|
|
project_cur_file = newFile
|
|
refresh_project_list ()
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on ZoneProject doubleClicked id do
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open the max project
|
|
if (MaterialDDL.selected == "-- ALL --") then
|
|
project_cur_file = substring ZoneProject.items[id] 5 100
|
|
else
|
|
project_cur_file = MaterialDDL.selected + "-" + (substring ZoneProject.items[id] 5 100)
|
|
project_cur_file = ligo_root_path + ligo_zonematerial_prefix + project_cur_file + ".max"
|
|
loadMaxFile project_cur_file
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
|
|
on MaterialDDL selected NewMaterialSelected do
|
|
(
|
|
refresh_zone_list MaterialDDL.selected
|
|
)
|
|
)
|
|
|
|
rollout transition_zone_rollout "Transition Zone"
|
|
(
|
|
group "Check, debug and export"
|
|
(
|
|
|
|
Button ExportAllTransZone "Export all transZone" width:140 align:#center
|
|
Button ExportAllTransZoneNonOk "Export all transZone non-ok" width:140 align:#center
|
|
Button ExportZone "Export zone" width:140 align:#center
|
|
Button HideOtherZones "Hide other zones" width:140 align:#center
|
|
Button UnhideOtherZones "Unhide other zones" width:140 align:#center
|
|
Button ShowHelpZones "Show help zones" width:140 align:#center
|
|
Button DeleteDebugMarkers "Delete debug markers" width:140 align:#center
|
|
Button AddPaintMod "Add paint mod to visible" width:140 align:#center
|
|
Checkbox CheckOnly "Check only" checked:false enabled:true
|
|
Checkbox Debug "Debug" checked:false enabled:true
|
|
|
|
)
|
|
|
|
group "Projects management"
|
|
(
|
|
|
|
Dropdownlist TransitionDDL "Transition" height:8 align:#center
|
|
Listbox ZoneProject "transZone projects" height:8 align:#center
|
|
Button DelTransZone "Delete selected transZone" width:140 align:#center
|
|
Label ZoneName "transZone name: " align:#left
|
|
EditText NewTransZoneName "" width:140 align:#left
|
|
Button AddTransZone "Add transZone" width:140 align:#center
|
|
Button CopyTransZone "Copy selected transZone" width:140 align:#center
|
|
|
|
)
|
|
|
|
fn refresh_trans_list =
|
|
(
|
|
tmpArray = #()
|
|
append tmpArray "-- ALL --"
|
|
for proj in project_file_list do
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile proj) "-"
|
|
if (isTransition proj) then
|
|
append tmpArray (tokenArray[2] + "-" + tokenArray[3])
|
|
)
|
|
TransitionDDL.items = tmpArray
|
|
)
|
|
|
|
fn refresh_list trans =
|
|
(
|
|
tmpArray = #()
|
|
|
|
for curFileName in project_file_list do
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
|
|
-- Valid name ?
|
|
if (tokenArray.count == 4) and (tokenArray[1] == "zonetransition") and
|
|
((trans == "-- ALL --") or (trans == (tokenArray[2]+"-"+tokenArray[3]))) then
|
|
(
|
|
curFileDate = getFileModDate curFileName
|
|
|
|
-- exported file date
|
|
isUpToDate = true
|
|
for i = 0 to 8 do
|
|
(
|
|
expFileDate = ""
|
|
expFileName = ligo_export_path + "zoneLigos\\" + tokenArray[2] + "-" + tokenArray[3]
|
|
expFileName = expFileName + "-" + tokenArray[4] + "-" + (i as string) + ligo_zone_ext
|
|
if (getFiles expFileName).count != 0 then
|
|
expFileDate = getFileModDate expFileName
|
|
if not ((expFileDate != "") and (date_older_or_equal_than curFileDate expFileDate)) then
|
|
isUpToDate = false
|
|
)
|
|
|
|
if (isUpToDate == true) then
|
|
(
|
|
if (trans == "-- ALL --") then
|
|
append tmpArray ("[ok]" + tokenArray[2] + "-" + tokenArray[3] + "-" + tokenArray[4])
|
|
else
|
|
append tmpArray ("[ok]" + tokenArray[4])
|
|
)
|
|
else
|
|
(
|
|
if (trans == "-- ALL --") then
|
|
append tmpArray ("[..]" + tokenArray[2] + "-" + tokenArray[3] + "-" + tokenArray[4])
|
|
else
|
|
append tmpArray ("[..]" + tokenArray[4])
|
|
)
|
|
)
|
|
)
|
|
|
|
ZoneProject.items = tmpArray
|
|
)
|
|
|
|
on ExportAllTransZone pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list TransitionDDL.selected
|
|
for curTrans in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
curFileName = ligo_root_path + ligo_zonetransition_prefix
|
|
if (TransitionDDL.selected != "-- ALL --") then
|
|
curFileName = curFileName + TransitionDDL.selected + "-"
|
|
curFileName = curFileName + (substring curTrans 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_transition_zone false false false
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All TransZone End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportAllTransZoneNonOk pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_list TransitionDDL.selected
|
|
for curTrans in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
if (substring curTrans 1 4) == "[..]" then
|
|
(
|
|
curFileName = ligo_root_path + ligo_zonetransition_prefix
|
|
if (TransitionDDL.selected != "-- ALL --") then
|
|
curFileName = curFileName + TransitionDDL.selected + "-"
|
|
curFileName = curFileName + (substring curTrans 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_transition_zone false false false
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All TransZone Non-Ok End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportZone pressed do
|
|
(
|
|
minimise ()
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
export_and_check_and_debug_transition_zone CheckOnly.checked Debug.checked true
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
|
|
on DeleteDebugMarkers pressed do
|
|
(
|
|
-- Delete the markers
|
|
DeleteDebugMarkersFn ()
|
|
)
|
|
|
|
on AddPaintMod pressed do
|
|
(
|
|
AddPainterModToVisible ()
|
|
)
|
|
|
|
on ShowHelpZones pressed do
|
|
(
|
|
-- Get nelsize
|
|
cellSize = NeLLigoGetCellSize ()
|
|
|
|
-- Select a file ?
|
|
if $ == undefined then
|
|
(
|
|
messageBox "Please select a 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if $ == $selection then
|
|
(
|
|
messageBox "Please select only one 3ds NeL patch mesh object" title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
-- Select the two materials
|
|
materialName = #()
|
|
ok = get_transition_and_zone_name_in_zone_project_name maxFileName materialName
|
|
|
|
-- Make material file names with
|
|
materialName[1] = ligo_root_path+ligo_material_path+materialName[1]+ligo_material_ext
|
|
materialName[2] = ligo_root_path+ligo_material_path+materialName[2]+ligo_material_ext
|
|
|
|
-- Selected ?
|
|
if ok == true then
|
|
(
|
|
-- Get the zone coordinate
|
|
x = #()
|
|
y = #()
|
|
if (getTransitionZoneCoordinates $ x y) == true then
|
|
(
|
|
-- Copy the pos
|
|
posX = x[1]
|
|
posY = y[1]
|
|
|
|
-- Transition number
|
|
id = TransitionIds[posY+1][posX+1]
|
|
|
|
-- For the 4 edges
|
|
for edge = 1 to 4 do
|
|
(
|
|
-- Our zone
|
|
ref = undefined
|
|
|
|
-- First transfor, to place good edge on the left
|
|
firstTransfo = zone_transformation false 0
|
|
|
|
-- Second transfor, to place good edge on the good destination edge
|
|
secondTransfo = zone_transformation false 0
|
|
|
|
-- Translation to do
|
|
trans= point3 0 0 0
|
|
|
|
-- What kind of edge
|
|
if (EdgeType[id][edge]==1) or (EdgeType[id][edge]==-1) then
|
|
(
|
|
-- Load material one
|
|
ref = NeLImportzone ((getFilenamePath materialName[1])+(getFilenameFile materialName[1])+nel_zone_ext) true
|
|
)
|
|
else if (EdgeType[id][edge]==2) or (EdgeType[id][edge]==-2) then
|
|
(
|
|
-- Load material two
|
|
ref = NeLImportzone ((getFilenamePath materialName[2])+(getFilenameFile materialName[2])+nel_zone_ext) true
|
|
)
|
|
else if (EdgeType[id][edge]==3) or (EdgeType[id][edge]==-3) then
|
|
(
|
|
-- Reference transition 2
|
|
ref = NeLImportzone (ligo_root_path+ligo_transition_path+(getFilenameFile materialName[1])+"-"+(getFilenameFile materialName[2])+"-1"+nel_zone_ext) true
|
|
|
|
-- Rotation
|
|
-- Symmetry
|
|
firstTransfo.symmetry = true
|
|
firstTransfo.rotation = 1
|
|
|
|
-- Translation
|
|
trans = [-cellSize,0,0]
|
|
)
|
|
else if (EdgeType[id][edge]==4) or (EdgeType[id][edge]==-4) then
|
|
(
|
|
-- Reference transition 1
|
|
ref = NeLImportzone (ligo_root_path+ligo_transition_path+(getFilenameFile materialName[1])+"-"+(getFilenameFile materialName[2])+"-0"+nel_zone_ext) true
|
|
|
|
-- Rotation
|
|
-- Symmetry
|
|
firstTransfo.symmetry = true
|
|
firstTransfo.rotation = 0
|
|
)
|
|
|
|
if ref != undefined then
|
|
(
|
|
-- New name
|
|
ref.name = NeighborName[edge]
|
|
|
|
-- Show it
|
|
unhide ref
|
|
|
|
-- Freeze it
|
|
freeze ref
|
|
|
|
-- Set the tile set
|
|
SetRykolTileSteps ref -2
|
|
|
|
-- Get an identity matrix
|
|
mt = matrix3 1
|
|
|
|
-- Rotation
|
|
mt = translate mt ([-cellSize/2,-cellSize/2,0] + trans)
|
|
|
|
if EdgeType[id][edge] >= 3 then
|
|
(
|
|
-- Destintation edge in inverted ? Symmetry
|
|
secondTransfo = compose (zone_transformation false 3) (zone_transformation true 1)
|
|
)
|
|
|
|
-- Final transformation
|
|
secondTransfo = compose secondTransfo (zone_transformation false (NeighborDeltaRot[edge] / 90))
|
|
finalTransfo = compose firstTransfo secondTransfo
|
|
|
|
-- Final symmetry
|
|
if finalTransfo.symmetry == true then
|
|
(
|
|
mt = scale mt [-1,1,1] true
|
|
)
|
|
|
|
-- Final rotation
|
|
mt = rotateZ mt (90*finalTransfo.rotation)
|
|
|
|
-- Set appdata
|
|
if finalTransfo.symmetry == true then
|
|
symmetryValue = 1
|
|
else
|
|
symmetryValue = 0
|
|
setappdata ref ligo_symmetry_app (symmetryValue as string)
|
|
setappdata ref ligo_rotate_app (finalTransfo.rotation as string)
|
|
|
|
-- Final translation
|
|
pos = (NeighborDeltaPos[edge] + [posX,posY,0]) * cellSize
|
|
mt = translate mt ([cellSize/2,cellSize/2,0] + pos)
|
|
|
|
-- Final rotation and position
|
|
ref.transform = ref.transform * mt
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on transition_zone_rollout open do
|
|
(
|
|
refresh_trans_list ()
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
|
|
on DelTransZone pressed do
|
|
(
|
|
if (ZoneProject.selected != undefined) then
|
|
(
|
|
if (TransitionDDL.selected == "-- ALL --") then
|
|
transZoneTmp = (substring ZoneProject.selected 5 100)
|
|
else
|
|
transZoneTmp = TransitionDDL.selected + "-" + (substring ZoneProject.selected 5 100)
|
|
fileName = ligo_root_path + ligo_zonetransition_prefix + transZoneTmp + ".max"
|
|
if queryBox ("Do you want to delete "+fileName+" ?") beep:no then
|
|
(
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the 9 .tga, .zone and .ligozone files
|
|
for i = 0 to 8 do
|
|
(
|
|
-- delete exported file associated : .tga
|
|
fileName = ligo_export_path + "zoneBitmaps\\" + transZoneTmp + "-" + (i as string) + ".tga"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
|
|
fileName = ligo_export_path + "zones\\" + transZoneTmp + "-" + (i as string) + ".zone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
|
|
fileName = ligo_export_path + "zoneLigos\\" + transZoneTmp + "-" + (i as string) + ".ligozone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
)
|
|
refresh_project_list ()
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
)
|
|
)
|
|
|
|
on AddTransZone pressed do
|
|
(
|
|
-- Valid name ?
|
|
if (NewTransZoneName.text == "") then
|
|
(
|
|
Messagebox "Choose a name for your new transition zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if (TransitionDDL.selected == "-- ALL --") then
|
|
(
|
|
Messagebox "Please select a valid transition template." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
existingFile = ligo_root_path + ligo_transition_prefix + TransitionDDL.selected + ".max"
|
|
newFile = ligo_root_path + ligo_zonetransition_prefix + TransitionDDL.selected + "-" + NewTransZoneName.text + ".max"
|
|
if (copyFile existingFile newFile) == false then
|
|
(
|
|
Messagebox ("Cannot create file :"+newFile) title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
loadMaxFile newFile
|
|
project_cur_file = newFile
|
|
refresh_project_list ()
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on CopyTransZone pressed do
|
|
(
|
|
if (NewTransZoneName.text == "") then
|
|
(
|
|
Messagebox "Choose a name for your new transZone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
if (ZoneProject.selection == 0) then
|
|
(
|
|
Messagebox "Please select a valid transition zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
existingFile = ligo_root_path + ligo_zonetransition_prefix
|
|
if (TransitionDDL.selected == "-- ALL --") then
|
|
(
|
|
tokenArray = filterString (substring ZoneProject.selected 5 100) "-"
|
|
existingFile = existingFile + tokenArray[1] + "-" + tokenArray[2] + "-"
|
|
newFile = existingFile
|
|
existingFile = existingFile + tokenArray[3] + ".max"
|
|
newFile = newFile + NewTransZoneName.text + ".max"
|
|
)
|
|
else
|
|
(
|
|
fileName = substring ZoneProject.selected 5 100
|
|
existingFile = existingFile + TransitionDDL.selected + "-"
|
|
newFile = existingFile
|
|
existingFile = existingFile + fileName + ".max"
|
|
newFile = newFile + NewTransZoneName.text + ".max"
|
|
)
|
|
print ("Copying "+existingfile+" to "+newfile)
|
|
if (copyFile existingFile newFile) == false then
|
|
(
|
|
Messagebox ("Cannot create file :"+newFile) title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
loadMaxFile newFile
|
|
project_cur_file = newFile
|
|
refresh_project_list ()
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on ZoneProject doubleClicked id do
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open the max project
|
|
if (TransitionDDL.selected == "-- ALL --") then
|
|
project_cur_file = substring ZoneProject.items[id] 5 100
|
|
else
|
|
project_cur_file = transitionDDL.selected + "-" + (substring ZoneProject.items[id] 5 100)
|
|
project_cur_file = ligo_root_path + ligo_zonetransition_prefix + project_cur_file + ".max"
|
|
loadMaxFile project_cur_file
|
|
)
|
|
)
|
|
|
|
on TransitionDDL selected NewTransitionSelected do
|
|
(
|
|
refresh_list TransitionDDL.selected
|
|
)
|
|
|
|
on HideOtherZones pressed do
|
|
(
|
|
-- For each node
|
|
for node in geometry do
|
|
(
|
|
-- Is a NeL patch mesh ?
|
|
if (classof node) == RklPatch then
|
|
(
|
|
-- Is not a debug marker ?
|
|
if (isDebugMarker node) == false then
|
|
(
|
|
-- It is node selected ?
|
|
if node.isSelected == false then
|
|
(
|
|
-- Hide it
|
|
hide node
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on UnhideOtherZones pressed do
|
|
(
|
|
-- For each node
|
|
for node in geometry do
|
|
(
|
|
-- Is a NeL patch mesh ?
|
|
if (classof node) == RklPatch then
|
|
(
|
|
-- Is not a debug marker ?
|
|
if (isDebugMarker node) == false then
|
|
(
|
|
-- It is node selected ?
|
|
if node.isSelected == false then
|
|
(
|
|
-- Hide it
|
|
unhide node
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
rollout special_zone_rollout "Special Zone"
|
|
(
|
|
group "Check, debug and export"
|
|
(
|
|
|
|
Button ExportAllZone "Export all zone" width:140 align:#center
|
|
Button ExportAllZoneNonOk "Export all zone non-ok" width:140 align:#center
|
|
Button ExportZone "Export zone" width:140 align:#center
|
|
Checkbox CheckOnly "Check only" checked:false enabled:true
|
|
Checkbox Debug "Debug" checked:false enabled:true
|
|
|
|
)
|
|
|
|
group "Projects management"
|
|
(
|
|
|
|
Listbox ZoneProject "Zones" height:8 align:#center
|
|
Button DelZone "Delete selected zone" width:140 align:#center
|
|
Label ZoneName "Zone name:" align:#left
|
|
EditText NewZoneName "" width:140 align:#left
|
|
Button AddZone "Add zone" width:140 align:#center
|
|
|
|
)
|
|
|
|
fn refresh_zone_list =
|
|
(
|
|
tmpArray = #()
|
|
|
|
-- Make an array of zonespecial project
|
|
for curFileName in project_file_list do
|
|
(
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
|
|
-- Valid name ?
|
|
if (tokenArray.count == 2) and (tokenArray[1] == "zonespecial") then
|
|
(
|
|
curFileDate = getFileModDate curFileName
|
|
|
|
-- exported file date
|
|
expFileDate = ""
|
|
expFileName = ligo_export_path + "zoneLigos\\" + tokenArray[2] + ligo_zone_ext
|
|
if (getFiles expFileName).count != 0 then
|
|
expFileDate = getFileModDate expFileName
|
|
|
|
-- Get token
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (expFileDate != "") and (date_older_or_equal_than curFileDate expFileDate) then
|
|
(
|
|
append tmpArray ("[ok]"+tokenArray[2])
|
|
)
|
|
else
|
|
(
|
|
append tmpArray ("[..]"+tokenArray[2])
|
|
)
|
|
)
|
|
)
|
|
ZoneProject.items = tmpArray
|
|
)
|
|
|
|
on ExportAllZone pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
for curZone in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
curFileName = ligo_root_path + ligo_zonespecial_prefix
|
|
curFileName = curFileName + (substring curZone 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_special_zone false false false
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Zone End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportAllZoneNonOk pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
for curZone in ZoneProject.items do
|
|
(
|
|
minimise ()
|
|
if (substring curZone 1 4) == "[..]" then
|
|
(
|
|
curFileName = ligo_root_path + ligo_zonespecial_prefix
|
|
curFileName = curFileName + (substring curZone 5 100) + ".max"
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
export_and_check_and_debug_special_zone false false false
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
)
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
Messagebox "Export All Zone Non-Ok End" title:title_msgbox beep:true
|
|
)
|
|
|
|
on ExportZone pressed do
|
|
(
|
|
minimise ()
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
export_and_check_and_debug_special_zone CheckOnly.checked Debug.checked true
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
|
|
on special_zone_rollout open do
|
|
(
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
|
|
on DelZone pressed do
|
|
(
|
|
if (ZoneProject.selected != undefined) then
|
|
(
|
|
zoneNameTmp = (substring ZoneProject.selected 5 100)
|
|
fileName = ligo_root_path + ligo_zonespecial_prefix + zoneNameTmp + ".max"
|
|
if queryBox ("Do you want to delete "+fileName+" ?") beep:no then
|
|
(
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .tga
|
|
fileName = ligo_export_path + "zoneBitmaps\\" + zoneNameTmp + ".tga"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .zone
|
|
fileName = ligo_export_path + "zones\\" + zoneNameTmp + ".zone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
-- delete the exported file .ligozone
|
|
fileName = ligo_export_path + "zoneLigos\\" + zoneNameTmp + ".ligozone"
|
|
deleteFile filename
|
|
print ("deleting "+filename)
|
|
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
)
|
|
)
|
|
|
|
on AddZone pressed do
|
|
(
|
|
-- Valid name ?
|
|
if (NewZoneName.text == "") then
|
|
(
|
|
Messagebox "Choose a name for your new zone." title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
newFile = ligo_root_path + ligo_zonespecial_prefix + NewZoneName.text + ".max"
|
|
if (saveMaxFile newFile) == false then
|
|
(
|
|
Messagebox ("Cannot create file :"+newFile) title:title_msgbox beep:true
|
|
)
|
|
else
|
|
(
|
|
project_cur_file = newFile
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
)
|
|
)
|
|
|
|
on ZoneProject doubleClicked id do
|
|
(
|
|
-- Check for save
|
|
if (checkForSave ()) == true then
|
|
(
|
|
-- Open the max project
|
|
project_cur_file = substring ZoneProject.items[id] 5 100
|
|
project_cur_file = ligo_root_path + ligo_zonespecial_prefix + project_cur_file + ".max"
|
|
loadMaxFile project_cur_file
|
|
refresh_project_list ()
|
|
refresh_zone_list ()
|
|
)
|
|
)
|
|
)
|
|
|
|
rollout properties_rollout "Properties"
|
|
(
|
|
group "Flags"
|
|
(
|
|
Checkbox Passable "Passable" checked:false enabled:false
|
|
)
|
|
|
|
fn refreshProperties =
|
|
(
|
|
if (($ != undefined) and ($ != $selection)) then
|
|
(
|
|
-- Get the passable appdata
|
|
Passable.enabled = true
|
|
Passable.checked = ((getappdata $ ligo_passable_app) != undefined)
|
|
)
|
|
else
|
|
(
|
|
Passable.enabled = false
|
|
)
|
|
)
|
|
|
|
on Passable changed state do
|
|
(
|
|
if (($ != undefined) and ($ != $selection)) then
|
|
(
|
|
-- Get the passable appdata
|
|
if Passable.checked then
|
|
setappdata $ ligo_passable_app "1"
|
|
else
|
|
deleteappdata $ ligo_passable_app
|
|
)
|
|
else
|
|
(
|
|
Passable.enabled = false
|
|
)
|
|
)
|
|
|
|
on properties_rollout open do
|
|
(
|
|
refreshProperties ()
|
|
)
|
|
)
|
|
|
|
rollout options_rollout "Options"
|
|
(
|
|
group "Directories"
|
|
(
|
|
Label LigoPathLabel "Ligo Root Path" align:#left
|
|
EditText LigoPath "" width:140 align:#center
|
|
Label ExportPathLabel "Ligo Export Path" align:#left
|
|
EditText LigoExportPath "" width:140 align:#center
|
|
Label OldZonePathPathLabel "Old Zone Path" align:#left
|
|
EditText OldZonePath "" width:140 align:#center
|
|
Button SetupDirectories "Setup directories" width:140 align:#center
|
|
Button ExportOldZonesTga "Export old zones TGA" width:140 align:#center
|
|
)
|
|
|
|
on SetupDirectories pressed do
|
|
(
|
|
makedir ligo_root_path
|
|
makedir (ligo_root_path+"\\materials")
|
|
makedir (ligo_root_path+"\\transitions")
|
|
makedir (ligo_export_path+"\\zones")
|
|
makedir (ligo_export_path+"\\zonebitmaps")
|
|
makedir (ligo_export_path+"\\zoneLigos")
|
|
)
|
|
|
|
fn findID node =
|
|
(
|
|
local
|
|
|
|
-- Const
|
|
alphabet="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
|
NameTab = filterString node.name "_"
|
|
if (NameTab != undefined) and (NameTab.count == 2) then
|
|
(
|
|
Z_ID = -1
|
|
alpha_letter1 = NameTab[2][1]
|
|
alpha_letter2 = NameTab[2][2]
|
|
alpha_letter1_value = findstring alphabet alpha_letter1
|
|
alpha_letter2_value = findstring alphabet alpha_letter2
|
|
|
|
-- Decompose theh name in an array array[1]=numeric string value array[2]=alpha string value
|
|
-- The index of the engine start at 0 but the script one at 1 so we sub 1 each time
|
|
alpha_sub_id = (((alpha_letter1_value as integer - 1) * 26 + (alpha_letter2_value as integer)))-1
|
|
num_sub_id = (NameTab[1] as integer)-1
|
|
|
|
-- Array of 256 per 256
|
|
---------------------------
|
|
-- 0 1 2 3 ... 255
|
|
-- 256 257 258 259 ... 511
|
|
-- 512 513 514 515 ... 767
|
|
-- ...
|
|
|
|
Z_ID = num_sub_id*256 + alpha_sub_id
|
|
|
|
return Z_ID
|
|
)
|
|
else
|
|
return 0
|
|
)
|
|
|
|
fn idToCoord id coord =
|
|
(
|
|
coord[2] = - floor (id/256)
|
|
coord[1] = id + (coord[2]*256)
|
|
coord[2] = coord[2] - 1
|
|
)
|
|
|
|
on ExportOldZonesTga pressed do
|
|
(
|
|
makedir ligo_root_path
|
|
makedir (ligo_root_path+"\\old_zones_tga")
|
|
|
|
-- Get files in the zone_source_directory
|
|
files = getFiles (old_zone_path+"*.max")
|
|
|
|
-- Sort files
|
|
sort files
|
|
|
|
-- No file ?
|
|
if files.count != 0 then
|
|
(
|
|
-- For each files
|
|
for i = 1 to files.count do
|
|
(
|
|
-- Ok ?
|
|
ok = false
|
|
|
|
-- Output file
|
|
output = ligo_root_path+"old_zones_tga\\"+(getFilenameFile files[i])+".tga"
|
|
|
|
-- Compare file date
|
|
if (NeLTestFileDate output files[i]) == true then
|
|
(
|
|
-- Open the max project
|
|
if loadMaxFile files[i] == true then
|
|
(
|
|
-- Select none
|
|
max select none
|
|
|
|
-- For each object in the priject
|
|
for i in geometry do
|
|
(
|
|
-- Look for a NeL patch mesh
|
|
if (classof i)==RklPatch then
|
|
(
|
|
-- Get coord with the name
|
|
coord = #()
|
|
idToCoord (findID i) coord
|
|
NeLLigoMakeSnapShot i output (coord[1] as integer) ((coord[1] as integer) + 1) (coord[2] as integer) ((coord[2] as integer) + 1) true
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
on LigoPath changed newPath do
|
|
(
|
|
ligo_root_path = newPath
|
|
lastChar = ligo_root_path[ligo_root_path.count]
|
|
if (lastChar != "\\") and (lastChar != "/") then
|
|
ligo_root_path += "\\"
|
|
setINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoPath" ligo_root_path
|
|
)
|
|
|
|
on LigoExportPath changed newPath do
|
|
(
|
|
ligo_export_path = newPath
|
|
lastChar = ligo_export_path[ligo_export_path.count]
|
|
if (lastChar != "\\") and (lastChar != "/") then
|
|
ligo_export_path += "\\"
|
|
setINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoExportPath" ligo_export_path
|
|
)
|
|
|
|
on OldZonePath changed newPath do
|
|
(
|
|
old_zone_path = newPath
|
|
lastChar = old_zone_path[old_zone_path.count]
|
|
if (lastChar != "\\") and (lastChar != "/") then
|
|
old_zone_path += "\\"
|
|
setINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoOldZonePath" old_zone_path
|
|
)
|
|
|
|
on options_rollout open do
|
|
(
|
|
LigoPath.text = ligo_root_path
|
|
LigoExportPath.text = ligo_export_path
|
|
OldZonePath.text = old_zone_path
|
|
)
|
|
|
|
)
|
|
|
|
rollout exporter_rollout "Exporter"
|
|
(
|
|
Button ExpAll "Export All" width:140 align:#center
|
|
Button ExpAllMaterialTemp "Export Material Template" width:140 align:#center
|
|
Button ExpAllTransTemp "Export Transition Template" width:140 align:#center
|
|
Button ExpAllZone "Export Zone" width:140 align:#center
|
|
Button ExpAllTransZone "Export TransZone" width:140 align:#center
|
|
|
|
fn expMatTemp =
|
|
(
|
|
for curFileName in project_file_list do
|
|
(
|
|
if (isMaterial curFileName) == true then
|
|
(
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
print ("Exporting "+ (getFilenameFile curFileName))
|
|
export_and_check_and_debug_material false false false
|
|
)
|
|
)
|
|
)
|
|
|
|
fn expTransTemp =
|
|
(
|
|
for curFileName in project_file_list do
|
|
(
|
|
if (isTransition curFileName) == true then
|
|
(
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
print ("Exporting "+ (getFilenameFile curFileName))
|
|
export_and_check_and_debug_transition_template false false false
|
|
)
|
|
)
|
|
)
|
|
|
|
fn expZone =
|
|
(
|
|
for curFileName in project_file_list do
|
|
(
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (tokenArray.count == 3) and (tokenArray[1] == "zonematerial") then
|
|
(
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
print ("Exporting "+ (getFilenameFile curFileName))
|
|
export_and_check_and_debug_zone false false false
|
|
)
|
|
)
|
|
)
|
|
|
|
fn expTransZone =
|
|
(
|
|
for curFileName in project_file_list do
|
|
(
|
|
tokenArray = filterString (getFilenameFile curFileName) "-"
|
|
if (tokenArray.count == 4) and (tokenArray[1] == "zonetransition") then
|
|
(
|
|
loadMaxFile curFileName
|
|
selectAllPatch ()
|
|
print ("Exporting "+ (getFilenameFile curFileName))
|
|
export_and_check_and_debug_transition_zone false false false
|
|
)
|
|
)
|
|
)
|
|
|
|
on ExpAll pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
expMatTemp ()
|
|
expTransTemp ()
|
|
expZone ()
|
|
expTransZone ()
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
print "Export Finished"
|
|
Messagebox "Export All End" title:title_msgbox beep:true
|
|
refresh_project_list ()
|
|
)
|
|
|
|
on ExpAllMaterialTemp pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
expMatTemp ()
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
print "Export Finished"
|
|
Messagebox "Export All Material Template End" title:title_msgbox beep:true
|
|
refresh_project_list ()
|
|
)
|
|
|
|
on ExpAllTransTemp pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
expTransTemp ()
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
print "Export Finished"
|
|
Messagebox "Export All Transition Template End" title:title_msgbox beep:true
|
|
refresh_project_list ()
|
|
)
|
|
|
|
on ExpAllZone pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
expZone ()
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
print "Export Finished"
|
|
Messagebox "Export All Zone End" title:title_msgbox beep:true
|
|
refresh_project_list ()
|
|
)
|
|
|
|
on ExpAllTransZone pressed do
|
|
(
|
|
if (project_cur_file != "") then
|
|
saveMaxFile project_cur_file
|
|
|
|
expTransZone ()
|
|
|
|
if (project_cur_file != "") then
|
|
loadMaxFile project_cur_file
|
|
print "Export Finished"
|
|
Messagebox "Export All TransZone End" title:title_msgbox beep:true
|
|
refresh_project_list ()
|
|
)
|
|
)
|
|
|
|
-- ========== --
|
|
-- Main entry --
|
|
-- ========== --
|
|
|
|
if ligoscape_tools_floater != undefined do
|
|
(
|
|
closerolloutfloater ligoscape_tools_floater
|
|
)
|
|
|
|
-- Get the ligo path
|
|
ligopath = getINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoPath"
|
|
if ligopath != "" then ligo_root_path = ligopath
|
|
ligopath = getINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoExportPath"
|
|
if ligopath != "" then ligo_export_path = ligopath
|
|
ligopath = getINISetting ((GetDir #plugcfg)+"\\nelligo.ini") "LigoConfig" "LigoOldZonePath"
|
|
if ligopath != "" then old_zone_path = ligopath
|
|
|
|
ligoscape_tools_floater = newRolloutFloater "NeL Ligoscape" 225 600
|
|
|
|
refresh_project_list ()
|
|
|
|
addrollout material_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout transition_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout material_zone_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout transition_zone_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout special_zone_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout properties_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout options_rollout ligoscape_tools_floater rolledUp:true
|
|
addrollout exporter_rollout ligoscape_tools_floater rolledUp:true
|
|
|
|
|
|
fn updataCallBack =
|
|
(
|
|
properties_rollout.refreshProperties ()
|
|
)
|
|
|
|
callbacks.addScript #filePostOpen "updataCallBack ()"
|
|
callbacks.addScript #selectionSetChanged "updataCallBack ()"
|