Exemplo 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);
        }
Exemplo n.º 2
0
        private static ObjVers CreateElementsWithParams <T>(List <T> list,
                                                            Dictionary <string, int> idDict, Func <T, ObjVer> createFunc) where T : BaseElement
        {
            var objVers = new ObjVers();

            foreach (var t in list)
            {
                var o    = t;
                var info = createFunc(o);
                var tId  = info.ID;
                if (idDict != null)
                {
                    var key = o.GetKey();
                    //if (idDict.ContainsKey(key))
                    //{
                    //    throw new Exception("已存在此构件:" + key);
                    //}
                    idDict.Add(key, tId);
                }
                objVers.Add(-1, info);
            }


            return(objVers);
        }
Exemplo n.º 3
0
        public static List <string> UploadIfcs(string vaultName)
        {
            var vault = GetVault(vaultName);

            if (vault == null)
            {
                MessageBox.Show("无法连接到文档库:" + vaultName);
                return(new List <string>());
            }
            var files = SearchFiles(vault, "ifc");

            if (files.Count == 0)
            {
                MessageBox.Show("没有IFC文件!");
                return(new List <string>());
            }
            var objVers = new ObjVers();

            foreach (ObjectVersion ov in files)
            {
                objVers.Add(01, ov.ObjVer);
            }
            var props   = vault.ObjectPropertyOperations.GetPropertiesOfMultipleObjects(objVers);
            var list    = new List <string>();
            var errList = new List <string>();
            var guid    = vault.GetGUID().TrimStart(new[] { '{' }).TrimEnd(new[] { '}' });

            for (var i = 1; i <= objVers.Count; i++)
            {
                var objVer  = objVers[i];
                var pvs     = props[i];
                var modelId = GetModel(vault, pvs);
                if (modelId == null)
                {
                    errList.Add(files[i].Title);
                }
                else
                {
                    var url      = Host + String.Format("Model/Upload?Guid={0}&TypeId={1}&ObjId={2}", guid, 0, modelId.Value);
                    var file     = files[i].Files[1].FileVer;
                    var filePath = vault.ObjectFileOperations.GetPathInDefaultView(objVer.ObjID, objVer.Version, file.ID,
                                                                                   file.Version);
                    var res = UploadXbim(url, filePath).Result;
                    if (res.OK)
                    {
                        list.Add(files[i].Title);
                    }
                    else
                    {
                        errList.Add(files[i].Title);
                    }
                }
            }
            if (errList.Count > 0)
            {
                MessageBox.Show("未能找到模型或出错的IFC文件列表:\r\n" + String.Join("\r\n", errList));
            }
            return(list);
        }
Exemplo n.º 4
0
        public static void UpdatePartPaths(Vault vault, string wrongUrl = "http://139.196.154.231:8000/")
        {
            var partAlias = "ObjPart";
            var objType   = vault.ObjectTypeOperations.GetObjectTypeIDByAlias(partAlias);

            var addressPD = vault.PropertyDefOperations.GetPropertyDefIDByAlias("PropModelUrl");
            var url       = ConfigurationManager.AppSettings["host"];

            var objs     = SearchObjects(vault, objType, addressPD, wrongUrl);
            var objCount = objs.Count;
            var max      = 500;
            var count    = objCount / max;
            var residue  = objCount % max;

            if (residue != 0)
            {
                count++;
            }
            for (var i = 0; i < count - 1; i++)
            {
                var j       = i * max;
                var end     = (i + 1) * max;
                var objVers = new ObjVers();
                for (; j < end; j++)
                {
                    if (j == objCount)
                    {
                        break;
                    }
                    objVers.Add(-1, objs[j + 1].ObjVer);
                }
                var newObjVers   = new ObjVers();
                var objsAndProps = vault.ObjectPropertyOperations.GetPropertiesOfMultipleObjects(objVers);
                for (var k = 1; k <= objVers.Count; k++)
                {
                    var pv = objsAndProps[k].SearchForPropertyEx(addressPD, true);
                    if (pv == null)
                    {
                        continue;
                    }
                    var adStr = pv.GetValueAsLocalizedText();
                    if (adStr.Contains(wrongUrl))
                    {
                        var str   = adStr.Replace(wrongUrl, url);
                        var newPV = pv.Clone();
                        newPV.Value.SetValue(pv.Value.DataType, str);
                        var objVer = vault.ObjectOperations.CheckOut(objVers[k].ObjID);
                        var obj    = vault.ObjectPropertyOperations.SetProperty(objVer.ObjVer, newPV);
                        newObjVers.Add(-1, obj.ObjVer);
                    }
                }
                if (newObjVers.Count > 0)
                {
                    vault.ObjectOperations.CheckInMultipleObjects(newObjVers);
                }
            }
        }
        public ObjVers GetAsObjVers()
        {
            ObjVers objVers = new ObjVers();

            foreach (ObjectVersion objectVersion in objects)
            {
                objVers.Add(-1, objectVersion.ObjVer);
            }
            return(objVers);
        }
Exemplo n.º 6
0
        public PropertyValuesWithIconCluesOfMultipleObjects GetPropertiesWithIconCluesOfMultipleObjects(ObjVers objectVersions)
        {
            vault.MetricGatherer.MethodCalled();

            throw new NotImplementedException();
        }
Exemplo n.º 7
0
        public ObjectVersions CheckInMultipleObjects(ObjVers objVers)
        {
            vault.MetricGatherer.MethodCalled();

            throw new NotImplementedException();
        }
Exemplo n.º 8
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();
            }
        }
Exemplo n.º 9
0
        private void OperateFamilyModel()
        {
            if (_model.IsProject)
            {
                throw new Exception("必须是族模型");
            }
            //todo
            var model   = (FamilyModel)_model;
            var modelId = _obj.ObjVer.ID;

            var    ctypeId    = _aliases.ObDict[OB.Category];
            var    cobjType   = _aliases.Vault.ObjectTypeOperations.GetObjectType(ctypeId);
            var    cacl       = cobjType.AccessControlList;
            ObjVer cateObjVer = null;

            if (model.Category != null)
            {
                cateObjVer = model.Category.CreateCategory(_aliases, modelId, cacl);
            }
            else if (model.Family != null && model.Family.Category != null)
            {
                cateObjVer = model.Family.Category.CreateCategory(_aliases, modelId, cacl);
            }

            var objId   = _aliases.ObDict[OB.Part];
            var classId = _aliases.CsDict[CS.FamilyPart];

            var pvs = new PropertyValues();

            var classPV = new PropertyValue {
                PropertyDef = (int)MFBuiltInPropertyDef.MFBuiltInPropertyDefClass
            };

            classPV.Value.SetValue(MFDataType.MFDatatypeLookup, classId);
            pvs.Add(-1, classPV);

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

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

            ObjVer famObjVer = null;

            if (model.Family != null)
            {
                var typeId  = _aliases.ObDict[OB.Family];
                var objType = _aliases.Vault.ObjectTypeOperations.GetObjectType(typeId);
                var acl     = objType.AccessControlList;
                var cateId  = 0;
                if (cateObjVer != null)
                {
                    cateId = cateObjVer.ID;
                }
                famObjVer = model.Family.CreateFamily(_aliases, cateId, modelId, acl);
            }
            if (cateObjVer != null)
            {
                var catePV = new PropertyValue {
                    PropertyDef = _aliases.PdDict[PD.PartCategory]
                };
                catePV.Value.SetValue(MFDataType.MFDatatypeLookup, cateObjVer.ID);
                pvs.Add(-1, catePV);
            }
            if (famObjVer != null)
            {
                var famPV = new PropertyValue {
                    PropertyDef = _aliases.PdDict[PD.OwnedFamily]
                };
                famPV.Value.SetValue(MFDataType.MFDatatypeLookup, famObjVer.ID);
                pvs.Add(-1, famPV);
            }
            if (model.Parameters.Count > 0)
            {
                var paramPV = new PropertyValue {
                    PropertyDef = _aliases.PdDict[PD.ParamList]
                };
                paramPV.Value.SetValue(MFDataType.MFDatatypeMultiLineText,
                                       String.Join("\r\n", model.Parameters.Select(c => c.ToString())));
                pvs.Add(-1, paramPV);
            }
            if (model.FamParameters.Count > 0)
            {
                var famParamPV = new PropertyValue {
                    PropertyDef = _aliases.PdDict[PD.FamParamList]
                };
                famParamPV.Value.SetValue(MFDataType.MFDatatypeMultiLineText,
                                          String.Join("\r\n", model.FamParameters.Select(c => c.ToString())));
                pvs.Add(-1, famParamPV);
            }
            var modelPV = new PropertyValue {
                PropertyDef = _aliases.PdDict[PD.OwnedModel]
            };

            modelPV.Value.SetValue(MFDataType.MFDatatypeLookup, modelId);
            pvs.Add(-1, modelPV);
            var objVer =
                _vault.ObjectOperations.CreateNewObject(objId, pvs, new SourceObjectFiles(), new AccessControlList())
                .ObjVer;
            var objVers = new ObjVers();

            if (cateObjVer != null)
            {
                objVers.Add(-1, cateObjVer);
            }
            if (famObjVer != null)
            {
                objVers.Add(-1, famObjVer);
            }
            objVers.Add(-1, objVer);
            _vault.ObjectOperations.CheckInMultipleObjects(objVers);
        }
Exemplo n.º 10
0
 public PropertyValuesWithIconCluesOfMultipleObjects GetPropertiesWithIconCluesOfMultipleObjects(ObjVers ObjectVersions)
 {
     throw new NotImplementedException();
 }