public void CaculatorSolidConnections(List <FamilyInstance> familyInstances, out XYZ Center, out double Volumn) { Dictionary <XYZ, double> dic = new Dictionary <XYZ, double>(); double Volumncount = 0; double x = 0; double y = 0; double z = 0; foreach (var item in familyInstances) { double volumn; XYZ center; var solids = Solidhelper.AllSolids(item); GetCenterPointFrameSolids(solids, out center, out volumn); dic.Add(center, volumn); } foreach (var item in dic.Values.ToList()) { Volumncount = Volumncount + Math.Abs(item); } for (int i = 0; i < dic.Keys.Count; i++) { if (dic.Keys.ToList()[i] != null) { x = x + dic.Keys.ToList()[i].X * Math.Abs(dic.Values.ToList()[i]) / Volumncount; y = y + dic.Keys.ToList()[i].Y * Math.Abs(dic.Values.ToList()[i]) / Volumncount; z = z + dic.Keys.ToList()[i].Z * Math.Abs(dic.Values.ToList()[i]) / Volumncount; } } Center = new XYZ(x, y, z); Volumn = Volumncount; }
public void Excute(Document doc, AssemblyInstance assemblyInstance) { FamilyInstance Skin = FIlterstructuralframming(assemblyInstance); List <FamilyInstance> Frames = FIlterFrame(assemblyInstance); List <FamilyInstance> Connecions = FIlterConnections(assemblyInstance); var symbol = Get3dsymbol(doc); XYZ Center1; double Volumns1; GetCenterPoinSkintSolids(Solidhelper.AllSolids(Skin), out Center1, out Volumns1); XYZ Center2; double Volumns2; CaculatorSolidFrame(Frames, out Center2, out Volumns2); XYZ Center3; double Volumns3; CaculatorSolidConnections(Connecions, out Center3, out Volumns3); double x = 0; double y = 0; double z = 0; x = ((Center1.X) * Volumns1 * 150 + (Center2.X) * Volumns2 * 490 + (Center3.X) * Volumns3 * 490) / (Volumns1 * 150 + Volumns2 * 490 + Volumns3 * 490); y = ((Center1.Y) * Volumns1 * 150 + (Center2.Y) * Volumns2 * 490 + (Center3.Y) * Volumns3 * 490) / (Volumns1 * 150 + Volumns2 * 490 + Volumns3 * 490); z = ((Center1.Z) * Volumns1 * 150 + (Center2.Z) * Volumns2 * 490 + (Center3.Z) * Volumns3 * 490) / (Volumns1 * 150 + Volumns2 * 490 + Volumns3 * 490); var ft = new XYZ(x, y, z); PlaceSymbol(doc, symbol, ft, Skin); }
public XYZ Doing(Document doc) { var struc = Getstructuralframming(doc); List <Solid> solids = Solidhelper.AllSolids(struc); return(GetCenterSolid(solids)); }
public List <FamilyInstance> FindledgeandhaunchesNearly(Document doc, FamilyInstance familyInstance, List <ElementId> ids) { IList <Solid> solids = Solidhelper.AllSolids(familyInstance); List <FamilyInstance> listintersect = new List <FamilyInstance>(); foreach (var solid in solids) { var col = Checkintersect(doc, solid, ids, familyInstance); col.ForEach(x => listintersect.Add(x)); } return(Removeduplicatefamilyinstance(listintersect)); }
public List <FamilyInstance> Checkintersect(Document doc, Solid solid, List <ElementId> ColelementIds, FamilyInstance instance) { List <FamilyInstance> listfam = new List <FamilyInstance>(); if (ColelementIds.Count == 0) { return(listfam); } Solid solid2 = solidBoundingBox(solid); FilteredElementCollector filtercol = new FilteredElementCollector(doc, ColelementIds); ICollection <ElementId> col = filtercol.OfClass(typeof(FamilyInstance)).WherePasses(new ElementIntersectsSolidFilter(solid2, false)).ToElementIds(); foreach (var i in col) { Element element = doc.GetElement(i); FamilyInstance familyInstance = element as FamilyInstance; if (familyInstance.Symbol.Category.ToBuiltinCategory() == BuiltInCategory.OST_GenericModel) { //var val = GetSupFamilyInstance(familyInstance); Element ele = instance.SuperComponent; if (ele != null) { if (familyInstance.Id.IntegerValue != ele.Id.IntegerValue) { //listfam.Add(val); Solid solid1 = Solidhelper.AllSolids(familyInstance).First(); //if (CheckSolid(solid, solid1)) //{ // listfam.Add(val); //} listfam.Add(familyInstance); } } else { //listfam.Add(val); if (familyInstance.Id.IntegerValue != instance.Id.IntegerValue) { Solid solid1 = Solidhelper.AllSolids(familyInstance).First(); //if (CheckSolid(solid, solid1)) //{ // listfam.Add(val); //} listfam.Add(familyInstance); } } } } return(listfam); }
public List <FamilyInstance> FindProductVoidcut(Document doc, List <FamilyInstance> Voids) { List <FamilyInstance> list = new List <FamilyInstance>(); foreach (var item in Voids) { var solids = Solidhelper.AllSolids(item); foreach (var solid in solids) { ICollection <ElementId> col = new FilteredElementCollector(doc).OfClass(typeof(FamilyInstance)).WherePasses(new ElementIntersectsSolidFilter(solid)).ToElementIds(); } } return(list); }
public XYZ FindCenterproduct(FamilyInstance familyInstance) { var list = Solidhelper.AllSolids(familyInstance); Solid solid = list.First(); foreach (var item in list) { if (solid.Volume < item.Volume) { solid = item; } } return(solid.ComputeCentroid()); }
public List <FamilyInstance> FindElementNearly(Document doc, FamilyInstance conn, List <FamilyInstance> listcut) { List <FamilyInstance> list = new List <FamilyInstance>(); List <ElementId> listid = new List <ElementId>(); listcut.ForEach(x => listid.Add(x.Id)); var listsolid = Solidhelper.AllSolids(conn); foreach (var item in listsolid) { IList <FamilyInstance> a1 = Checkintersect(doc, item, listid, conn); List <FamilyInstance> checksup = GetSuperInstances(a1.ToList()); checksup.ForEach(y => list.Add(y)); } return(Removeduplicatinstance(list)); }
public List <FamilyInstance> Checkintersect(Document doc, Solid solid, List <ElementId> ColelementIds, FamilyInstance instance) { List <FamilyInstance> listfam = new List <FamilyInstance>(); if (ColelementIds.Count == 0) { return(listfam); } FilteredElementCollector filtercol = new FilteredElementCollector(doc, ColelementIds); ICollection <ElementId> col = filtercol.OfClass(typeof(FamilyInstance)).WherePasses(new ElementIntersectsSolidFilter(solid)).ToElementIds(); foreach (var i in col) { Element element = doc.GetElement(i); FamilyInstance familyInstance = element as FamilyInstance; if (familyInstance != null && familyInstance.Name != "CONNECTOR_COMPONENT") { var val = GetSupFamilyInstance(familyInstance); Element ele = instance.SuperComponent; if (ele != null) { if (val.Id.IntegerValue != ele.Id.IntegerValue) { //listfam.Add(val); Solid solid1 = Solidhelper.AllSolids(familyInstance).First(); if (CheckSolid(solid, solid1)) { listfam.Add(val); } } } else { //listfam.Add(val); if (val.Id.IntegerValue != instance.Id.IntegerValue) { Solid solid1 = Solidhelper.AllSolids(familyInstance).First(); if (CheckSolid(solid, solid1)) { listfam.Add(val); } } } } } return(listfam); }
public List <XYZ> Findpoint(Document doc) { List <XYZ> list = new List <XYZ>(); var struc = Getstructuralframming(doc); var gen = GetGenericModel(doc); foreach (var item in struc) { List <Solid> solids = Solidhelper.AllSolids(item); XYZ point = GetCenterSolid(solids); list.Add(point); } foreach (var item in gen) { List <Solid> solids = Solidhelper.AllSolids(item); XYZ point = GetCenterSolid(solids); list.Add(point); } return(list); }