private object GetWallDisplayMesh(DB.Wall wall) { var grid = wall.CurtainGrid; var mesh = new Mesh(); // meshing for walls in case they are curtain grids if (grid != null) { var meshPanels = new Mesh(); var meshMullions = new Mesh(); var panels = new List <Solid>(); var mullions = new List <Solid>(); foreach (ElementId panelId in grid.GetPanelIds()) { panels.AddRange(GetElementSolids(Doc.GetElement(panelId))); } foreach (ElementId mullionId in grid.GetMullionIds()) { mullions.AddRange(GetElementSolids(Doc.GetElement(mullionId))); } (meshPanels.faces, meshPanels.vertices) = GetFaceVertexArrFromSolids(panels); (meshMullions.faces, meshMullions.vertices) = GetFaceVertexArrFromSolids(mullions); meshPanels["renderMaterial"] = new Other.RenderMaterial() { opacity = 0.2, diffuse = System.Drawing.Color.AliceBlue.ToArgb() }; meshMullions["renderMaterial"] = new Other.RenderMaterial() { diffuse = System.Drawing.Color.DarkGray.ToArgb() }; meshPanels.units = ModelUnits; meshMullions.units = ModelUnits; return(new List <Base>() { meshPanels, meshMullions }); } else { (mesh.faces, mesh.vertices) = GetFaceVertexArrayFromElement(wall, new Options() { DetailLevel = ViewDetailLevel.Fine, ComputeReferences = false }); mesh.units = ModelUnits; return(mesh); } }
public Base WallToSpeckle(DB.Wall revitWall) { var baseGeometry = LocationToSpeckle(revitWall); if (baseGeometry is Geometry.Point) { return(RevitElementToSpeckle(revitWall)); } RevitWall speckleWall = new RevitWall(); speckleWall.family = revitWall.WallType.FamilyName.ToString(); speckleWall.type = revitWall.WallType.Name; speckleWall.baseLine = (ICurve)baseGeometry; speckleWall.level = ConvertAndCacheLevel(revitWall, BuiltInParameter.WALL_BASE_CONSTRAINT); speckleWall.topLevel = ConvertAndCacheLevel(revitWall, BuiltInParameter.WALL_HEIGHT_TYPE); speckleWall.height = GetParamValue <double>(revitWall, BuiltInParameter.WALL_USER_HEIGHT_PARAM); speckleWall.baseOffset = GetParamValue <double>(revitWall, BuiltInParameter.WALL_BASE_OFFSET); speckleWall.topOffset = GetParamValue <double>(revitWall, BuiltInParameter.WALL_TOP_OFFSET); speckleWall.structural = GetParamValue <bool>(revitWall, BuiltInParameter.WALL_STRUCTURAL_SIGNIFICANT); speckleWall.flipped = revitWall.Flipped; if (revitWall.CurtainGrid == null) { if (revitWall.IsStackedWall) { var wallMembers = revitWall.GetStackedWallMemberIds().Select(id => (Wall)Doc.GetElement(id)); speckleWall.elements = new List <Base>(); foreach (var wall in wallMembers) { speckleWall.elements.Add(WallToSpeckle(wall)); } } speckleWall.displayMesh = GetElementDisplayMesh(revitWall, new Options() { DetailLevel = ViewDetailLevel.Fine, ComputeReferences = false }); } else { // curtain walls have two meshes, one for panels and one for mullions // adding mullions as sub-elements so they can be correctly displayed in viewers etc (var panelsMesh, var mullionsMesh) = GetCurtainWallDisplayMesh(revitWall); speckleWall["renderMaterial"] = new Other.RenderMaterial() { opacity = 0.2, diffuse = System.Drawing.Color.AliceBlue.ToArgb() }; speckleWall.displayMesh = panelsMesh; var mullions = new Base { ["@displayMesh"] = mullionsMesh, ["renderMaterial"] = new Other.RenderMaterial() { diffuse = System.Drawing.Color.DarkGray.ToArgb() } }; speckleWall.elements = new List <Base> { mullions }; } GetAllRevitParamsAndIds(speckleWall, revitWall, new List <string> { "WALL_USER_HEIGHT_PARAM", "WALL_BASE_OFFSET", "WALL_TOP_OFFSET", "WALL_BASE_CONSTRAINT", "WALL_HEIGHT_TYPE", "WALL_STRUCTURAL_SIGNIFICANT" }); GetHostedElements(speckleWall, revitWall); //Report.Log($"Converted Wall {revitWall.Id}"); return(speckleWall); }