Hi, here is an all-in-one answer, very inspired by Mr. Poupin’s code from the following message:
Script
import sys
import clr
#Very inspired by Mr. Poupin's code from the following message
#https://forum.dynamobim.com/t/get-element-from-faces/56495/10
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *
from Autodesk.Revit.UI.Selection import *
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
uidoc = uiapp.ActiveUIDocument
clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
commutateur=IN[0]
if commutateur:
TaskDialog.Show("Select one Face on Revit", "Select the Face on Revit")
ref = uidoc.Selection.PickObject(ObjectType.Face, "select the Face")
elt = doc.GetElement(ref)
face = elt.GetGeometryObjectFromReference(ref)
surface_dynamo = face.ToProtoType()
out={"Surface_Dynamo":surface_dynamo[0],"NumId":elt.Id.IntegerValue}
else:
out="Wait true on commutateur"
OUT = out
Sincerely
christian.stan