Exemple #1
0
        public static List <Panel> ToSAM_Panels(this FamilyInstance familyInstance, ConvertSettings convertSettings)
        {
            if (familyInstance == null)
            {
                return(null);
            }

            List <Panel> result = convertSettings?.GetObjects <Panel>(familyInstance.Id);

            if (result != null)
            {
                return(result);
            }

            RevitInstance3D revitInstance3D = Geometry.Revit.Convert.ToSAM(familyInstance, convertSettings) as RevitInstance3D;

            if (revitInstance3D == null)
            {
                return(null);
            }

            result = ToSAM_Panels(revitInstance3D);

            if (result != null)
            {
                convertSettings?.Add(familyInstance.Id, result);
            }

            return(result);
        }
Exemple #2
0
        public static List <Panel> ToSAM_Panels(this RevitInstance3D revitInstance3D)
        {
            if (revitInstance3D == null)
            {
                return(null);
            }

            RevitType3D  revitType3D  = revitInstance3D.Type as RevitType3D;
            Construction construction = revitType3D.ToSAM_Construction();

            List <Face3D>         face3Ds        = new List <Face3D>();
            List <ISAMGeometry3D> sAMGeometry3Ds = revitInstance3D.Geometries;

            foreach (ISAMGeometry3D sAMGeometry3D in sAMGeometry3Ds)
            {
                if (sAMGeometry3D is Shell)
                {
                    List <Face3D> face3Ds_Temp = ((Shell)sAMGeometry3D).Face3Ds;
                    if (face3Ds_Temp != null && face3Ds_Temp.Count != 0)
                    {
                        face3Ds.AddRange(face3Ds_Temp);
                    }
                }
                else if (sAMGeometry3D is Face3D)
                {
                    face3Ds.Add((Face3D)sAMGeometry3D);
                }
            }

            List <Panel> result = new List <Panel>();

            foreach (Face3D face3D in face3Ds)
            {
                Panel panel = Analytical.Create.Panel(construction, PanelType.Shade, face3D);
                if (panel == null)
                {
                    continue;
                }

                List <Core.ParameterSet> parameterSets = revitType3D.GetParamaterSets();
                if (parameterSets != null)
                {
                    foreach (Core.ParameterSet parameterSet in parameterSets)
                    {
                        panel.Add(parameterSet);
                    }
                }

                result.Add(panel);
            }

            return(result);
        }
Exemple #3
0
        /// <summary>
        /// Conversion of WallSweep to panels. WARNING! Method does not handle more complex WallSweep
        /// </summary>
        /// <param name="wallSweep">Revit WallSweep</param>
        /// <param name="convertSettings">SAM Revit ConvertSettings</param>
        /// <returns>SAM Analytical Panels (Panels projected on host (Wall) plane)</returns>
        public static List <Panel> ToSAM_Panels(this WallSweep wallSweep, ConvertSettings convertSettings)
        {
            if (wallSweep == null)
            {
                return(null);
            }

            List <Panel> result = convertSettings?.GetObjects <Panel>(wallSweep.Id);

            if (result != null)
            {
                return(result);
            }

            RevitInstance3D revitInstance3D = Geometry.Revit.Convert.ToSAM(wallSweep, convertSettings);

            if (revitInstance3D == null)
            {
                return(null);
            }

            result = ToSAM_Panels(revitInstance3D);

            if (result != null)
            {
                convertSettings?.Add(wallSweep.Id, result);
            }

            return(result);

            //if (wallSweep == null || !wallSweep.IsValidObject)
            //    return null;

            //List<Panel> result = convertSettings?.GetObjects<Panel>(wallSweep.Id);
            //if (result != null)
            //    return result;

            //IEnumerable<ElementId> elementIds = wallSweep.GetHostIds();
            //if (elementIds == null || elementIds.Count() == 0)
            //{
            //    return null;
            //}

            //Document document = wallSweep.Document;
            //if(document == null)
            //{
            //    return null;
            //}

            //HostObject hostObject = null;
            //foreach(ElementId elementId in elementIds)
            //{
            //    hostObject = document.GetElement(elementId) as HostObject;
            //    if(hostObject != null)
            //    {
            //        break;
            //    }
            //}

            //List<Face3D> face3Ds = hostObject?.Profiles();
            //if(face3Ds == null || face3Ds.Count == 0)
            //{
            //    return null;
            //}

            //Geometry.Spatial.Plane plane = face3Ds[0]?.GetPlane();
            //if(plane == null)
            //{
            //    return null;
            //}

            //List<Face3D> face3Ds_WallSweep = Geometry.Revit.Convert.ToSAM_Geometries<Face3D>(wallSweep);
            //if(face3Ds_WallSweep == null || face3Ds_WallSweep.Count == 0)
            //{
            //    return null;
            //}

            //List<Face2D> face2Ds = new List<Face2D>();
            //foreach(Face3D face3D_WallSweep in face3Ds_WallSweep)
            //{
            //    Geometry.Spatial.Plane plane_WallSweep = face3D_WallSweep?.GetPlane();
            //    if (plane_WallSweep == null || plane.Perpendicular(plane_WallSweep))
            //    {
            //        continue;
            //    }

            //    Face3D face3D = plane.Project(face3D_WallSweep);
            //    if(face3D == null || !face3D.IsValid())
            //    {
            //        continue;
            //    }

            //    Face2D face2D = plane.Convert(face3D);
            //    if(face2D == null || !face2D.IsValid())
            //    {
            //        continue;
            //    }

            //    face2Ds.Add(face2D);
            //}

            //face2Ds = face2Ds.Union();
            //if(face2Ds == null || face2Ds.Count == 0)
            //{
            //    return null;
            //}

            //Construction construction = ToSAM_Construction((ElementType)document.GetElement(wallSweep.GetTypeId()), convertSettings);

            //result = new List<Panel>();
            //foreach(Face2D face2D in face2Ds)
            //{
            //    Face3D face3D = plane.Convert(face2D);
            //    if(face3D == null || !face3D.IsValid())
            //    {
            //        continue;
            //    }

            //    Panel panel = Analytical.Create.Panel(construction, PanelType.Wall, face3D);
            //    if(panel == null)
            //    {
            //        continue;
            //    }

            //    result.Add(panel);
            //}

            //convertSettings?.Add(wallSweep.Id, result);

            //return result;
        }