Ejemplo n.º 1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="vaultAlias"></param>
        /// <param name="objType"></param>
        /// <param name="keyDef">唯一标识的属性定义ID</param>
        /// <param name="objCount">期望的对象个数</param>
        /// <returns>所有存在的对象</returns>
        private Dictionary <string, List <ObjVer> > GetElements(VaultAliases vaultAlias, int objType, int keyDef, int objCount)
        {
            var dict    = new Dictionary <string, List <ObjVer> >();
            var res     = SearchObjects(vaultAlias, objType, objCount);
            var guidDef = keyDef;//_aliases.PdDict[PD.Guid];

            var objVers = new ObjVers();

            foreach (ObjectVersion ver in res)
            {
                objVers.Add(-1, ver.ObjVer);
            }
            var vault   = vaultAlias.Vault;
            var mm      = vault.ObjectPropertyOperations.GetPropertiesOfMultipleObjects(objVers);
            var hasDict = new Dictionary <string, List <ObjVer> >();

            for (var i = 0; i < mm.Count; i++)
            {
                var j    = i + 1;
                var guid = mm[j].SearchForProperty(guidDef).GetValueAsLocalizedText();
                if (dict.ContainsKey(guid))
                {
                    dict[guid].Add(objVers[j]);
                }
                else
                {
                    dict.Add(guid, new List <ObjVer> {
                        objVers[j]
                    });
                }
            }
            return(dict);
        }
Ejemplo n.º 2
0
        public static void AddProperties(this ViewElement view, PropertyValues pvs, VaultAliases vaultAlias, int levelId, int modeId)
        {
            view.AddBasicProperties(pvs, vaultAlias, modeId);

            var vtPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.ViewType]
            };

            vtPV.Value.SetValue(MFDataType.MFDatatypeInteger, view.ViewType);
            pvs.Add(-1, vtPV);

            if (view.ViewDiscipline != null)
            {
                var vdPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.ViewDisc]
                };
                vdPV.Value.SetValue(MFDataType.MFDatatypeInteger, view.ViewDiscipline.Value);
                pvs.Add(-1, vdPV);
            }
            if (view.GenLevel != null)
            {
                if (levelId <= 0)
                {
                    throw new Exception("必须指定楼层");
                }
                var glPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.Level]
                };
                glPV.Value.SetValue(MFDataType.MFDatatypeLookup, levelId);
                pvs.Add(-1, glPV);
            }
        }
Ejemplo n.º 3
0
        public static PropertyValues UpdateMaterial(this MaterialElement mat, VaultAliases vaultAlias, int modelId)
        {
            var pvs = new PropertyValues();

            AddProperties(mat, pvs, vaultAlias, modelId);

            return(pvs);
        }
Ejemplo n.º 4
0
        public static PropertyValues UpdateFamily(this ElementFamily fam, VaultAliases vaultAlias, int cateId, int modelId)
        {
            var pvs = new PropertyValues();

            AddProperties(fam, pvs, vaultAlias, cateId, modelId);

            return(pvs);
        }
Ejemplo n.º 5
0
        public static PropertyValues UpdateView(this ViewElement view, VaultAliases vaultAlias, int levelId, int modelId)
        {
            var pvs = new PropertyValues();

            AddProperties(view, pvs, vaultAlias, levelId, modelId);

            return(pvs);
        }
Ejemplo n.º 6
0
        public static PropertyValues UpdatePartType(this ElementType elemType, VaultAliases vaultAlias, int modelId)
        {
            var pvs = new PropertyValues();

            AddProperties(elemType, pvs, vaultAlias, modelId);

            return(pvs);
        }
Ejemplo n.º 7
0
        public static PropertyValues UpdateFloor(this LevelElement level, VaultAliases vaultAlias, int modelId)
        {
            var pvs = new PropertyValues();

            AddProperties(level, pvs, vaultAlias, modelId);

            return(pvs);
        }
Ejemplo n.º 8
0
        public static ObjVer CreateMaterial(this MaterialElement mat, VaultAliases vaultAlias, int modelId, AccessControlList acl)
        {
            var objTypeId = vaultAlias.ObDict[OB.Material];
            var classId   = vaultAlias.CsDict[CS.Material];
            var pvs       = new PropertyValues();

            AddProperties(mat, pvs, vaultAlias, modelId);
            return(BaseElementExtensions.CreateBasicObject(objTypeId, classId, pvs, vaultAlias.Vault, acl));
        }
Ejemplo n.º 9
0
        public static PropertyValues UpdatePart(this Element elem, VaultAliases vaultAlias
                                                , int cateId, int typeId, int matId, int levelId, int famId, int modelId, string modelUrl, int?unitId, int?floorId, int?discId)
        {
            var pvs = new PropertyValues();

            AddProperties(elem, pvs, vaultAlias, cateId, typeId, matId, levelId, famId, modelId, modelUrl, unitId, floorId, discId);

            return(pvs);
        }
Ejemplo n.º 10
0
        public static ObjVer CreateFamily(this ElementFamily fam, VaultAliases vaultAlias, int cateId, int modelId, AccessControlList acl)
        {
            var objTypeId = vaultAlias.ObDict[OB.Family];
            var classId   = vaultAlias.CsDict[CS.Family];

            var pvs = new PropertyValues();

            AddProperties(fam, pvs, vaultAlias, cateId, modelId);
            return(BaseElementExtensions.CreateBasicObject(objTypeId, classId, pvs, vaultAlias.Vault, acl));
        }
Ejemplo n.º 11
0
        public static ObjVer CreatePart(this Element elem, VaultAliases vaultAlias
                                        , int cateId, int typeId, int matId, int levelId, int famId, int modelId, AccessControlList acl, string modelUrl, int?unitId, int?floorId, int?discId)
        {
            var objTypeId = vaultAlias.ObDict[OB.Part];
            var classId   = vaultAlias.CsDict[CS.Part];
            var pvs       = new PropertyValues();

            AddProperties(elem, pvs, vaultAlias, cateId, typeId, matId, levelId, famId, modelId, modelUrl, unitId, floorId, discId);
            return(BaseElementExtensions.CreateBasicObject(objTypeId, classId, pvs, vaultAlias.Vault, acl));
        }
Ejemplo n.º 12
0
        public static ObjVer CreateView(this ViewElement view, VaultAliases vaultAlias, int levelId, int modelId, AccessControlList acl)
        {
            var objTypeId = vaultAlias.ObDict[OB.View];
            var classId   = vaultAlias.CsDict[CS.View];

            var pvs = new PropertyValues();

            AddProperties(view, pvs, vaultAlias, levelId, modelId);

            return(BaseElementExtensions.CreateBasicObject(objTypeId, classId, pvs, vaultAlias.Vault, acl));
        }
Ejemplo n.º 13
0
        public static PropertyValues UpdateCategory(this ElementCategory cate, VaultAliases vaultAlias, int modelId)
        {
            if (cate == null)
            {
                return(null);
            }
            var pvs = new PropertyValues();

            AddProperties(cate, pvs, vaultAlias, modelId);

            return(pvs);
        }
Ejemplo n.º 14
0
        public static ObjVer CreateCategory(this ElementCategory cate, VaultAliases vaultAlias, int modelId, AccessControlList acl)
        {
            if (cate == null)
            {
                return(null);
            }
            var objTypeId = vaultAlias.ObDict[OB.Category];
            var classId   = vaultAlias.CsDict[CS.Category];
            var pvs       = new PropertyValues();

            AddProperties(cate, pvs, vaultAlias, modelId);

            return(BaseElementExtensions.CreateBasicObject(objTypeId, classId, pvs, vaultAlias.Vault, acl));
        }
Ejemplo n.º 15
0
 private MfModel(Model model, Vault vault)
 {
     _model    = model;
     _name     = model.Name;
     _filePath = model.Filepath;
     _vault    = vault;
     if (vault != null)
     {
         _clientVault = false;
     }
     if (vault != null)
     {
         _aliases = VaultAliases.GetAliases(_vault);
     }
 }
Ejemplo n.º 16
0
        public static void AddProperties(this ElementFamily fam, PropertyValues pvs, VaultAliases vaultAlias, int cateId, int modelId)
        {
            fam.AddBasicProperties(pvs, vaultAlias, modelId);
            var catePV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.PartCategory]
            };

            catePV.Value.SetValue(MFDataType.MFDatatypeLookup, cateId);
            pvs.Add(-1, catePV);
            if (fam.Parameters.Count > 0)
            {
                var pPV = BaseElementExtensions.CreateParameterProp(fam.Parameters, vaultAlias);
                pvs.Add(-1, pPV);
            }
        }
Ejemplo n.º 17
0
        private void Initialize()
        {
            if (_inited)
            {
                return;
            }
            if (_clientVault)
            {
                if (!ClientUtils.IsInMf(_filePath))
                {
                    throw new Exception("文件未在云系统中!");
                }
                if (_vault == null)
                {
                    var obj = ClientUtils.GetObjectFromURL(_filePath);
                    _vault = obj.Vault;
                    _obj   = obj.VersionData;
                }
            }
            else
            {
                if (_vault == null)
                {
                    throw new Exception("服务端必须指定文档库");
                }
                var objID = new ObjID();
                objID.SetIDs((int)MFBuiltInObjectType.MFBuiltInObjectTypeDocument, _model.Id);
                var objAndProps = _vault.ObjectOperations.GetLatestObjectVersionAndProperties(objID, true);
                _obj = objAndProps.VersionData;
            }

            _name = _obj.Title;
            if (_aliases == null)
            {
                _aliases = VaultAliases.GetAliases(_vault);
            }
            if (!_aliases.IsValid)
            {
                throw new Exception("文档库缺少必须的元数据!");
            }
            _inited = true;
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 根据类型和所属模型搜索构件、类别、类型、楼层、材料等
        /// </summary>
        /// <param name="aliases"></param>
        /// <param name="objType"></param>
        /// <param name="objCount">期望的对象个数</param>
        /// <returns></returns>
        private ObjectSearchResults SearchObjects(VaultAliases aliases, int objType, int objCount)
        {
            var scs = new SearchConditions();

            var typeSc = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            typeSc.Expression.DataStatusValueType = MFStatusType.MFStatusTypeObjectTypeID;
            typeSc.TypedValue.SetValue(MFDataType.MFDatatypeLookup, objType);
            scs.Add(-1, typeSc);

            var ownerSc = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            ownerSc.Expression.DataPropertyValuePropertyDef = aliases.PdDict[PD.OwnedModel];
            ownerSc.TypedValue.SetValue(MFDataType.MFDatatypeLookup, Model.Id);
            scs.Add(-1, ownerSc);

            var delSc = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            delSc.Expression.DataStatusValueType = MFStatusType.MFStatusTypeDeleted;
            delSc.TypedValue.SetValue(MFDataType.MFDatatypeBoolean, false);
            scs.Add(-1, delSc);
            var vault = aliases.Vault;

            if (objCount < MaxSearchCount)
            {
                return(vault.ObjectSearchOperations.SearchForObjectsByConditions(scs, MFSearchFlags.MFSearchFlagNone,
                                                                                 false));
            }
            else
            {
                return(vault.ObjectSearchOperations.SearchForObjectsByConditionsEx(scs, MFSearchFlags.MFSearchFlagNone,
                                                                                   false, objCount * 3, 120));
            }
        }
Ejemplo n.º 19
0
        internal static ObjectSearchResults GetParts(Vault vault, VaultAliases aliases, string guid)
        {
            var partObjTypeId = aliases.ObDict[OB.Part];
            var guidPropId    = aliases.PdDict[PD.Guid];

            var scs = new SearchConditions();

            var typeSC = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            typeSC.Expression.DataStatusValueType = MFStatusType.MFStatusTypeObjectTypeID;
            typeSC.TypedValue.SetValue(MFDataType.MFDatatypeLookup, partObjTypeId);
            scs.Add(-1, typeSC);

            var ifcSC = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            ifcSC.Expression.DataPropertyValuePropertyDef = guidPropId;
            ifcSC.TypedValue.SetValue(MFDataType.MFDatatypeText, guid);
            scs.Add(-1, ifcSC);

            var delSC = new SearchCondition {
                ConditionType = MFConditionType.MFConditionTypeEqual
            };

            delSC.Expression.DataStatusValueType = MFStatusType.MFStatusTypeDeleted;
            delSC.TypedValue.SetValue(MFDataType.MFDatatypeBoolean, false);
            scs.Add(-1, delSC);

            var res = vault.ObjectSearchOperations.SearchForObjectsByConditions(scs, MFSearchFlags.MFSearchFlagNone,
                                                                                false);

            return(res);
        }
Ejemplo n.º 20
0
        /// <summary>
        ///
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="vaultAlias"></param>
        /// <param name="objType"></param>
        /// <param name="keyDef"></param>
        /// <param name="objs">要处理的对象列表</param>
        /// <param name="objDict">已处理的对象词典</param>
        /// <param name="objList">所有的对象集合</param>
        /// <param name="createFunc"></param>
        /// <param name="updateFunc"></param>
        private void OperateElements <T>(VaultAliases vaultAlias, int objType, int keyDef, List <T> objs, Dictionary <string, int> objDict
                                         , List <string> objList, Func <T, ObjVer> createFunc, Func <T, PropertyValues> updateFunc) where T : BaseElement
        {
            var ts    = GetTrace <T>();
            var vault = vaultAlias.Vault;

            try
            {
                var      objsHas = GetElements(vaultAlias, objType, keyDef, objList.Count); //获取已有的对象词典
                List <T> createObjs, updateObjs;
                var      updateDict = new Dictionary <string, ObjVer>();
                if (objsHas.Count > 0)
                {
                    createObjs = new List <T>();
                    updateObjs = new List <T>();
                    var delObjs = SplitElements(objs, objsHas, objList, createObjs, updateObjs, updateDict);
                    if (delObjs.Count > 0)
                    {
                        foreach (var ov in delObjs)
                        {
                            vault.ObjectOperations.DeleteObject(ov.ObjID);
                        }
                    }
                }
                else
                {
                    createObjs = objs;
                    updateObjs = new List <T>();
                }
                //var objVers = new ObjVers();
                if (updateObjs.Count > 0)
                {
                    ts.TraceInformation("UpdateElementsWithParams: " + updateObjs.Count);
                    try
                    {
                        var uObjGrp = GroupArrays(updateObjs, MaxCount);
                        foreach (var ug in uObjGrp)
                        {
                            var objsU   = UpdateElementsWithParams(vault, ug, objDict, updateDict, updateFunc);
                            var res     = vault.ObjectPropertyOperations.SetPropertiesOfMultipleObjects(objsU);
                            var objVers = new ObjVers();
                            foreach (ObjectVersionAndProperties vp in res)
                            {
                                objVers.Add(-1, vp.ObjVer);
                            }
                            vault.ObjectOperations.CheckInMultipleObjects(objVers);
                        }
                    }
                    catch (Exception ex)
                    {
                        ts.TraceEvent(TraceEventType.Error, 0, "UpdateElementsWithParams:" + updateObjs.Count + "; 错误:" + ex.Message);
                        throw;
                    }
                }
                if (createObjs.Count > 0)
                {
                    ts.TraceInformation("CreateElementsWithParams: " + createObjs.Count);
                    try
                    {
                        var cObjGrp = GroupArrays(createObjs, MaxCount);
                        foreach (var ug in cObjGrp)
                        {
                            var objsC   = CreateElementsWithParams(ug, objDict, createFunc);
                            var objVers = new ObjVers();
                            foreach (ObjVer v in objsC)
                            {
                                objVers.Add(-1, v);
                            }
                            vault.ObjectOperations.CheckInMultipleObjects(objVers);
                        }
                    }
                    catch (Exception ex)
                    {
                        ts.TraceEvent(TraceEventType.Error, 0, "CreateElementsWithParams:" + createObjs.Count + "; 错误:" + ex.Message);
                        throw;
                    }
                }
            }
            catch (Exception ex)
            {
                ts.TraceEvent(TraceEventType.Error, 0, "需要创建或更新的对象个数:" + objs.Count + "; 错误:" + ex.Message);
                throw;
            }
            finally
            {
                ts.Close();
            }
        }
Ejemplo n.º 21
0
        public static void AddProperties(this LevelElement level, PropertyValues pvs, VaultAliases vaultAlias, int modelId)
        {
            level.AddBasicProperties(pvs, vaultAlias, modelId);
            var elevPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Elevation]
            };

            elevPV.Value.SetValue(MFDataType.MFDatatypeText, level.Elevation);
            pvs.Add(-1, elevPV);
        }
Ejemplo n.º 22
0
        public static void AddProperties(this ElementType elemType, PropertyValues pvs, VaultAliases vaultAlias, int modelId)
        {
            elemType.AddBasicProperties(pvs, vaultAlias, modelId);

            if (elemType.Parameters.Count > 0)
            {
                var pPV = BaseElementExtensions.CreateParameterProp(elemType.Parameters, vaultAlias);
                pvs.Add(-1, pPV);
            }
        }
Ejemplo n.º 23
0
        public MfModelDicts Run(VaultAliases aliases)
        {
            if (Model == null)
            {
                throw new Exception("未指定模型!");
            }
            var modelId = Model.Id;

            var list = GetLists();

            var idKey   = aliases.PdDict[PD.Id];
            var guidKey = aliases.PdDict[PD.Guid];

            //处理构件类型
            if (Model.Types.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.PartType];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                OperateElements(aliases, typeId, guidKey, Model.Types, Dicts.Types, list.Types
                                , t => t.CreatePartType(aliases, modelId, acl), t => t.UpdatePartType(aliases, modelId));
            }

            //处理类别
            if (Model.Categories.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.Category];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                OperateElements(aliases, typeId, idKey, Model.Categories, Dicts.Cates, list.Cates
                                , c => c.CreateCategory(aliases, modelId, acl), c => c.UpdateCategory(aliases, modelId));
            }


            //处理楼层
            if (Model.Levels.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.Level];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                OperateElements(aliases, typeId, guidKey, Model.Levels, Dicts.Floors, list.Floors
                                , fl => fl.CreateFloor(aliases, modelId, acl), fl => fl.UpdateFloor(aliases, modelId));
            }


            //处理材料
            if (Model.Materials.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.Material];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                OperateElements(aliases, typeId, guidKey, Model.Materials, Dicts.Mats, list.Mats
                                , m => m.CreateMaterial(aliases, modelId, acl), m => m.UpdateMaterial(aliases, modelId));
            }


            //处理视图
            if (Model.Views.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.View];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                Func <ViewElement, ObjVer> viewCreateFunc = v =>
                {
                    var lId = 0;
                    if (v.GenLevel != null)
                    {
                        lId = Dicts.Floors[v.GenLevel];
                    }
                    var vId = v.CreateView(aliases, lId, modelId, acl);
                    return(vId);
                };

                Func <ViewElement, PropertyValues> viewUpdateFunc = v =>
                {
                    var lId = 0;
                    if (v.GenLevel != null)
                    {
                        lId = Dicts.Floors[v.GenLevel];
                    }
                    var vId = v.UpdateView(aliases, lId, modelId);
                    return(vId);
                };
                OperateElements(aliases, typeId, guidKey,
                                Model.Views, Dicts.Views, list.Views, viewCreateFunc, viewUpdateFunc);
            }



            //处理族
            if (Model.Families.Count > 0)
            {
                var typeId  = aliases.ObDict[OB.Family];
                var objType = aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                Func <ElementFamily, ObjVer> famCreateFunc = f =>
                {
                    var cateId = 0;
                    if (f.Category != null)
                    {
                        cateId = Dicts.Cates[f.Category.GetKey()];
                    }
                    return(f.CreateFamily(aliases, cateId, modelId, acl));
                };
                Func <ElementFamily, PropertyValues> famUpdateFunc = f =>
                {
                    var cateId = 0;
                    if (f.Category != null)
                    {
                        cateId = Dicts.Cates[f.Category.GetKey()];
                    }
                    return(f.UpdateFamily(aliases, cateId, modelId));
                };
                OperateElements(aliases, typeId, guidKey,
                                Model.Families, Dicts.Fams, list.Fams, famCreateFunc, famUpdateFunc);
            }


            //处理构件
            if (Model.Elements.Count > 0)
            {
                var partObjId = aliases.ObDict[OB.Part];
                var objType   = aliases.Vault.ObjectTypeOperations.GetObjectType(partObjId);
                var acl       = objType.AccessControlList;
                Func <Element, ObjVer> partCreateFunc = p =>
                {
                    int cateId = Dicts.Cates[p.Category.GetKey()];
                    int typeId = Dicts.Types[p.ElemType];
                    int matId  = 0;
                    if (p.Material != null)
                    {
                        matId = Dicts.Mats[p.Material];
                    }
                    int levelId = 0;
                    if (p.Level != null)
                    {
                        levelId = Dicts.Floors[p.Level];
                    }
                    int famId = 0;
                    if (p.Family != null)
                    {
                        famId = Dicts.Fams[p.Family];
                    }
                    return(p.CreatePart(aliases, cateId, typeId, matId, levelId, famId, modelId, acl, ModelUrl, UnitId, FloorId, DiscId));
                };

                Func <Element, PropertyValues> partUpdateFunc = p =>
                {
                    int cateId = Dicts.Cates[p.Category.GetKey()];
                    int typeId = Dicts.Types[p.ElemType];
                    int matId  = 0;
                    if (p.Material != null)
                    {
                        matId = Dicts.Mats[p.Material];
                    }
                    int levelId = 0;
                    if (p.Level != null)
                    {
                        levelId = Dicts.Floors[p.Level];
                    }
                    int famId = 0;
                    if (p.Family != null)
                    {
                        famId = Dicts.Fams[p.Family];
                    }
                    return(p.UpdatePart(aliases, cateId, typeId, matId, levelId, famId, modelId, ModelUrl, UnitId, FloorId, DiscId));
                };

                var log = GetTrace <Element>();
                try
                {
                    log.TraceInformation("类别词典:" + Dicts.Cates.Count);
                    log.TraceInformation("类型词典:" + Dicts.Types.Count);
                    log.TraceInformation("材料词典:" + Dicts.Mats.Count);
                    log.TraceInformation("楼层词典:" + Dicts.Floors.Count);
                    log.TraceInformation("族词典:  " + Dicts.Fams.Count);
                    log.TraceInformation("构件个数:  " + Model.Elements.Count);
                    OperateElements(aliases, partObjId, guidKey,
                                    Model.Elements, Dicts.Elems, list.Elems, partCreateFunc, partUpdateFunc);
                }
                catch (Exception ex)
                {
                    log.TraceEvent(TraceEventType.Error, 0, "构件个数:" + Model.Elements.Count + "; " + ex.Message);
                    throw;
                }
                finally
                {
                    log.Close();
                }
            }
            return(Dicts);
        }
Ejemplo n.º 24
0
        public static void AddProperties(this Element elem, PropertyValues pvs, VaultAliases vaultAlias
                                         , int cateId, int typeId, int matId, int levelId, int famId, int modelId, string modelUrl, int?unitId, int?floorId, int?discId)
        {
            elem.AddBasicProperties(pvs, vaultAlias, modelId);

            if (elem.IfcId != null)
            {
                var ifcPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.IfcId]
                };
                ifcPV.Value.SetValue(MFDataType.MFDatatypeText, elem.IfcId);
                pvs.Add(-1, ifcPV);
                if (!String.IsNullOrEmpty(modelUrl))
                {
                    var urlPV = new PropertyValue {
                        PropertyDef = vaultAlias.PdDict[PD.ModelUrl]
                    };
                    urlPV.Value.SetValue(MFDataType.MFDatatypeMultiLineText, modelUrl + "&ifcguid=" + elem.IfcId);
                    pvs.Add(-1, urlPV);
                }
            }

            var catePV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.PartCategory]
            };

            catePV.Value.SetValue(MFDataType.MFDatatypeLookup, cateId);
            pvs.Add(-1, catePV);
            var typePV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.PartType]
            };

            typePV.Value.SetValue(MFDataType.MFDatatypeLookup, typeId);
            pvs.Add(-1, typePV);
            if (matId > 0)
            {
                var matPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.Material]
                };
                matPV.Value.SetValue(MFDataType.MFDatatypeLookup, matId);
                pvs.Add(-1, matPV);
            }
            if (levelId > 0)
            {
                var levelPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.Level]
                };
                levelPV.Value.SetValue(MFDataType.MFDatatypeLookup, levelId);
                pvs.Add(-1, levelPV);
            }
            if (elem.Parameters.Count > 0)
            {
                var pPV = BaseElementExtensions.CreateParameterProp(elem.Parameters, vaultAlias);
                pvs.Add(-1, pPV);
            }
            if (elem.Family != null)
            {
                var pPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.OwnedFamily]
                };
                pPV.Value.SetValue(MFDataType.MFDatatypeLookup, famId);
                pvs.Add(-1, pPV);
            }

            if (unitId != null)
            {
                var pPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.ModelUnitAt]
                };
                pPV.Value.SetValue(MFDataType.MFDatatypeLookup, unitId.Value);
                pvs.Add(-1, pPV);
            }
            if (floorId != null)
            {
                var pPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.FloorAt]
                };
                pPV.Value.SetValue(MFDataType.MFDatatypeLookup, floorId.Value);
                pvs.Add(-1, pPV);
            }
            if (discId != null)
            {
                var pPV = new PropertyValue {
                    PropertyDef = vaultAlias.PdDict[PD.DiscAt]
                };
                pPV.Value.SetValue(MFDataType.MFDatatypeLookup, discId.Value);
                pvs.Add(-1, pPV);
            }
        }
Ejemplo n.º 25
0
        public static void AddBasicProperties(this ElementWithGuid elem, PropertyValues pvs, VaultAliases vaultAlias, int modelId)
        {
            var idPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Id]
            };

            idPV.Value.SetValue(MFDataType.MFDatatypeInteger, elem.Id);
            pvs.Add(-1, idPV);

            var guidPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Guid]
            };

            guidPV.Value.SetValue(MFDataType.MFDatatypeText, elem.Guid);
            pvs.Add(-1, guidPV);

            var namePV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Name]
            };

            namePV.Value.SetValue(MFDataType.MFDatatypeText, elem.Name);
            pvs.Add(-1, namePV);

            var modelPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.OwnedModel]
            };

            modelPV.Value.SetValue(MFDataType.MFDatatypeLookup, modelId);
            pvs.Add(-1, modelPV);
        }
Ejemplo n.º 26
0
        public static void AddProperties(this ElementCategory cate, PropertyValues pvs, VaultAliases vaultAlias, int modelId)
        {
            if (cate == null)
            {
                return;
            }
            var idPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Id]
            };

            idPV.Value.SetValue(MFDataType.MFDatatypeInteger, cate.Id);
            pvs.Add(-1, idPV);

            var namePV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.Name]
            };

            namePV.Value.SetValue(MFDataType.MFDatatypeText, cate.Name);
            pvs.Add(-1, namePV);

            var modelPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.OwnedModel]
            };

            modelPV.Value.SetValue(MFDataType.MFDatatypeLookup, modelId);
            pvs.Add(-1, modelPV);
        }
Ejemplo n.º 27
0
        public static PropertyValue CreateParameterProp(List <ElementParameter> parameters, VaultAliases vaultAlias)
        {
            parameters.Sort();
            var pPV = new PropertyValue {
                PropertyDef = vaultAlias.PdDict[PD.ParamList]
            };

            pPV.Value.SetValue(MFDataType.MFDatatypeMultiLineText,
                               String.Join("\r\n", parameters.Select(c => c.ToString())));
            return(pPV);
        }
Ejemplo n.º 28
0
        public static VaultAliases GetAliases(Vault vault)
        {
            var va = new VaultAliases {
                Vault = vault
            };

            try
            {
                var ocId = MfAlias.GetObjType(vault, OB.Category);
                va.ObDict.Add(OB.Category, ocId);
                var cateObjType = vault.ObjectTypeOperations.GetObjectType(ocId);
                va.Categories = cateObjType.DefaultPropertyDef;

                var ofId = MfAlias.GetObjType(vault, OB.Level);
                va.ObDict.Add(OB.Level, ofId);
                var floorObjType = vault.ObjectTypeOperations.GetObjectType(ofId);
                va.Levels = floorObjType.DefaultPropertyDef;

                var opId = MfAlias.GetObjType(vault, OB.Part);
                va.ObDict.Add(OB.Part, opId);
                var partObjType = vault.ObjectTypeOperations.GetObjectType(opId);
                va.Parts = partObjType.DefaultPropertyDef;

                var parttId = MfAlias.GetObjType(vault, OB.PartType);
                va.ObDict.Add(OB.PartType, parttId);
                var parttObjType = vault.ObjectTypeOperations.GetObjectType(parttId);
                va.PartTypes = parttObjType.DefaultPropertyDef;

                var famId = MfAlias.GetObjType(vault, OB.Family);
                va.ObDict.Add(OB.Family, famId);
                var famObjType = vault.ObjectTypeOperations.GetObjectType(famId);
                va.PartFamilies = famObjType.DefaultPropertyDef;

                var matId = MfAlias.GetObjType(vault, OB.Material);
                va.ObDict.Add(OB.Material, matId);
                var matObjType = vault.ObjectTypeOperations.GetObjectType(matId);
                va.Materials = matObjType.DefaultPropertyDef;

                var viewId = MfAlias.GetObjType(vault, OB.View);
                va.ObDict.Add(OB.View, viewId);
                var viewObjType = vault.ObjectTypeOperations.GetObjectType(viewId);
                va.Views = viewObjType.DefaultPropertyDef;



                var olId = MfAlias.GetObjType(vault, OB.Floor);
                va.ObDict.Add(OB.Floor, olId);

                var mduId = MfAlias.GetObjType(vault, OB.ModelUnit);
                va.ObDict.Add(OB.ModelUnit, mduId);

                var mdiId = MfAlias.GetObjType(vault, OB.ModelDisc);
                va.ObDict.Add(OB.ModelDisc, mdiId);



                var ccId = MfAlias.GetObjectClass(vault, CS.Category);
                va.CsDict.Add(CS.Category, ccId);

                var cfId = MfAlias.GetObjectClass(vault, CS.Level);
                va.CsDict.Add(CS.Level, cfId);

                var cpId = MfAlias.GetObjectClass(vault, CS.Part);
                va.CsDict.Add(CS.Part, cpId);

                var cpfId = MfAlias.GetObjectClass(vault, CS.PartType);
                va.CsDict.Add(CS.PartType, cpfId);

                var cFamId = MfAlias.GetObjectClass(vault, CS.Family);
                va.CsDict.Add(CS.Family, cFamId);

                var cppId = MfAlias.GetObjectClass(vault, CS.View);
                va.CsDict.Add(CS.View, cppId);

                var cmatId = MfAlias.GetObjectClass(vault, CS.Material);
                va.CsDict.Add(CS.Material, cmatId);


                var cfamPartId = MfAlias.GetObjectClass(vault, CS.FamilyPart);
                va.CsDict.Add(CS.FamilyPart, cfamPartId);

                var ifcModelId = MfAlias.GetObjectClass(vault, CS.IfcModel, false);
                va.CsDict.Add(CS.IfcModel, ifcModelId);

                //var cparamId = MfAlias.GetObjectClass(vault, CS.Parameter);
                //va.CsDict.Add(CS.Parameter, cparamId);

                var docbId = MfAlias.GetObjectClass(vault, CS.DocBimModel);
                va.CsDict.Add(CS.DocBimModel, docbId);

                var clId = MfAlias.GetObjectClass(vault, CS.Floor);
                va.CsDict.Add(CS.Floor, clId);

                var cmduId = MfAlias.GetObjectClass(vault, CS.ModelUnit);
                va.CsDict.Add(CS.ModelUnit, cmduId);

                var cmdiId = MfAlias.GetObjectClass(vault, CS.ModelDisc);
                va.CsDict.Add(CS.ModelDisc, cmdiId);



                ///////



                var fpId = MfAlias.GetPropDef(vault, PD.OwnedFamily);
                va.PdDict.Add(PD.OwnedFamily, fpId);

                var glId = MfAlias.GetPropDef(vault, PD.Level);
                va.PdDict.Add(PD.Level, glId);

                var guidId = MfAlias.GetPropDef(vault, PD.Guid);
                va.PdDict.Add(PD.Guid, guidId);

                var idId = MfAlias.GetPropDef(vault, PD.Id);
                va.PdDict.Add(PD.Id, idId);

                var pdMatId = MfAlias.GetPropDef(vault, PD.Material);
                va.PdDict.Add(PD.Material, pdMatId);

                var pnId = MfAlias.GetPropDef(vault, PD.Name);
                va.PdDict.Add(PD.Name, pnId);

                var pdCateId = MfAlias.GetPropDef(vault, PD.PartCategory);
                va.PdDict.Add(PD.PartCategory, pdCateId);

                var pdTypeId = MfAlias.GetPropDef(vault, PD.PartType);
                va.PdDict.Add(PD.PartType, pdTypeId);

                var vdId = MfAlias.GetPropDef(vault, PD.ViewDisc);
                va.PdDict.Add(PD.ViewDisc, vdId);

                var vtId = MfAlias.GetPropDef(vault, PD.ViewType);
                va.PdDict.Add(PD.ViewType, vtId);

                var elevId = MfAlias.GetPropDef(vault, PD.Elevation);
                va.PdDict.Add(PD.Elevation, elevId);

                var plId = MfAlias.GetPropDef(vault, PD.ParamList);
                va.PdDict.Add(PD.ParamList, plId);

                var omId = MfAlias.GetPropDef(vault, PD.OwnedModel);
                va.PdDict.Add(PD.OwnedModel, omId);

                var ofpId = MfAlias.GetPropDef(vault, PD.FamParamList);
                va.PdDict.Add(PD.FamParamList, ofpId);

                var ifcId = MfAlias.GetPropDef(vault, PD.IfcId);
                va.PdDict.Add(PD.IfcId, ifcId);

                var modelId = MfAlias.GetPropDef(vault, PD.ModelUrl, false);
                va.PdDict.Add(PD.ModelUrl, modelId);

                var docObjType =
                    vault.ObjectTypeOperations.GetBuiltInObjectType(MFBuiltInObjectType.MFBuiltInObjectTypeDocument);
                va.Documents = docObjType.DefaultPropertyDef;


                var pmnId = MfAlias.GetPropDef(vault, PD.ModelName, false);
                va.PdDict.Add(PD.ModelName, pmnId);

                var pmuaId = MfAlias.GetPropDef(vault, PD.ModelUnitAt, false);
                va.PdDict.Add(PD.ModelUnitAt, pmuaId);

                var pfaId = MfAlias.GetPropDef(vault, PD.FloorAt, false);
                va.PdDict.Add(PD.FloorAt, pfaId);

                var pdaId = MfAlias.GetPropDef(vault, PD.DiscAt, false);
                va.PdDict.Add(PD.DiscAt, pdaId);

                if (va.ObDict[OB.ModelUnit] != -1)
                {
                    var muObjType = vault.ObjectTypeOperations.GetObjectType(va.ObDict[OB.ModelUnit]);
                    va.OwnerModelUnit = muObjType.OwnerPropertyDef;
                }

                if (va.ObDict[OB.Floor] != -1)
                {
                    var flObjType = vault.ObjectTypeOperations.GetObjectType(va.ObDict[OB.Floor]);
                    va.OwnerFloor = flObjType.OwnerPropertyDef;
                }

                if (va.ObDict[OB.ModelDisc] != -1)
                {
                    var mdObjType = vault.ObjectTypeOperations.GetObjectType(va.ObDict[OB.ModelDisc]);
                    va.OwnerModelDisc = mdObjType.OwnerPropertyDef;
                }


                va.IsValid = true;
            }
            catch (Exception ex)
            {
                throw;
                va.IsValid = false;
            }

            return(va);
        }
Ejemplo n.º 29
0
        public static void AddProperties(this MaterialElement mat, PropertyValues pvs, VaultAliases vaultAlias, int modelId)
        {
            mat.AddBasicProperties(pvs, vaultAlias, modelId);

            if (mat.Parameters.Count > 0)
            {
                var pPV = BaseElementExtensions.CreateParameterProp(mat.Parameters, vaultAlias);
                pvs.Add(-1, pPV);
            }
        }