Exemplo n.º 1
0
        protected override Element CreateHostGeometry(HorizontalFinishingResult res)
        {
            try {
                /*CurveArray mainProfileWithDoors = res.MainProfile;
                 * foreach (FamilyInstance door in new FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Doors))
                 * {
                 * if (FinishingData.IsElementCollideRoom(res.Room, door))
                 * {
                 *  Curve c = ModelCurveCreator.GetFamilyInstanceCutBaseLine(door);
                 *  XYZ ptSt = c.GetEndPoint(0);
                 *  XYZ ptEnd = c.GetEndPoint(1);
                 *
                 *  mainProfileWithDoors.get_Item(0).Project
                 * }
                 * }*/


                return(doc.Create.NewFloor(res.MainProfile, res.FinishingType as FloorType, res.Level, false));
            }
            catch (Autodesk.Revit.Exceptions.ArgumentException e)
            {
                ModelCurveCreator mmc = new ModelCurveCreator(doc);
                mmc.MakeModelCurve(res.MainProfile);
                mmc.DrawGroup(res.MainProfile, "Незамкнутый контур помещения #" + res.Room.Number.ToString());
                Debug.WriteLine(e.ToString());
                TaskDialog td = new TaskDialog("Предупреждение");
                td.MainIcon        = TaskDialogIcon.TaskDialogIconWarning;
                td.MainInstruction = string.Format("Помещение {0} имеет незамкнутый внешний контур. создание отделки пола для него было пропущено", res.Room.Number);
                td.MainContent     = "Проверьте контур помещения. Он автоматически сгенерирован, проверьте группы моделей";
                td.Show();
                return(null);
            }
        }
Exemplo n.º 2
0
        private List <ModelCurve> DrawInsulLine(MEPCurve e, double stepLength, double height, GraphicsStyle style)
        {
            Curve ductCurve = GeometryUtils.FindDuctCurve(e.ConnectorManager);
            XYZ   pt1 = ductCurve.GetEndPoint(0); XYZ pt2 = ductCurve.GetEndPoint(1);

            // создаем плоскость, на которой будет рисоваться штриховка
            XYZ VOffset;
            XYZ ductVector = GeometryUtils.GetDuctDirection(e.ConnectorManager);

            // Вертикальная линии
            if (ductVector.IsAlmostEqualTo(XYZ.BasisZ) | ductVector.IsAlmostEqualTo(XYZ.BasisZ.Negate()))
            {
                // находим перпендикулярный вектор, нормализуем его и умножаем до нужной длины
                VOffset = (pt2 - pt1).CrossProduct(XYZ.BasisY).Normalize() * (height / 2);
            }
            else
            {
                VOffset = (pt2 - pt1).CrossProduct(XYZ.BasisZ).Normalize() * (height / 2);
            }

            XYZ        UOffset = (pt2 - pt1).Normalize() * (stepLength / 2);
            int        steps   = (int)Math.Floor((pt2 - pt1).GetLength() / UOffset.GetLength());
            List <XYZ> points  = new List <XYZ>();

            points.Add(pt1);
            for (int i = 0; i < steps; i++)
            {
                pt1 = pt1 + UOffset;
                XYZ VOffsetedPt = pt1 + VOffset;
                points.Add(VOffsetedPt);
                VOffset = VOffset.Negate();
            }
            points.Add(pt2);
            ModelCurveCreator mcc = new ModelCurveCreator(doc);

            mcc.LineStyle = style;
            if (points.Count() > 2)
            {
                var array = mcc.MakeModelCurve(points, false);
                return(array);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 3
0
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document  doc       = commandData.Application.ActiveUIDocument.Document;
            Selection selection = commandData.Application.ActiveUIDocument.Selection;
            SpatialElementBoundaryOptions opt = new SpatialElementBoundaryOptions();
            ModelCurveCreator             mmc = new ModelCurveCreator(doc);

            IList <Reference> rooms = selection.PickObjects(ObjectType.Element, new RoomFilter(), "Выберите помещения");

            try
            {
                using (Transaction tr = new Transaction(doc, "Создание контуров"))
                {
                    tr.Start();
                    foreach (Reference roomref in rooms)
                    {
                        CurveArray     curves = new CurveArray();
                        SpatialElement room   = doc.GetElement(roomref.ElementId) as SpatialElement;
                        foreach (var boundary in CurveUtils.GetCurvesListFromSpatialElement(room))
                        {
                            foreach (var curve in boundary)
                            {
                                curves.Append(curve);
                            }
                        }
                        mmc.DrawGroup(curves, string.Format("Контур {0} #{1}", room.Category.Name, room.Number));
                    }
                    TaskDialog.Show("Результат", "Создано групп контуров: " + rooms.Count.ToString());
                    tr.Commit();
                }
            }
            catch
            {
                return(Result.Failed);
            }
            return(Result.Succeeded);
        }