Browse Source

mxg:添加设备部件的导出

mengxiangge 5 years ago
parent
commit
34216a088a

+ 1 - 0
.gitignore

@@ -8,3 +8,4 @@
 /JBIM/RevitToJBim/obj/Debug
 /JBIM/JBIM/bin/Debug
 /JBIM/RevitToJBim/bin/Debug
+/JBIM/RevitExport/bin

BIN
JBIM/Dlls/SAGA.RevitUtils.dll


+ 4 - 0
JBIM/JBIM/Component/ComponentObject.cs

@@ -30,5 +30,9 @@ namespace JBIM.Component
         /// 构件关联类型Id
         /// </summary>
         public BimId TypeId { get; set; }
+        /// <summary>
+        /// 从模型中拾取的参数
+        /// </summary>
+        public List<Parameter> Parameters { get; set; }
     }
 }

+ 6 - 3
JBIM/JBIM/Component/EquipPart.cs

@@ -15,13 +15,16 @@ using JBIM.Definition;
 
 namespace JBIM.Component
 {
-    [TypeDefiniton(TypeDefinition.Space)]
+    [TypeDefiniton(TypeDefinition.EquipPart)]
     public class EquipPart : Equipment
     {
         public EquipPart()
         {
-            BoundarySegments = new List<List<BimId>>();
+         
         }
-        public List<List<BimId>> BoundarySegments { get; private set; }
+        /// <summary>
+        /// 关联的设备
+        /// </summary>
+        public string Owner { get; set; }
     }
 }

+ 4 - 2
JBIM/JBIM/Component/Equipment.cs

@@ -15,7 +15,7 @@ using JBIM.Definition;
 
 namespace JBIM.Component
 {
-    [TypeDefiniton(TypeDefinition.Space)]
+    [TypeDefiniton(TypeDefinition.Equipment)]
     public class Equipment : VisibleComponentObject
     {
         public Equipment()
@@ -23,7 +23,9 @@ namespace JBIM.Component
             
         }
 
-
+        /// <summary>
+        /// 族名称
+        /// </summary>
         public string FamilyName { get; set; }
     }
 }

+ 7 - 1
JBIM/JBIM/Component/Parameter.cs

@@ -14,10 +14,16 @@ namespace JBIM.Component
     /// <summary>
     /// Parameter
     /// </summary>
-    class Parameter
+    public class Parameter
     {
+        public Parameter(ParameterDefinition define)
+        {
+            Definition = define;
+        }
+        
         public ParameterDefinition Definition { get; set; }
 
         public string Value { get; set; }
+        
     }
 }

+ 3 - 2
JBIM/JBIM/Component/ParameterDefinition.cs

@@ -14,7 +14,7 @@ namespace JBIM.Component
     /// <summary>
     /// ParameterDefinition
     /// </summary>
-    class ParameterDefinition
+    public class ParameterDefinition
     {
         public string Id { get; set; }
         public string Name { get; set; }
@@ -23,7 +23,8 @@ namespace JBIM.Component
         /// </summary>
         public ParameterType ParameterType { get; set; }
 
-        public bool Visible { get; set; } 
+        public bool Visible { get; set; }
+       
     }
 
     public enum ParameterType

+ 10 - 2
JBIM/RevitToJBim/Common/ElementWrapperFactory.cs

@@ -9,10 +9,13 @@ using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
+using System.Text.RegularExpressions;
 using System.Threading.Tasks;
 using Autodesk.Revit.DB;
 using RevitExport;
 using RevitExport.Export;
+using RevitToJBim.Extension;
+using RevitToJBim.MBI;
 using SAGA.RevitUtils.Extends;
 using SAGA.RevitUtils.MEP;
 
@@ -74,8 +77,13 @@ namespace RevitToJBim.Common
             if (useFamilyType == FamilyType.Undefine)
             {
                 //判断部件和设备
-                var family = familyInstance.GetFamily();
-                ///todo
+                var familyName = familyInstance.GetFamilyName();
+                if (Regex.IsMatch(familyName, MBIRegexPattern.IsEquip)|| Regex.IsMatch(familyName, MBIRegexPattern.IsEquipPart))
+                    useFamilyType = FamilyType.Facility;
+                else if (Regex.IsMatch(familyName, MBIRegexPattern.IsBeacon))
+                {
+                    useFamilyType = FamilyType.Beacon;
+                }
             }
             if (useFamilyType == FamilyType.Undefine)
             {

+ 2 - 2
JBIM/RevitToJBim/Common/FamilyType.cs

@@ -19,8 +19,8 @@ namespace RevitToJBim.Common
     public enum FamilyType
     {
         Undefine,
-        Equipment,
-        EquipPart,
+        Facility,
+        Beacon,
         Window,
         Door,
         Column,

+ 43 - 0
JBIM/RevitToJBim/Common/ParameterUtil.cs

@@ -0,0 +1,43 @@
+/* ==============================================================================
+ * 功能描述:ParameterUtil  
+ * 创 建 者:Garrett
+ * 创建日期:2019/6/25 16:15:58
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JBIM.Component;
+
+namespace RevitToJBim.Common
+{
+    /// <summary>
+    /// ParameterUtil
+    /// </summary>
+    public class ParameterUtil
+    {
+        private static Dictionary<string, ParameterDefinition> ParameterDefinitionDic { get; set; }
+        /// <summary>
+        /// 跟据参数名称查找参数定义
+        /// </summary>
+        /// <param name="name"></param>
+        /// <returns></returns>
+        public static ParameterDefinition FindParameterDefine(string name)
+        {
+            if(ParameterDefinitionDic == null)
+                ParameterDefinitionDic = new Dictionary<string, ParameterDefinition>();
+            ParameterDefinition definition = null;
+            if (!ParameterDefinitionDic.TryGetValue(name, out definition))
+            {
+                definition=new ParameterDefinition();
+                definition.Name = name;
+                definition.ParameterType = ParameterType.Text;
+                definition.Visible = true;
+            }
+
+            return definition;
+        }
+
+    }
+}

+ 61 - 0
JBIM/RevitToJBim/Common/RevitUtil.cs

@@ -13,6 +13,10 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using RevitToJBim.Extension;
+using RevitToJBim.MBI;
+using SAGA.DotNetUtils;
+using Parameter=JBIM.Component.Parameter;
 
 namespace RevitToJBim.Common
 {
@@ -43,5 +47,62 @@ namespace RevitToJBim.Common
 
             return path;
         }
+        /// <summary>
+        /// 获取FamilyInstance box底面轮廓
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns></returns>
+        public static List<XYZ> GetBottomPolygon(FamilyInstance fi)
+        {
+            List<XYZ> path=new List<XYZ>();
+            var box = fi.get_BoundingBox(null);
+            if (box == null) return path;
+            var boxMin = box.Min;
+            var boxMax = box.Max;
+            path.Add(boxMin);
+            path.Add(boxMin.NewX(boxMax.X));
+            path.Add(boxMin.NewX(boxMax.X).NewY(boxMax.Y));
+            path.Add(boxMin.NewY(boxMax.Y));
+            path.Add(boxMin);
+            return path;
+        }
+        /// <summary>
+        /// 获取设备设施的参数
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns></returns>
+        public static List<Parameter> GetFacilityParameters(FamilyInstance fi)
+        {
+            List<string> parameterNames=new List<string>(){ MBIBuiltInParameterName.EquipLocalName,MBIBuiltInParameterName.EquipLocalID };
+            List<Parameter> parameters=new List<Parameter>();
+            foreach (var parameterName in parameterNames)
+            {
+                var revitParameter = fi.GetParameter(parameterName);
+                if (revitParameter != null)
+                {
+                    var parameter = new Parameter(ParameterUtil.FindParameterDefine(parameterName));
+                    parameter.Value = revitParameter.AsString();
+                    parameters.Add(parameter);
+                }
+            }
+
+            return parameters;
+        }
+
+        /// <summary>
+        /// 获取部件所关联的设备
+        /// </summary>
+        /// <param name="element"></param>
+        /// <returns></returns>
+        public static Element GetEquipPartParent(Element element)
+        {
+            if (!element.IsEquipmentPart()) return null;
+            string code = element.GetFamilyName()?.Substring(0, 4); ;
+            if (code.IsNullOrEmpty()) return null;
+            //构件所关联的设备
+            var parentInst = element.Document.GetElements(new ElementIntersectsElementFilter(element))
+                .FirstOrDefault(t => !t.Id.IsEqual(element.Id) && t.GetFamilyCode() == code);
+            return parentInst;
+        }
     }
 }

+ 1 - 1
JBIM/RevitToJBim/ComponentParse/ParseColumn.cs

@@ -25,7 +25,7 @@ namespace RevitToJBim.ComponentParse
     {
         public override List<string> FastIndex()
         {
-            return new List<string>() { CategoryGenerator.BuildingCategory(JFamilyType.Other) };
+            return new List<string>() { CategoryGenerator.BuildingCategory(JFamilyType.Column) };
         }
         public override bool Match(ElementWrapper wrapper)
         {

+ 119 - 0
JBIM/RevitToJBim/ComponentParse/ParseFacility.cs

@@ -0,0 +1,119 @@
+/*-------------------------------------------------------------------------
+ * 功能描述:解析设备设施
+ * 作者:Garrett
+ * 创建时间: 
+ * 版本号:v1.0
+ *  -------------------------------------------------------------------------*/
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using Autodesk.Revit.DB.Plumbing;
+using JBIM;
+using JBIM.Component;
+using JBIM.Definition;
+using RevitExport;
+using RevitExport.Export;
+using RevitToJBim.Common;
+using RevitToJBim.Extension;
+using RevitToJBim.ParseData;
+using SAGA.RevitUtils.Extends;
+using SAGA.RevitUtils.MEP;
+using FamilyType = RevitToJBim.Common.FamilyType;
+using JEquip = JBIM.Component.Equipment;
+
+namespace RevitToJBim.ComponentParse
+{
+    [UsableParse]
+    public class ParseFacility : ParseBase
+    {
+        public override List<string> FastIndex()
+        {
+            return new List<string>() { CategoryGenerator.BuildingCategory(FamilyType.Facility) };
+        }
+
+        public override bool Match(ElementWrapper wrapper)
+        {
+            return wrapper.RefElement.IsEquipment()||wrapper.RefElement.IsEquipmentPart();
+        }
+
+        protected override List<BimId> ParseInner(ElementWrapper wrapper, JBimParseContext context)
+        {
+            if (!(wrapper.RefElement is FamilyInstance familyInstance))
+            {
+                return null;
+            }
+            //ElementType
+            JEquip jObject = GetJEquip(familyInstance);
+            //Name,SourceId
+            ParseCore.AttachObject(jObject, wrapper);
+            //Location
+            jObject.Location = GeometryLocation.CreatePointLocation(BimConvert.ConvertToXYZ(familyInstance.GetLocationPoint()));
+            //OutLine
+            var polygonPath = RevitUtil.GetBottomPolygon(familyInstance);
+            if (polygonPath != null && polygonPath.Any())
+            {
+                Polygon outLine = new Polygon(BimConvert.ConvertToXYZs(polygonPath));
+                jObject.OutLine.Add(outLine);
+            }
+            //FamilyName
+            jObject.FamilyName = familyInstance.GetFamilyName();
+            //Tag
+            jObject.Tag = "";
+            //Parameters
+            jObject.Parameters = RevitUtil.GetFacilityParameters(familyInstance);
+
+            //Id
+            context.AddBimObject(jObject);
+
+            #region 关联数据处理相关
+            //Owner
+            var parentElement = RevitUtil.GetEquipPartParent(familyInstance);
+            if (parentElement != null&&jObject is EquipPart jPart)
+            {
+                jPart.Owner = context.Parser.ParseElement(ElementWrapperFactory.CreateWrapper(parentElement)).FirstOrDefault()?.Id;
+            }
+            
+            #region Connector连接关系
+            var connectors = familyInstance.GetAllConnectors();
+            ElementOneToManyRel relMany = ParseCore.GetConnectorRels(familyInstance,connectors);
+
+            if (relMany!=null)
+            {
+                context.RelationShips.Add(relMany);
+            }
+            #endregion
+            
+            #endregion
+            return new List<BimId>() { jObject.Id };
+        }
+
+        public override List<ElementWrapper> ArrangeRefElements(ElementWrapper wrapper, JBimParseContext context)
+        {
+            var element = wrapper.RefElement;
+            var wrappers = new List<ElementWrapper>() { };
+            var connectors = element.GetAllConnectors();
+            foreach (var connector in connectors)
+            {
+                wrappers.Add(ParseCore.GetConnectorWrapper(connector));
+            }
+            return wrappers;
+        }
+
+        private  JEquip GetJEquip(FamilyInstance fi)
+        {
+            JEquip jObject = null;
+            if(fi.IsEquipment())
+                jObject=new JEquip();
+            else if (fi.IsEquipmentPart())
+            {
+                jObject = new EquipPart();
+            }
+            return jObject;
+        }
+    }
+}

+ 8 - 8
JBIM/RevitToJBim/ExportDataBuilder.cs

@@ -31,16 +31,16 @@ namespace RevitToJBim
             //应对传入元素,不是document全集的情况
             //FilteredElementCollector collector = new FilteredElementCollector(doc, elements.Select(e => e.Id).ToList());
             FilteredElementCollector collector = new FilteredElementCollector(doc);
-            wrappers.AddRange(collector.Clone().FilterElements<Wall>().Select(e => new ElementWrapper(e)));
-            wrappers.AddRange(collector.Clone().FilterElements<CurveElement>(BuiltInCategory.OST_MEPSpaceSeparationLines).Select(e => new ElementWrapper(e)));
-            var sourceSpaces = collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>().ToList();
-            //附加逻辑判断
-            //  var originSpaces = collector.Clone().GetUseSpaces();
+            //wrappers.AddRange(collector.Clone().FilterElements<Wall>().Select(e => new ElementWrapper(e)));
+            //wrappers.AddRange(collector.Clone().FilterElements<CurveElement>(BuiltInCategory.OST_MEPSpaceSeparationLines).Select(e => new ElementWrapper(e)));
+            //var sourceSpaces = collector.Clone().FilterElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>().ToList();
+            ////附加逻辑判断
+            ////  var originSpaces = collector.Clone().GetUseSpaces();
 
-            wrappers.AddRange(sourceSpaces.Select(e => new ElementWrapper(e)));
+            //wrappers.AddRange(sourceSpaces.Select(e => new ElementWrapper(e)));
 
-            wrappers.AddRange(collector.Clone().FilterElements<Pipe>().Select(e => new ElementWrapper(e)));
-            wrappers.AddRange(collector.Clone().FilterElements<Duct>().Select(e => new ElementWrapper(e)));
+            //wrappers.AddRange(collector.Clone().FilterElements<Pipe>().Select(e => new ElementWrapper(e)));
+            //wrappers.AddRange(collector.Clone().FilterElements<Duct>().Select(e => new ElementWrapper(e)));
             var familyInstances = collector.Clone().FilterElements<FamilyInstance>();
             foreach (FamilyInstance familyInstance in familyInstances)
             {

+ 116 - 0
JBIM/RevitToJBim/Extension/ElementExtension.cs

@@ -0,0 +1,116 @@
+/* ==============================================================================
+ * 功能描述:ElementExtension  
+ * 创 建 者:Garrett
+ * 创建日期:2019/6/25 11:51:43
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using Autodesk.Revit.DB;
+using Autodesk.Revit.DB.Mechanical;
+using RevitToJBim.Common;
+using RevitToJBim.MBI;
+using SAGA.RevitUtils.Extends;
+
+namespace RevitToJBim.Extension
+{
+    /// <summary>
+    /// ElementExtension
+    /// </summary>
+    public static class ElementExtension
+    {
+        public static string GetFamilyName(this Element element)
+        {
+            return element.GetFamily()?.Name;
+        }
+        /// <summary>
+        /// 获取设备的种族类型编码 ATFC
+        /// 族名称的命名规则:ATFC-风机盘管
+        /// </summary>
+        /// <returns></returns>
+        public static string GetFamilyCode(this Element element)
+        {
+            string code = "";
+            if (element is FamilyInstance fi)
+            {
+                string familyName = fi.GetFamilyName();
+                if (familyName == null) return code;
+                //族名称的命名规则:ATFC-风机盘管
+                int index = familyName.IndexOf('-');
+                if (index != -1 && index + 1 != familyName.Length)
+                    code = familyName.Substring(0, familyName.IndexOf('-'));
+                //移除前面和后面的空格
+                code = code.Trim();
+            }
+
+            return code;
+        }
+        /// <summary>
+        /// 判断是否为设备 设备族为4位
+        /// ATVR - 多联机 - 室内机 - 双向气流 - 天花板嵌入式
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns></returns>
+        public static bool IsEquipment(this Element element)
+        {
+            bool result = false;
+            if (element is FamilyInstance fi)
+            {
+                var family = fi.GetFamilyName();
+                result = Regex.IsMatch(family, $"{MBIRegexPattern.IsEquip}");
+            }
+
+            return result;
+        }
+        /// <summary>
+        /// 判断是否为设备部件 设备族为6位
+        /// </summary>
+        /// <param name="fi"></param>
+        /// <returns></returns>
+        public static bool IsEquipmentPart(this Element element)
+        {
+            bool result = false;
+            if (element is FamilyInstance fi)
+            {
+                var family = fi.GetFamilyName();
+                result = Regex.IsMatch(family, $"{MBIRegexPattern.IsEquipPart}");
+            }
+
+            return result;
+        }
+        /// <summary>
+        /// 判断是否为信标
+        /// </summary>
+        /// <param name="elem"></param>
+        /// <returns></returns>
+        public static bool IsBeacon(this Element elem)
+        {
+            var family = elem.GetFamilyName();
+            return family != null && (Regex.IsMatch(family, MBIRegexPattern.IsBeacon));
+        }
+
+        /// <summary>
+        /// 判断是否为空间,判断周长是否为零
+        /// 如果周长为零,是删除的空间
+        /// </summary>
+        /// <param name="elem"></param>
+        /// <param name="ischeckzero">是否检查周长为零</param>
+        /// <returns></returns>
+        public static bool IsSpace(this Element elem, bool ischeckzero = true)
+        {
+            var isspace = false;
+            if (elem is Space space)
+            {
+                //空间比较特殊,周长为零就相当于删除
+                isspace = !ischeckzero || !(space.IsDeleteSpace());
+                //限制所用空间的阶段
+                //isspace = isspace && space.IsPhase1Space();
+            }
+
+            return isspace;
+        }
+    }
+}

+ 3 - 1
JBIM/RevitToJBim/JsonConverter/BimJsonUtil.cs

@@ -22,8 +22,10 @@ namespace RevitToJBim.JsonConverter
         {
             JsonSerializerSettings jsetting = new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore };
             jsetting.Converters.Add(new BimIdConverter());
-            jsetting.Converters.Add(new XYZConverter());
+            //mxg 显示x:,y:,z:格式的
+            //jsetting.Converters.Add(new XYZConverter());
             jsetting.Converters.Add(new StringEnumConverter());
+            jsetting.Converters.Add(new ParameterConverter());
             //var serializer = JsonSerializer.Create(jsetting);
             //JObject jobject = new JObject();
             //foreach (var collection in m_DataSource)

+ 47 - 0
JBIM/RevitToJBim/JsonConverter/ParameterConverter.cs

@@ -0,0 +1,47 @@
+/* ==============================================================================
+ * 功能描述:ParameterConverter  
+ * 创 建 者:Garrett
+ * 创建日期:2019/6/26 10:14:23
+ * ==============================================================================*/
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using JBIM.Component;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace RevitToJBim.JsonConverter
+{
+    /// <summary>
+    /// ParameterDefinationConverter
+    /// </summary>
+    class ParameterConverter : Newtonsoft.Json.JsonConverter
+    {
+        public override bool CanConvert(Type objectType)
+        {
+            return objectType == typeof(Parameter);
+        }
+
+        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
+        {
+            throw new NotImplementedException();
+        }
+
+        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
+        {
+            if (value == null)
+            {
+                writer.WriteNull();
+                return;
+            }
+            JObject jObject=new JObject();
+            var parameter = value as Parameter;
+            if (parameter == null) return;
+            jObject.Add("Name", parameter?.Definition?.Name);
+            jObject.Add("Value",parameter?.Value);
+            writer.WriteToken(jObject.CreateReader());
+        }
+    }
+}

+ 23 - 0
JBIM/RevitToJBim/MBI/MBIBuiltInParameterName.cs

@@ -0,0 +1,23 @@
+/* ==============================================================================
+ * 功能描述:MBIBuiltInParameterName  
+ * 创 建 者:Garrett
+ * 创建日期:2019/4/18 11:38:54
+ * ==============================================================================*/
+
+namespace RevitToJBim.MBI
+{
+    /// <summary>
+    /// MBIBuiltInParameterName
+    /// </summary>
+    public class MBIBuiltInParameterName
+    {
+        /// <summary>
+        /// 设备本地编码
+        /// </summary>
+        public readonly static string EquipLocalID = "设备本地编码";
+        /// <summary>
+        /// 设备本地名称
+        /// </summary>
+        public readonly static string EquipLocalName = "设备本地名称";
+    }
+}

+ 22 - 0
JBIM/RevitToJBim/MBI/MBIRegexPattern.cs

@@ -0,0 +1,22 @@
+/* ==============================================================================
+ * 功能描述:RegexPatten  
+ * 创 建 者:Garrett
+ * 创建日期:2019/5/29 14:12:17
+ * ==============================================================================*/
+
+namespace RevitToJBim.MBI
+{
+    /// <summary>
+    /// RegexPatten
+    /// </summary>
+    class MBIRegexPattern
+    {
+
+        public const string IsEquip = @"^[A-Z]{4}\s*-\s*\S*";
+        public const string IsEquipPart = @"^[A-Z]{6}\s*-\s*\S*";
+        public const string IsBeacon = @"^Beacon$";
+
+        
+
+    }
+}

+ 6 - 0
JBIM/RevitToJBim/RevitToJBim.csproj

@@ -64,12 +64,17 @@
     <Compile Include="Common\ElementWrapperFactory.cs" />
     <Compile Include="Common\ExceptionUtil.cs" />
     <Compile Include="Common\FamilyType.cs" />
+    <Compile Include="Common\ParameterUtil.cs" />
+    <Compile Include="JsonConverter\ParameterConverter.cs" />
+    <Compile Include="MBI\MBIBuiltInParameterName.cs" />
+    <Compile Include="MBI\MBIRegexPattern.cs" />
     <Compile Include="Common\RevitIdGenerator.cs" />
     <Compile Include="Common\RevitUtil.cs" />
     <Compile Include="ComponentParse\ParseBase.cs" />
     <Compile Include="ComponentParse\ParseColumn.cs" />
     <Compile Include="ComponentParse\ParseConnector.cs" />
     <Compile Include="ComponentParse\ParseCore.cs" />
+    <Compile Include="ComponentParse\ParseFacility.cs" />
     <Compile Include="ComponentParse\ParseDuct.cs" />
     <Compile Include="ComponentParse\ParseFamilyJoinObject.cs" />
     <Compile Include="ComponentParse\ParseMepSystem.cs" />
@@ -77,6 +82,7 @@
     <Compile Include="ComponentParse\ParseSpace.cs" />
     <Compile Include="ComponentParse\UsableParseAttribute.cs" />
     <Compile Include="ExportDataBuilder.cs" />
+    <Compile Include="Extension\ElementExtension.cs" />
     <Compile Include="JsonConverter\BimIdConverter.cs" />
     <Compile Include="JsonConverter\BimJsonUtil.cs" />
     <Compile Include="JsonConverter\XYZConverter.cs" />

+ 6 - 0
JBIM/RevitToJBim/RevitToJBim.csproj.user

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <ProjectView>ShowAllFiles</ProjectView>
+  </PropertyGroup>
+</Project>