예제 #1
0
        public static List <DuctModel> GetDuctModels(ExternalCommandData commandData)
        {
            var ductsModel = new List <DuctModel>();
            var ducts      = GenericSelectionUtils <Duct> .GetObjectsByType(commandData);

            foreach (var oDuct in ducts)
            {
                var pipeStartEndPoints = oDuct.GetStartAndEndPoint();
                var pipeConnectors     = oDuct.GetConnectors();

                if (pipeStartEndPoints.Count < 2 || pipeConnectors.Count < 2)
                {
                    continue;
                }

                var pipeModel = new DuctModel
                {
                    Model           = oDuct,
                    Curve           = oDuct.GetCurve(),
                    StarPoint       = pipeStartEndPoints[0],
                    EndPoint        = pipeStartEndPoints[1],
                    ConnectorFirst  = pipeConnectors[0],
                    ConnectorSecond = pipeConnectors[1]
                };
                ductsModel.Add(pipeModel);
            }
            return(ductsModel);
        }
예제 #2
0
        public static List <CableTrayModel> GetCableTrayModels(ExternalCommandData commandData)
        {
            var condModelList = new List <CableTrayModel>();
            var cableTrays    = GenericSelectionUtils <CableTray> .GetObjectsByType(commandData);

            foreach (var oCableTray in cableTrays)
            {
                var startEndPoints = oCableTray.GetStartAndEndPoint();
                var connectors     = oCableTray.GetConnectors();

                if (startEndPoints.Count < 2 || connectors.Count < 2)
                {
                    continue;
                }

                var condModel = new CableTrayModel
                {
                    Model           = oCableTray,
                    Curve           = oCableTray.GetCurve(),
                    StarPoint       = startEndPoints[0],
                    EndPoint        = startEndPoints[1],
                    ConnectorFirst  = connectors[0],
                    ConnectorSecond = connectors[1]
                };
                condModelList.Add(condModel);
            }
            return(condModelList);
        }
예제 #3
0
        public static List <MEPElementModel> GetMEPElementsFromModel(ExternalCommandData _commandData)
        {
            //Выбираем все MEP элементы, где есть коннекторы
            var mepElements = GenericSelectionUtils <FamilyInstance>
                              .GetObjectsByType(_commandData)
                              .Where(o => o.MEPModel.ConnectorManager != null);

            var mepElementsModel = new List <MEPElementModel>();

            foreach (var mepElementItem in mepElements)
            {
                var newMEPModel = new MEPElementModel
                {
                    Model      = mepElementItem,
                    Connectors = mepElementItem.GetConnectors()
                };
                mepElementsModel.Add(newMEPModel);
            }
            return(mepElementsModel);
        }
예제 #4
0
        private void btnAccept_Click(object sender, RoutedEventArgs e)
        {
            //Собираем все элементы
            var ducts = GenericSelectionUtils <Duct> .GetObjectsByType(_commandData).Cast <Element>().ToList();

            var pipes = GenericSelectionUtils <Pipe> .GetObjectsByType(_commandData).Cast <Element>().ToList();

            var cableTrays = GenericSelectionUtils <CableTray> .GetObjectsByType(_commandData).Cast <Element>().ToList();

            var conduits = GenericSelectionUtils <Conduit> .GetObjectsByType(_commandData).Cast <Element>().ToList();

            var distanceBetweenPoints2DParsedValue = NumberUtils.ParseStringToDouble(txtboxRiseToleranceByXY.Text);
            var heightBetweenPoints2DParsedValue   = NumberUtils.ParseStringToDouble(txtboxRiseToleranceByZ.Text);

            if (distanceBetweenPoints2DParsedValue == 0)
            {
                this.Close();
                return;
            }

            var distanceBetweenPoints2d = NumberUtils.MillimetersToFeet(distanceBetweenPoints2DParsedValue);
            var heightBetweenPoints2d   = NumberUtils.MillimetersToFeet(heightBetweenPoints2DParsedValue);

            //Записываем параметр
            var parameterRiseName  = txtboxParameterRise.Text;
            var parameterRiseValue = "Стояк";

            var ductsRises     = new MEPRise().GetMEPRises(ducts, distanceBetweenPoints2d, heightBetweenPoints2d).Select(d => d.Model).ToList();
            var pipeRises      = new MEPRise().GetMEPRises(pipes, distanceBetweenPoints2d, heightBetweenPoints2d).Select(d => d.Model).ToList();
            var cableTrayRises = new MEPRise().GetMEPRises(cableTrays, distanceBetweenPoints2d, heightBetweenPoints2d).Select(d => d.Model).ToList();
            var conduitRises   = new MEPRise().GetMEPRises(conduits, distanceBetweenPoints2d, heightBetweenPoints2d).Select(d => d.Model).ToList();

            ElementUtils.SetParameterValueToElementList(_commandData, ductsRises, parameterRiseName, parameterRiseValue);
            ElementUtils.SetParameterValueToElementList(_commandData, pipeRises, parameterRiseName, parameterRiseValue);
            ElementUtils.SetParameterValueToElementList(_commandData, cableTrayRises, parameterRiseName, parameterRiseValue);
            ElementUtils.SetParameterValueToElementList(_commandData, conduitRises, parameterRiseName, parameterRiseValue);

            this.Close();
            return;
        }
예제 #5
0
        private void btnAccept_Click(object sender, RoutedEventArgs e)
        {
            //Определяем точки, в которых стоят фитинги для труб и воздуховодов
            var fittingRepo       = new FittingRepo();
            var pipeFittingPoints = fittingRepo.GetConnectorPoints(_commandData, BuiltInCategory.OST_PipeFitting);
            var ductFittingPoints = fittingRepo.GetConnectorPoints(_commandData, BuiltInCategory.OST_DuctFitting);
            var pipePointsToCheck = GenericSelectionUtils <Pipe> .GetObjectsByType(_commandData).Select(p => p.GetStartAndEndPoint()).ToList();

            var ductPointsToCheck = GenericSelectionUtils <Duct> .GetObjectsByType(_commandData).Select(p => p.GetStartAndEndPoint()).ToList();

            //собираем все линейные объекты и масс-формы по названию

            var massForms = MassFormRepo.GetMassFormModels(_commandData, txtboxMassFormName.Text);

            if (massForms.Count == 0)
            {
                MessageBox.Show($"Не найдены формобразующие с именем семейства {txtboxMassFormName.Text}. ");
                return;
            }
            //И собираем все MEP элементы со всеми коннекторами
            var mepElements = MEPElementRepo.GetMEPElementsFromModel(_commandData);

            #region Трубы
            var pipes = PipeRepo.GetPipeModels(_commandData);

            //берём масс-формы и трубы, находим точки пересечения
            var pipeAndMassFormIntersectionList = PipeAndMassIntersectionRepo
                                                  .GetIntersectionList(pipes, massForms, pipeFittingPoints);

            //создаём отдельные трубы из труб, которые пересекаются с формообразующими
            var pipeFactory = new PipesFactoryRepo();
            pipeFactory.CreatePipesFromIntersectionPoints(
                pipeAndMassFormIntersectionList, pipePointsToCheck, _commandData);

            //Берем новые трубы и соединяем их с фитингами, арматурой и приборами.
            //Поскольку при создании труб заново, они отсоединялись
            PipesFactoryRepo.ConnectPipesAndMEPElementsWithConnectorsInSameLocation(
                pipeFactory.Pipes, mepElements, _commandData);

            #endregion

            #region Воздуховоды
            var ducts = DuctRepo.GetDuctModels(_commandData);

            //берём масс-формы и трубы, находим точки пересечения
            var ductAndMassFormIntersectionList = DuctAndMassIntersectionRepo
                                                  .GetIntersectionList(ducts, massForms, ductFittingPoints);

            //создаём отдельные трубы из труб, которые пересекаются с формообразующими
            var ductFactory = new DuctsFactoryRepo();
            ductFactory.CreateDuctsFromIntersectionPoints(
                ductAndMassFormIntersectionList, ductPointsToCheck, _commandData);

            //Берем новые трубы и соединяем их с фитингами, арматурой и приборами.
            //Поскольку при создании труб заново, они отсоединяелись
            DuctsFactoryRepo.ConnectPipesAndMEPElementsWithConnectorsInSameLocation(
                ductFactory.Ducts, mepElements, _commandData);
            #endregion

            #region Короба

            var conduits = ConduitRepo.GetConduitModels(_commandData);

            //берём масс-формы и трубы, находим точки пересечения
            var conduitAndMassFormIntersectionList = ConduitAndMassIntersectionRepo
                                                     .GetIntersectionList(conduits, massForms);

            //создаём отдельные трубы из труб, которые пересекаются с формообразующими
            var conduitFactory = new ConduitsFactoryRepo();
            conduitFactory.CreateConduitsFromIntersectionPoints(conduitAndMassFormIntersectionList, _commandData);

            //Берем новые трубы и соединяем их с фитингами, арматурой и приборами.
            //Поскольку при создании труб заново, они отсоединяелись
            ConduitsFactoryRepo.ConnectConduitsAndMEPElementsWithConnectorsInSameLocation(
                conduitFactory.Conduits, mepElements, _commandData);

            #endregion

            #region Лотки

            var cableTrays = CableTraysRepo.GetCableTrayModels(_commandData);

            //берём масс-формы и трубы, находим точки пересечения
            var cableTrayAndMassFormIntersectionList = CableTrayAndMassIntersectionRepo
                                                       .GetIntersectionList(cableTrays, massForms);

            //создаём отдельные трубы из труб, которые пересекаются с формообразующими
            var cableTrayFactory = new CableTraysFactoryRepo();
            cableTrayFactory.CreateCableTraysFromIntersectionPoints(cableTrayAndMassFormIntersectionList, _commandData);

            //Берем новые трубы и соединяем их с фитингами, арматурой и приборами.
            //Поскольку при создании труб заново, они отсоединяелись
            CableTraysFactoryRepo.ConnectCableTraysAndMEPElementsWithConnectorsInSameLocation(
                cableTrayFactory.CableTrays, mepElements, _commandData);
            #endregion

            this.Close();
            return;
        }