Advertisement
Guest User

C# Layer tools Rhino

a guest
Jul 3rd, 2014
883
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.08 KB | None | 0 0
  1. class justToCreateAClass {
  2.   /// <summary>
  3.   /// Copy properties from layer From to Layer To
  4.   /// </summary>
  5.   /// <param name="From"></param>
  6.   /// <param name="To"></param>
  7.   void MatchProperties(Layer From, Layer To) {
  8.     To.Color = From.Color;
  9.     To.RenderMaterialIndex = From.RenderMaterialIndex;
  10.     To.IsExpanded = false;
  11.     To.CommitChanges();
  12.   }
  13.  
  14.   /// <summary>
  15.   /// Find a layer by name
  16.   /// </summary>
  17.   /// <param name="name"></param>
  18.   /// <returns></returns>
  19.   Layer FindLayer(string name, bool isRoot) {
  20.     int id = RhinoDocument.Layers.Find(name, true);
  21.     if (id >= 0 && (!isRoot || RhinoDocument.Layers[id].ParentLayerId.Equals(Guid.Empty))) {
  22.       return RhinoDocument.Layers[id];
  23.     } else {
  24.       return null;
  25.     }
  26.   }
  27.  
  28.   Layer EnsureLayer(string name) {
  29.     return EnsureLayer(name, false);
  30.   }
  31.  
  32.   /// <summary>
  33.   /// Make sure layer "name" exists, find it, or create a new one.
  34.   /// </summary>
  35.   /// <param name="name"></param>
  36.   /// <param name="isRoot">Make sure the layer is not a sublayer</param>
  37.   /// <returns></returns>
  38.   Layer EnsureLayer(string name, bool isRoot) {
  39.     Layer l = FindLayer(name, isRoot);
  40.     if (l == null) {
  41.       l = new Layer();
  42.       l.Name = name;
  43.       int id = RhinoDocument.Layers.Add(l);
  44.       l = RhinoDocument.Layers[id];
  45.     }
  46.     return l;
  47.   }
  48.  
  49.   /// <summary>
  50.   /// EnsureFullPath: Make sure the full path exists.
  51.   /// </summary>
  52.   /// <param name="name"></param>
  53.   /// <returns></returns>
  54.   Layer EnsureFullPath(string name) {
  55.     Layer l = FindLayerByFullPath(name);
  56.     if (l == null) {
  57.       string[] segments = System.Text.RegularExpressions.Regex.Split(name, "::");
  58.       string layerPath = segments[0];
  59.       Layer CurrentLayer = EnsureLayer(layerPath, true);
  60.       for (int i = 1; i < segments.Length; i++) {
  61.         CurrentLayer = EnsureChildLayer(CurrentLayer, segments[i]);
  62.       }
  63.       l = CurrentLayer;
  64.     }
  65.     return l;
  66.   }
  67.  
  68.   /// <summary>
  69.   /// Find layer by full path
  70.   /// </summary>
  71.   /// <param name="name"></param>
  72.   /// <returns></returns>
  73.   Layer FindLayerByFullPath(string name) {
  74.     int id = RhinoDocument.Layers.FindByFullPath(name, true);
  75.     if (id >= 0) {
  76.       return RhinoDocument.Layers[id];
  77.     }
  78.     return null;
  79.   }
  80.  
  81.   /// <summary>
  82.   /// Recurse all child layers
  83.   /// </summary>
  84.   /// <param name="parent"></param>
  85.   /// <returns></returns>
  86.   public IEnumerable<Layer> RecurseChildren(Layer parent) {
  87.     foreach (Layer child in parent.GetChildren()) {
  88.       yield return child;
  89.  
  90.       if (child.GetChildren() != null) {
  91.         foreach (Layer grandchild in RecurseChildren(child)) {
  92.           yield return grandchild;
  93.         }
  94.       }
  95.     }
  96.   }
  97.  
  98.   /// <summary>
  99.   /// Find layer of parent by names
  100.   /// </summary>
  101.   /// <param name="parent"></param>
  102.   /// <param name="name"></param>
  103.   /// <returns></returns>
  104.   public Layer FindChildLayer(Layer parent, string name) {
  105.     if (parent.GetChildren() == null) {
  106.       return null;
  107.     }
  108.     foreach (Layer child in parent.GetChildren()) {
  109.       if (child.Name.Equals(name)) {
  110.         return child;
  111.       }
  112.     }
  113.     return null;
  114.   }
  115.  
  116.   /// <summary>
  117.   /// Make sure all child layers exist
  118.   /// </summary>
  119.   /// <param name="parent"></param>
  120.   /// <param name="names"></param>
  121.   /// <returns></returns>
  122.   public IEnumerable<Layer> EnsureChildLayers(Layer parent, IEnumerable<string> names) {
  123.     List<Layer> layers = new List<Layer>();
  124.     foreach (string name in names) {
  125.       layers.Add(EnsureChildLayer(parent, name));
  126.     }
  127.     return layers;
  128.   }
  129.  
  130.   /// <summary>
  131.   /// Make sure one child layer exists
  132.   /// </summary>
  133.   /// <param name="parent"></param>
  134.   /// <param name="name"></param>
  135.   /// <returns></returns>
  136.   public Layer EnsureChildLayer(Layer parent, string name) {
  137.     Layer child = FindChildLayer(parent, name);
  138.     if (child == null) {
  139.       child = new Layer();
  140.       child.Name = name;
  141.       child.ParentLayerId = parent.Id;
  142.       int id = RhinoDocument.Layers.Add(child);
  143.       child = RhinoDocument.Layers[id];
  144.     }
  145.     return child;
  146.   }
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement