public string getLayersAndObjectsInfo(bool ignoreSelection = false) { List <RhinoObject> SelectedObjects; List <LayerSelection> layerInfoList = new List <LayerSelection>(); if (!ignoreSelection) { SelectedObjects = RhinoDoc.ActiveDoc.Objects.GetSelectedObjects(false, false).ToList(); if (SelectedObjects.Count == 0 || SelectedObjects[0] == null) { return(JsonConvert.SerializeObject(layerInfoList, camelCaseSettings)); } } else { SelectedObjects = RhinoDoc.ActiveDoc.Objects.ToList(); if (SelectedObjects.Count == 0 || SelectedObjects[0] == null) { return(JsonConvert.SerializeObject(layerInfoList, camelCaseSettings)); } foreach (Rhino.DocObjects.Layer ll in RhinoDoc.ActiveDoc.Layers) { layerInfoList.Add(new LayerSelection() { objectCount = 0, layerName = ll.FullPath, color = System.Drawing.ColorTranslator.ToHtml(ll.Color), ObjectGuids = new List <string>(), ObjectTypes = new List <string>() }); } } SelectedObjects = SelectedObjects.OrderBy(o => o.Attributes.LayerIndex).ToList(); foreach (var obj in SelectedObjects) { var layer = RhinoDoc.ActiveDoc.Layers[obj.Attributes.LayerIndex]; var myLInfo = layerInfoList.FirstOrDefault(l => l.layerName == layer.FullPath); if (myLInfo != null) { myLInfo.objectCount++; myLInfo.ObjectGuids.Add(obj.Id.ToString()); myLInfo.ObjectTypes.Add(obj.Geometry.GetType().ToString()); } else { var myNewLinfo = new LayerSelection() { objectCount = 1, layerName = layer.FullPath, color = System.Drawing.ColorTranslator.ToHtml(layer.Color), ObjectGuids = new List <string>(new string[] { obj.Id.ToString() }), ObjectTypes = new List <string>(new string[] { obj.Geometry.GetType().ToString() }) }; layerInfoList.Add(myNewLinfo); } } return(Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(layerInfoList, camelCaseSettings)))); }