public override Value Evaluate(FSharpList <Value> args) { var faceRef = ((Value.Container)args[0]).Item as Reference; var uv = (UV)((Value.Container)args[1]).Item; Transform t = Transform.Identity; Autodesk.Revit.DB.Face f = (faceRef == null) ? ((Autodesk.Revit.DB.Face)((Value.Container)args[0]).Item) : (dynRevitSettings.Doc.Document.GetElement(faceRef.ElementId).GetGeometryObjectFromReference(faceRef) as Autodesk.Revit.DB.Face); if (f != null) { t = f.ComputeDerivatives(uv); t.BasisX = t.BasisX.Normalize(); t.BasisZ = t.BasisZ.Normalize(); t.BasisY = t.BasisX.CrossProduct(t.BasisZ); } return(Value.NewContainer(t)); }