private RenderMaterial GetObjectMaterial(Rhino.DocObjects.RhinoObject rhinoObject) { ObjectMaterialSource source = rhinoObject.Attributes.MaterialSource; Rhino.Render.RenderMaterial renderMaterial = null; if (source == ObjectMaterialSource.MaterialFromObject) { renderMaterial = rhinoObject.RenderMaterial; } else if (source == ObjectMaterialSource.MaterialFromLayer) { int layerIndex = rhinoObject.Attributes.LayerIndex; renderMaterial = GetLayerMaterial(layerIndex); } return(renderMaterial); }
private int GetObjectMaterialIndex(RhinoObject InRhinoObject, RhinoSceneHierarchyNodeInfo ParentNodeInfo) { ObjectMaterialSource MaterialSource = InRhinoObject.Attributes.MaterialSource; if (MaterialSource == ObjectMaterialSource.MaterialFromParent) { // Special use-case for block instances with the source material set to "Parent". // The material source in this case is actually the layer in which the definition objects are. if (InRhinoObject is InstanceObject) { InstanceObject Instance = InRhinoObject as InstanceObject; RhinoObject[] DefinitionObjects = Instance.InstanceDefinition.GetObjects(); if (DefinitionObjects != null && DefinitionObjects.Length > 0) { Layer ObjectLayer = RhinoDocument.Layers.FindIndex(InRhinoObject.Attributes.LayerIndex); return(ObjectLayer.RenderMaterialIndex); } } else if (ParentNodeInfo == null) { MaterialSource = ObjectMaterialSource.MaterialFromLayer; } } switch (MaterialSource) { case ObjectMaterialSource.MaterialFromLayer: Layer ObjectLayer = RhinoDocument.Layers.FindIndex(InRhinoObject.Attributes.LayerIndex); return(ObjectLayer.RenderMaterialIndex); case ObjectMaterialSource.MaterialFromParent: return(ParentNodeInfo.MaterialIndex); case ObjectMaterialSource.MaterialFromObject: default: return(InRhinoObject.Attributes.MaterialIndex); } }