Exemplo n.º 1
0
        public override void PutMaxValue(BaseTreeNode treeNode, Object newValue)
        {
            LayerTreeNode layerTreeNode = treeNode as LayerTreeNode;

            if (layerTreeNode != null)
            {
                IILayer maxLayer = MaxAnimatable.GetAnimByHandle(layerTreeNode.Handle) as IILayer;

#if Max2013 || Max2014
                if (maxLayer != null)
                {
                    maxLayer.BoxMode = !(Boolean)newValue;
                }
#endif
#if Max2015
                if (maxLayer != null)
                {
                    maxLayer.BoxMode(!(Boolean)newValue, false);
                }
#endif
                return;
            }

            ObjectTreeNode objectTreeNode = treeNode as ObjectTreeNode;
            if (objectTreeNode != null)
            {
                IINode maxNode = MaxAnimatable.GetAnimByHandle(objectTreeNode.Handle) as IINode;

                if (maxNode != null)
                {
                    maxNode.BoxMode(!(Boolean)newValue);
                }
                return;
            }
        }
Exemplo n.º 2
0
        public override Object GetMaxValue(BaseTreeNode treeNode)
        {
            ObjectTreeNode objectTreeNode = treeNode as ObjectTreeNode;

            if (objectTreeNode != null)
            {
                IINode maxNode = MaxAnimatable.GetAnimByHandle(objectTreeNode.Handle) as IINode;
                if (maxNode != null)
                {
                    return(maxNode.BoxMode_ < 0);
                }
            }

            LayerTreeNode layerTreeNode = treeNode as LayerTreeNode;

            if (layerTreeNode != null)
            {
                IILayer maxLayer = MaxAnimatable.GetAnimByHandle(layerTreeNode.Handle) as IILayer;

#if Max2013 || Max2014
                if (maxLayer != null)
                {
                    return(!maxLayer.BoxMode);
                }
#endif
#if Max2015
                if (maxLayer != null)
                {
                    return(!maxLayer.BoxMode_);
                }
#endif
            }

            return(false);
        }
Exemplo n.º 3
0
        public List <IILayer> NameToIILayer(string[] layers)
        {
            List <IILayer> result = new List <IILayer>();

            foreach (var l in layers)
            {
                IILayer lay = Loader.Core.LayerManager.GetLayer(l);

                if (lay != null)
                {
                    _dependentLayers.AddRange(lay.ParentsLayers());
                    result.Add(lay);
                }
            }

            foreach (var PNode in _dependentLayers)
            {
                if (!result.Contains(PNode))
                {
                    result.Add(PNode);
                }
            }

            return(result);
        }
Exemplo n.º 4
0
        public override Object GetAspect(Object rowObject)
        {
            FolderTreeNode folderTreeNode = rowObject as FolderTreeNode;

            if (folderTreeNode != null)
            {
                return(folderTreeNode.Name);
            }
            LayerTreeNode layerTreeNode = rowObject as LayerTreeNode;

            if (layerTreeNode != null)
            {
                IILayer layer = MaxAnimatable.GetAnimByHandle(layerTreeNode.Handle) as IILayer;
                if (layer != null)
                {
                    return(layer.Name);
                }
            }
            ObjectTreeNode objectTreeNode = rowObject as ObjectTreeNode;

            if (objectTreeNode != null)
            {
                IINode maxNode = MaxAnimatable.GetAnimByHandle(objectTreeNode.Handle) as IINode;
                if (maxNode != null)
                {
                    return(maxNode.Name);
                }
            }
            return(null);
        }
Exemplo n.º 5
0
        public static bool HasNode(this IILayer layer, IINode node, bool checkInChild = true)
        {
#if MAX2020
            ITab <IINode> nodes = Loader.Global.INodeTab.Create();
#else
            ITab <IINode> nodes = Loader.Global.INodeTabNS.Create();
#endif
            IILayerProperties layerProperties = Loader.IIFPLayerManager.GetLayer(layer.Name);
            layerProperties.Nodes(nodes);

            foreach (IINode n in Tools.ITabToIEnumerable(nodes))
            {
                if (node.Handle == n.Handle)
                {
                    return(true);
                }
            }

            for (int i = 0; i < layer.NumOfChildLayers; i++)
            {
                IILayer child = layer.GetChildLayer(i);
                if (child.HasNode(node, checkInChild))
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 6
0
        public override Object GetAspect(Object rowObject)
        {
            LayerTreeNode layerTreeNode = rowObject as LayerTreeNode;

            if (layerTreeNode != null)
            {
                IILayer layer = MaxAnimatable.GetAnimByHandle(layerTreeNode.Handle) as IILayer;
                if (layer != null)
                {
                    IILayerProperties layerProps = MaxLayers.GetLayerProperties(layer);
                    return(layerProps.Current);
                }
            }
            FolderTreeNode folderTreeNode = rowObject as FolderTreeNode;

            if (folderTreeNode != null)
            {
                // Default behaviour of getFolderCheckState returns true.
                // Only get folder check state if necessary as it is
                // more expensive than returning false.
                if (folderTreeNode.Children.Count > 0)
                {
                    Boolean?checkState = getFolderCheckState(folderTreeNode);
                    if (checkState == true || checkState == null)
                    {
                        return(null);
                    }
                }
            }
            return(false);
        }
Exemplo n.º 7
0
 /// <summary>
 /// Moves the provided IINode objects to the provided layer.
 /// </summary>
 /// <param name="nodes"></param>
 /// <param name="layer"></param>
 public static void MoveNodesToLayer(IEnumerable <IINode> nodes, IILayer layer)
 {
     foreach (IINode node in nodes)
     {
         MoveNodeToLayer(node, layer);
     }
 }
Exemplo n.º 8
0
        /// <summary>
        /// Freezes / Unfreezes all IILayer objects.
        /// </summary>
        public static void FreezeUnfreezeAll()
        {
            Boolean        isFrozen     = false;
            IILayerManager LayerManager = GlobalInterface.Instance.COREInterface13.LayerManager;

            for (int i = 0; i < LayerManager.LayerCount; i++)
            {
                IILayer layer = LayerManager.GetLayer(i);
                if (!layer.IsFrozen)
                {
                    isFrozen = true;
                }
            }
            for (int i = 0; i < LayerManager.LayerCount; i++)
            {
                IILayer layer = LayerManager.GetLayer(i);

#if Max2013 || Max2014
                layer.IsFrozen = isFrozen;
#endif

#if Max2015
                layer.Freeze(isFrozen, false);
#endif
            }

            MaxUI.RedrawViewportsNow();
        }
Exemplo n.º 9
0
 private void SetCurrentLayer(IILayer layer)
 {
    String name = layer.Name;
    MaxInterfaces.IILayerManager.SetCurrentLayer(ref name);
    MaxInterfaces.Global.BroadcastNotification(LayerNotificationCode.LayerCurrentChanged, this.oldCurrentLayer);
    MaxInterfaces.Global.BroadcastNotification(LayerNotificationCode.LayerCurrentChanged, this.newCurrentLayer);
 }
Exemplo n.º 10
0
      public SetLayerParentRestoreObj(IILayer layer, IILayer parent, Boolean updateProperties)
      {
         Throw.IfNull(layer, "layer");

         this.layer = layer;
         this.parent = parent;
         this.updateProperties = updateProperties;
      }
Exemplo n.º 11
0
   public override void Do()
   {
      if (this.name != null)
         this.createdLayer = MaxInterfaces.IILayerManager.CreateLayer(ref this.name);
      else
         this.createdLayer = MaxInterfaces.IILayerManager.CreateLayer();

      this.CreatedLayer.AddChildNodes(this.nodes);
   }
Exemplo n.º 12
0
        public static IEnumerable <IILayer> ParentsLayers(this IILayer layer)
        {
            var p = layer;

            while (p.ParentLayer != null)
            {
                p = p.ParentLayer;
                yield return(p);
            }
        }
Exemplo n.º 13
0
 /// <summary>
 /// Sets the current layer in an undo context.
 /// </summary>
 /// <param name="newCurrentLayer">The new active layer.</param>
 public static void SetCurrentLayer(IILayer newCurrentLayer)
 {
    IHold theHold = MaxInterfaces.Global.TheHold;
    if (theHold.Holding)
    {
       SetCurrentLayerRestoreObj restoreObj = new SetCurrentLayerRestoreObj(newCurrentLayer);
       theHold.Put(restoreObj);
       restoreObj.Redo();
    }
 }
Exemplo n.º 14
0
        private static void onCreateLayer(Object sender, ClickEventArgs e, Boolean addSelection)
        {
            NlmTreeListView listView = e.ListView;

            listView.NodeControl.MaxEvents.LayerEvents.LayerCreated.UnregisterNotification();

            IILayer layer  = MaxLayers.CreateLayer(true, addSelection);
            UIntPtr handle = MaxAnimatable.GetHandleByAnim(layer);

            LayerTreeNode layerTreeNode = new LayerTreeNode(handle, listView.NodeControl.HandleMap);

            // Get parent node.
            BaseTreeNode parentTreeNode = null;

            if (listView.SelectedObjects.Count > 0)
            {
                BaseTreeNode treeNode = listView.SelectedObjects[0] as BaseTreeNode;
                if (treeNode is FolderTreeNode)
                {
                    parentTreeNode = treeNode;
                }
                if (treeNode is LayerTreeNode)
                {
                    parentTreeNode = treeNode.Parent;
                }
            }

            // Add folder to listview, ensure is visible by expanding parents.
            listView.AddObject(layerTreeNode, parentTreeNode);
            if (parentTreeNode != null)
            {
                listView.Expand(parentTreeNode);
            }

            // Scroll to new item.
            Int32 parentIndex = listView.IndexOf(layerTreeNode);

            if (parentIndex != -1)
            {
                listView.EnsureVisible(parentIndex);
            }

            // Sort, select
            listView.Sort(listView.NlmColumns.NameColumn, SortOrder.Ascending);
            listView.SelectedObjects = new List <Object> {
                layerTreeNode
            };

            // Focus on the listview to ensure text entry goes to the edit box, and begin edit.
            listView.Focus();
            listView.EditModel(layerTreeNode);

            // Register notification.
            listView.NodeControl.MaxEvents.LayerEvents.LayerCreated.RegisterNotification();
        }
Exemplo n.º 15
0
        /// <summary>
        /// Returns all child IINode objects of provided IILayer.
        /// </summary>
        /// <param name="layer"></param>
        /// <returns></returns>
        public static IEnumerable <IINode> GetChildNodes(IILayer layer)
        {
            IILayerProperties layerProps = GetLayerProperties(layer);
            ITab <IINode>     layerNodes = GlobalInterface.Instance.Tab.Create <IINode>();

            layerProps.Nodes(layerNodes);
            for (int i = 0; i < layerNodes.Count; i++)
            {
                yield return(layerNodes[(IntPtr)i]);
            }
        }
Exemplo n.º 16
0
 /// <summary>
 /// Moves the provided IINode Anim handles to the provided layer.
 /// If the handle is not an IINode, it will be skipped.
 /// </summary>
 /// <param name="handles"></param>
 /// <param name="layer"></param>
 public static void MoveNodesToLayer(IEnumerable <UIntPtr> handles, IILayer layer)
 {
     foreach (UIntPtr handle in handles)
     {
         IINode maxNode = MaxAnimatable.GetAnimByHandle(handle) as IINode;
         if (maxNode != null)
         {
             MoveNodeToLayer(maxNode as IINode, layer);
         }
     }
 }
Exemplo n.º 17
0
        private void BuildChildObjects(LayerTreeNode layerTreeNode, IILayer maxLayer)
        {
            IEnumerable <IINode> layerNodes = MaxLayers.GetChildNodes(maxLayer);

            foreach (IINode maxNode in layerNodes)
            {
                UIntPtr        iNodeHandle    = MaxAnimatable.GetHandleByAnim(maxNode);
                ObjectTreeNode objectTreeNode = new ObjectTreeNode(MaxNodes.GetObjectClass(maxNode), iNodeHandle, HandleMap);
                ListView.NodeControl.Parent.AddChild(objectTreeNode, layerTreeNode, false);
            }
        }
Exemplo n.º 18
0
        public static bool ContainLayer(this List <IILayer> layers, IILayer layer)
        {
            foreach (IILayer iLayer in layers)
            {
                if (iLayer.Name == layer.Name)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 19
0
        public static IEnumerable <IINode> LayerNodes(this IILayer layer)
        {
            IILayerProperties layerProp = Loader.IIFPLayerManager.GetLayer(layer.Name);

#if MAX2020
            ITab <IINode> nodes = Loader.Global.INodeTab.Create();
#else
            ITab <IINode> nodes = Loader.Global.INodeTabNS.Create();
#endif
            layerProp.Nodes(nodes);
            return(Tools.ITabToIEnumerable(nodes));
        }
Exemplo n.º 20
0
        public static IEnumerable <IILayer> LayerTree(this IILayer layer)
        {
            for (int i = 0; i < layer.NumOfChildLayers; i++)
            {
                yield return(layer.GetChildLayer(i));

                foreach (var y in layer.GetChildLayer(i).LayerTree())
                {
                    yield return(y);
                }
            }
        }
Exemplo n.º 21
0
        // If the cell being edited is layer 0, cancel the cell edit.
        private void onBeforeLabelEdit(Object sender, CellEditEventArgs e)
        {
            if (e.RowObject is LayerTreeNode)
            {
                IILayer layer  = MaxLayers.GetLayer(0);
                UIntPtr handle = MaxAnimatable.GetHandleByAnim(layer);

                if ((e.RowObject as LayerTreeNode).Handle == handle)
                {
                    e.Cancel = true;
                }
            }
        }
Exemplo n.º 22
0
        public static IILayer GetNodeLayer(this IINode node)
        {
            int num = node.NumRefs;

            for (int i = 0; i < num; i++)
            {
                IILayer r = node.GetReference(i) as IILayer;
                if (r != null)
                {
                    return(r);
                }
            }
            return(null);
        }
Exemplo n.º 23
0
        public override void PutAspect(Object rowObject, Object newValue)
        {
            LayerTreeNode layerTreeNode = rowObject as LayerTreeNode;

            if (layerTreeNode != null)
            {
                IILayer layer = MaxAnimatable.GetAnimByHandle(layerTreeNode.Handle) as IILayer;
                if (layer != null)
                {
                    IILayerProperties layerProps = MaxLayers.GetLayerProperties(layer);
                    layerProps.Current = (Boolean)newValue;
                }
            }
        }
Exemplo n.º 24
0
        private void BuildLayerTreeRecusively(IILayer layer, int index, TreeNodeCollection treeNodeCollection)
        {
            for (int i = 0; i < layer.NumOfChildLayers; i++)
            {
                IILayer  childLayer = layer.GetChildLayer(i);
                TreeNode layerNode  = treeNodeCollection[index].Nodes.Add(childLayer.Name);

                if (SelectedLayers.Contains(layer))
                {
                    layerNode.Checked = true;
                }
                BuildLayerTreeRecusively(childLayer, i, treeNodeCollection[index].Nodes);
            }
        }
Exemplo n.º 25
0
        public static List <IILayer> GetContainerLayers(this IIContainerObject container)
        {
            List <IILayer> result         = new List <IILayer>();
            List <IINode>  containerNodes = container.ContainerNode.ContainerNodeTree(true);

            foreach (IINode node in containerNodes)
            {
                IILayer nodeLayer = node.GetNodeLayer();
                if (nodeLayer != null)
                {
                    result.Add(node.GetNodeLayer());
                }
            }
            return(result);
        }
Exemplo n.º 26
0
        private void confirmButton_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < layerTreeView.Nodes.Count; i++)
            {
                TreeNode nodeLayer = layerTreeView.Nodes[i];
                if (nodeLayer.Checked)
                {
                    IILayer l = Loader.Core.LayerManager.GetLayer(nodeLayer.Text);
                    SelectedLayers.Add(l);
                }
            }

            OnConfirmButtonClicked?.Invoke(this, EventArgs.Empty);
            Dispose();
        }
Exemplo n.º 27
0
        private void onNodeCreated(object sender, SystemNotificationAnimEventArgs e)
        {
#if DEBUG
            MaxListener.PrintToListener("onNodeCreated");
#endif
            try
            {
                ListView.BeginUpdate();

                List <BaseTreeNode> refreshNodes = new List <BaseTreeNode>();
                foreach (UIntPtr handle in e.Handles)
                {
                    IAnimatable anim = MaxAnimatable.GetAnimByHandle(handle);
                    if (anim == null)
                    {
                        return;
                    }

                    IINode  node        = anim as IINode;
                    IILayer layer       = MaxLayers.GetLayer(node);
                    UIntPtr layerHandle = MaxAnimatable.GetHandleByAnim(layer);
                    ObjectTreeNode.ObjectClass objectClass = MaxNodes.GetObjectClass(node);

                    List <BaseTreeNode> layerTreeNodes = NodeControl.HandleMap.GetTreeNodesByHandle(layerHandle);
                    foreach (BaseTreeNode layerTreeNode in layerTreeNodes)
                    {
                        ObjectTreeNode objectTreeNode = new ObjectTreeNode(objectClass, handle, NodeControl.HandleMap);
                        NodeControl.Parent.AddChild(objectTreeNode, layerTreeNode, false);

                        if (!refreshNodes.Contains(layerTreeNode))
                        {
                            refreshNodes.Add(layerTreeNode);
                        }
                    }
                }
                MaxListener.PrintToListener(refreshNodes.Count.ToString());
                ListView.RefreshObjects(refreshNodes);
                ListView.Sort(ListView.NlmColumns.NameColumn, SortOrder.Ascending);
            }
            catch
            {
                throw new Exception();
            }
            finally
            {
                ListView.EndUpdate();
            }
        }
Exemplo n.º 28
0
        private void ValidateCellEdit(Object o, CellEditEventArgs e)
        {
            String oldValue = e.Value as String;
            String newValue = e.NewValue as String;

            if (oldValue != newValue)
            {
                IILayer layer = MaxLayers.GetLayer(newValue);

                if (layer != null)
                {
                    e.Cancel = true;
                    MessageBox.Show("A Layer with that name already Exists.");
                }
            }
        }
Exemplo n.º 29
0
 private void CalculateSelectedLayers(TreeNodeCollection nodeLayers)
 {
     for (int i = 0; i < nodeLayers.Count; i++)
     {
         TreeNode nodeLayer = nodeLayers[i];
         if (!nodeLayer.Checked && nodeLayer.Nodes != null)
         {
             CalculateSelectedLayers(nodeLayer.Nodes);
         }
         else
         {
             IILayer l = Loader.Core.LayerManager.GetLayer(nodeLayer.Text);
             SelectedLayers.Add(l);
         }
     }
 }
Exemplo n.º 30
0
        /// <summary>
        /// Creates an IILayer in 3ds Max.
        /// </summary>
        /// <returns>Returns the created IILayer</returns>
        public static IILayer CreateLayer(Boolean makeCurrent, Boolean addSelection)
        {
            IILayer layer = GlobalInterface.Instance.COREInterface14.LayerManager.CreateLayer();

            if (makeCurrent)
            {
                SetCurrentLayer(layer);
            }

            if (addSelection)
            {
                MaxNodes.MoveNodesToLayer(MaxNodes.SelectedNodes, layer);
            }

            return(layer);
        }
Exemplo n.º 31
0
        public static List <IILayer> GetSelectedLayers(SceneExplorerDialog sceneExplorer)
        {
            List <IILayer> selectedLayer = new List <IILayer>();

            TraversalNode[] traversalNodes = sceneExplorer.ExplorerControl.GetSelectedNodes(false, false, false);
            foreach (TraversalNode traversalNode in traversalNodes)
            {
                if (INodeUtilities.IsMaxLayerTraversalNode(traversalNode))
                {
                    ITraversalILayer l     = traversalNode as ITraversalILayer;
                    IILayer          layer = Loader.Core.LayerManager.GetLayer(l.SceneName);
                    selectedLayer.Add(layer);
                }
            }
            return(selectedLayer);
        }
Exemplo n.º 32
0
        public override void LayerChanged(ITab <UIntPtr> nodes)
        {
#if DEBUG
            MaxListener.PrintToListener("NodeEventCallback > LayerChanged");
#endif
            List <BaseTreeNode> deleteNodes = new List <BaseTreeNode>();
            List <Tuple <BaseTreeNode, BaseTreeNode> > addNodes = new List <Tuple <BaseTreeNode, BaseTreeNode> >();

            for (int i = 0; i < nodes.Count; i++)
            {
                UIntPtr maxNodeHandle = nodes[(IntPtr)i];
                IINode  maxNode       = MaxAnimatable.GetAnimByHandle(maxNodeHandle) as IINode;
                IILayer maxLayer      = MaxLayers.GetLayer(maxNode);
                UIntPtr layerHandle   = MaxAnimatable.GetHandleByAnim(maxLayer);

                // We need to handle the following scenarios:
                //  An object being moved to another layer.
                //  Objects on instances layers moving to uninstanced layers.
                //  Objects on uninstanced layers moving to instanced layers.

                // The easiest way to do this is to remove old object nodes and create new ones.
                // This should be pretty fast, and this event should fire relatively rarely,
                // but it may have to be rethought if it's too slow.

                // First we remove the old nodes.
                List <BaseTreeNode> objectTreeNodes = NodeControl.HandleMap.GetTreeNodesByHandle(maxNodeHandle);
                deleteNodes.AddRange(objectTreeNodes);

                // Then we add the object node to the new layer.
                List <BaseTreeNode> layerTreeNodes = NodeControl.HandleMap.GetTreeNodesByHandle(layerHandle);
                foreach (BaseTreeNode layerTreeNode in layerTreeNodes)
                {
                    ObjectTreeNode newObjectTreeNode = new ObjectTreeNode(MaxNodes.GetObjectClass(maxNode), maxNodeHandle, NodeControl.HandleMap);
                    addNodes.Add(new Tuple <BaseTreeNode, BaseTreeNode> (newObjectTreeNode, layerTreeNode));
                }
            }

            // And finally we actually do the update all at once.
            NodeControl.Destroy.DeleteTreeNodes(deleteNodes);
            foreach (Tuple <BaseTreeNode, BaseTreeNode> tuple in addNodes)
            {
                NodeControl.Parent.AddChild(tuple.Item1, tuple.Item2, false);
            }

            // And sort :)
            ListView.Sort(ListView.NlmColumns.NameColumn, SortOrder.Ascending);
        }
Exemplo n.º 33
0
        public void FillLayerSelector(List <IILayer> previoslySelected)
        {
            layerTreeView.Nodes.Clear();
            List <IILayer> rootLayers = LayerUtilities.RootLayers();

            for (int i = 0; i < rootLayers.Count; i++)
            {
                IILayer  layer     = rootLayers[i];
                TreeNode layerNode = layerTreeView.Nodes.Add(layer.Name);

                if (previoslySelected != null && previoslySelected.Contains(layer))
                {
                    layerNode.Checked = true;
                }

                BuildLayerTreeRecusively(layer, i, layerTreeView.Nodes);
            }
        }
Exemplo n.º 34
0
        public static void DeleteLayer(UIntPtr layerHandle)
        {
            IILayer layer = MaxAnimatable.GetAnimByHandle(layerHandle) as IILayer;

            if (layer == null)
            {
                return;
            }

            IILayerProperties layerProperties = MaxLayers.GetLayerProperties(layer);

            if (layerProperties.Current)
            {
                MaxLayers.SetCurrentLayer(0);
            }

            MaxInterfaces.Instance.FPLayerManager.DeleteLayer(layer.Name);
        }
Exemplo n.º 35
0
 private static Boolean GetLayerProperty(IILayer layer, BooleanNodeProperty property)
 {
    switch (property)
    {
       case BooleanNodeProperty.IsHidden: return layer.IsHidden;
       case BooleanNodeProperty.IsFrozen: return layer.IsFrozen;
       case BooleanNodeProperty.SeeThrough: return layer.XRayMtl;
       case BooleanNodeProperty.BoxMode: return layer.BoxMode;
       case BooleanNodeProperty.BackfaceCull: return layer.BackCull;
       case BooleanNodeProperty.AllEdges: return layer.AllEdges;
       case BooleanNodeProperty.VertexTicks: return layer.VertTicks;
       case BooleanNodeProperty.Trajectory: return layer.Trajectory_;
       case BooleanNodeProperty.IgnoreExtents: return layer.IgnoreExtents;
       case BooleanNodeProperty.FrozenInGray: return layer.ShowFrozenWithMtl;
       case BooleanNodeProperty.Renderable: return layer.Renderable;
       case BooleanNodeProperty.InheritVisibility: return layer.InheritVisibility;
       case BooleanNodeProperty.PrimaryVisibility: return layer.PrimaryVisibility;
       case BooleanNodeProperty.SecondaryVisibility: return layer.SecondaryVisibility;
       case BooleanNodeProperty.ReceiveShadows: return layer.RcvShadows;
       case BooleanNodeProperty.CastShadows: return layer.CastShadows;
       case BooleanNodeProperty.ApplyAtmospherics: return layer.ApplyAtmospherics;
       case BooleanNodeProperty.RenderOccluded: return layer.RenderOccluded;
       default: return false;
    }
 }
Exemplo n.º 36
0
 private static void SetLayerProperty(IILayer layer, BooleanNodeProperty property, Boolean value)
 {
    switch (property)
    {
       case BooleanNodeProperty.IsHidden:
          layer.IsHidden = value;
          break;
       case BooleanNodeProperty.IsFrozen:
          layer.IsFrozen = value;
          break;
       case BooleanNodeProperty.SeeThrough:
          layer.XRayMtl = value;
          break;
       case BooleanNodeProperty.BoxMode:
          layer.BoxMode = value;
          break;
       case BooleanNodeProperty.BackfaceCull:
          layer.BackCull = value;
          break;
       case BooleanNodeProperty.AllEdges:
          layer.AllEdges = value;
          break;
       case BooleanNodeProperty.VertexTicks:
          layer.VertTicks = value;
          break;
       case BooleanNodeProperty.Trajectory:
          layer.Trajectory(value, false);
          break;
       case BooleanNodeProperty.IgnoreExtents:
          layer.IgnoreExtents = value;
          break;
       case BooleanNodeProperty.FrozenInGray:
          layer.ShowFrozenWithMtl = value;
          break;
       case BooleanNodeProperty.Renderable:
          layer.Renderable = value;
          break;
       case BooleanNodeProperty.InheritVisibility:
          layer.InheritVisibility = value;
          break;
       case BooleanNodeProperty.PrimaryVisibility:
          layer.PrimaryVisibility = value;
          break;
       case BooleanNodeProperty.SecondaryVisibility:
          layer.SecondaryVisibility = value;
          break;
       case BooleanNodeProperty.ReceiveShadows:
          layer.RcvShadows = value;
          break;
       case BooleanNodeProperty.CastShadows:
          layer.CastShadows = value;
          break;
       case BooleanNodeProperty.ApplyAtmospherics:
          layer.ApplyAtmospherics = value;
          break;
       case BooleanNodeProperty.RenderOccluded:
          layer.RenderOccluded = value;
          break;
       default:
          break;
    }
 }
Exemplo n.º 37
0
 /// <summary>
 /// Returns the value of a property on the layer.
 /// It will return the layer's own value, regardless of whether it has been overridden by a parent layer.
 /// </summary>
 public static Boolean GetProperty(IILayer layer, BooleanNodeProperty property)
 {
    byte[] data = NestedLayers.getAppData(layer, property);
    if (data != null)
       return BitConverter.ToBoolean(data, 0);
    else
       return NestedLayers.GetLayerProperty(layer, property);
 }
Exemplo n.º 38
0
 /// <summary>
 /// Sets a layer property and propagates it to its children.
 /// </summary>
 public static void SetProperty(IILayer layer, BooleanNodeProperty prop, Boolean value)
 {
    NestedLayers.SetProperty(layer, prop, value, false);
 }
Exemplo n.º 39
0
   private static void SetProperty(IILayer layer, BooleanNodeProperty property, Boolean value, Boolean setByParent)
   {
      if (layer == null)
         return;
      
      //Store new value in AppDataChunk.
      if (!setByParent)
         NestedLayers.setAppData(layer, property, BitConverter.GetBytes(value));

      //Set new value based on value and parent value.
      Boolean ownValue = NestedLayers.GetProperty(layer, property);

      Boolean newValue = ownValue;
      IILayer parentLayer = NestedLayers.GetParent(layer);
      if (parentLayer != null)
      {
         Boolean parentValue = NestedLayers.GetLayerProperty(parentLayer, property);

         BinaryPredicate<Boolean> pred = Functor.Or;
         if (!NestedLayers.propertyOps.TryGetValue(property, out pred))
            pred = Functor.Or;
         newValue = pred(ownValue, parentValue);
      }

      NestedLayers.SetLayerProperty(layer, property, newValue);

      //Broadcast notification.
      if (property == BooleanNodeProperty.IsHidden)
      {
         MaxInterfaces.Global.BroadcastNotification(SystemNotificationCode.LayerHiddenStateChanged, layer);
      }
      else if (property == BooleanNodeProperty.IsFrozen)
      {
         MaxInterfaces.Global.BroadcastNotification(SystemNotificationCode.LayerFrozenStateChanged, layer);
      }
      else
      {
         LayerPropertyChangedParam parameters = new LayerPropertyChangedParam(layer, NodeProperties.ToProperty(property));
         MaxInterfaces.Global.BroadcastNotification(LayerNotificationCode.LayerPropertyChanged, parameters);
      }

      //Propagate to children.
      IEnumerable<IILayer> childLayers = NestedLayers.GetChildren(layer, false);
      foreach (IILayer childLayer in childLayers)
      {
         NestedLayers.SetProperty(childLayer, property, value, true);
      }
   }
Exemplo n.º 40
0
 public override void Redo()
 {
    this.prevParent = NestedLayers.GetParent(layer);
    NestedLayers.SetParent(this.layer, this.parent, this.updateProperties);
 }
Exemplo n.º 41
0
      /// <summary>
      /// Initializes a new instance of the ILayerWrapper class.
      /// </summary>
      /// <param name="ilayer">The ILayer object to wrap.</param>
      public ILayerWrapper(IILayer ilayer)
      {
         Throw.IfNull(ilayer, "ilayer");

         this.ilayer = ilayer;
      }
Exemplo n.º 42
0
 /// <summary>
 /// Initializes a new instance of the LayerPropertyChangedParam struct.
 /// </summary>
 /// <param name="layer">The layer of which a property has changed.</param>
 /// <param name="property">The property that changed.</param>
 public LayerPropertyChangedParam(IILayer layer, NodeProperty property)
 {
    this.layer = layer;
    this.property = property;
 }
Exemplo n.º 43
0
   /// <summary>
   /// Returns a list with all children of a layer.
   /// </summary>
   /// <param name="parent">The parent layer to get the childlayers from.</param>
   /// <param name="recursive">Include the entire layer tree.</param>
   public static IEnumerable<IILayer> GetChildren(IILayer parent, Boolean recursive)
   {
      List<IILayer> children = new List<IILayer>();
      IILayerManager layerManager = MaxInterfaces.IILayerManager;

      for (int i = 0; i < layerManager.LayerCount; i++)
      {
         IILayer layer = layerManager.GetLayer(i);
         IILayer layerParent = NestedLayers.GetParent(layer);
         if ((parent == null && layerParent == null) || 
             (parent != null && layerParent != null && layerParent.Handle == parent.Handle))
         {
            children.Add(layer);
            if (recursive)
               children.AddRange(NestedLayers.GetChildren(layer, recursive));
         }
      }

      return children;
   }
Exemplo n.º 44
0
 public override void Redo()
 {
    this.oldCurrentLayer = MaxInterfaces.IILayerManager.CurrentLayer;
    this.SetCurrentLayer(this.newCurrentLayer);
 }
Exemplo n.º 45
0
 public SetCurrentLayerRestoreObj(IILayer newCurrentLayer)
 {
    this.newCurrentLayer = newCurrentLayer;
 }
Exemplo n.º 46
0
 private static void readProperties(BinaryReader reader, IILayer layer)
 {
    Type propType = typeof(BooleanNodeProperty);
    int numProps = reader.ReadByte() / 2;
    for (int p = 0; p < numProps; p++)
    {
       Int32 propInt = reader.ReadInt32();
       BooleanNodeProperty prop = (BooleanNodeProperty)Enum.ToObject(propType, propInt);
       Boolean propValue = reader.ReadBoolean();
       NestedLayers.SetProperty(layer, prop, propValue);
    }
 }
Exemplo n.º 47
0
   /// <summary>
   /// Gets AutoInherit on a layer for a specific property.
   /// </summary>
   public static Boolean GetAutoInherit(IILayer layer, NodeLayerProperty prop)
   {
      if (layer == null)
         throw new ArgumentNullException("layer");

      IAppDataChunk chunk = layer.GetAppDataChunk(classID, SClass_ID.Gup, (uint)prop);
      return (chunk != null) ? BitConverter.ToBoolean(chunk.Data, 0) : false;
   }
Exemplo n.º 48
0
   /// <summary>
   /// Sets AutoInherit on a layer for a specific property.
   /// </summary>
   public static void SetAutoInherit(IILayer layer, NodeLayerProperty prop, Boolean value)
   {
      if (layer == null)
         throw new ArgumentNullException("layer");

      //Set AppDataChunk.
      layer.AddAppDataChunk(classID, SClass_ID.Gup, (uint)prop, BitConverter.GetBytes(value));

      //Update nodes on layer.
      ITab<IINode> nodes = MaxInterfaces.Global.INodeTabNS.Create();
      IILayerProperties layerProperties = MaxInterfaces.IIFPLayerManager.GetLayer(layer.Name);
      layerProperties.Nodes(nodes);

      foreach (IINode node in IINodes.ITabToIEnumerable(nodes))
      {
         setNodeInheritProperty(node, prop, value);
      }
   }
Exemplo n.º 49
0
 /// <summary>
 /// Tests if a layer is a root layer (i.e. it has no parent layer).
 /// </summary>
 public static Boolean IsRootLayer(IILayer layer)
 {
    return NestedLayers.GetParent(layer) == null;
 }
Exemplo n.º 50
0
   private static void writeProperties(BinaryWriter writer, IILayer layer)
   {
      IEnumerable<BooleanNodeProperty> layerProps = Enum.GetValues(typeof(BooleanNodeProperty))
                                                        .Cast<BooleanNodeProperty>();

      //Write property chunk size in bytes.
      //1 byte for each enum value, 1 byte for each property value
      writer.Write((byte)(layerProps.Count() * 2));

      //Write property values.
      foreach (BooleanNodeProperty prop in layerProps)
      {
         writer.Write((Int32)prop);
         writer.Write(NestedLayers.GetProperty(layer, prop));
      }
   }
Exemplo n.º 51
0
 /// <summary>
 /// Initializes a new instance of the ILayerWrapper class.
 /// </summary>
 /// <param name="ilayer">The ILayer object to wrap.</param>
 /// <param name="ilayerProperties">The ILayerProperties of the ILayer to wrap.</param>
 public ILayerWrapper(IILayer ilayer, IILayerProperties ilayerProperties)
 {
    this.ilayer = ilayer;
    this.ilayerProperties = ilayerProperties;
 }
Exemplo n.º 52
0
 /// <summary>
 /// Returns a list with all direct children of a layer (non-recursive).
 /// </summary>
 /// <param name="parent">The parent layer to get the childlayers from.</param>
 public static IEnumerable<IILayer> GetChildren(IILayer parent)
 {
    return NestedLayers.GetChildren(parent, false);
 }
Exemplo n.º 53
0
   private static void updateProperties(IILayer layer, Boolean recursive)
   {
      IEnumerable<BooleanNodeProperty> layerProps = Enum.GetValues(typeof(BooleanNodeProperty))
                                                        .Cast<BooleanNodeProperty>()
                                                        .Where(p => p != BooleanNodeProperty.None);

      foreach (BooleanNodeProperty prop in layerProps)
      {
         NestedLayers.SetProperty(layer, prop, NestedLayers.GetProperty(layer, prop));
      }

      if (recursive)
      {
         foreach (IILayer child in NestedLayers.GetChildren(layer, false))
            NestedLayers.updateProperties(child, recursive);
      }
   }
Exemplo n.º 54
0
   internal static void SetParent(IILayer layer, IILayer parent, Boolean updateProperties)
   {
      if (layer == null || layer == parent)
         return;

      NestedLayers.removeAppData(layer, SubID.ParentHandle);

      if (parent != null)
      {
         UIntPtr handle = MaxInterfaces.Global.Animatable.GetHandleByAnim(parent);
         byte[] data = BitConverter.GetBytes(handle.ToUInt64());
         NestedLayers.setAppData(layer, SubID.ParentHandle, data);
      }

      if (updateProperties)
         NestedLayers.updateProperties(layer, true);

      MaxInterfaces.Global.BroadcastNotification(LayerNotificationCode.LayerParented, layer);
   }
Exemplo n.º 55
0
   /// <summary>
   /// Tests if the given property on the given layer is inherited from a parent layer.
   /// </summary>
   public static Boolean IsPropertyInherited(IILayer layer, BooleanNodeProperty prop)
   {
      if (layer == null)
         return false;

      Boolean ownValue = NestedLayers.GetProperty(layer, prop);
      Boolean actualValue = NestedLayers.GetLayerProperty(layer, prop);

      return (ownValue != actualValue);
   }
Exemplo n.º 56
0
   /// <summary>
   /// Retrieves the parent of the given layer. Returns null if it is a root layer.
   /// </summary>
   public static IILayer GetParent(IILayer layer)
   {
      if (layer == null)
         return null;

      byte[] data = NestedLayers.getAppData(layer, SubID.ParentHandle);
      if (data == null)
         return null;

      UIntPtr handle = new UIntPtr(BitConverter.ToUInt64(data, 0));
      return MaxInterfaces.Global.Animatable.GetAnimByHandle(handle) as IILayer;
   }
Exemplo n.º 57
0
 /// <summary>
 /// Sets the parent of the given layer. Use null to make the layer a root layer.
 /// </summary>
 public static void SetParent(IILayer layer, IILayer parent)
 {
    SetLayerParentRestoreObj restoreObj = new SetLayerParentRestoreObj(layer, parent, true);
    if (MaxInterfaces.Global.TheHold.Holding)
    {
       MaxInterfaces.Global.TheHold.Put(restoreObj);
    }
    restoreObj.Redo();
    //NestedLayers.SetParent(layer, parent, true);
 }