public void dimLevels()
        {
            UIDocument uiDoc = this.ActiveUIDocument;
            Document   doc   = uiDoc.Document;


            // Filter by name

            FilterByNameElementType myFilter = new FilterByNameElementType(new List <string>()
            {
                "Level"
            });


            // Select Grids
            // S1: Pick an element
            List <Reference> myListRef = uiDoc.Selection.PickObjects(ObjectType.Element, myFilter,
                                                                     "Pick Levels...") as List <Reference>;
            ReferenceArray ra = new ReferenceArray();

            //List<Reference> myListRef_2 = new List<Reference>();

            foreach (var myRef in myListRef)
            {
                Level     myLevel    = doc.GetElement(myRef) as Level;
                Reference myLevelRef = new Reference(myLevel);
                ra.Append(myLevelRef);
                //myListRef_2.Add(myLevelRef);
            }

            setCurrentViewAsWorkPlan();

            XYZ  myDimPoint_1 = uiDoc.Selection.PickPoint("Pick Point To Place Dimension....");
            XYZ  myDimPoint_2 = new XYZ(myDimPoint_1.X, myDimPoint_1.Y, myDimPoint_1.Z + 5);
            Line dimLine      = Line.CreateBound(myDimPoint_1, myDimPoint_2);


            using (Transaction trans = new Transaction(doc, "Create linear Dimension"))
            {
                trans.Start();
                Dimension myDim = doc.Create.NewDimension(doc.ActiveView, dimLine, ra);
                trans.Commit();
            }
        }
        public void dimGridsOrLevels()
        {
            UIDocument uiDoc = this.ActiveUIDocument;
            Document   doc   = uiDoc.Document;

            // Filter by name

            FilterByNameElementType myFilter = new FilterByNameElementType(new List <string>()
            {
                "Grid", "Level"
            });

            // Select Grids
            // S1: Pick an element
            List <Reference> myListRef = uiDoc.Selection.PickObjects(ObjectType.Element, myFilter,
                                                                     "Pick Grids or Levels....") as List <Reference>;

            // Group Type Referent
            List <Reference> listRef_Level = new List <Reference>();
            List <Reference> listRef_Grid  = new List <Reference>();

            foreach (Reference myRefChecking in myListRef)
            {
                if (doc.GetElement(myRefChecking) is Level)
                {
                    listRef_Level.Add(myRefChecking);
                }
                else
                {
                    listRef_Grid.Add(myRefChecking);
                }
            }


            if (listRef_Grid.Count >= 2)
            {
                dimGrids_Para(uiDoc, listRef_Grid);
            }
            if (listRef_Level.Count >= 2)
            {
                dimLevels_Para(uiDoc, listRef_Level);
            }
        }
        public void getAllRefOfDims_2()
        {
            UIDocument uiDoc = this.ActiveUIDocument;
            Document   doc   = uiDoc.Document;

            // Filter by name
            FilterByNameElementType myFilter = new FilterByNameElementType(new List <string>()
            {
                "Dimension"
            });

            // Select Grids
            // S1: Pick an element
            List <Reference> myListRef = uiDoc.Selection.PickObjects(ObjectType.Element, myFilter,
                                                                     "Pick Dimensions....") as List <Reference>;

            ReferenceArray ra = new ReferenceArray();

            List <XYZ> myListDirectLine = new List <XYZ>();


            Dimension firstDim       = doc.GetElement(myListRef[0]) as Dimension;
            Line      firstDimAsLine = firstDim.Curve as Line;

            List <ElementId> myDeleteElemIds = new List <ElementId>();

            List <Reference> test = new List <Reference>();

            List <string> stableRepRefList = new List <string>();

            foreach (Reference myRef in myListRef)
            {
                Dimension myDim = doc.GetElement(myRef) as Dimension;

                foreach (Reference refOfDim in myDim.References)
                {
                    string refStable = refOfDim.ConvertToStableRepresentation(doc);

                    if (!stableRepRefList.Contains(refStable))
                    {
                        stableRepRefList.Add(refStable);
                    }
                }

                Line dimAsLine = myDim.Curve as Line;
                if (dimAsLine == null)
                {
                    TaskDialog.Show("Error", "Chỉ hỗ trợ Linear Dimensions, hãy chọn cẩn thận...");
                    return;
                }
                //myListDirectLine.Add(dimAsLine.Direction);

                myDeleteElemIds.Add(myRef.ElementId);
            }

            foreach (string stableRepRef in stableRepRefList)
            {
                ra.Append(Reference.ParseFromStableRepresentation(doc, stableRepRef));
            }


            Autodesk.Revit.DB.View view = firstDim.View;

            TaskDialog.Show("Break", "Point" + ra.Size.ToString());

            using (Transaction trans = new Transaction(doc, "Merge Dimensions"))
            {
                trans.Start();
                Dimension myMergeDim = doc.Create.NewDimension(view, firstDimAsLine, ra);

                // Delete dimensions

                doc.Delete(myDeleteElemIds);

                trans.Commit();
            }
        }
        public void mergeDims()
        {
            UIDocument uiDoc = this.ActiveUIDocument;
            Document   doc   = uiDoc.Document;

            // Filter by name
            FilterByNameElementType myFilter = new FilterByNameElementType(new List <string>()
            {
                "Dimension"
            });

            // Select Grids
            // S1: Pick an element
            List <Reference> myListRef = uiDoc.Selection.PickObjects(ObjectType.Element, myFilter,
                                                                     "Pick Dimensions....") as List <Reference>;

            ReferenceArray ra = new ReferenceArray();

            List <XYZ> myListDirectLine = new List <XYZ>();


            // Getline of first Dimension

            Dimension firstDim       = doc.GetElement(myListRef[0]) as Dimension;
            Line      firstDimAsLine = firstDim.Curve as Line;

            //Line firstDimAsLine = firstDimAsLine_2.CreateOffset(4,new XYZ(1,1,1)) as Line;

//			ICollection<ElementId> myDeleteElemIds = null;

            foreach (Reference myRef in myListRef)
            {
                Dimension myDim = doc.GetElement(myRef) as Dimension;

                foreach (Reference refOfDim in myDim.References)
                {
                    ra.Append(refOfDim);
                }

                Line dimAsLine = myDim.Curve as Line;
                if (dimAsLine == null)
                {
                    TaskDialog.Show("Error", "Chỉ hỗ trợ Linear Dimensions, hãy chọn cẩn thận...");
                    return;
                }
                //myListDirectLine.Add(dimAsLine.Direction);

//				myDeleteElemIds.Add(myRef.ElementId);
            }

//			if(! isListLineParallel(myListDirectLine))
//			{
//				TaskDialog.Show("Error", "Các dimensions bạn chọn không cùng phương, hãy chọn cẩn thận...");
//				return;
//			}

            //setCurrentViewAsWorkPlan();

            Autodesk.Revit.DB.View view = firstDim.View;


//
//			XYZ myDimPoint_1 = uiDoc.Selection.PickPoint("Pick Point To Place Dimension....");
//
//			//TaskDialog.Show("check", XYZtoString(doc.ActiveView.ViewDirection));
//
//			XYZ viewDirect = doc.ActiveView.ViewDirection;
//
//			XYZ plusXYZ = new XYZ();
//
//			if (Math.Round(viewDirect.Z, 6) == 0)
//			{
//				plusXYZ = new XYZ( - viewDirect.Y, viewDirect.X, viewDirect.Z);
//
//			}
//
//			else{
//
//				Grid firstGrid = doc.GetElement(myListRef[0]) as Grid;
//				Line gridLine = firstGrid.Curve as Line;
//				XYZ girdLineDirect = gridLine.Direction;
//				plusXYZ = new XYZ( - girdLineDirect.Y, girdLineDirect.X, girdLineDirect.Z);
//				//plusXYZ = new XYZ(0,1,0);
//			}
//			XYZ myDimPoint_2 = myDimPoint_1 + plusXYZ;
//			Line l = Line.CreateBound(myDimPoint_1, myDimPoint_2);
            using (Transaction trans = new Transaction(doc, "Merge Dimensions"))
            {
                trans.Start();
                Dimension myMergeDim = doc.Create.NewDimension(view, firstDimAsLine, ra);

                // Delete dimensions

                //doc.Delete(myDeleteElemIds);

                trans.Commit();
            }
        }
        public void dimGrids()
        {
            UIDocument uiDoc = this.ActiveUIDocument;
            Document   doc   = uiDoc.Document;

            // Filter by name

            FilterByNameElementType myFilter = new FilterByNameElementType(new List <string>()
            {
                "Grid"
            });

            // Select Grids
            // S1: Pick an element
            List <Reference> myListRef = uiDoc.Selection.PickObjects(ObjectType.Element, myFilter,
                                                                     "Pick Grids....") as List <Reference>;

            ReferenceArray ra = new ReferenceArray();

            List <XYZ> myListDirectLine = new List <XYZ>();

            foreach (var myRef in myListRef)
            {
                Grid      myGrid     = doc.GetElement(myRef) as Grid;
                Reference myGridRef  = new Reference(myGrid);
                Line      gridAsLine = myGrid.Curve as Line;
                if (gridAsLine == null)
                {
                    TaskDialog.Show("Error", "Chỉ hỗ trợ Grid dạng Line song song với nhau, hãy chọn cẩn thận...");
                    return;
                }
                myListDirectLine.Add(gridAsLine.Direction);

                ra.Append(myGridRef);
                //myListRef_2.Add(myGridRef);
            }

            if (!isListLineParallel(myListDirectLine))
            {
                TaskDialog.Show("Error", "Chỉ hỗ trợ Grid dạng Line song song với nhau, hãy chọn cẩn thận...");
                return;
            }

            setCurrentViewAsWorkPlan();

            XYZ myDimPoint_1 = uiDoc.Selection.PickPoint("Pick Point To Place Dimension....");

            //TaskDialog.Show("check", XYZtoString(doc.ActiveView.ViewDirection));

            XYZ viewDirect = doc.ActiveView.ViewDirection;

            XYZ plusXYZ = new XYZ();

            if (Math.Round(viewDirect.Z, 6) == 0)
            {
                plusXYZ = new XYZ(-viewDirect.Y, viewDirect.X, viewDirect.Z);
            }

            else
            {
                Grid firstGrid      = doc.GetElement(myListRef[0]) as Grid;
                Line gridLine       = firstGrid.Curve as Line;
                XYZ  girdLineDirect = gridLine.Direction;
                plusXYZ = new XYZ(-girdLineDirect.Y, girdLineDirect.X, girdLineDirect.Z);
                //plusXYZ = new XYZ(0,1,0);
            }
            XYZ  myDimPoint_2 = myDimPoint_1 + plusXYZ;
            Line l            = Line.CreateBound(myDimPoint_1, myDimPoint_2);

            using (Transaction trans = new Transaction(doc, "Create linear Dimension"))
            {
                trans.Start();
                Dimension myDim = doc.Create.NewDimension(doc.ActiveView, l, ra);
                trans.Commit();
            }
        }