You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
269 lines
7.4 KiB
Plaintext
269 lines
7.4 KiB
Plaintext
--sceneView . Christopher Evans . Crytek
|
|
|
|
if sceneView != undefined then
|
|
(
|
|
destroyDialog sceneView
|
|
)
|
|
|
|
ilTv = dotNetObject "System.Windows.Forms.ImageList"
|
|
ilTv.imageSize = dotNetObject "System.Drawing.Size" 16 15
|
|
|
|
rollout sceneView "SceneView v.001"
|
|
(
|
|
|
|
fn getIconFromBitmap thePath number iconFileName =
|
|
(
|
|
theFileName = getDir #image +"\\icon_"+ iconFileName +".bmp"
|
|
if not doesFileExist theFileName do
|
|
(
|
|
tempBmp = openBitmap thePath
|
|
iconBmp = bitmap 16 15
|
|
for v = 0 to 14 do
|
|
setPixels iconBmp [0,v] (getPixels tempBmp [(number-1)*16, v] 16)
|
|
iconBmp.filename = theFileName
|
|
save iconBmp
|
|
close iconBmp
|
|
close tempBmp
|
|
)
|
|
img = dotNetClass "System.Drawing.Image" --create an image
|
|
ilTv.images.add (img.fromFile theFileName) --add to the list
|
|
)
|
|
|
|
fn initTreeView tv =
|
|
(
|
|
tv.Indent= 28
|
|
tv.CheckBoxes = true --same as in ActiveX
|
|
tv.labelEdit = true
|
|
tv.Indent = 15
|
|
tv.Scrollable = true
|
|
colorTest = dotNetClass "System.Drawing.Color"
|
|
tv.BackColor = colorTest.FromArgb 255 196 196 196
|
|
iconDir = (getDir #ui) + "\\icons\\"
|
|
--We call our function for each icon, this time also passing a
|
|
--third argument with the icon name suffix.
|
|
getIconFromBitmap (iconDir + "Standard_16i.bmp") 2 "Sphere"
|
|
getIconFromBitmap (iconDir + "Standard_16i.bmp") 1 "Box"
|
|
getIconFromBitmap (iconDir + "Lights_16i.bmp") 3 "Light"
|
|
getIconFromBitmap (iconDir + "Cameras_16i.bmp") 2 "Camera"
|
|
getIconFromBitmap (iconDir + "Helpers_16i.bmp") 1 "Helper"
|
|
getIconFromBitmap (iconDir + "Splines_16i.bmp") 2 "Shape"
|
|
getIconFromBitmap (iconDir + "Systems_16i.bmp") 1 "Bone"
|
|
--At the end, we assign the ImageList to the TreeView.
|
|
tv.imageList = ilTv
|
|
)
|
|
|
|
|
|
fn addChildren theNode theChildren =
|
|
(
|
|
for c in theChildren do
|
|
(
|
|
newNode = theNode.Nodes.add c.name c.name
|
|
newNode.tag = dotNetMXSValue c
|
|
--newNode.count = c.handle
|
|
--By default, all nodes will use icon 0 (the first one) unless
|
|
--specified otherwise via the .iconIndex and .selectedIconIndex
|
|
--properties. We set both of them to the icon corresponding to
|
|
--the superclass of the scene object:
|
|
newNode.imageIndex = newNode.selectedImageIndex = case superclassof c of
|
|
(
|
|
Default: 1
|
|
GeometryClass:
|
|
(
|
|
case (c.classid[1]) of
|
|
(
|
|
Default: 1
|
|
683634317: 6 -- bones
|
|
37157: 6 -- biped objects
|
|
)
|
|
)
|
|
Light: 2
|
|
Camera: 3
|
|
Helper: 4
|
|
)
|
|
|
|
newNode.checked = not c.isHidden --same as in ActiveX
|
|
--For the color, we create a DotNet color class from the
|
|
--wirecolor of the object and assign to the .forecolor of
|
|
--the TreeView node:
|
|
--newNode.forecolor = (dotNetClass "System.Drawing.Color").fromARGB c.wirecolor.r c.wirecolor.g c.wirecolor.b
|
|
addChildren newNode c.children
|
|
)
|
|
)
|
|
|
|
|
|
|
|
--Since every node uses icon with index 0 unless specified otherwise
|
|
--the Root Node will use the first icon by default.
|
|
fn fillInTreeView tv =
|
|
(
|
|
theRoot = sceneview.tv.Nodes.add "WORLD" "WORLD"
|
|
rootNodes = for o in objects where o.parent == undefined collect o
|
|
sceneview.addChildren theRoot rootNodes
|
|
)
|
|
|
|
fn refresh =
|
|
(
|
|
sceneview.tv.nodes.clear()
|
|
sceneview.fillInTreeView tv
|
|
sceneview.tv.topnode.expand()
|
|
)
|
|
|
|
fn getSelectedNode =
|
|
(
|
|
try
|
|
(
|
|
if selection[1] != undefined then
|
|
(
|
|
--print selection[1].name
|
|
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find selection[1].name true)[1]
|
|
sceneview.tv.SelectedNode.EnsureVisible()
|
|
colorTest = dotNetClass "System.Drawing.Color"
|
|
sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 221 221 221
|
|
sceneview.tv.refresh()
|
|
)
|
|
)
|
|
catch -- for undo
|
|
(
|
|
refresh()
|
|
if selection[1] != undefined then
|
|
(
|
|
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find selection[1].name true)[1]
|
|
sceneview.tv.SelectedNode.EnsureVisible()
|
|
colorTest = dotNetClass "System.Drawing.Color"
|
|
sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 221 221 221
|
|
)
|
|
)
|
|
)
|
|
|
|
fn hideNode =
|
|
(
|
|
if selection != undefined then
|
|
(
|
|
for obj in selection do
|
|
(
|
|
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find obj.name true)[1]
|
|
sceneview.tv.selectednode.checked = false
|
|
)
|
|
)
|
|
)
|
|
|
|
fn unhideNode =
|
|
(
|
|
if selection != undefined then
|
|
(
|
|
for obj in selection do
|
|
(
|
|
sceneview.tv.SelectedNode = (sceneview.tv.nodes.Find obj.name true)[1]
|
|
sceneview.tv.selectednode.checked = true
|
|
)
|
|
)
|
|
)
|
|
|
|
dotNetControl tv "TreeView" width:290 height:565 align:#center
|
|
button layerM "Layer Manager" offset:[-9,0] Align:#left
|
|
label info " (X) + all (C/V) +- children" offset:[5,-22]
|
|
|
|
on layerM pressed do
|
|
(
|
|
macros.run "layers" "layermanager"
|
|
)
|
|
|
|
on tv Click arg do
|
|
(
|
|
hitNode = tv.GetNodeAt (dotNetObject "System.Drawing.Point" arg.x arg.y)
|
|
if hitNode != undefined do
|
|
try(select hitNode.tag.value) catch(max select none)
|
|
)
|
|
|
|
on tv AfterCheck arg do
|
|
(
|
|
try (arg.node.tag.value.isHidden = not arg.node.checked)catch()
|
|
)
|
|
|
|
on tv AfterLabelEdit arg do
|
|
(
|
|
if arg.label != undefined then
|
|
(
|
|
arg.node.tag.value.name = arg.label
|
|
)
|
|
)
|
|
|
|
|
|
on tv keyUp arg do
|
|
(
|
|
--print arg.keyValue
|
|
case arg.keyValue of
|
|
(
|
|
67: tv.selectedNode.collapse() -- c key
|
|
88: tv.expandAll() -- x key
|
|
86: tv.selectedNode.ExpandAll() -- v key
|
|
13: tv.selectedNode.beginEdit() -- enter key
|
|
113: tv.selectedNode.beginEdit() -- F2
|
|
116: refresh() -- F5
|
|
)
|
|
)
|
|
|
|
fn OnClick sender args =
|
|
(
|
|
--print sender.Text
|
|
case sender.Text of
|
|
(
|
|
"Expand branches": if tv.selectedNode != undefined then tv.selectedNode.ExpandAll()
|
|
)
|
|
)
|
|
|
|
on tv beforeSelect arg do
|
|
(
|
|
colorTest = dotNetClass "System.Drawing.Color"
|
|
try (sceneview.tv.selectednode.backColor = colorTest.FromArgb 255 196 196 196) catch()
|
|
)
|
|
|
|
on tv nodeMouseClick arg do
|
|
(
|
|
if arg.button == tv.mousebuttons.right then
|
|
(
|
|
contextMenu = dotNetObject "System.Windows.Forms.ContextMenu"
|
|
contextMenu.MenuItems.Clear()
|
|
dotnet.addeventhandler (contextMenu.MenuItems.Add("Select all children")) "Click" OnClick
|
|
dotnet.addeventhandler (contextMenu.MenuItems.Add("Expand branches")) "Click" OnClick
|
|
pointTest = (dotNetObject "System.Drawing.Point" arg.x arg.y)
|
|
contextmenu.Show tv pointTest
|
|
)
|
|
)
|
|
|
|
on sceneView open do
|
|
(
|
|
initTreeView tv
|
|
fillInTreeView tv
|
|
tv.topnode.expand()
|
|
callbacks.addScript #nodeCreated "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #nodePostDelete "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #nodeRenamed "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #postNodesCloned "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #postMirrorNodes "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #selectionSetChanged "sceneView.getSelectedNode()" id:#upDateSceneView
|
|
callbacks.addScript #nodeHide "sceneView.hideNode()" id:#upDateSceneView
|
|
--callbacks.addScript #nodeUnhide "sceneView.unhideNode()" id:#upDateSceneView
|
|
callbacks.addScript #sceneUndo "sceneView.refresh()" id:#upDateSceneView
|
|
callbacks.addScript #sceneRedo "sceneView.refresh()" id:#upDateSceneView
|
|
)
|
|
|
|
on sceneView close do
|
|
(
|
|
callbacks.removeScripts id:#upDateSceneView
|
|
)
|
|
|
|
on sceneView resized size do
|
|
(
|
|
size1 = size as string
|
|
size2 = filterstring size1 "[],"
|
|
layerM.pos = [4, (sceneView.height - 26)]
|
|
info.pos = [100, (sceneView.height - 23)]
|
|
tv.height = ((size2[2] as float) - 35)
|
|
tv.width = ((size2[1] as float) - 10)
|
|
)
|
|
)
|
|
|
|
createDialog sceneView 300 600 style:#(#style_resizing, #style_titlebar, #style_border, #style_sysmenu)
|
|
|