Beispiel #1
0
        public Result Execute(
            ExternalCommandData revit,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp = revit.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Document      doc   = uidoc.Document;
            Selection     sel   = uidoc.Selection;

            Reference ref1 = sel.PickObject(
                ObjectType.Element, "Please pick a floor.");

            Floor f = doc.GetElement(ref1) as Floor;

            if (f == null)
            {
                return(Result.Failed);
            }

            // Retrieve floor edge model line elements.

            ICollection <ElementId> deleted_ids;

            using (Transaction tx = new Transaction(doc))
            {
                tx.Start("Temporarily Delete Floor");

                deleted_ids = doc.Delete(f.Id);

                tx.RollBack();
            }

            // Grab the first floor edge model line.

            ModelLine ml = null;

            foreach (ElementId id in deleted_ids)
            {
                ml = doc.GetElement(id) as ModelLine;

                if (null != ml)
                {
                    break;
                }
            }

            if (null != ml)
            {
                using (Transaction tx = new Transaction(doc))
                {
                    tx.Start("Change Slope Angle");

                    // This parameter is read only. Therefore,
                    // the change does not work and we cannot
                    // change the floor slope angle after the
                    // floor is created.

                    ml.get_Parameter(
                        BuiltInParameter.CURVE_IS_SLOPE_DEFINING)
                    .Set(1);

                    ml.get_Parameter(
                        BuiltInParameter.ROOF_SLOPE)
                    .Set(1.2);

                    tx.Commit();
                }
            }
            return(Result.Succeeded);
        }
        private void Stream( ArrayList data, ModelLine modelCrv )
        {
            data.Add( new Snoop.Data.ClassSeparator( typeof( ModelLine ) ) );

              // no data at this level
        }
        public void Execute(UIApplication uiapp)
        {
            try
            {
                UIDocument uidoc = uiapp.ActiveUIDocument;
                Document   doc   = uidoc.Document; // myListView_ALL_Fam_Master.Items.Add(doc.GetElement(uidoc.Selection.GetElementIds().First()).Name);

                if (doc.ActiveView.GetType() != typeof(View3D))
                {
                    MessageBox.Show("ActiveView is not typeof View3D.");
                    return;
                }

                FamilyInstance myFamilyInstance_NerfGun = null;
                if (uidoc.Selection.GetElementIds().Count == 0)
                {
                    string myString_RememberLast = doc.ProjectInformation.get_Parameter(BuiltInParameter.PROJECT_NUMBER).AsString();
                    int    n;
                    if (int.TryParse(myString_RememberLast, out n))
                    {
                        myFamilyInstance_NerfGun = doc.GetElement(new ElementId(n)) as FamilyInstance;
                    }
                }
                else
                {
                    myFamilyInstance_NerfGun = doc.GetElement(uidoc.Selection.GetElementIds().First()) as FamilyInstance;
                }


                if (myFamilyInstance_NerfGun == null)
                {
                    MessageBox.Show("Please perform step 5 of 19 first." + Environment.NewLine + Environment.NewLine + "(Placing Nerf Gun)");
                    return;
                }

                ///            TECHNIQUE 14 OF 19 (EE14_Draw3D_IntersectorLines.cs)
                ///↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ DRAW INTERSECTOR LINES FROM NERF GUN ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
                ///
                /// Interfaces and ENUM's:
                ///     BuiltInParameter.POINT_ELEMENT_DRIVEN
                ///     IFailuresPreprocessor
                ///
                ///
                /// Demonstrates classes:
                ///     ReferencePoint
                ///     AdaptiveComponentInstanceUtils
                ///     Transform
                ///     TransactionGroup
                ///     Random*
                ///     ElementMulticategoryFilter
                ///     ReferenceIntersector
                ///
                ///
                /// Key methods:
                ///     AdaptiveComponentInstanceUtils.GetInstancePointElementRefIds(
                ///     myReferencePoint.GetCoordinateSystem(
                ///     refIntersector.FindNearest(
                ///     myReferenceWithContext.GetReference(
                ///     uidoc.RefreshActiveView();
                ///
                ///
                ///
                /// * class is actually part of the .NET framework (not Revit API)
                ///
                ///
                ///	https://github.com/joshnewzealand/Revit-API-Playpen-CSharp

                uidoc.Selection.SetElementIds(new List <ElementId>());

                ReferencePoint myReferencePoint = doc.GetElement(AdaptiveComponentInstanceUtils.GetInstancePointElementRefIds(myFamilyInstance_NerfGun).First()) as ReferencePoint;

                Transform myTransform_FromNurfGun = myReferencePoint.GetCoordinateSystem();


                using (TransactionGroup transGroup = new TransactionGroup(doc))
                {
                    transGroup.Start("Transaction Group");

                    if (!myReferencePoint.get_Parameter(BuiltInParameter.POINT_ELEMENT_DRIVEN).IsReadOnly)
                    {
                        using (Transaction tx = new Transaction(doc))
                        {
                            tx.Start("Unhost");

                            myReferencePoint.get_Parameter(BuiltInParameter.POINT_ELEMENT_DRIVEN).Set(0);

                            tx.Commit();
                            uidoc.RefreshActiveView();
                        }
                    }

                    MyPreProcessor preproccessor = new MyPreProcessor();

                    for (int i = 1; i <= 100; i++)
                    {
                        if (i > 100)
                        {
                            MessageBox.Show("Stopped at 'i > 100' because more will cause Revit to 'freeze up'.");
                            break;
                        }

                        Random rnd = new Random();
                        OverrideGraphicSettings ogs = new OverrideGraphicSettings();
                        ogs.SetProjectionLineColor(new Autodesk.Revit.DB.Color((byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256), (byte)rnd.Next(0, 256)));

                        using (Transaction tx = new Transaction(doc))
                        {
                            FailureHandlingOptions options = tx.GetFailureHandlingOptions();
                            options.SetFailuresPreprocessor(preproccessor);
                            tx.SetFailureHandlingOptions(options);

                            tx.Start("Splatter Gun");

                            Line myLine_BasisX = Line.CreateUnbound(myTransform_FromNurfGun.Origin, myTransform_FromNurfGun.BasisX);
                            myReferencePoint.Location.Rotate(myLine_BasisX, GetRandomNumber());

                            Line myLine_BasisZ = Line.CreateUnbound(myTransform_FromNurfGun.Origin, myTransform_FromNurfGun.BasisZ);
                            myReferencePoint.Location.Rotate(myLine_BasisZ, GetRandomNumber());

                            myTransform_FromNurfGun = myReferencePoint.GetCoordinateSystem();

                            List <BuiltInCategory> builtInCats = new List <BuiltInCategory>();
                            builtInCats.Add(BuiltInCategory.OST_Roofs);
                            builtInCats.Add(BuiltInCategory.OST_Ceilings);
                            builtInCats.Add(BuiltInCategory.OST_Floors);
                            builtInCats.Add(BuiltInCategory.OST_Walls);
                            builtInCats.Add(BuiltInCategory.OST_Doors);
                            builtInCats.Add(BuiltInCategory.OST_Windows);
                            builtInCats.Add(BuiltInCategory.OST_CurtainWallPanels);
                            builtInCats.Add(BuiltInCategory.OST_CurtainWallMullions);

                            ElementMulticategoryFilter intersectFilter = new ElementMulticategoryFilter(builtInCats);
                            ReferenceIntersector       refIntersector  = new ReferenceIntersector(intersectFilter, FindReferenceTarget.Face, doc.ActiveView as View3D);

                            ReferenceWithContext myReferenceWithContext = refIntersector.FindNearest(myTransform_FromNurfGun.Origin, myTransform_FromNurfGun.BasisZ);

                            if (myReferenceWithContext != null)
                            {
                                Reference myReferenceHosting_Normal = myReferenceWithContext.GetReference();

                                Element myElement_ContainingFace = doc.GetElement(myReferenceHosting_Normal.ElementId);
                                Face    myFace = myElement_ContainingFace.GetGeometryObjectFromReference(myReferenceHosting_Normal) as Face;
                                if (myFace.GetType() != typeof(PlanarFace))
                                {
                                    return;                                        // continue;
                                }
                                Plane       plane       = Plane.CreateByNormalAndOrigin(myTransform_FromNurfGun.BasisX, myTransform_FromNurfGun.Origin);
                                SketchPlane sketchPlane = SketchPlane.Create(doc, plane);

                                if (myTransform_FromNurfGun.Origin.DistanceTo(myReferenceHosting_Normal.GlobalPoint) > 0.0026)//minimum lenth check
                                {
                                    Line line = Line.CreateBound(myTransform_FromNurfGun.Origin, myReferenceHosting_Normal.GlobalPoint);

                                    ModelLine myModelLine = doc.Create.NewModelCurve(line, sketchPlane) as ModelLine;

                                    doc.ActiveView.SetElementOverrides(myModelLine.Id, ogs);

                                    myWindow1.myListElementID_SketchPlanesToDelete.Add(sketchPlane.Id);

                                    Transform myXYZ_FamilyTransform = Transform.Identity;

                                    if (myReferenceHosting_Normal.ConvertToStableRepresentation(doc).Contains("INSTANCE"))
                                    {
                                        myXYZ_FamilyTransform = (myElement_ContainingFace as FamilyInstance).GetTotalTransform();
                                    }

                                    PlanarFace myPlanarFace = myFace as PlanarFace;

                                    Transform myTransform = Transform.Identity;
                                    myTransform.Origin = myReferenceHosting_Normal.GlobalPoint;
                                    myTransform.BasisX = myXYZ_FamilyTransform.OfVector(myPlanarFace.XVector);
                                    myTransform.BasisY = myXYZ_FamilyTransform.OfVector(myPlanarFace.YVector);
                                    myTransform.BasisZ = myXYZ_FamilyTransform.OfVector(myPlanarFace.FaceNormal);

                                    SketchPlane mySketchPlane = SketchPlane.Create(doc, myReferenceHosting_Normal);

                                    // Create a geometry circle in Revit application
                                    XYZ    xVec        = myTransform.OfVector(XYZ.BasisX);
                                    XYZ    yVec        = myTransform.OfVector(XYZ.BasisY);
                                    double startAngle2 = 0;
                                    double endAngle2   = 2 * Math.PI;
                                    double radius2     = 1.23;
                                    Arc    geomPlane3  = Arc.Create(myTransform.OfPoint(new XYZ(0, 0, 0)), radius2, startAngle2, endAngle2, xVec, yVec);

                                    ModelArc arc = doc.Create.NewModelCurve(geomPlane3, mySketchPlane) as ModelArc;
                                    //doc.Delete(sketch2.Id);

                                    doc.ActiveView.SetElementOverrides(arc.Id, ogs);
                                }
                            }
                            tx.Commit();
                            uidoc.RefreshActiveView();
                        }
                    }
                    transGroup.Assimilate();
                }
            }

            #region catch and finally
            catch (Exception ex)
            {
                _952_PRLoogleClassLibrary.DatabaseMethods.writeDebug("EE05_Part1" + Environment.NewLine + ex.Message + Environment.NewLine + ex.InnerException, true);
            }
            finally
            {
            }
            #endregion
        }
Beispiel #4
0
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp      = commandData.Application;
            UIDocument    uidoc      = uiapp.ActiveUIDocument;
            Application   app        = uiapp.Application;
            Document      doc        = uidoc.Document;
            View          activeView = doc.ActiveView;


            //ICollection<Reference> selectedLines = uidoc.Selection.PickObjects(ObjectType.Element, "Select Lines");

            Reference refFace         = uidoc.Selection.PickObject(ObjectType.Face, "Select Surface");
            Element   selectedElement = doc.GetElement(refFace);


            GeometryObject obj = selectedElement.GetGeometryObjectFromReference(refFace);

            Face face = obj as Face;


            ICollection <Reference> refLines = uidoc.Selection.PickObjects(ObjectType.Element, "Select Line");

            Level lvl = null;

            ICollection <Element> allLevels = new FilteredElementCollector(doc).OfClass(typeof(Level)).ToElements();

            foreach (Level l in allLevels)
            {
                if (l.Name == "Level 1")
                {
                    lvl = l;
                }
            }

            using (Transaction t = new Transaction(doc, "test"))
            {
                t.Start();

                foreach (Reference refLine in refLines)
                {
                    try
                    {
                        LocationCurve locCurve = doc.GetElement(refLine.ElementId).Location as LocationCurve;
                        Line          line     = locCurve.Curve as Line;

                        XYZ q = line.GetEndPoint(1);
                        XYZ p = line.GetEndPoint(0);

                        XYZ v = q - p;

                        XYZ rayDirection = new XYZ(0, 0, 1);

                        XYZ normal = line.Direction.CrossProduct(rayDirection);

                        Plane verticalPlane = Plane.CreateByNormalAndOrigin(normal, p);

                        SketchPlane splane = SketchPlane.Create(doc, verticalPlane);

                        XYZ qProjected = ProjectPoint(doc, refFace, q, rayDirection);

                        XYZ pProjected = ProjectPoint(doc, refFace, p, rayDirection);

                        Line projectedLine = Line.CreateBound(pProjected, qProjected);

                        ModelLine verticalmLine = doc.Create.NewModelCurve(projectedLine, splane) as ModelLine;
                    }
                    catch (Exception ex)
                    {
                        TaskDialog.Show("result", ex.Message);
                    }
                }



                t.Commit();
            }

            return(Result.Succeeded);
        }
        void SetTangentLockInProfileSketch2(
            Document famdoc,
            Form[] extrusions)
        {
            ICollection <ElementId> delIds = null;
            List <ElementId>        enmIDs = new List <ElementId>();

            using (SubTransaction delTrans = new SubTransaction(famdoc))
            {
                try
                {
                    delTrans.Start();
                    delIds = famdoc.Delete(extrusions[0].Id);
                    delTrans.RollBack();
                }
                catch (Exception ex)
                {
                    System.Windows.MessageBox.Show(ex.ToString());
                }
            }

            // Get the model lines in the profile and use the end
            // points for reference the sketch dimensions diameter

            List <ModelArc>  mArcsR1 = new List <ModelArc>();
            List <ModelArc>  mArcsR2 = new List <ModelArc>();
            List <ModelLine> mLines  = new List <ModelLine>();

            foreach (ElementId id in delIds)
            {
                enmIDs.Add(id);
            }

            for (int i = 0; i < enmIDs.Count; i++)
            {
                Element ele = famdoc.GetElement(enmIDs[i]);
                if (ele is ModelArc)
                {
                    ModelArc ma = ele as ModelArc;
                    Curve    c  = ma.GeometryCurve;
                    Arc      a  = c as Arc;

                    if (Math.Round(r1, 6) == Math.Round(a.Radius, 6))
                    {
                        mArcsR1.Add(ma);
                    }
                    if (Math.Round(r2, 6) == Math.Round(a.Radius, 6))
                    {
                        mArcsR2.Add(ma);
                    }
                }
                if (ele is ModelLine)
                {
                    ModelLine ml       = ele as ModelLine;
                    ElementId beforeId = null;
                    ElementId afterId  = null;

                    ISet <ElementId> joinedBefore = ml.GetAdjoinedCurveElements(0);
                    foreach (ElementId id in joinedBefore)
                    {
                        Element joinedEle = famdoc.GetElement(id);

                        if (joinedEle is ModelArc)
                        {
                            beforeId = id;
                            break;
                        }
                    }
                    ISet <ElementId> joinedAfter = ml.GetAdjoinedCurveElements(1);
                    foreach (ElementId id in joinedAfter)
                    {
                        Element joinedEle = famdoc.GetElement(id);

                        if (joinedEle is ModelArc)
                        {
                            afterId = id;
                            break;
                        }
                    }

                    if (beforeId != null &&
                        afterId != null &&
                        ml.HasTangentJoin(0, beforeId) &&
                        ml.HasTangentJoin(1, afterId))
                    {
                        ml.SetTangentLock(0, beforeId, true);
                        ml.SetTangentLock(1, afterId, true);
                    }
                }
            }
        }
        void SetTangentLockInProfileSketch1(
            Document famdoc,
            Form [] extrusions)
        {
            ICollection <ElementId> delIds = null;
            List <ElementId>        enmIDs = new List <ElementId>();

            using (SubTransaction delTrans = new SubTransaction(famdoc))
            {
                try
                {
                    delTrans.Start();
                    delIds = famdoc.Delete(extrusions[0].Id);
                    delTrans.RollBack();
                }
                catch (Exception ex)
                {
                    System.Windows.MessageBox.Show(ex.ToString());
                }
            }

            // Get the model lines in the profile and use the
            // end points for reference the sketch dimensions diameter

            List <ModelArc>  mArcsR1 = new List <ModelArc>();
            List <ModelArc>  mArcsR2 = new List <ModelArc>();
            List <ModelLine> mLines  = new List <ModelLine>();

            foreach (ElementId id in delIds)
            {
                enmIDs.Add(id);
            }

            for (int i = 0; i < enmIDs.Count; i++)
            {
                Element ele = famdoc.GetElement(enmIDs[i]);
                if (ele is ModelArc)
                {
                    ModelArc ma = ele as ModelArc;
                    Curve    c  = ma.GeometryCurve;
                    Arc      a  = c as Arc;

                    if (Math.Round(r1, 6) == Math.Round(a.Radius, 6))
                    {
                        mArcsR1.Add(ma);
                    }
                    if (Math.Round(r2, 6) == Math.Round(a.Radius, 6))
                    {
                        mArcsR2.Add(ma);
                    }
                }
                if (ele is ModelLine)
                {
                    ModelLine ml       = ele as ModelLine;
                    Element   before   = null;
                    Element   after    = null;
                    ElementId beforeId = null;
                    ElementId afterId  = null;

                    if (i > 0)
                    {
                        before   = famdoc.GetElement(enmIDs[i - 1]);
                        beforeId = enmIDs[i - 1];
                    }
                    else
                    {
                        before   = famdoc.GetElement(enmIDs[enmIDs.Count - 1]);
                        beforeId = enmIDs[enmIDs.Count - 1];
                    }
                    if (i == enmIDs.Count - 1)
                    {
                        after   = famdoc.GetElement(enmIDs[0]);
                        afterId = enmIDs[0];
                    }
                    else
                    {
                        after   = famdoc.GetElement(enmIDs[i + 1]);
                        afterId = enmIDs[i + 1];
                    }

                    if (before is ModelArc && after is ModelArc)
                    {
                        ml.SetTangentLock(0, beforeId, true);
                        ml.SetTangentLock(1, afterId, true);
                    }
                }
            }
        }
        // Token: 0x06000092 RID: 146 RVA: 0x00003FDC File Offset: 0x000021DC
        private void okButton_Click(object sender, EventArgs e)
        {
            string         text           = null;
            SaveFileDialog saveFileDialog = new SaveFileDialog();

            saveFileDialog.InitialDirectory = "c:\\";
            saveFileDialog.Filter           = "cs files (*.cs)|*.cs|All files (*.*)|*.*";
            saveFileDialog.FilterIndex      = 1;
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.FileName         = null;
            bool flag = saveFileDialog.ShowDialog() == DialogResult.OK;

            if (flag)
            {
                try
                {
                    Stream stream;
                    bool   flag2 = (stream = saveFileDialog.OpenFile()) != null;
                    if (flag2)
                    {
                        using (stream)
                        {
                            text = saveFileDialog.FileName;
                        }
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Error: Could not read file. Original error: " + ex.Message);
                }
            }
            string text2                    = "_MouseOver";
            string directoryName            = Path.GetDirectoryName(text);
            string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text);
            string text3                    = fileNameWithoutExtension + text2;
            string path = null;

            path = string.Concat(new string[]
            {
                directoryName,
                "\\",
                fileNameWithoutExtension,
                text2,
                ".cs"
            });
            string        arg           = "using UnityEngine;\nusing System.Collections.Generic;";
            string        value         = "";
            StringBuilder stringBuilder = new StringBuilder();
            bool          flag3         = File.Exists(text);

            if (flag3)
            {
                File.Delete(text);
            }
            bool flag4 = File.Exists(path);

            if (flag4)
            {
                File.Delete(path);
            }
            List <string> list       = new List <string>();
            List <string> list2      = new List <string>();
            List <string> list3      = new List <string>();
            List <double> list4      = new List <double>();
            List <string> list5      = new List <string>();
            List <string> list6      = new List <string>();
            List <string> list7      = new List <string>();
            List <string> list8      = new List <string>();
            List <string> list9      = new List <string>();
            List <string> list10     = new List <string>();
            List <string> list11     = new List <string>();
            Hashtable     hashtable  = new Hashtable();
            Hashtable     hashtable2 = new Hashtable();
            Hashtable     hashtable3 = new Hashtable();
            Hashtable     hashtable4 = new Hashtable();
            List <string> list12     = new List <string>();
            Hashtable     hashtable5 = new Hashtable();

            try
            {
                Autodesk.Revit.ApplicationServices.Application application = this.p_commandData.Application.Application;
                Document document = this.p_commandData.Application.ActiveUIDocument.Document;
                FilteredElementCollector filteredElementCollector = new FilteredElementCollector(document);
                ICollection <Element>    collection = filteredElementCollector.OfClass(typeof(Wall)).ToElements();
                FilteredElementCollector filteredElementCollector2 = new FilteredElementCollector(document);
                ICollection <Element>    collection2 = filteredElementCollector2.OfClass(typeof(View3D)).ToElements();
                View3D view3D = null;
                FilteredElementCollector filteredElementCollector3 = new FilteredElementCollector(document);
                ICollection <Element>    collection3  = filteredElementCollector3.OfClass(typeof(FamilySymbol)).ToElements();
                FamilySymbol             familySymbol = null;
                double    angle     = 270.0;
                double    num       = ExpAnimForm.DegreeToRadian(angle);
                Transform transform = Transform.CreateRotation(XYZ.BasisX, num);
                this.m_AllViews.ExportProperties = true;
                bool flag5 = document.ActiveView.ViewType == ViewType.ThreeD & !document.ActiveView.IsTemplate;
                if (flag5)
                {
                    view3D = (document.ActiveView as View3D);
                }
                FilteredElementCollector filteredElementCollector4 = new FilteredElementCollector(document, view3D.Id);
                ICollection <Element>    collection4    = filteredElementCollector4.OfClass(typeof(FamilyInstance)).ToElements();
                FamilyInstance           familyInstance = null;
                bool flag6 = text != null;
                if (flag6)
                {
                    foreach (Element element in collection3)
                    {
                        familySymbol = (element as FamilySymbol);
                        bool flag7 = familySymbol.Category != null;
                        if (flag7)
                        {
                            bool flag8 = string.Concat(new string[]
                            {
                                familySymbol.Category.Name,
                                " : ",
                                familySymbol.Family.Name,
                                " : ",
                                familySymbol.Name
                            }) == this.FamilySymbolNames;
                            if (flag8)
                            {
                                break;
                            }
                        }
                    }
                    foreach (Element element2 in collection4)
                    {
                        familyInstance = (element2 as FamilyInstance);
                        bool flag9 = familyInstance.Symbol.Id == familySymbol.Id;
                        if (flag9)
                        {
                            foreach (Element element3 in collection)
                            {
                                Wall wall   = (Wall)element3;
                                bool flag10 = wall.Id == familyInstance.Host.Id;
                                if (flag10)
                                {
                                    Wall wall2 = wall;
                                    this.ProjY = wall2.Width;
                                }
                            }
                            bool flag11 = familySymbol != null;
                            if (flag11)
                            {
                                Document document2 = document.EditFamily(familySymbol.Family);
                                FilteredElementCollector filteredElementCollector5 = new FilteredElementCollector(document2);
                                ICollection <Element>    collection5 = filteredElementCollector5.OfClass(typeof(Dimension)).ToElements();
                                FilteredElementCollector filteredElementCollector6 = new FilteredElementCollector(document2);
                                ICollection <Element>    collection6 = filteredElementCollector6.OfClass(typeof(FamilyInstance)).ToElements();
                                FilteredElementCollector filteredElementCollector7 = new FilteredElementCollector(document2);
                                ICollection <Element>    collection7 = filteredElementCollector7.OfClass(typeof(Wall)).ToElements();
                                List <ElementId>         list13      = new List <ElementId>();
                                XYZ  xyz    = null;
                                XYZ  xyz2   = null;
                                bool flag12 = collection6 != null;
                                if (flag12)
                                {
                                    foreach (Element element4 in collection6)
                                    {
                                        bool flag13 = element4 != null;
                                        if (flag13)
                                        {
                                            FamilyInstance familyInstance2 = element4 as FamilyInstance;
                                            bool           flag14          = familyInstance2.GroupId.IntegerValue.ToString() == "-1";
                                            if (flag14)
                                            {
                                                list13.Add(familyInstance2.Id);
                                            }
                                        }
                                    }
                                }
                                bool flag15 = document2 != null && document2.IsFamilyDocument;
                                if (flag15)
                                {
                                    int  num2   = 0;
                                    bool flag16 = familyInstance.Category.Id.IntegerValue == -2000023;
                                    if (flag16)
                                    {
                                        foreach (Element element5 in collection7)
                                        {
                                            Wall wall3  = (Wall)element5;
                                            bool flag17 = wall3 != null;
                                            if (flag17)
                                            {
                                                bool flag18 = num2 < 2;
                                                if (flag18)
                                                {
                                                    Wall wall4 = wall3;
                                                    this.FamY = wall4.Width;
                                                    num2++;
                                                }
                                            }
                                        }
                                        bool flag19 = document2.FamilyManager.Types.Size == 1;
                                        if (flag19)
                                        {
                                            Transaction transaction = new Transaction(document2);
                                            transaction.Start("Add Type");
                                            string text4 = familyInstance.Name.ToString() + "_Anim";
                                            document2.FamilyManager.NewType(text4);
                                            transaction.Commit();
                                        }
                                    }
                                    double      num3         = (this.ProjY - this.FamY) / 2.0;
                                    Transaction transaction2 = new Transaction(document2);
                                    transaction2.Start("Anim Data");
                                    foreach (object obj in document2.FamilyManager.Types)
                                    {
                                        FamilyType familyType = (FamilyType)obj;
                                        bool       flag20     = familyType.Name == familyInstance.Name;
                                        if (flag20)
                                        {
                                            document2.FamilyManager.CurrentType = familyType;
                                            foreach (object obj2 in document2.FamilyManager.Parameters)
                                            {
                                                FamilyParameter familyParameter = (FamilyParameter)obj2;
                                                bool            flag21          = familyParameter != null && !familyParameter.IsReadOnly;
                                                if (flag21)
                                                {
                                                    bool flag22 = familyParameter.StorageType != StorageType.ElementId && familyParameter.StorageType > 0;

                                                    if (flag22)
                                                    {
                                                        bool flag23 = familyParameter.Definition.Name.ToString() == this.FamilyParameter;
                                                        if (flag23)
                                                        {
                                                            foreach (Element element6 in collection5)
                                                            {
                                                                Dimension dimension = element6 as Dimension;
                                                                bool      flag24    = dimension != null & dimension.DimensionShape == DimensionShape.Angular;

                                                                if (flag24)
                                                                {
                                                                    bool flag25 = dimension.get_Parameter((BuiltInParameter)(-1004510)) != null;
                                                                    if (flag25)
                                                                    {
                                                                        string b      = dimension.get_Parameter((BuiltInParameter)(-1004510)).AsValueString().ToString();
                                                                        bool   flag26 = this.FamilyParameter == b;
                                                                        if (flag26)
                                                                        {
                                                                            Curve curve  = dimension.Curve;
                                                                            bool  flag27 = curve is Arc;
                                                                            if (flag27)
                                                                            {
                                                                                Arc arc = curve as Arc;
                                                                                xyz = arc.Center;
                                                                                break;
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            bool flag28 = xyz != null;
                                                            if (flag28)
                                                            {
                                                                Transform transform2 = familyInstance.GetTransform();
                                                                bool      flag29     = (familyInstance.FacingFlipped && !familyInstance.HandFlipped) || (!familyInstance.FacingFlipped && familyInstance.HandFlipped);
                                                                if (flag29)
                                                                {
                                                                    transform2.BasisY = -transform2.BasisY;
                                                                }
                                                                XYZ xyz3 = transform2.OfPoint(xyz);
                                                                XYZ xyz4 = new XYZ(xyz3.X, xyz3.Y, xyz3.Z);
                                                                XYZ xyz5 = new XYZ(xyz3.X + 2.0, xyz3.Y, xyz3.Z);
                                                                xyz3 = transform.OfPoint(xyz3);
                                                                xyz3 = new XYZ(-xyz3.X, xyz3.Y, xyz3.Z);
                                                                double value2 = xyz3.X;
                                                                double value3 = xyz3.Y;
                                                                double value4 = xyz3.Z;
                                                                value2 = Math.Round(value2, this.rnd);
                                                                value3 = Math.Round(value3, this.rnd);
                                                                value4 = Math.Round(value4, this.rnd);
                                                                string text5  = value2.ToString();
                                                                string text6  = text5.Replace(",", ".");
                                                                string text7  = value3.ToString();
                                                                string text8  = text7.Replace(",", ".");
                                                                string text9  = value4.ToString();
                                                                string text10 = text9.Replace(",", ".");
                                                                string str    = string.Concat(new string[]
                                                                {
                                                                    text6,
                                                                    "f, ",
                                                                    text8,
                                                                    "f, ",
                                                                    text10,
                                                                    "f"
                                                                });
                                                                value = "\n" + str + "\n";
                                                                Transaction transaction3 = new Transaction(document);
                                                                transaction3.Start("AddLine");
                                                                Line        line        = Line.CreateBound(xyz4, xyz5);
                                                                SketchPlane sketchPlane = SketchPlane.Create(document, Plane.CreateByOriginAndBasis(xyz4, XYZ.BasisX, XYZ.BasisY));
                                                                ModelLine   modelLine   = document.Create.NewModelCurve(line, sketchPlane) as ModelLine;
                                                                transaction3.Commit();
                                                            }
                                                            bool flag30 = xyz == null;
                                                            if (flag30)
                                                            {
                                                                foreach (ElementId elementId in list13)
                                                                {
                                                                    bool flag31 = elementId != null;
                                                                    if (flag31)
                                                                    {
                                                                        Element        element7        = document2.GetElement(elementId);
                                                                        FamilyInstance familyInstance3 = element7 as FamilyInstance;
                                                                        foreach (object obj3 in familyInstance3.Parameters)
                                                                        {
                                                                            Parameter parameter = (Parameter)obj3;
                                                                            bool      hasValue  = parameter.HasValue;
                                                                            if (hasValue)
                                                                            {
                                                                                bool flag32 = parameter.Definition.Name == this.FamilyParameter;
                                                                                if (flag32)
                                                                                {
                                                                                    Location      location      = familyInstance3.Location;
                                                                                    LocationPoint locationPoint = location as LocationPoint;
                                                                                    xyz2 = locationPoint.Point;
                                                                                    XYZ xyz6 = new XYZ(xyz2.X, xyz2.Y + num3, xyz2.Z);
                                                                                    xyz2 = xyz6;
                                                                                    break;
                                                                                }
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                            bool flag33 = xyz2 != null;
                                                            if (flag33)
                                                            {
                                                                Transform transform3 = familyInstance.GetTransform();
                                                                bool      flag34     = (familyInstance.FacingFlipped && !familyInstance.HandFlipped) || (!familyInstance.FacingFlipped && familyInstance.HandFlipped);
                                                                if (flag34)
                                                                {
                                                                    transform3.BasisY = -transform3.BasisY;
                                                                }
                                                                XYZ xyz7 = transform3.OfPoint(xyz2);
                                                                XYZ xyz8 = new XYZ(xyz7.X, xyz7.Y, xyz7.Z);
                                                                XYZ xyz9 = new XYZ(xyz7.X + 2.0, xyz7.Y, xyz7.Z);
                                                                xyz7 = transform.OfPoint(xyz7);
                                                                xyz7 = new XYZ(-xyz7.X, xyz7.Y, xyz7.Z);
                                                                double value5 = xyz7.X;
                                                                double value6 = xyz7.Y;
                                                                double value7 = xyz7.Z;
                                                                value5 = Math.Round(value5, this.rnd);
                                                                value6 = Math.Round(value6, this.rnd);
                                                                value7 = Math.Round(value7, this.rnd);
                                                                string text11 = value5.ToString();
                                                                string text12 = text11.Replace(",", ".");
                                                                string text13 = value6.ToString();
                                                                string text14 = text13.Replace(",", ".");
                                                                string text15 = value7.ToString();
                                                                string text16 = text15.Replace(",", ".");
                                                                string str2   = string.Concat(new string[]
                                                                {
                                                                    text12,
                                                                    "f, ",
                                                                    text14,
                                                                    "f, ",
                                                                    text16,
                                                                    "f"
                                                                });
                                                                value = "\n" + str2 + "\n\n";
                                                                Transaction transaction4 = new Transaction(document);
                                                                transaction4.Start("AddLine");
                                                                Line        line2        = Line.CreateBound(xyz8, xyz9);
                                                                SketchPlane sketchPlane2 = SketchPlane.Create(document, Plane.CreateByOriginAndBasis(xyz8, XYZ.BasisX, XYZ.BasisY));
                                                                ModelLine   modelLine2   = document.Create.NewModelCurve(line2, sketchPlane2) as ModelLine;
                                                                transaction4.Commit();
                                                            }
                                                            string text17 = Convert.ToString(Convert.ToString(familyInstance.get_Parameter((BuiltInParameter)(-1002050)).AsValueString()));
                                                            string text18 = text17.Replace(" ", "_");
                                                            string str3   = text18.Replace("\"", "\\\"");
                                                            string value8 = str3 + "_Anim[" + familyInstance.Id.ToString() + "]";
                                                            stringBuilder.Append(value8);
                                                            stringBuilder.Append(value);
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    transaction2.Commit();
                                    document2.Close(false);
                                }
                            }
                        }
                    }
                    string value9 = arg + stringBuilder;
                    using (StreamWriter streamWriter = new StreamWriter(path, true))
                    {
                        streamWriter.WriteLine(value9);
                    }
                }
                Transaction transaction5 = new Transaction(document);
                transaction5.Start("WriteToText");
                document.Regenerate();
                transaction5.Commit();
                base.DialogResult = DialogResult.OK;
                base.Close();
            }
            catch (Exception ex2)
            {
                MessageBox.Show(ex2.Message);
            }
        }
Beispiel #8
0
        Result IExternalCommand.Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            Document    revitDoc = commandData.Application.ActiveUIDocument.Document; //取得文档
            Application revitApp = commandData.Application.Application;               //取得应用程序
            UIDocument  uiDoc    = commandData.Application.ActiveUIDocument;          //取得当前活动文档

            Document document = commandData.Application.ActiveUIDocument.Document;

            Window1 window1 = new Window1();

            //载入族
            FamilySymbol familySymbol;

            using (Transaction tran = new Transaction(uiDoc.Document))
            {
                tran.Start("载入族");

                //载入弦杆族
                string file = @"C:\Users\zyx\Desktop\2RevitArcBridge\CrossBeam\CrossBeam\source\crossBeam.rfa";
                familySymbol = loadFaimly(file, commandData);
                familySymbol.Activate();

                tran.Commit();
            }


            //把这组模型线通过获取首尾点,生成dynamo里的curve
            List <XYZ> ps = new List <XYZ>();

            using (Transaction transaction = new Transaction(uiDoc.Document))
            {
                transaction.Start("选取模型线生成Curve");

                Selection         sel        = uiDoc.Selection;
                IList <Reference> modelLines = sel.PickObjects(ObjectType.Element, "选一组模型线");

                foreach (Reference reference in modelLines)
                {
                    Element   elem            = revitDoc.GetElement(reference);
                    ModelLine modelLine       = elem as ModelLine;
                    Autodesk.Revit.DB.Curve c = modelLine.GeometryCurve;

                    ps.Add(c.GetEndPoint(0));
                    ps.Add(c.GetEndPoint(1));
                }

                for (int i = ps.Count - 1; i > 0; i--)
                {
                    XYZ p1 = ps[i];
                    XYZ p2 = ps[i - 1];

                    //注意此处重合点有一个闭合差
                    if (p1.DistanceTo(p2) < 0.0001)
                    {
                        ps.RemoveAt(i);
                    }
                }

                transaction.Commit();
            }


            //做一个revit和dynamo点的转换
            DG.CoordinateSystem coordinateSystem = DG.CoordinateSystem.ByOrigin(0, 0, 0);//标准坐标系
            List <DG.Point>     DGps             = new List <DG.Point>();

            foreach (XYZ p in ps)
            {
                DGps.Add(p.ToPoint(false));
            }

            DG.PolyCurve polyCurve = DG.PolyCurve.ByPoints(DGps);
            DG.Curve     curve     = polyCurve as DG.Curve;

            List <DG.Point> DGCBps      = new List <DG.Point>();//横梁的放置点位列表
            double          StartLength = 0;

            if (window1.ShowDialog() == true)
            {
                //窗口打开并停留,只有点击按键之后,窗口关闭并返回true
            }


            //按键会改变window的属性,通过对属性的循环判断来实现对按键的监测
            while (!window1.Done)
            {
                //选择起点
                if (window1.StartPointSelected)
                {
                    using (Transaction transaction = new Transaction(uiDoc.Document))
                    {
                        transaction.Start("选择起点");

                        double   r1   = SelectPoint(commandData);
                        DG.Point dgp1 = curve.PointAtParameter(r1);
                        DGCBps.Add(dgp1);
                        StartLength = curve.SegmentLengthAtParameter(r1);


                        transaction.Commit();
                    }

                    //2、重置window1.StartPointSelected

                    window1.StartPointSelected = false;
                }

                if (window1.ShowDialog() == true)
                {
                    //窗口打开并停留,只有点击按键之后,窗口关闭并返回true
                }
            }



            //在这里根据间距获取到各个点
            for (int i = 1; i < window1.cbNumber; i++)
            {
                double   L     = StartLength + window1.cbDistance * i;
                DG.Point point = curve.PointAtSegmentLength(L);
                DGCBps.Add(point);
                MessageBox.Show(i.ToString());
            }

            List <FamilyInstance> instances = new List <FamilyInstance>();

            using (Transaction transaction = new Transaction(uiDoc.Document))
            {
                transaction.Start("创建横梁实例");

                foreach (DG.Point p in DGCBps)
                {
                    FamilyInstance familyInstance;
                    familyInstance = CreateFamlyInstance(p, curve, familySymbol, commandData);
                    instances.Add(familyInstance);
                }


                transaction.Commit();
            }


            //给每个族实例设置参数
            using (Transaction transaction = new Transaction(uiDoc.Document))
            {
                transaction.Start("族实例参数设置");

                foreach (FamilyInstance instance in instances)
                {
                    double h1 = instance.LookupParameter("l1/2").AsDouble();
                    instance.LookupParameter("l1/2").Set(window1.l1 / 2);
                    instance.LookupParameter("l2").Set(window1.l2);

                    //instance.LookupParameter("h1").Set(window1.l1);
                    //instance.LookupParameter("h2").Set(window1.l1);
                }
                transaction.Commit();
            }

            return(Result.Succeeded);
        }
        public static void CreateEntitiesForModelLineAndSetValue(
            Document doc, ModelLine line,
            double height, double width, string type, ElementId id)
        {
            // Create Transaction for working with schema
            using (Transaction trans = new Transaction(doc, "Create Extensible Store"))
            {
                trans.Start();

                // Create a schema builder
                SchemaBuilder builder = new SchemaBuilder(Guids.MODELLINE_SCHEMA_GUID);

                // Set read and write access levels
                builder.SetReadAccessLevel(AccessLevel.Public);

                builder.SetWriteAccessLevel(AccessLevel.Public);

                // Set name to this schema builder
                builder.SetSchemaName("BeamDimension");

                builder.SetDocumentation(

                    "Data store for dimension of the potential structural beam");

                // Create field1
                FieldBuilder fieldBuilder1 =
                    builder.AddSimpleField("SectionHeight", typeof(double));

                // Set unit type
                fieldBuilder1.SetUnitType(UnitType.UT_Length);

                // Create field2
                FieldBuilder fieldBuilder2 =
                    builder.AddSimpleField("SectionWidth", typeof(double));

                // Set unit type
                fieldBuilder2.SetUnitType(UnitType.UT_Length);

                // Create field3
                FieldBuilder fieldBuilder3 =
                    builder.AddSimpleField("BeamType", typeof(String));

                // Create field4
                FieldBuilder fieldBuilder4 =
                    builder.AddSimpleField("BeamId", typeof(ElementId));

                // Register the schema object
                Schema schema = builder.Finish();

                // Now create entity (object) for this schema (class)
                Entity ent = new Entity(schema);

                if (null != line)
                {
                    line.SetEntity(ent);
                }
                trans.Commit();

                SetEntityFieldsValue(doc, line, height, width, type, id);
            }
        }
Beispiel #10
0
        public override void Draw()
        {
            //dynDouble x = Inputs[0] as dynDouble;
            //dynDouble y = Inputs[1] as dynDouble;
            //dynDouble z = Inputs[2] as dynDouble;

            //if (x != null && y != null && z != null)
            //{
            //    point = new XYZ(x.D, y.D, z.D);
            //}
            //else
            //{
            //    point = null;
            //}

            if (point != null)
            {

                //generate the planes
                xyPlane = this.Settings.Revit.Application.Create.NewPlane(up, point);
                yzPlane = this.Settings.Revit.Application.Create.NewPlane(xAxis, point);
                xzPlane = this.Settings.Revit.Application.Create.NewPlane(yAxis, point);

                //generate the tick lines
                Line l1 = this.Settings.Revit.Application.Create.NewLineBound(point, point + up);
                Line l2 = this.Settings.Revit.Application.Create.NewLineBound(point, point + xAxis);
                Line l3 = this.Settings.Revit.Application.Create.NewLineBound(point, point + yAxis);

                //generate the sketch planes
                topSketch = this.Settings.Doc.Document.Create.NewSketchPlane(xyPlane);
                lrSketch = this.Settings.Doc.Document.Create.NewSketchPlane(yzPlane);
                fbSketch = this.Settings.Doc.Document.Create.NewSketchPlane(xzPlane);

                ll1 = this.Settings.Doc.Document.Create.NewModelCurve(l1, lrSketch) as ModelLine;
                ll2 = this.Settings.Doc.Document.Create.NewModelCurve(l2, topSketch) as ModelLine;
                ll3 = this.Settings.Doc.Document.Create.NewModelCurve(l3, topSketch) as ModelLine;

                if (xyPlane_out != null && yzPlane_out != null && xzPlane_out != null)
                {
                    //update the outputs
                    xyPlane_out.P = xyPlane;
                    yzPlane_out.P = yzPlane;
                    xzPlane_out.P = xzPlane;
                }
            }
        }
Beispiel #11
0
 //override the destroy method for all point objects
 public override void Destroy()
 {
     try
     {
         if (ll1 != null)
         {
             Settings.Doc.Document.Delete(ll1);
             Settings.Doc.Document.Delete(ll2);
             Settings.Doc.Document.Delete(ll3);
             Settings.Doc.Document.Delete(topSketch);
             Settings.Doc.Document.Delete(fbSketch);
             Settings.Doc.Document.Delete(lrSketch);
             ll1 = null;
             ll2 = null;
             ll3 = null;
             topSketch = null;
             fbSketch = null;
             lrSketch = null;
         }
         if (xyPlane != null)
         {
             point = null;
             xyPlane = null;
             yzPlane = null;
             xzPlane = null;
         }
     }
     catch
     {
         ll1 = null;
         ll2 = null;
         ll3 = null;
         topSketch = null;
         fbSketch = null;
         lrSketch = null;
         point = null;
         xyPlane = null;
         yzPlane = null;
         xzPlane = null;
     }
 }
Beispiel #12
0
        public Result Execute(
            ExternalCommandData commandData,
            ref string message,
            ElementSet elements)
        {
            UIApplication uiapp = commandData.Application;
            UIDocument    uidoc = uiapp.ActiveUIDocument;
            Document      doc   = uidoc.Document;


            Reference r = uidoc.Selection.PickObject(ObjectType.Element, "Select Element");

            Options geometryOptions = new Options();

            geometryOptions.ComputeReferences = false;

            GeometryElement geomElem = doc.GetElement(r).get_Geometry(geometryOptions);

            List <NurbSpline> cadSplines = new List <NurbSpline>();

            IList <XYZ>   controlPoints = new List <XYZ>();
            List <double> weights       = new List <double>();
            List <double> knots         = new List <double>();

            if (null != geomElem)
            {
                foreach (var o in geomElem)
                {
                    GeometryInstance gi = o as GeometryInstance;
                    GeometryElement  instanceGeometryElement = gi.GetInstanceGeometry();

                    foreach (GeometryObject instanceObj in instanceGeometryElement)
                    {
                        if (instanceObj.GetType().ToString().Contains("NurbSpline"))
                        {
                            //TaskDialog.Show("r", instanceObj.GetType().ToString());
                            NurbSpline nurb = instanceObj as NurbSpline;
                            cadSplines.Add(nurb);
                            controlPoints = nurb.CtrlPoints;
                            //weights = nurb.Weights;
                            weights = nurb.Weights.Cast <double>().ToList();
                            //knots = nurb.Knots;
                            knots = nurb.Knots.Cast <double>().ToList();
                        }
                        break;
                    }
                }
            }

            double scale = 0.3048;

            #region Test
            //List<XYZ> controlPoints = new List<XYZ>();
            //controlPoints.Add(new XYZ(0 / scale, 0 / scale, 0 / scale));
            //controlPoints.Add(new XYZ(5 / scale, 5 / scale, 2 / scale));
            //controlPoints.Add(new XYZ(10 / scale, 10 / scale, 5 / scale));
            //controlPoints.Add(new XYZ(15 / scale, 10 / scale, 5 / scale));
            //controlPoints.Add(new XYZ(20 / scale, 5 / scale, 4 / scale));
            //controlPoints.Add(new XYZ(25 / scale, 5 / scale, 3 / scale));

            //List<double> weights = new List<double>();
            //weights.Add(1.0);
            //weights.Add(1.0);
            //weights.Add(1.0);
            //weights.Add(1.0);
            //weights.Add(1.0);
            //weights.Add(1.0);

            //List<double> knots = new List<double>();
            //knots.Add(0); //1revit
            //knots.Add(0); //2
            //knots.Add(0); //3
            //knots.Add(0); //4
            //knots.Add(10.76); //5
            //knots.Add(21.51); //6
            //knots.Add(32.27); //7
            //knots.Add(32.27);
            //knots.Add(32.27); //9
            //knots.Add(32.27);//revit
            #endregion

            HermiteSpline hermspline = HermiteSpline.Create(controlPoints, false);

            //Curve nurbSpline = NurbSpline.Create(hermspline);
            Curve nurbSpline = NurbSpline.CreateCurve(3, knots, controlPoints, weights);

            //XYZ startPoint = nurbSpline.GetEndPoint(0);

            Transform nurbsTr = nurbSpline.ComputeDerivatives(0, true);

            XYZ startPoint = nurbsTr.Origin;
            //PrintPoint("a", nurbsTr.Origin);

            #region Test Plane
            //Plane geomPlane = Autodesk.Revit.DB.Plane.CreateByOriginAndBasis(nurbsTr.Origin, nurbsTr.BasisY.Normalize(), nurbsTr.BasisZ.Normalize());
            //Plane geomPlane = Autodesk.Revit.DB.Plane.CreateByOriginAndBasis(nurbSpline.GetEndPoint(0), nurbsTr.BasisY.Normalize(), nurbsTr.BasisZ.Normalize());
            //Frame f = new Frame(nurbSpline.GetEndPoint(0), nurbsTr.BasisY.Normalize(), nurbsTr.BasisZ.Normalize(), nurbsTr.BasisX.Normalize());
            //Plane geomPlane = Autodesk.Revit.DB.Plane.CreateByThreePoints(XYZ.Zero, XYZ.BasisX, XYZ.BasisZ);
            //Plane geomPlane = Plane.CreateByNormalAndOrigin(nurbsTr.BasisX.Normalize(), nurbSpline.GetEndPoint(1)); funziona
            //Plane geomPlane = Plane.CreateByThreePoints(startPoint, startPoint + nurbsTr.BasisX.Normalize(), startPoint + XYZ.BasisZ);
            #endregion
            //XYZ curveDir = controlPoints[1] - controlPoints[0];
            XYZ   curveDir  = nurbsTr.BasisX;
            XYZ   perpDir   = curveDir.CrossProduct(startPoint + XYZ.BasisZ).Normalize();
            Plane perpPlane = Plane.CreateByNormalAndOrigin(curveDir, startPoint);
            //Plane vertPlane = Plane.CreateByThreePoints(startPoint, perpPlane.XVec, XYZ.BasisZ);
            Plane vertPlane = perpPlane;

            //PrintPoint("per", perpDir);

            List <PtCoord> pointsCoordinates = new List <PtCoord>();

            using (var form = new FormAddActiveView("Enter coordinates in clockwise order"))
            {
                form.ShowDialog();

                //if the user hits cancel just drop out of macro
                if (form.DialogResult == System.Windows.Forms.DialogResult.Cancel)
                {
                    return(Result.Cancelled);
                }

                string[] inputs = form.TextString.Split(';');

                foreach (string coord in inputs)
                {
                    string[] xy = coord.Split(',');
                    pointsCoordinates.Add(new PtCoord(Double.Parse(xy[0]) / (scale * 1000), Double.Parse(xy[1]) / (scale * 1000)));
                }
            }

//			List<PtCoord> pointsCoordinates = new List<PtCoord>(){new PtCoord(5,0), new PtCoord(2,2), new PtCoord(-14,0), new PtCoord(2,-2)};

            List <XYZ> pts = VertexPoints(nurbsTr.Origin, pointsCoordinates, vertPlane);

            XYZ pt1 = nurbsTr.Origin;
            XYZ pt2 = pt1 + vertPlane.XVec * 5;
            XYZ pt3 = pt2 + vertPlane.YVec * 2 + vertPlane.XVec * 2;
            XYZ pt4 = pt3 - vertPlane.XVec * 12;
            XYZ pt5 = pt4 - vertPlane.YVec * 2 + vertPlane.XVec * 2;



            Line l1 = Line.CreateBound(pt1, pt2);
            Line l2 = Line.CreateBound(pt2, pt3);
            Line l3 = Line.CreateBound(pt3, pt4);
            Line l4 = Line.CreateBound(pt4, pt5);
            Line l5 = Line.CreateBound(pt5, pt1);
            //
            //			var profileLoop = CurveLoop.Create(new List<Curve>{l1, l2, l3, l4, l5});

            var profileLoop = LoopPoints(pts);

            //double rotAngle = -2.543 * Math.PI / 180;
            double rotAngle  = -15 * Math.PI / 180;
            var    transform = Transform.CreateRotationAtPoint(nurbsTr.BasisX, rotAngle, nurbsTr.Origin);

            profileLoop.Transform(transform);

            var loops = new List <CurveLoop> {
                profileLoop
            };

            var path = CurveLoop.Create(new List <Curve> {
                nurbSpline
            });

            WireframeBuilder builder = new WireframeBuilder();

            builder.AddCurve(nurbSpline);


            //Solid solid = GeometryCreationUtilities.CreateSweptGeometry(path,0,nurbSpline.GetEndParameter(0),loops);
            Solid solid = GeometryCreationUtilities.CreateFixedReferenceSweptGeometry(path, 0, nurbSpline.GetEndParameter(0), loops, XYZ.BasisZ);


            using (Transaction t = new Transaction(doc, "create spline"))
            {
                t.Start();

                ElementId categoryId = new ElementId(BuiltInCategory.OST_Floors);

                DirectShape ds = DirectShape.CreateElement(doc, categoryId);

                ds.SetShape(builder);

                ds.Name = "RhinoSpline";

                SketchPlane sp = SketchPlane.Create(doc, vertPlane);
                uidoc.ActiveView.SketchPlane = sp;

                //uidoc.ActiveView.ShowActiveWorkPlane();

                ModelLine line1 = doc.Create.NewModelCurve(l1, sp) as ModelLine;
                ModelLine line2 = doc.Create.NewModelCurve(l2, sp) as ModelLine;
                ModelLine line3 = doc.Create.NewModelCurve(l3, sp) as ModelLine;
                ModelLine line4 = doc.Create.NewModelCurve(l4, sp) as ModelLine;
                ModelLine line5 = doc.Create.NewModelCurve(l5, sp) as ModelLine;

                List <GeometryObject> gs = new List <GeometryObject>();
                gs.Add(solid);

                //DirectShape directShape = DirectShape.CreateElement(doc, categoryId);
                ds.AppendShape(gs);

                t.Commit();
            }

            return(Result.Succeeded);
        }
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            _uiapp = commandData.Application;
            _uidoc = _uiapp.ActiveUIDocument;
            _doc   = _uidoc.Document;

            // TODO : Extract GetAllStructuralLevels the methode
            _strLevels =
                (from l in new FilteredElementCollector(_doc)
                 .OfClass(typeof(Level))
                 where l.GetEntitySchemaGuids().Count != 0
                 select l)
                .Cast <Level>()
                .OrderBy(l => l.Elevation)
                .ToList();

            if (_strLevels.Count == 0)
            {
                TaskDialog.Show("Revit", "Configurer les niveaux structuraux avant de lancer cette commande.");
                return(Result.Cancelled);
            }

            BeamCreationForm form = new BeamCreationForm();

            if (form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                _axeIsOnArchView = form.AxeIsOnArchView;
            }
            else
            {
                return(Result.Cancelled);
            }

            Transaction t = new Transaction(_doc);

            // Get all the model lines created by plugin
            IList <CurveElement> lines =
                (from line in new FilteredElementCollector(_doc)
                 .OfClass(typeof(CurveElement))
                 .OfCategory(BuiltInCategory.OST_Lines)
                 .Cast <CurveElement>()
                 where (line as ModelLine) != null && line.GetEntitySchemaGuids().Count != 0
                 select line)
                .ToList();
            BeamFamily beamFamily = new BeamFamily(_doc);

            t.Start("Create beams");
            foreach (CurveElement line in lines)
            {
                ModelLine modelLine = line as ModelLine;

                bool modelLineOnLevel = GetLevel(modelLine, out Level level);

                GetParameterFromEntity(
                    modelLine,
                    out string beamSign,
                    out double beamHeight,
                    out double beamWidth,
                    out ElementId beamId);

                if (!modelLineOnLevel)
                {
                    continue;
                }

                if (LineHasRelativeBeam(modelLine, beamSign, beamHeight, beamWidth, beamId))
                {
                    continue;
                }
                // TODO : Material should be choosed when creat model line
                FamilySymbol beamType = beamFamily.GetBeamFamilyTypeOrCreateNew(beamSign, "Béton25", beamHeight, beamWidth);

                ElementId newBeamId = PlaceBeam(line, level, beamType);

                SetBeamIdToModelLine(newBeamId, modelLine).ToString();
            }
            t.Commit();
            return(Result.Succeeded);
        }