private XbimTexture CreateTexture(IIfcSurfaceStyleRendering rendering) { DefinedObjectId = rendering.EntityLabel; ColourMap.Clear(); AddColour(rendering); return(this); }
private void AddColour(IIfcSurfaceStyleRendering rendering) { try { var alpha = 1.0; if (rendering.Transparency.HasValue) { alpha = 1.0 - (double)(rendering.Transparency); } if (rendering.DiffuseColour is Ifc4.MeasureResource.IfcNormalisedRatioMeasure) { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha, (Ifc4.MeasureResource.IfcNormalisedRatioMeasure)rendering.DiffuseColour )); } else if (rendering.DiffuseColour is IIfcColourRgb) { ColourMap.Add(new XbimColour( (IIfcColourRgb)rendering.DiffuseColour, alpha )); } else if (rendering.DiffuseColour == null) { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha )); } else if (rendering.SpecularColour is Ifc4.MeasureResource.IfcNormalisedRatioMeasure) //getting key duplication on some ifc models so add else if { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha, (Ifc4.MeasureResource.IfcNormalisedRatioMeasure)(rendering.SpecularColour) )); } else if (rendering.SpecularColour is IIfcColourRgb) { ColourMap.Add(new XbimColour( (IIfcColourRgb)rendering.SpecularColour, alpha )); } } catch (System.Exception ex) { rendering.Model.Logger?.LogWarning($"#{DefinedObjectId} attempted to add a duplicate colour (same name).", ex); } }
private void AddColour(IIfcSurfaceStyleRendering rendering) { var alpha = 1.0; if (rendering.Transparency.HasValue) { alpha = 1.0 - (double)(rendering.Transparency); } if (rendering.DiffuseColour is Ifc4.MeasureResource.IfcNormalisedRatioMeasure) { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha, (Ifc4.MeasureResource.IfcNormalisedRatioMeasure)rendering.DiffuseColour )); } else if (rendering.DiffuseColour is IIfcColourRgb) { ColourMap.Add(new XbimColour( (IIfcColourRgb)rendering.DiffuseColour, alpha )); } else if (rendering.DiffuseColour == null) { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha )); } else if (rendering.SpecularColour is Ifc4.MeasureResource.IfcNormalisedRatioMeasure) //getting key duplication on some ifc models so add else if { ColourMap.Add(new XbimColour( rendering.SurfaceColour, alpha, (Ifc4.MeasureResource.IfcNormalisedRatioMeasure)(rendering.SpecularColour) )); } else if (rendering.SpecularColour is IIfcColourRgb) { ColourMap.Add(new XbimColour( (IIfcColourRgb)rendering.SpecularColour, alpha )); } }
public static IEnumerable <ColorOrNormalised> ToColorChannel(this IIfcSurfaceStyleRendering sr) { // Adapting Xbim Texture transformation logic here float alpha = 1.0f - (float)(sr.Transparency ?? 0); return(new ColorOrNormalised[] { new ColorOrNormalised() { Channel = ColorChannel.Albedo, Color = sr.SurfaceColour.ToColor() }, sr.DiffuseColour?.ToColorOrNormalised(ColorChannel.Diffuse, alpha), sr.ReflectionColour?.ToColorOrNormalised(ColorChannel.Diffuse, alpha), sr.TransmissionColour?.ToColorOrNormalised(ColorChannel.Emmisive, alpha), sr.DiffuseTransmissionColour?.ToColorOrNormalised(ColorChannel.DiffuseEmmisive, alpha), sr.SpecularColour?.ToColorOrNormalised(ColorChannel.Specular, alpha) }.OfType <ColorOrNormalised>()); }
public static Material ToMaterial(this IIfcSurfaceStyleRendering r) { MaterialGroup grp = new MaterialGroup(); if (r.DiffuseColour is IfcNormalisedRatioMeasure) { Brush brush = new SolidColorBrush(r.SurfaceColour.ToColor((IfcNormalisedRatioMeasure)r.DiffuseColour)); brush.Opacity = r.Transparency.HasValue ? 1.0 - r.Transparency.Value : 1.0; grp.Children.Add(new DiffuseMaterial(brush)); } else if (r.DiffuseColour is IIfcColourRgb) { Brush brush = new SolidColorBrush(((IIfcColourRgb)r.DiffuseColour).ToColor()); brush.Opacity = r.Transparency.HasValue ? 1.0 - r.Transparency.Value : 1.0; grp.Children.Add(new DiffuseMaterial(brush)); } else if (r.DiffuseColour == null) { Brush brush = new SolidColorBrush(r.SurfaceColour.ToColor()); brush.Opacity = r.Transparency.HasValue ? 1.0 - r.Transparency.Value : 1.0; grp.Children.Add(new DiffuseMaterial(brush)); } if (r.SpecularColour is IfcNormalisedRatioMeasure) { Brush brush = new SolidColorBrush(r.SurfaceColour.ToColor()); brush.Opacity = r.Transparency.HasValue ? 1.0 - r.Transparency.Value : 1.0; grp.Children.Add(new SpecularMaterial(brush, (IfcNormalisedRatioMeasure)(r.SpecularColour))); } if (r.SpecularColour is IIfcColourRgb) { Brush brush = new SolidColorBrush(((IIfcColourRgb)r.SpecularColour).ToColor()); brush.Opacity = r.Transparency.HasValue ? 1.0 - r.Transparency.Value : 1.0; grp.Children.Add(new SpecularMaterial(brush, 100.0)); } if (grp.Children.Count == 1) { Material mat = grp.Children[0]; return(mat); } return(grp); }
public static XbimTexture Create(IIfcSurfaceStyleRendering rendering) { var texture = new XbimTexture(); return(texture.CreateTexture(rendering)); }