internal SpecialPart(Matrix3d insertMatrix, string blockName, List <Property> cameraProperties) { lock (access_obj) { using (var ctx = new SteelServices.DocContext()) { List <Property> defaultData = cameraProperties.Where(x => x.Level == ".").ToList <Property>(); List <Property> postWriteDBData = cameraProperties.Where(x => x.Level == "Z_PostWriteDB").ToList <Property>(); double scale = (double)defaultData.FirstOrDefault <Property>(x => x.Name == "Scale").InternalValue; string handle = SteelServices.ElementBinder.GetHandleFromTrace(); Autodesk.AdvanceSteel.Modelling.SpecialPart specPart = null; if (string.IsNullOrEmpty(handle) || Utils.GetObject(handle) == null) { specPart = new Autodesk.AdvanceSteel.Modelling.SpecialPart(insertMatrix); specPart.SetBlock(blockName, scale); if (defaultData != null) { Utils.SetParameters(specPart, defaultData); } specPart.WriteToDb(); if (postWriteDBData != null) { Utils.SetParameters(specPart, postWriteDBData); } } else { specPart = Utils.GetObject(handle) as Autodesk.AdvanceSteel.Modelling.SpecialPart; if (specPart != null && specPart.IsKindOf(FilerObject.eObjectType.kSpecialPart)) { specPart.SetBlock(blockName, scale); if (defaultData != null) { Utils.SetParameters(specPart, defaultData); } if (postWriteDBData != null) { Utils.SetParameters(specPart, postWriteDBData); } } else { throw new System.Exception("Not a Special Part"); } } Handle = specPart.Handle; SteelServices.ElementBinder.CleanupAndSetElementForTrace(specPart); } } }
/// <summary> /// Set BlockName and Scale of Special Part /// </summary> /// <param name="steelObject">Input Dynamo Coordinate System</param> /// <param name="scale"> Input Special Part Scale</param> /// <param name="blockName"> Input Blockname to be used by SpecialPart</param> public static void SetBlock(SteelDbObject steelObject, string blockName, [DefaultArgument("1")] double scale) { using (var ctx = new SteelServices.DocContext()) { string handle = steelObject.Handle; FilerObject obj = Utils.GetObject(handle); if (obj != null && obj.IsKindOf(FilerObject.eObjectType.kSpecialPart)) { Autodesk.AdvanceSteel.Modelling.SpecialPart specialPart = obj as Autodesk.AdvanceSteel.Modelling.SpecialPart; specialPart.SetBlock(blockName, scale); } else { throw new System.Exception("Failed to Get Special Part Object"); } } }