public static SpeckleMesh ToSpeckle(this BH.oM.Graphics.RenderMesh renderMesh) { double[] vertices = renderMesh.Vertices.Select(v => v.Point).ToFlatArray(); int[] faces = renderMesh.Faces.SelectMany(face => { if (face.D != -1) { return new int[] { 1, face.A, face.B, face.C, face.D } } ; return(new int[] { 0, face.A, face.B, face.C }); }).ToArray(); var defaultColour = System.Drawing.Color.FromArgb(255, 100, 100, 100); var colors = Enumerable.Repeat(defaultColour.ToArgb(), vertices.Count()).ToArray(); SpeckleMesh speckleMesh = new SpeckleMesh(vertices, faces, colors, null); return(speckleMesh); }
protected SpeckleObject ToSpeckle(IObject iObject, SpecklePushConfig config) { // Convert the objects into the appropriate SpeckleObject using the available converters. SpeckleObject speckleObject = null; if (typeof(IGeometry).IsAssignableFrom(iObject.GetType())) { speckleObject = Speckle.Convert.IToSpeckle((IGeometry)iObject); } if (speckleObject == null) { BH.oM.Graphics.RenderMesh rm = null; try { rm = BH.Engine.Representation.Compute.IRenderMesh(iObject); } catch { BH.Engine.Reflection.Compute.RecordNote($"Could not compute the representation for an object of type {iObject.GetType().Name}.\n" + $"This simply means that the object will not be viewable in the browser (SpeckleViewer)."); } if (rm != null) { speckleObject = Speckle.Convert.ToSpeckle(rm); } else { speckleObject = (SpeckleObject)SpeckleCore.Converter.Serialise(iObject); // These will be exported as `Abstract` Speckle Objects. } } // Save BHoMObject data inside the speckleObject. Modify.SetBHoMData(speckleObject, iObject, config.UseSpeckleSerialiser); speckleObject.SetDiffingHash(iObject, config); return(speckleObject); }