-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSelectHighlightedLayers.ms
More file actions
58 lines (45 loc) · 1.57 KB
/
SelectHighlightedLayers.ms
File metadata and controls
58 lines (45 loc) · 1.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
(
fn IsLayerExplorerOpen =
(
return SceneExplorerManager.ExplorerIsOpen "Layer Explorer"
)
fn GetLayerExplorerHWND =
(
if IsLayerExplorerOpen() do
(
layerExplorer = (for o in (windows.getChildrenHWND 0) where o[5] == "Scene Explorer - Layer Explorer" do exit with o)[1]
layerExplorerControls = windows.getChildrenHWND layerExplorer
return dotnetobject "System.Intptr" layerExplorerControls[4][1]
)
return undefined
)
fn SelectNodesLayers selectNodes:#none =
(
version = (maxversion())[1]
if version < 17000 do return messagebox "Unsupported 3ds Max version."
hwnd = GetLayerExplorerHWND()
if hwnd == undefined do return messagebox "Layer Explorer is not open."
richSceneExplorer = (dotnetclass "System.Windows.Forms.Control").FromHandle hwnd
if version >= 18000 then
(
selected = richSceneExplorer.GetSelectedNodes false false false
)else(
selected = richSceneExplorer.GetSelectedNodes()
)
layerClass = dotnet.gettype "SceneExplorer.TraversalLayerBaseNode"
done = #()
for j in selected do
(
parent = j.ParentNode
if finditem done parent == 0 do
(
if dotnet.gettype j == layerClass do parent = j
append done parent
)
)
if selectNodes == #none do richSceneExplorer.ClearNodeSelection()
for j in done do richSceneExplorer.SelectNode j
if selectNodes == #all do for j in done do richSceneExplorer.SelectNodes j.Children
)
SelectNodesLayers selectNodes:#all--[#none|#keep|#all]
)