EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

萧闫子 发表于 2014-1-15 13:25:58

判断一个柱子是圆柱还是矩形柱的代码

下面这段代码用来判断柱子的形状。提取柱子的几何形状,看看所有的面,如果有一个面是CylindricalFace,那么其就是圆形柱子。(本命令只适用与判断是矩形柱还是圆形柱)。可以看看如何访问对象的几何信息

view plaincopyusing System;using System.Collections.Generic;using System.Text;using System.Windows.Forms;usingAutodesk.Revit .DB;using Autodesk.Revit.UI;using Autodesk.Revit .ApplicationServices;using Autodesk.Revit.Attributes ;using Autodesk.Revit.UI.Selection;public class RevitCommand : IExternalCommand{    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)    {      UIApplication app = commandData.Application;      Document doc = app.ActiveUIDocument.Document;      Transaction trans = new Transaction(doc, "ExComm");      trans.Start();      Selection sel = app.ActiveUIDocument.Selection;      Reference ref1 = sel.PickObject(ObjectType.Element, "Please pick a column to get its shape");      Element elem = doc.GetElement(ref1);      FamilyInstance column = elem as FamilyInstance;      //read its geometry      Options options = app.Application.Create.NewGeometryOptions();      GeometryElement geoElement = column.get_Geometry(options);      bool bRound = false;      Solid solid;      foreach (GeometryObject geoObj in geoElement.Objects)      {      if (geoObj is Solid)      {          solid = geoObj as Solid;          if (solid.Faces.Size > 1)          {               bRound = IsAnyCylinderFace(ref solid);                      }          if (true == bRound)            break;      }      else if (geoObj is GeometryInstance)      {          GeometryInstance geoInstance = geoObj as GeometryInstance;          GeometryElement geoElem1 = geoInstance.GetSymbolGeometry();          if (geoElem1.Objects.Size > 1)          {            foreach (GeometryObject geoObj1 in geoElem1.Objects)            {            if (geoObj1 is Solid && geoObj1 != null)            {                solid = geoObj1 as Solid;                if (solid.Faces.Size > 1)                {                  bRound = IsAnyCylinderFace(ref solid);                                  }                if (true == bRound)                  break;            }            }          }      }      }                  TaskDialog.Show("column section shape", bRound.ToString());               trans.Commit();            return Result.Succeeded ;    }    bool IsAnyCylinderFace(ref Solid solid)    {      bool bRound = false;      foreach (Face face in solid.Faces)      {      if (face is CylindricalFace)      {          bRound = true;          break;      }               }      return bRound;    }}作者:叶雄进文章来源:http://blog.csdn.net/joexiongjin/article/category/782739


卡巴kala 发表于 2014-2-20 14:10:39

路过!!!
不发表意见……

页: [1]
查看完整版本: 判断一个柱子是圆柱还是矩形柱的代码