Esempio n. 1
0
 private XbimTexture CreateTexture(IIfcSurfaceStyleRendering rendering)
 {
     DefinedObjectId = rendering.EntityLabel;
     ColourMap.Clear();
     AddColour(rendering);
     return(this);
 }
Esempio n. 2
0
 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);
     }
 }
Esempio n. 3
0
        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
                                  ));
            }
        }
Esempio n. 4
0
        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>());
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        public static XbimTexture Create(IIfcSurfaceStyleRendering rendering)
        {
            var texture = new XbimTexture();

            return(texture.CreateTexture(rendering));
        }