public partial class ThisApplication
{
public void GetFaceUniversal()
{
//Получение активного документа
UIApplication App=this.ActiveUIDocument.Application;
Autodesk.Revit.DB.Document doc = App.ActiveUIDocument.Document; //Получаем активный документ
Autodesk.Revit.UI.UIDocument uidoc = App.ActiveUIDocument; //Получаем активный uiдокумент
Selection choices = uidoc.Selection;
FaceFilter filter=new FaceFilter(doc);
Reference faceRef=choices.PickObject(ObjectType.PointOnElement,filter);
if(faceRef!=null)
{
Element elem = doc.GetElement(faceRef);
if(elem!=null)
{
if(elem is RevitLinkInstance)
{
RevitLinkInstance ri = elem as RevitLinkInstance;
Document docLinked = ri.GetLinkDocument();
Reference linkedref=faceRef.CreateReferenceInLink();
if(linkedref!=null)
{
Element linkedelement = docLinked.GetElement(linkedref);
var faceLink = linkedelement.GetGeometryObjectFromReference(linkedref);
if(faceLink!=null)
{
TaskDialog.Show("Info",faceLink.GetType().Name+" Имя документа: "+linkedelement.Document.PathName);
}
}
}
else
{
var face = elem.GetGeometryObjectFromReference(faceRef);
if(face!=null)
{
TaskDialog.Show("Info",face.GetType().Name+" Имя документа: "+elem.Document.PathName);
}
}
}
}
}
}
public class FaceFilter : ISelectionFilter
{
public bool AllowElement(Element element)
{
return true;
}
public bool AllowReference(Reference refer, XYZ point)
{
if(refer.ElementReferenceType== ElementReferenceType.REFERENCE_TYPE_SURFACE)
{
return true;
}
return false;
}
}