public static IEnumerable <T> GetObjects <T>(this SelectionData selectionData, IModelDoc2 doc)
 {
     return(from o in selectionData.GetObjects(doc)
            select o.DirectCast <T>());
 }
 /// <summary>
 /// Gets an evaluator for the selected object. We return Func because if you return the solidworks
 /// object itself and store it you get burned by solidworks rebuilds when the object is invalidated.
 /// Only evaluate the function when you actually need the solidworks object. If the return value
 /// is None then it means that there is nothing selected.
 /// </summary>
 /// <param name="selectionData"></param>
 /// <param name="doc"></param>
 /// <returns></returns>
 public static Option <Func <object> > GetSingleObject(this SelectionData selectionData, IModelDoc2 doc) =>
 selectionData.IsEmpty
         ? Prelude.None
         : Prelude.Some(Prelude.fun(() => selectionData.GetObjects(doc).First()));