protected override void TrySolveInstance(IGH_DataAccess DA) { var element = default(DB.Element); if (!DA.GetData("Element", ref element)) { return; } var detailLevel = DB.ViewDetailLevel.Undefined; DA.GetData(1, ref detailLevel); if (detailLevel == DB.ViewDetailLevel.Undefined) { detailLevel = DB.ViewDetailLevel.Coarse; } var relativeTolerance = 0.5; if (DA.GetData(2, ref relativeTolerance)) { if (0.0 > relativeTolerance || relativeTolerance > 1.0) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"Parameter '{Params.Input[2].Name}' range is [0.0, 1.0]."); return; } } var meshingParameters = !double.IsNaN(relativeTolerance) ? new Rhino.Geometry.MeshingParameters(relativeTolerance, Revit.VertexTolerance) : null; Types.GeometricElement.BuildPreview(element, meshingParameters, detailLevel, out var materials, out var meshes, out var wires); for (int m = 0; m < meshes.Length; ++m) { meshes[m] = MeshDecoder.FromRawMesh(meshes[m], UnitConverter.NoScale); } DA.SetDataList(0, meshes?.Select((x) => new GH_Mesh(x))); DA.SetDataList(1, materials?.Select((x) => new GH_Material(x))); DA.SetDataList(2, wires?.Select((x) => new GH_Curve(x))); }
protected override void TrySolveInstance(IGH_DataAccess DA) { var element = default(DB.Element); if (!DA.GetData("Element", ref element)) { return; } var detailLevel = DB.ViewDetailLevel.Undefined; DA.GetData(1, ref detailLevel); if (detailLevel == DB.ViewDetailLevel.Undefined) { detailLevel = DB.ViewDetailLevel.Coarse; } var relativeTolerance = 0.5; if (DA.GetData(2, ref relativeTolerance)) { if (0.0 > relativeTolerance || relativeTolerance > 1.0) { AddRuntimeMessage(GH_RuntimeMessageLevel.Error, $"Parameter '{Params.Input[2].Name}' range is [0.0, 1.0]."); return; } } var meshingParameters = !double.IsNaN(relativeTolerance) ? new Rhino.Geometry.MeshingParameters(relativeTolerance, Revit.VertexTolerance) : null; Types.GeometricElement.BuildPreview(element, meshingParameters, detailLevel, out var materials, out var meshes, out var wires); for (int m = 0; m < meshes?.Length; ++m) { meshes[m] = MeshDecoder.FromRawMesh(meshes[m], UnitConverter.NoScale); } var outMesh = new Mesh(); var dictionary = Convert.Display.PreviewConverter.ZipByMaterial(materials, meshes, outMesh); if (dictionary is null) { // In case ZipByMaterial fails we just return the unclasified preview meshes DA.SetDataList(0, meshes?.Select(x => new GH_Mesh(x))); DA.SetDataList(1, materials?.Select(x => new Types.Material(x))); } else { // On success we return the classified set of meshes. if (outMesh.Faces.Count > 0) { DA.SetDataList(0, dictionary.Values.Select(x => new GH_Mesh(x)).Concat(Enumerable.Repeat(new GH_Mesh(outMesh), 1))); DA.SetDataList(1, dictionary.Keys.Select(x => new Types.Material(x)).Concat(Enumerable.Repeat(new Types.Material(), 1))); } else { DA.SetDataList(0, dictionary.Values.Select(x => new GH_Mesh(x))); DA.SetDataList(1, dictionary.Keys.Select(x => new Types.Material(x))); } } DA.SetDataList(2, wires?.Select(x => new GH_Curve(x))); }