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