Exemple #1
0
        public static LineCurve ToRhino(DB.Line line)
        {
            var l = new Line(ToRhino(line.GetEndPoint(0)), ToRhino(line.GetEndPoint(1)));

            return(line.IsBound ?
                   new LineCurve(l, line.GetEndParameter(0), line.GetEndParameter(1)) :
                   null);
        }
Exemple #2
0
        /***************************************************/

        private static Element ToRevitElement(this ModelInstance modelInstance, MEPCurveType mEPType, RevitSettings settings)
        {
            if (mEPType == null || modelInstance == null)
            {
                return(null);
            }

            if (!(modelInstance.Location is ICurve))
            {
                Compute.InvalidFamilyPlacementTypeError(modelInstance, mEPType);
                return(null);
            }

            Document document = mEPType.Document;

            BH.oM.Geometry.Line line = modelInstance.Location as BH.oM.Geometry.Line;

            Level level = document.LevelBelow(line, settings);

            if (level == null)
            {
                return(null);
            }

            Autodesk.Revit.DB.Line revitLine = line.ToRevit();
            if (revitLine == null)
            {
                return(null);
            }

            XYZ startPoint = revitLine.GetEndPoint(0);
            XYZ endPoint   = revitLine.GetEndPoint(1);

            if (mEPType is Autodesk.Revit.DB.Electrical.CableTrayType)
            {
                return(Autodesk.Revit.DB.Electrical.CableTray.Create(document, mEPType.Id, startPoint, endPoint, level.Id));
            }
            else if (mEPType is Autodesk.Revit.DB.Electrical.ConduitType)
            {
                return(Autodesk.Revit.DB.Electrical.Conduit.Create(document, mEPType.Id, startPoint, endPoint, level.Id));
            }
            else if (mEPType is Autodesk.Revit.DB.Plumbing.PipeType)
            {
                Autodesk.Revit.DB.Plumbing.PipingSystemType pst = new FilteredElementCollector(document).OfClass(typeof(Autodesk.Revit.DB.Plumbing.PipingSystemType)).OfType <Autodesk.Revit.DB.Plumbing.PipingSystemType>().FirstOrDefault();
                return(Autodesk.Revit.DB.Plumbing.Pipe.Create(document, pst.Id, mEPType.Id, level.Id, startPoint, endPoint));
            }
            else if (mEPType is Autodesk.Revit.DB.Mechanical.DuctType)
            {
                Autodesk.Revit.DB.Mechanical.MechanicalSystemType mst = new FilteredElementCollector(document).OfClass(typeof(Autodesk.Revit.DB.Mechanical.MechanicalSystemType)).OfType <Autodesk.Revit.DB.Mechanical.MechanicalSystemType>().FirstOrDefault();
                return(Autodesk.Revit.DB.Mechanical.Duct.Create(document, mst.Id, mEPType.Id, level.Id, startPoint, endPoint));
            }
            else
            {
                return(null);
            }
        }
Exemple #3
0
 public static LineCurve ToRhino(DB.Line line)
 {
     return(line.IsBound ?
            new LineCurve
            (
                new Line(AsPoint3d(line.GetEndPoint(0)), AsPoint3d(line.GetEndPoint(1))),
                line.GetEndParameter(0),
                line.GetEndParameter(1)
            ) :
            null);
 }
 public static LineCurve ToRhino(DB.Line line)
 {
     return(line.IsBound ?
            new LineCurve
            (
                new Line(AsPoint3d(line.GetEndPoint(0)), AsPoint3d(line.GetEndPoint(1))),
                line.GetEndParameter(0),
                line.GetEndParameter(1)
            ) :
            new LineCurve
            (
                new Line(AsPoint3d(line.Origin) - (15000.0 * AsVector3d(line.Direction)), AsPoint3d(line.Origin) + (15000.0 * AsVector3d(line.Direction))),
                -15000,
                +15000
            ));
 }
Exemple #5
0
 private static Autodesk.DesignScript.Geometry.Line Convert(Autodesk.Revit.DB.Line crv)
 {
     return(Autodesk.DesignScript.Geometry.Line.ByStartPointEndPoint(
                crv.GetEndPoint(0).ToPoint(), crv.GetEndPoint(1).ToPoint()));
 }
Exemple #6
0
        private void OK(object sender, RoutedEventArgs e)
        {
            if (txtround.Text == "")
            {
                TaskDialog.Show("ERROR", " Please Enter The Round Value");
                return;
            }
            if (Frame.IsChecked == false && Walls.IsChecked == false && Column.IsChecked == false)
            {
                TaskDialog.Show("ERROR", " Please Select Element Types");
                return;
            }

            Hide();
            Document doc = Singleton.Instance.RevitData.Document;

            Reference gridrefX = Singleton.Instance.RevitData.Selection.PickObject(ObjectType.Element, new GridSelectionFilter(), "Select The First Grid");

            Autodesk.Revit.DB.Grid gridX = doc.GetElement(gridrefX) as Autodesk.Revit.DB.Grid;
            Reference gridrefY           = Singleton.Instance.RevitData.Selection.PickObject(ObjectType.Element, new GridSelectionFilter(), "Select The Second Grid");

            Autodesk.Revit.DB.Grid gridY = doc.GetElement(gridrefY) as Autodesk.Revit.DB.Grid;

            switch (th)
            {
            case th1:
            {
                List <Reference> elemreflist = Singleton.Instance.RevitData.Selection.PickObjects(ObjectType.Element, new BeamSelectionFilter(), "Select Beams") as List <Reference>;
                List <Element>   elemlist    = elemreflist.Select(x => Singleton.Instance.RevitData.Document.GetElement(x) as Autodesk.Revit.DB.Element).ToList();
                elemlist.ForEach(x => Singleton.Instance.WPFData.Elements.Add(x));
                using (Transaction transactionbeam = new Transaction(doc))
                {
                    transactionbeam.Start("Beam Moving");
                    foreach (Element elem in elemlist)
                    {
                        LocationCurve          elemcurve = elem.Location as LocationCurve;
                        Autodesk.Revit.DB.Line elemline  = elemcurve.Curve as Autodesk.Revit.DB.Line;
                        Autodesk.Revit.DB.Line gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                        Autodesk.Revit.DB.Line gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;

                        //Kiểm tra và đặt tên Grid, GridX song song với Location.Curve - Line, Grid Y vuông góc,...

                        if (Geometry.GeomUtil.IsSameOrOppositeDirection(elemline.Direction, gridlineY.Direction))
                        {
                            gridX     = doc.GetElement(gridrefY) as Autodesk.Revit.DB.Grid;
                            gridY     = doc.GetElement(gridrefX) as Autodesk.Revit.DB.Grid;
                            gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                            gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;
                        }
                        double movedis = Command.GetMoveDistance(elemline, gridX, roundto);
                        // Move dầm phương song song
                        if (movedis > precision)
                        {
                            XYZ movevector1 = new XYZ(-elemline.Direction.Y, elemline.Direction.X, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);
                            elem.Location.Move(movevector1);
                            if (Math.Abs(Command.GetMoveDistance(elemline, gridX, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemline, gridX, roundto) % roundto) < roundto - precision)
                            {
                                elem.Location.Move(-2 * movevector1);
                            }
                        }
                        movedis = Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto);
                        if (movedis >= precision)
                        {
                            XYZ movevector2 = new XYZ(elemline.Direction.X, elemline.Direction.Y, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);
                            elem.Location.Move(movevector2);
                            if (Math.Abs(Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) < (roundto - precision))
                            {
                                elem.Location.Move(-2 * movevector2);
                            }
                        }
                    }
                    transactionbeam.Commit();
                }

                break;
            }

            case th2:
            {
                List <Reference> elemreflist = Singleton.Instance.RevitData.Selection.PickObjects(ObjectType.Element, new StructuralColumnFilter(), "Select Columns") as List <Reference>;
                List <Element>   elemlist    = elemreflist.Select(x => Singleton.Instance.RevitData.Document.GetElement(x) as Autodesk.Revit.DB.Element).ToList();
                elemlist.ForEach(x => Singleton.Instance.WPFData.Elements.Add(x));
                using (Transaction transactioncolumn = new Transaction(doc))
                {
                    transactioncolumn.Start("Column Moving ");
                    foreach (Element elem in elemlist)
                    {
                        LocationPoint elemcurve = elem.Location as LocationPoint;

                        Autodesk.Revit.DB.Line gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                        Autodesk.Revit.DB.Line gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;


                        double movedis = Command.GetMoveDistance(elemcurve.Point, gridX, roundto);
                        if (movedis > precision)
                        {
                            XYZ movevector1 = new XYZ(-gridlineX.Direction.Y, gridlineX.Direction.X, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);

                            elem.Location.Move(movevector1);

                            if (Math.Abs(Command.GetMoveDistance(elemcurve.Point, gridX, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemcurve.Point, gridX, roundto) % roundto) < roundto - precision)
                            {
                                elem.Location.Move(-2 * movevector1);
                            }
                        }
                        movedis = Command.GetMoveDistance(elemcurve.Point, gridY, roundto);
                        if (movedis >= precision)
                        {
                            XYZ movevector2 = new XYZ(-gridlineY.Direction.Y, gridlineY.Direction.X, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);

                            //TaskDialog.Show("asas", Command.GetMoveDistance(elemcurve.Point, gridY, roundto).ToString());
                            elem.Location.Move(movevector2);
                            //TaskDialog.Show("asas", Command.GetMoveDistance(elemcurve.Point, gridY, roundto).ToString());
                            if (Math.Abs(Command.GetMoveDistance(elemcurve.Point, gridY, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemcurve.Point, gridY, roundto) % roundto) < (roundto - precision))
                            {
                                elem.Location.Move(-2 * movevector2);
                            }
                        }
                    }
                    transactioncolumn.Commit();
                }

                break;
            }

            case th3:

            {
                List <Reference> elemreflist = Singleton.Instance.RevitData.Selection.PickObjects(ObjectType.Element, new StructuralWallFilter(), "Select Walls") as List <Reference>;
                List <Element>   elemlist    = elemreflist.Select(x => Singleton.Instance.RevitData.Document.GetElement(x) as Autodesk.Revit.DB.Element).ToList();
                elemlist.ForEach(x => Singleton.Instance.WPFData.Elements.Add(x));
                using (Transaction transactionwall = new Transaction(doc))
                {
                    transactionwall.Start("Walls Moving");
                    foreach (Element elem in elemlist)
                    {
                        LocationCurve          elemcurve = elem.Location as LocationCurve;
                        Autodesk.Revit.DB.Line elemline  = elemcurve.Curve as Autodesk.Revit.DB.Line;
                        Autodesk.Revit.DB.Line gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                        Autodesk.Revit.DB.Line gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;
                        if (Geometry.GeomUtil.IsSameOrOppositeDirection(elemline.Direction, gridlineY.Direction))
                        {
                            gridX     = doc.GetElement(gridrefY) as Autodesk.Revit.DB.Grid;
                            gridY     = doc.GetElement(gridrefX) as Autodesk.Revit.DB.Grid;
                            gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                            gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;
                        }
                        double movedis = Command.GetMoveDistance(elemline, gridX, roundto);
                        if (movedis > precision)
                        {
                            XYZ movevector1 = new XYZ(-elemline.Direction.Y, elemline.Direction.X, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);
                            elem.Location.Move(movevector1);
                            if (Math.Abs(Command.GetMoveDistance(elemline, gridX, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemline, gridX, roundto) % roundto) < roundto - precision)
                            {
                                elem.Location.Move(-2 * movevector1);
                            }
                        }
                        movedis = Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto);

                        if (movedis >= precision)
                        {
                            XYZ movevector2 = new XYZ(elemline.Direction.X, elemline.Direction.Y, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);

                            elem.Location.Move(movevector2);
                            if (Math.Abs(Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) > precision && Math.Abs(Command.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) < (roundto - precision))
                            {
                                elem.Location.Move(-2 * movevector2);
                            }
                        }
                    }
                    transactionwall.Commit();
                }

                break;
            }
            }
        }
Exemple #7
0
 /// <summary>
 /// Convert a Revit line to a Nucleus one
 /// </summary>
 /// <param name="line">The line to convert</param>
 /// <returns></returns>
 public static FB.Line Convert(AD.Line line)
 {
     return(new FB.Line(Convert(line.GetEndPoint(0)), Convert(line.GetEndPoint(1))));
 }
        private void Button_Click_2(object sender, RoutedEventArgs e)
        {
            Hide();
            Document doc = Singleton.Instance.RevitData.Document;

            Autodesk.Revit.DB.Line gridline = grid.Curve as Autodesk.Revit.DB.Line;

            Autodesk.Revit.DB.Line gridline1 = grid1.Curve as Autodesk.Revit.DB.Line;

            Autodesk.Revit.DB.Grid gridX     = grid;
            Autodesk.Revit.DB.Grid gridY     = grid1;
            Autodesk.Revit.DB.Line gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
            Autodesk.Revit.DB.Line gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;

            float        roundto   = float.Parse(txtroundto.Text);
            const double precision = 0.00001;

            foreach (Element emt in elems)
            {
                if (emt is FamilyInstance && emt.Category.Id.IntegerValue == (int)BuiltInCategory.OST_StructuralColumns)
                {
                    FamilyInstance column          = emt as FamilyInstance;
                    LocationPoint  locationPoint   = column.Location as LocationPoint;
                    XYZ            currentLocation = locationPoint.Point;

                    double distance = GetDistance.Distance(column, grid);
                    double movedis  = (distance - Lamtron.Round(distance, roundto)) / 12 / 25.4;

                    XYZ newLocation = new XYZ(-gridline.Direction.Y * movedis, gridline.Direction.X * movedis, 0);

                    using (Transaction t = new Transaction(doc, "move"))
                    {
                        t.Start("move");
                        ElementTransformUtils.MoveElement(doc, column.Id, newLocation);
                        if (Math.Abs(GetDistance.Distance(column, grid) % roundto) > precision && Math.Abs(GetDistance.Distance(column, grid) % roundto) < (roundto - precision))
                        {
                            XYZ newLocationrepair = new XYZ(2 * gridline.Direction.Y * movedis, -2 * gridline.Direction.X * movedis, 0);
                            ElementTransformUtils.MoveElement(doc, column.Id, newLocationrepair);
                        }
                        t.Commit();
                    }
                    double distance1 = GetDistance.Distance(column, grid1);
                    double movedis1  = (distance1 - Lamtron.Round(distance1, roundto)) / 12 / 25.4;

                    XYZ newLocation1 = new XYZ(-gridline1.Direction.Y * movedis1, gridline1.Direction.X * movedis1, 0);

                    using (Transaction t = new Transaction(doc, "move"))
                    {
                        t.Start("move");
                        ElementTransformUtils.MoveElement(doc, column.Id, newLocation1);
                        if (Math.Abs(GetDistance.Distance(column, grid1) % roundto) > 0.01 && Math.Abs(GetDistance.Distance(column, grid1) % roundto) < 4.99)
                        {
                            XYZ newLocationrepair1 = new XYZ(2 * gridline1.Direction.Y * movedis1, -2 * gridline1.Direction.X * movedis1, 0);
                            ElementTransformUtils.MoveElement(doc, column.Id, newLocationrepair1);
                        }
                        t.Commit();
                    }
                }
                if (emt is FamilyInstance && emt.Category.Id.IntegerValue == (int)BuiltInCategory.OST_StructuralFraming)
                {
                    FamilyInstance         elem      = emt as FamilyInstance;
                    LocationCurve          elemcurve = elem.Location as LocationCurve;
                    Autodesk.Revit.DB.Line elemline  = elemcurve.Curve as Autodesk.Revit.DB.Line;


                    //Kiểm tra và đặt tên Grid, GridX song song với Location.Curve - Line, Grid Y vuông góc,...

                    if (Geometry.GeomUtil.IsSameOrOppositeDirection(elemline.Direction, gridlineY.Direction))
                    {
                        gridX     = grid1;
                        gridY     = grid;
                        gridlineX = gridX.Curve as Autodesk.Revit.DB.Line;
                        gridlineY = gridY.Curve as Autodesk.Revit.DB.Line;
                    }
                    double distance = GetDistance.GetMoveDistance(elemline, gridX, roundto);
                    double movedis  = Math.Abs(distance - Lamtron.Round(distance, roundto));
                    // Move dầm phương song song
                    if (movedis > precision)
                    {
                        XYZ movevector1 = new XYZ(-elemline.Direction.Y, elemline.Direction.X, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);

                        using (Transaction transactionX = new Transaction(Singleton.Instance.RevitData.Document))
                        {
                            transactionX.Start("Beam Moving X");
                            elem.Location.Move(movevector1);
                            if (Math.Abs(GetDistance.GetMoveDistance(elemline, gridX, roundto) % roundto) > precision && Math.Abs(GetDistance.GetMoveDistance(elemline, gridX, roundto) % roundto) < roundto - precision)
                            {
                                elem.Location.Move(-2 * movevector1);
                            }
                            transactionX.Commit();
                        }
                    }
                    distance = GetDistance.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto);
                    movedis  = Math.Abs(distance - Lamtron.Round(distance, roundto));
                    // Move dầm phương vuông góc
                    if (movedis >= precision)
                    {
                        XYZ movevector2 = new XYZ(elemline.Direction.X, elemline.Direction.Y, 0).Normalize() * Geometry.GeomUtil.milimeter2Feet(movedis);
                        using (Transaction transactionY = new Transaction(Singleton.Instance.RevitData.Document))
                        {
                            transactionY.Start("Beam moving Y");
                            elem.Location.Move(movevector2);
                            if (Math.Abs(GetDistance.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) > precision && Math.Abs(GetDistance.GetMoveDistance(elemline.GetEndPoint(0), gridY, roundto) % roundto) < (roundto - precision))
                            {
                                elem.Location.Move(-2 * movevector2);
                            }
                            transactionY.Commit();
                        }
                    }
                }
            }
        }