示例#1
0
        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;
        }
示例#2
0
        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));
        }
示例#4
0
        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));
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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());
        }
示例#8
0
        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));
        }
示例#9
0
        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);
        }
示例#10
0
        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);
        }