Revit API获取几何信息 - 墙的底面面积

通过 element.get_Geometry(opt);可以获取对象的几何信息。
参数Option指定参数的限制条件,比如详细程度,哪个视图。
获得的几何信息保存在一个数组中,可以通过遍历得到点,面等信息。
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Text;

using  WinForm  =  System.Windows.Forms;

using  Autodesk.Revit.UI;
using  Autodesk.Revit.DB;
using  Autodesk.Revit.Attributes;

using  Autodesk.Revit.DB.Mechanical;
using  Autodesk.Revit.UI.Selection;
using  Autodesk.Revit.ApplicationServices;

using  Autodesk.Revit.DB.Structure;

using  System.Xml;

namespace  RevitCodes
{
    [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    
public   class  GetWallBFace : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData commandData,  ref   string  messages, ElementSet elements)
        {

            UIApplication app 
=  commandData.Application;
            Document doc 
=  app.ActiveUIDocument.Document;

            
// select a wall      
            Reference ref1  =  app.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element,  " Please pick a wall " );
            Element elem 
=  doc.GetElement(ref1);
            Wall wall 
=  elem  as  Wall;

            Options opt 
=   new  Options();
            opt.ComputeReferences 
=   true ;
            opt.DetailLevel 
=  Autodesk.Revit.DB.DetailLevels.Medium;

            GeometryElement e 
=  wall.get_Geometry(opt);

            
foreach  (GeometryObject obj  in  e.Objects)
            {
                Solid solid 
=  obj  as  Solid;
                
if  (solid  !=   null   &&  solid.Faces.Size  >   0 )
                    FindBottomFace(solid);
            }

            
return  Result.Succeeded;
        }

        Face FindBottomFace(Solid solid)
        {
            PlanarFace pf 
=   null ;
            
foreach  (Face face  in  solid.Faces)
            {
                pf 
=  face  as  PlanarFace;
                
if  ( null   !=  pf)
                {
                    
if  (Math.Abs(pf.Normal.X)  <   0.01   &&  Math.Abs(pf.Normal.Y)  <   0.01   &&  pf.Normal.Z  <   0 )
                    {
                        TaskDialog.Show(
" Wall Bottom Face " " Area is  "   +  pf.Area.ToString()  +   " ; Origin = ( "   +  pf.Origin.X.ToString()  +   "    "   +  pf.Origin.Y.ToString()  +   "    "   +  pf.Origin.Z.ToString()  +   " ) " );

                        
break ;
                    }
                }
            }
            
return  pf;
        }

    }


    [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    
public   class  GetColumnBottomFace : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData commandData,  ref   string  messages, ElementSet elements)
        {

            UIApplication app 
=  commandData.Application;
            Document doc 
=  app.ActiveUIDocument.Document;

            
// select a column      
            Reference ref1  =  app.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element,  " Please pick a column " );
            Element elem 
=  doc.GetElement(ref1);
            FamilyInstance column 
=  elem  as  FamilyInstance;

            Options opt 
=   new  Options();
            opt.ComputeReferences 
=   true ;
            opt.DetailLevel 
=  Autodesk.Revit.DB.DetailLevels.Medium;

            GeometryElement e 
=  column.get_Geometry(opt);

            
foreach  (GeometryObject obj  in  e.Objects)
            {

                
if  (obj  is  Solid)
                {
                    Solid solid 
=  obj  as  Solid;
                    FindBottomFace(solid);
                }
                
else   if  (obj  is  GeometryInstance)
                {
                    GeometryInstance geoInstance 
=  obj  as  GeometryInstance;
                    GeometryElement geoElement 
=  geoInstance.GetInstanceGeometry();
                    
foreach  (GeometryObject obj2  in  geoElement.Objects)
                    {
                        
if  (obj2  is  Solid)
                        {
                            Solid solid2 
=  obj2  as  Solid;
                            
if  (solid2.Faces.Size  >   0 )
                                FindBottomFace(solid2);
                        }
                    }
                }
            }
            
return  Result.Succeeded;
        }

        Face FindBottomFace(Solid solid)
        {
            PlanarFace pf 
=   null ;
            
foreach  (Face face  in  solid.Faces)
            {
                pf 
=  face  as  PlanarFace;
                
if  ( null   !=  pf)
                {
                    
if  (Math.Abs(pf.Normal.X)  <   0.01   &&  Math.Abs(pf.Normal.Y)  <   0.01   &&  pf.Normal.Z  <   0 )
                    {
                        TaskDialog.Show(
" column Bottom Face " " Area is  "   +  pf.Area.ToString()  +   " ; Origin = ( "   +  pf.Origin.X.ToString()  +   "    "   +  pf.Origin.Y.ToString()  +   "    "   +  pf.Origin.Z.ToString()  +   " ) " );

                        
break ;
                    }
                }
            }
            
return  pf;
        }

    }

    [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    
public   class  GetWallBottomFace : IExternalCommand
    {
        
public  Result Execute(ExternalCommandData commandData,  ref   string  messages, ElementSet elements)
        {
            UIApplication app 
=  commandData.Application;
            Document doc 
=  app.ActiveUIDocument.Document;

            
// select a wall
            Reference ref1  =  app.ActiveUIDocument.Selection.PickObject(Autodesk.Revit.UI.Selection.ObjectType.Element,  " Pick a wall " );
            Element elem 
=  doc.GetElement(ref1);
            Wall wall 
=  elem  as  Wall;

            Options opt 
=   new  Options();
            opt.ComputeReferences 
=   true ;
            opt.DetailLevel 
=  Autodesk.Revit.DB.DetailLevels.Medium;

            GeometryElement e 
=  wall.get_Geometry(opt);
            
foreach  (GeometryObject obj  in  e.Objects)
            {
                Solid solid 
=  obj  as  Solid;
                
if  (solid  !=   null   &&  solid.Faces.Size  >   0 )
                {
                    FindBottomFaces(solid);
                }
            }

            
return  Result.Succeeded;
        }

        Face FindBottomFaces(Solid solid)
        {
            PlanarFace pf 
=   null ;
            
foreach  (Face face  in  solid.Faces)
            {
                pf 
=  face  as  PlanarFace;
                
if  ( null   !=  pf)
                {
                    
if  (Math.Abs(pf.Normal.X)  <   0.01   &&  Math.Abs(pf.Normal.Y)  <   0.01   &&  pf.Normal.Z  <   0 )
                    {
                        TaskDialog.Show(
" the bottom face's area is  " , pf.Area.ToString());
                    }
                }
            }
            
return  pf;
        }
    }
}
from: http://revit.5d6d.com/thread-1285-1-1.html

转载于:https://www.cnblogs.com/greatverve/archive/2011/10/17/revit-api-get-Geometry.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值