/// <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); }
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); }
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); }
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); }
/// <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(); } }
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); }