完善主體資料,免費贈送VIP會員!
    * 主體類型
    * 企業名稱
    * 信用代碼
    * 所在行業
    * 企業規模
    * 所在職位
    * 姓名
    * 所在行業
    * 學歷
    * 工作性質
    請先選擇行業
    您還可以選擇以下福利:
    行業福利,領完即止!

    下載app免費領取會員

    NULL

    ad.jpg

    二次開發教程:Revit開發樓梯創建

    發布于:2019-08-23 17:15:17

    網友投稿

    更多

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using Autodesk.Revit.Attributes;

    using Autodesk.Revit.DB;

    using Autodesk.Revit.UI;

    using Autodesk.Revit.DB.Architecture;



    namespace CreateStairs

    {

        [Transaction(TransactionMode.Manual)]

        public class Class1:IExternalCommand

        {

            public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)

            {

                Document doc = commandData.Application.ActiveUIDocument.Document;

                Transaction trans = new Transaction(doc,"new level");

                trans.Start();

                Level blvl = Level.Create(doc, 0);

                Level tlvl = Level.Create(doc, 2);

                trans.Commit();

                CreateStairs(doc, blvl, tlvl);

                return Result.Succeeded;

            }

            private ElementId CreateStairs(Document document, Level levelBottom, Level levelTop)

            {

                ElementId newStairsId = null;

                using (StairsEditScope newStairsScope = new StairsEditScope(document, "New Stairs"))

                {

                    newStairsId = newStairsScope.Start(levelBottom.Id, levelTop.Id);

                    using (Transaction stairsTrans = new Transaction(document, "Add Runs and Landings to Stairs"))

                    {

                        stairsTrans.Start();


                        // Create a sketched run for the stairs

                        IList<Curve> bdryCurves = new List<Curve>();

                        IList<Curve> riserCurves = new List<Curve>();

                        IList<Curve> pathCurves = new List<Curve>();

                        XYZ pnt1 = new XYZ(0, 0, 0);

                        XYZ pnt2 = new XYZ(15, 0, 0);

                        XYZ pnt3 = new XYZ(0, 10, 0);

                        XYZ pnt4 = new XYZ(15, 10, 0);

                        // boundaries       

                        bdryCurves.Add(Line.CreateBound(pnt1, pnt2));

                        bdryCurves.Add(Line.CreateBound(pnt3, pnt4));

                        // riser curves

                        const int riserNum = 20;

                        for (int ii = 0; ii <= riserNum; ii++)

                        {

                            XYZ end0 = (pnt1 + pnt2) * ii / (double)riserNum;

                            XYZ end1 = (pnt3 + pnt4) * ii / (double)riserNum;

                            XYZ end2 = new XYZ(end1.X, 10, 0);

                            riserCurves.Add(Line.CreateBound(end0, end2));

                        }


                        //stairs path curves

                        XYZ pathEnd0 = (pnt1 + pnt3) / 2.0;

                        XYZ pathEnd1 = (pnt2 + pnt4) / 2.0;

                        pathCurves.Add(Line.CreateBound(pathEnd0, pathEnd1));

                        StairsRun newRun1 = StairsRun.CreateSketchedRun(document, newStairsId, levelBottom.Elevation, bdryCurves, riserCurves, pathCurves);

                        // Add a straight run

                        Line locationLine = Line.CreateBound(new XYZ(20, -5, newRun1.TopElevation), new XYZ(35, -5, newRun1.TopElevation));

                        StairsRun newRun2 = StairsRun.CreateStraightRun(document, newStairsId, locationLine, StairsRunJustification.Center);

                        newRun2.ActualRunWidth = 10;

                        // Add a landing between the runs

                        CurveLoop landingLoop = new CurveLoop();

                        XYZ p1 = new XYZ(15, 10, 0);

                        XYZ p2 = new XYZ(20, 10, 0);

                        XYZ p3 = new XYZ(20, -10, 0);

                        XYZ p4 = new XYZ(15, -10, 0);

                        Line curve_1 = Line.CreateBound(p1, p2);

                        Line curve_2 = Line.CreateBound(p2, p3);

                        Line curve_3 = Line.CreateBound(p3, p4);

                        Line curve_4 = Line.CreateBound(p4, p1);

                        landingLoop.Append(curve_1);

                        landingLoop.Append(curve_2);

                        landingLoop.Append(curve_3);

                        landingLoop.Append(curve_4);

                        StairsLanding newLanding = StairsLanding.CreateSketchedLanding(document, newStairsId, landingLoop, newRun1.TopElevation);

                        stairsTrans.Commit();

                    }

                    // A failure preprocessor is to handle possible failures during the edit mode commitment process.

                    newStairsScope.Commit(new FailuresPreprocessor());//new StairsFailurePreprocessor());

                }

                return newStairsId;

            }


        }

        public class FailuresPreprocessor : IFailuresPreprocessor

        {

            public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)

            {

                IList<FailureMessageAccessor> listFma = failuresAccessor.GetFailureMessages();

                if (listFma.Count == 0)

                    return FailureProcessingResult.Continue;

                foreach (FailureMessageAccessor fma in listFma)

                {

                    if (fma.GetSeverity() == FailureSeverity.Error)

                    {

                        if (fma.HasResolutions())

                            failuresAccessor.ResolveFailure(fma);

                    }

                    if (fma.GetSeverity() == FailureSeverity.Warning)

                    {

                        failuresAccessor.DeleteWarning(fma);

                    }

                }

                return FailureProcessingResult.ProceedWithCommit;

            }

        }

    }


    本文版權歸腿腿教學網及原創作者所有,未經授權,謝絕轉載。

    未標題-1.jpg

    上一篇:二次開發教程:Revit開發將WPF的Ower設置為Revit窗體

    下一篇:二次開發教程:Revit開發通過API 創建族

    主站蜘蛛池模板: 亚洲综合国产一区二区三区| 国产高清在线精品一区二区| 国产乱子伦一区二区三区| 视频在线一区二区| 日韩精品无码免费一区二区三区| 一区二区视频免费观看| 韩国一区二区三区| 无码丰满熟妇一区二区| 91午夜精品亚洲一区二区三区 | 国产精品伦一区二区三级视频| 性色av无码免费一区二区三区 | 大帝AV在线一区二区三区| 无码视频一区二区三区在线观看 | 日本一区二区三区在线网| 日韩人妻无码一区二区三区久久| 中文字幕精品无码一区二区| 亚洲视频一区二区| asmr国产一区在线| 成人区人妻精品一区二区不卡网站 | 日本一区二区三区不卡在线视频 | 在线精品动漫一区二区无广告| 一区二区三区日本视频| 亚洲成人一区二区| 亚洲欧洲一区二区三区| 国产一区玩具在线观看| 国产日韩一区二区三区在线观看| 国产精华液一区二区区别大吗| 熟女少妇丰满一区二区| 无码一区二区三区视频| 在线视频一区二区| 久久久国产精品无码一区二区三区| 亚洲一区二区三区免费视频| 亚洲欧洲无码一区二区三区| 日本一区二区三区免费高清| 国产aⅴ一区二区三区| 国产精品小黄鸭一区二区三区 | 人妻无码视频一区二区三区| 色狠狠色狠狠综合一区| 日韩一区二区在线免费观看| 国产精品亚洲高清一区二区| 亚洲日本一区二区|