Revit Family API 找到实体某一方向上的面。

PlanarFace.Normal取得向量。IsAlmostEqualTo判断向量是否一致。
//  ===============================================================
//  helper function: given a solid, find a planar 
// Extrusion实体,给一个实体,给一个方向,找到与此方向一致的面。
//  face with the given normal (version 2)
//  this is a slightly enhaced version of the previous 
//  version and checks if the face is on the given reference plane.
//  ===============================================================
PlanarFace findFace(Application app, Extrusion pBox, XYZ normal, ReferencePlane refPlane)
{
     //  get the geometry object of the given element
    
//
    Options op =  new Options();
    op.ComputeReferences =  true;
    GeometryObjectArray geomObjs = pBox.get_Geometry(op).Objects;

     //  loop through the array and find a face with the given normal
    
//
     foreach (GeometryObject geomObj  in geomObjs)
    {
         if (geomObj  is Solid)   //  solid is what we are interested in.
        {
            Solid pSolid = geomObj  as Solid;
            FaceArray faces = pSolid.Faces;
             foreach (Face pFace  in faces)
            {
                PlanarFace pPlanarFace = (PlanarFace)pFace;
                 //  check to see if they have same normal
                
// face.Normal是面的向量。IsAlmostEqualTo();
                 if ((pPlanarFace !=  null) && pPlanarFace.Normal.IsAlmostEqualTo(normal))
                {
                     //  additionally, we want to check if the face is on the reference plane
                    
// 还要判断面是否在参考平面上。
                    XYZ p0 = refPlane.BubbleEnd; // 终点?
                    XYZ p1 = refPlane.FreeEnd; // 起点?
                    Line pCurve = app.Create.NewLineBound(p0, p1);
                     if (pPlanarFace.Intersect(pCurve) == SetComparisonResult.Subset) // 子集
                    {
                         return pPlanarFace;  //  we found the face
                    }
                }
            }
        }

         //  will come back later as needed.
        
//
        
// else if (geomObj is Instance)
        
// {
        
// }
        
// else if (geomObj is Curve)
        
// {
        
// }
        
// else if (geomObj is Mesh)
        
// {
        
// }
    }

     //  if we come here, we did not find any.
     return  null;
}
url: http://greatverve.cnblogs.com/p/revit-family-api-find-face.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值