Extensions.cs 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Numerics;
  5. using System.Transactions;
  6. using SharpGLTF.Geometry;
  7. using SharpGLTF.Materials;
  8. using SharpGLTF.Schema2;
  9. namespace SharpGLTF
  10. {
  11. public static class PlotlyExtensions
  12. {
  13. public static Plotly.Box<Plotly.Types.ITracesProperty> ToTrace(this Schema2.Scene scene)
  14. {
  15. return PlotlyFactory.ToTrace(scene.EvaluateTriangles(), GetMaterialColor);
  16. }
  17. public static Plotly.Box<Plotly.Types.ITracesProperty> ToTrace(this Schema2.Mesh mesh)
  18. {
  19. return PlotlyFactory.ToTrace(mesh.EvaluateTriangles(), GetMaterialColor);
  20. }
  21. public static Plotly.Box<Plotly.Types.ITracesProperty> ToTrace(this IMeshBuilder<MaterialBuilder> mesh)
  22. {
  23. IEnumerable<(IVertexBuilder, IVertexBuilder, IVertexBuilder, MaterialBuilder)> _enumTris()
  24. {
  25. foreach (var p in mesh.Primitives)
  26. {
  27. foreach (var (A, B, C) in p.Triangles)
  28. {
  29. var va = p.Vertices[A];
  30. var vb = p.Vertices[B];
  31. var vc = p.Vertices[C];
  32. yield return (va, vb, vc, p.Material);
  33. }
  34. }
  35. }
  36. return PlotlyFactory.ToTrace(_enumTris(), GetMaterialColor);
  37. }
  38. private static int GetMaterialColor(Schema2.Material material)
  39. {
  40. var mb = new MaterialBuilder();
  41. material.CopyTo(mb);
  42. return GetMaterialColor(mb);
  43. }
  44. private static int GetMaterialColor(MaterialBuilder material)
  45. {
  46. var color = (material.GetChannel(KnownChannel.BaseColor) ?? material.GetChannel(KnownChannel.Diffuse))?.Parameter ?? Vector4.One * 0.8f;
  47. color *= 255;
  48. var ccc = color.X * 65536 + color.Y * 256 + color.Z;
  49. return (int)ccc;
  50. }
  51. }
  52. }