Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }