public void BeamDimensioner()
{
Document doc = ActiveUIDocument.Document;
View view = ActiveUIDocument.ActiveView;
ZCatSelectionFilter beamFilter = new ZCatSelectionFilter(doc.Settings.Categories.get_Item(BuiltInCategory.OST_StructuralFraming));// structural framing selectionfilter
IList<Reference> refList = ActiveUIDocument.Selection.PickObjects(ObjectType.Element,beamFilter);
Line l = (((doc.GetElement(refList.First()) as FamilyInstance).Location as LocationCurve).Curve) as Line;
XYZ point1 = l.GetEndPoint(0);
XYZ point2 = point1.Subtract(l.Direction.CrossProduct(XYZ.BasisZ) );
Line line = Line.CreateBound(point1,point2);
ReferenceArray refArray = new ReferenceArray();
foreach (Reference r in refList)
{
FamilyInstance beam = doc.GetElement(r) as FamilyInstance;
Reference refer = (beam.Location as LocationCurve).Curve.Reference; //null
refArray.Append(refer);
}
using (Transaction tx = new Transaction(doc))
{
tx.Start("Add Dimensions");
Dimension dim = doc.Create.NewDimension(view,line,refArray);
tx.Commit();
}
}