Exemplo n.º 1
0
        //TODO: host railings, where possible
        private RevitRailing RailingToSpeckle(Railing revitRailing)
        {
            var railingType    = Doc.GetElement(revitRailing.GetTypeId()) as RailingType;
            var speckleRailing = new RevitRailing();

            //speckleRailing.family = railingType.FamilyName;
            speckleRailing.type  = railingType.Name;
            speckleRailing.level = ConvertAndCacheLevel(revitRailing, BuiltInParameter.STAIRS_RAILING_BASE_LEVEL_PARAM);
            speckleRailing.path  = CurveListToSpeckle(revitRailing.GetPath());

            GetAllRevitParamsAndIds(speckleRailing, revitRailing, new List <string> {
                "STAIRS_RAILING_BASE_LEVEL_PARAM"
            });

            var mesh = new Geometry.Mesh();

            (mesh.faces, mesh.vertices) = GetFaceVertexArrayFromElement(revitRailing, new Options()
            {
                DetailLevel = ViewDetailLevel.Fine, ComputeReferences = false
            });

            speckleRailing["@displayMesh"] = mesh;

            return(speckleRailing);
        }
Exemplo n.º 2
0
        //TODO: host railings, where possible
        private RevitRailing RailingToSpeckle(Railing revitRailing)
        {
            var railingType    = Doc.GetElement(revitRailing.GetTypeId()) as RailingType;
            var speckleRailing = new RevitRailing();

            //speckleRailing.family = railingType.FamilyName;
            speckleRailing.type  = railingType.Name;
            speckleRailing.level = ConvertAndCacheLevel(revitRailing, BuiltInParameter.STAIRS_RAILING_BASE_LEVEL_PARAM);
            speckleRailing.path  = CurveListToSpeckle(revitRailing.GetPath());

            GetAllRevitParamsAndIds(speckleRailing, revitRailing, new List <string> {
                "STAIRS_RAILING_BASE_LEVEL_PARAM"
            });

            speckleRailing.displayMesh = GetElementDisplayMesh(revitRailing, new Options()
            {
                DetailLevel = ViewDetailLevel.Fine, ComputeReferences = false
            });
            //Report.Log($"Converted Railing {revitRailing.Id}");
            return(speckleRailing);
        }
Exemplo n.º 3
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document doc = commandData.Application.ActiveUIDocument.Document;


            //因為樓層數會影響一些標準的高度,所以先把樓層高度找出來
            FilteredElementCollector levelCollector = new FilteredElementCollector(doc);
            ElementCategoryFilter    levelFilter    = new ElementCategoryFilter(BuiltInCategory.OST_Levels);

            List <Element> levels = levelCollector.WherePasses(levelFilter).ToElements().ToList();

            int floor_count = 0;

            foreach (Element elem in levels)
            {
                if (elem.get_Parameter(BuiltInParameter.ELEM_FAMILY_PARAM).AsValueString() == "樓層")
                {
                    //在地表的樓層才算,Elevation>=0,屋突好像也不算,名字P開頭的不行
                    Level level = elem as Level;
                    if (level.Name.ToList()[0] != 'P' & level.Name.ToList()[0] != 'G')
                    {
                        if (level.Elevation >= 0)
                        {
                            floor_count += 1;
                        }
                    }
                }
            }
            if (floor_count >= 10)
            {
                regulation_railing_height = 120;
            }
            else
            {
                regulation_railing_height = 110;
            }



            string        newFileName = @"C:\Users\8014\Desktop\BIM模型檢核.csv";
            StringBuilder sb          = new StringBuilder();

            sb.AppendLine("5.樓梯垂直淨空高度檢核");
            sb.AppendLine("規範:樓梯之垂直淨空距離不得小於 190 公分");
            sb.AppendLine("樓梯名稱\t樓梯高度(cm)\t規範高度(cm)\t是否符合規範");

            form_list5.Add(new string[] { "5.樓梯垂直淨空高度檢核" });
            form_list5.Add(new string[] { "規範:樓梯之垂直淨空距離不得小於 190 公分" });


            //先把全部的樓梯抓出來,有分室外梯以及室內梯,不過好像不用特別分室外跟室內耶

            FilteredElementCollector stairsCollector = new FilteredElementCollector(doc);
            ElementCategoryFilter    stairsFilter    = new ElementCategoryFilter(BuiltInCategory.OST_Stairs);

            List <Element> all_stairs = stairsCollector.WherePasses(stairsFilter).WhereElementIsNotElementType().ToElements().ToList();

            //List<Element> indoor_stairs = new List<Element>();

            //foreach(Element elem in all_stairs)
            //{
            //    if (elem.get_Parameter(BuiltInParameter.ELEM_TYPE_PARAM).AsValueString().Contains("室內RC"))
            //        indoor_stairs.Add(elem);
            //}

            foreach (Element elem in all_stairs)
            {
                Stairs stairs        = elem as Stairs;
                double stairs_height = Convert.ToDouble(stairs.get_Parameter(BuiltInParameter.STAIRS_STAIRS_HEIGHT).AsValueString());
                string s             = stairs.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString() + "\t" + stairs_height.ToString() + "\t"
                                       + regulation_stairs_height.ToString() + "\t"
                                       + (stairs_height >= regulation_stairs_height).ToString();
                sb.AppendLine(s);

                string[] row = new string[] { stairs.Id.ToString(), stairs.get_Parameter(BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM).AsValueString(), stairs_height.ToString(), regulation_stairs_height.ToString(), "無", (stairs_height >= regulation_stairs_height).ToString() };
                form_list5.Add(row);
            }

            sb.AppendLine();
            sb.AppendLine();
            File.AppendAllText(newFileName, sb.ToString(), Encoding.Unicode);

            form_list5.Add(new string[] { });
            form_list5.Add(new string[] { });



            StringBuilder sb2 = new StringBuilder();

            sb2.AppendLine("6.欄杆扶手高度檢核:");
            sb2.AppendLine("規範:設置於露臺、陽臺、室外走廊、室外樓梯、平屋頂及室內天井部 分等之欄桿扶手高度欄桿扶手高度,不得小於1.1公尺,十層以上者,不得小於1.2公尺");
            sb2.AppendLine("欄杆名稱\t欄杆高度(cm)\t規範高度(cm)\t是否符合規範");

            form_list6.Add(new string[] { "6.欄杆扶手高度檢核:" });
            form_list6.Add(new string[] { "規範:設置於露臺、陽臺、室外走廊、室外樓梯、平屋頂及室內天井部 分等之欄桿扶手高度欄桿扶手高度,不得小於1.1公尺,十層以上者,不得小於1.2公尺" });


            //接下來要取欄杆高度
            //樓梯用的扶手、欄杆是900mm的,跟女兒牆的布一樣
            //要扣除掉女兒牆的欄杆的
            FilteredElementCollector railingCollector = new FilteredElementCollector(doc);
            ElementCategoryFilter    railingFilter    = new ElementCategoryFilter(BuiltInCategory.OST_StairsRailing);

            List <Element> railings = railingCollector.WherePasses(railingFilter).WhereElementIsNotElementType().ToElements().ToList();


            foreach (Element elem in railings)
            {
                if (!(elem.Name.Contains("900mm")))
                {
                    continue;
                }
                Railing     railing        = elem as Railing;
                ElementType elementType    = doc.GetElement(railing.GetTypeId()) as ElementType;
                double      railing_height = Convert.ToDouble(elementType.get_Parameter(BuiltInParameter.STAIRS_RAILING_HEIGHT).AsValueString());
                string      s = railing.Name + "\t" + railing_height.ToString() + "\t" + regulation_railing_height.ToString()
                                + "\t" + (railing_height >= regulation_railing_height).ToString();
                sb2.AppendLine(s);

                string[] row = new string[] { railing.Id.ToString(), railing.Name, railing_height.ToString(), regulation_railing_height.ToString(), "無", (railing_height >= regulation_railing_height).ToString() };
                form_list6.Add(row);
            }

            sb2.AppendLine();
            sb2.AppendLine();

            File.AppendAllText(newFileName, sb2.ToString(), Encoding.Unicode);

            form_list6.Add(new string[] { });
            form_list6.Add(new string[] { });



            return(Result.Succeeded);
        }