• Revit api 创建楼梯图元


      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Threading.Tasks;
      6 using Autodesk.Revit.Attributes;
      7 using Autodesk.Revit.DB;
      8 using Autodesk.Revit.UI;
      9 using Autodesk.Revit.DB.Architecture;
     10 
     11 
     12 namespace CreateStairs
     13 {
     14     [Transaction(TransactionMode.Manual)]
     15     public class Class1:IExternalCommand
     16     {
     17         public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
     18         {
     19             Document doc = commandData.Application.ActiveUIDocument.Document;
     20             Transaction trans = new Transaction(doc,"new level");
     21             trans.Start();
     22             Level blvl = Level.Create(doc, 0);
     23             Level tlvl = Level.Create(doc, 2);
     24             trans.Commit();
     25             CreateStairs(doc, blvl, tlvl);
     26             return Result.Succeeded;
     27         }
     28         private ElementId CreateStairs(Document document, Level levelBottom, Level levelTop)
     29         {
     30             ElementId newStairsId = null;
     31             using (StairsEditScope newStairsScope = new StairsEditScope(document, "New Stairs"))
     32             {
     33                 newStairsId = newStairsScope.Start(levelBottom.Id, levelTop.Id);
     34                 using (Transaction stairsTrans = new Transaction(document, "Add Runs and Landings to Stairs"))
     35                 {
     36                     stairsTrans.Start();
     37 
     38                     // Create a sketched run for the stairs
     39                     IList<Curve> bdryCurves = new List<Curve>();
     40                     IList<Curve> riserCurves = new List<Curve>();
     41                     IList<Curve> pathCurves = new List<Curve>();
     42                     XYZ pnt1 = new XYZ(0, 0, 0);
     43                     XYZ pnt2 = new XYZ(15, 0, 0);
     44                     XYZ pnt3 = new XYZ(0, 10, 0);
     45                     XYZ pnt4 = new XYZ(15, 10, 0);
     46                     // boundaries       
     47                     bdryCurves.Add(Line.CreateBound(pnt1, pnt2));
     48                     bdryCurves.Add(Line.CreateBound(pnt3, pnt4));
     49                     // riser curves
     50                     const int riserNum = 20;
     51                     for (int ii = 0; ii <= riserNum; ii++)
     52                     {
     53                         XYZ end0 = (pnt1 + pnt2) * ii / (double)riserNum;
     54                         XYZ end1 = (pnt3 + pnt4) * ii / (double)riserNum;
     55                         XYZ end2 = new XYZ(end1.X, 10, 0);
     56                         riserCurves.Add(Line.CreateBound(end0, end2));
     57                     }
     58 
     59                     //stairs path curves
     60                     XYZ pathEnd0 = (pnt1 + pnt3) / 2.0;
     61                     XYZ pathEnd1 = (pnt2 + pnt4) / 2.0;
     62                     pathCurves.Add(Line.CreateBound(pathEnd0, pathEnd1));
     63                     StairsRun newRun1 = StairsRun.CreateSketchedRun(document, newStairsId, levelBottom.Elevation, bdryCurves, riserCurves, pathCurves);
     64                     // Add a straight run
     65                     Line locationLine = Line.CreateBound(new XYZ(20, -5, newRun1.TopElevation), new XYZ(35, -5, newRun1.TopElevation));
     66                     StairsRun newRun2 = StairsRun.CreateStraightRun(document, newStairsId, locationLine, StairsRunJustification.Center);
     67                     newRun2.ActualRunWidth = 10;
     68                     // Add a landing between the runs
     69                     CurveLoop landingLoop = new CurveLoop();
     70                     XYZ p1 = new XYZ(15, 10, 0);
     71                     XYZ p2 = new XYZ(20, 10, 0);
     72                     XYZ p3 = new XYZ(20, -10, 0);
     73                     XYZ p4 = new XYZ(15, -10, 0);
     74                     Line curve_1 = Line.CreateBound(p1, p2);
     75                     Line curve_2 = Line.CreateBound(p2, p3);
     76                     Line curve_3 = Line.CreateBound(p3, p4);
     77                     Line curve_4 = Line.CreateBound(p4, p1);
     78                     landingLoop.Append(curve_1);
     79                     landingLoop.Append(curve_2);
     80                     landingLoop.Append(curve_3);
     81                     landingLoop.Append(curve_4);
     82                     StairsLanding newLanding = StairsLanding.CreateSketchedLanding(document, newStairsId, landingLoop, newRun1.TopElevation);
     83                     stairsTrans.Commit();
     84                 }
     85                 // A failure preprocessor is to handle possible failures during the edit mode commitment process.
     86                 newStairsScope.Commit(new FailuresPreprocessor());//new StairsFailurePreprocessor());
     87             }
     88             return newStairsId;
     89         }
     90 
     91     }
     92     public class FailuresPreprocessor : IFailuresPreprocessor
     93     {
     94         public FailureProcessingResult PreprocessFailures(FailuresAccessor failuresAccessor)
     95         {
     96             IList<FailureMessageAccessor> listFma = failuresAccessor.GetFailureMessages();
     97             if (listFma.Count == 0)
     98                 return FailureProcessingResult.Continue;
     99             foreach (FailureMessageAccessor fma in listFma)
    100             {
    101                 if (fma.GetSeverity() == FailureSeverity.Error)
    102                 {
    103                     if (fma.HasResolutions())
    104                         failuresAccessor.ResolveFailure(fma);
    105                 }
    106                 if (fma.GetSeverity() == FailureSeverity.Warning)
    107                 {
    108                     failuresAccessor.DeleteWarning(fma);
    109                 }
    110             }
    111             return FailureProcessingResult.ProceedWithCommit;
    112         }
    113     }
    114 }
  • 相关阅读:
    点击鼠标后系统自动生成对应消息
    mfc 鼠标、键盘响应事件
    VC中键盘键的对应关系
    补充知识及数据类型
    Python入门
    tomcat启动报错
    正则表达式
    MySQL修改root密码的方法
    mysql 压缩包免安装版 安转步骤
    springmvc--json--返回json的日期格式问题
  • 原文地址:https://www.cnblogs.com/laoxia/p/8231854.html
Copyright © 2020-2023  润新知