예제 #1
0
        private void Cut(WallIntersectionData data, AngleCalculator calculator, WallExtrusion extrusion)
        {
            using (TransactionGroup tranGr = new TransactionGroup(_doc))
            {
                tranGr.Start("wall penetration one element");

                var _roundOpen = _doc.GetFamilySymbol("Отверстие_Поворотное", "Отверстие");
                var _rectOpen  = _doc.GetFamilySymbol("ОтверстиеПрямоугольное_Поворотное", "Отверстие");

                using (Transaction tran = new Transaction(_doc))
                {
                    tran.Start("Creating wall penetration");

                    FamilyInstance fi = _doc.Create.NewFamilyInstance(data.WallSideFaceRef, calculator.LocationPoint, new XYZ(1, 0, 0), _rectOpen);

                    tran.Commit();

                    tran.Start("SetPar");

                    double offset = UnitUtils.ConvertToInternalUnits(0, DisplayUnitType.DUT_MILLIMETERS);

                    fi.LookupParameter("ШиринаОтверстия").Set(extrusion.Width + offset);
                    fi.LookupParameter("ВысотаОтверстия").Set(extrusion.Height + offset);
                    fi.LookupParameter("УголВертикальногоПоворота").Set(calculator.VerticalAngle);
                    fi.LookupParameter("УголГоризонтальногоПоворота").Set(calculator.HorizontalAngle);

                    tran.Commit();
                }

                tranGr.Assimilate();
            }
        }
예제 #2
0
        private void FamilyInstanceIntersection(Wall wall)
        {
            var           intersector = GetIntersectingElement();
            WallExtrusion extrusion   = new WallExtrusion(intersector, wall);

            WallIntersectionData data       = new WallIntersectionData(wall, intersector);
            AngleCalculator      calculator = new AngleCalculator(data);

            Cut(data, calculator, extrusion);
        }
예제 #3
0
        private void Cut(WallIntersectionData data, AngleCalculator calculator, IConnector connector, FamilySymbol _roundOpen, FamilySymbol _rectOpen)
        {
            using (TransactionGroup tranGr = new TransactionGroup(_doc))
            {
                tranGr.Start("wall penetration one element");

                using (Transaction tran = new Transaction(_doc))
                {
                    switch (connector?.Shape)
                    {
                    case ConnectorProfileType.Rectangular:

                        tran.Start("Creating wall penetration");

                        FamilyInstance fi = _doc.Create.NewFamilyInstance(data.WallSideFaceRef, calculator.LocationPoint, new XYZ(1, 0, 0), _rectOpen);

                        tran.Commit();

                        tran.Start("SetPar");

                        double offset = UnitUtils.ConvertToInternalUnits(100, DisplayUnitType.DUT_MILLIMETERS);

                        fi.LookupParameter("ШиринаОтверстия").Set(connector.Width + offset);
                        fi.LookupParameter("ВысотаОтверстия").Set(connector.Height + offset);
                        fi.LookupParameter("УголВертикальногоПоворота").Set(calculator.VerticalAngle);
                        fi.LookupParameter("УголГоризонтальногоПоворота").Set(calculator.HorizontalAngle);

                        tran.Commit();
                        break;

                    case ConnectorProfileType.Round:

                        tran.Start("Creating wall penetration");

                        fi = _doc.Create.NewFamilyInstance(data.WallSideFaceRef, calculator.LocationPoint, new XYZ(1, 0, 0), _roundOpen);

                        tran.Commit();

                        tran.Start("SetPar");

                        fi.LookupParameter("НаружныйДиаметр").Set(connector.Radius * 2 * 1.2);
                        fi.LookupParameter("УголВертикальногоПоворота").Set(calculator.VerticalAngle);
                        fi.LookupParameter("УголГоризонтальногоПоворота").Set(calculator.HorizontalAngle);

                        tran.Commit();

                        break;
                    }
                }

                tranGr.Assimilate();
            }
        }
예제 #4
0
        private void MEPIntersection(Wall wall)
        {
            IEnumerable <MEPCurve> intersectElement = GetIntersectElements(wall);

            using (TransactionGroup tranGr = new TransactionGroup(_doc))
            {
                tranGr.Start("wall penetration");

                FamilySymbol _roundOpen = _doc.GetFamilySymbol("Отверстие_Поворотное", "Отверстие");
                FamilySymbol _rectOpen  = _doc.GetFamilySymbol("ОтверстиеПрямоугольное_Поворотное", "Отверстие");

                foreach (MEPCurve intersector in intersectElement)
                {
                    Connector            connector  = intersector.ConnectorManager.Connectors.Cast <Connector>().FirstOrDefault();
                    WallIntersectionData data       = new WallIntersectionData(wall, intersector);
                    AngleCalculator      calculator = new AngleCalculator(data);

                    Cut(data, calculator, connector, _roundOpen, _rectOpen);
                }

                tranGr.Assimilate();
            }
        }