From 84ddf19927f874cc4bbdb4a7e954fb978d19f9fc Mon Sep 17 00:00:00 2001 From: Matteo Cominetti Date: Fri, 19 Feb 2021 11:17:23 +0000 Subject: [PATCH] fix: speckle data reusing old props --- .../ConverterUnity.Geometry.cs | 29 ++++++++++++------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/Assets/Speckle Connector/ConverterUnity.Geometry.cs b/Assets/Speckle Connector/ConverterUnity.Geometry.cs index ff5511f..73edaae 100644 --- a/Assets/Speckle Connector/ConverterUnity.Geometry.cs +++ b/Assets/Speckle Connector/ConverterUnity.Geometry.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using Objects.Other; using Speckle.ConnectorUnity; using Speckle.Core.Models; @@ -106,25 +107,25 @@ namespace Objects.Converter.Unity i += 3; } - var localToWorld = go.transform.localToWorldMatrix; - var mesh = new Mesh(); // get the speckle data from the go here // so that if the go comes from speckle, typed props will get overridden below GetSpeckleData(mesh, go); - - mesh.units = ModelUnits; + mesh.units = ModelUnits; + var vertices = filter.mesh.vertices; foreach (var vertex in vertices) { - mesh.vertices.Add(PointToSpeckle(localToWorld.MultiplyPoint3x4(vertex)).x); - mesh.vertices.Add(PointToSpeckle(localToWorld.MultiplyPoint3x4(vertex)).y); - mesh.vertices.Add(PointToSpeckle(localToWorld.MultiplyPoint3x4(vertex)).z); + var p = go.transform.TransformPoint(vertex); + var sp = PointToSpeckle(p); + mesh.vertices.Add(sp.x); + mesh.vertices.Add(sp.y); + mesh.vertices.Add(sp.z); } - - mesh.faces = faces; + mesh.faces = faces; + return mesh; } @@ -318,6 +319,7 @@ namespace Objects.Converter.Unity //Add mesh collider MeshCollider mc = go.AddComponent(); mc.sharedMesh = mesh; + mc.convex = true; SetSpeckleData(go, speckleMesh); @@ -329,13 +331,18 @@ namespace Objects.Converter.Unity private void SetSpeckleData(GameObject go, Base @base) { var sd = go.AddComponent(); - sd.Data = @base.GetMembers(); + var meshprops = typeof(Mesh).GetProperties(BindingFlags.Instance | BindingFlags.Public).Select(x=>x.Name).ToList(); + + //get members, but exclude mesh props to avoid issues down the line + sd.Data = @base.GetMembers() + .Where(x=> !meshprops.Contains(x.Key)) + .ToDictionary(x=>x.Key, x=>x.Value); } private void GetSpeckleData(Base @base, GameObject go) { var sd = go.GetComponent(); - if (sd == null) + if (sd == null || sd.Data == null) return; foreach (var key in sd.Data.Keys) {