1、定义枚举类型
public enum SpecialReferenceType
{
Left = 0,
CenterLR = 1,
Right = 2,
Front = 3,
CenterFB = 4,
Back = 5,
Bottom = 6,
CenterElevation = 7,
Top = 8
}
2、写获取参照的公用方法
public static Reference GetSpecialFamilyReference(Document doc, FamilyInstance instance, SpecialReferenceType ReferenceType)
{
Reference indexReference = null;
int index = (int)ReferenceType;
Options geomOptions = new Options();
geomOptions.ComputeReferences = true;
geomOptions.DetailLevel = ViewDetailLevel.Medium;
geomOptions.IncludeNonVisibleObjects = true;
GeometryElement geoElement = instance.get_Geometry(geomOptions);
foreach (GeometryObject obj in geoElement)
{
if (obj is GeometryInstance)
{
GeometryInstance geoInstance = obj as GeometryInstance;
String sampleStableRef = null;
if (geoInstance != null)
{
GeometryElement geoSymbol = geoInstance.GetSymbolGeometry();
if (geoSymbol != null)
{
foreach (GeometryObject geomObj in geoSymbol)
{
if (geomObj is Solid)
{
Solid solid = geomObj as Solid;
if (solid.Faces.Size > 0)
{
Face face = solid.Faces.get_Item(0);
sampleStableRef = face.Reference.ConvertToStableRepresentation(doc);
break;
}
}
}
}
if (sampleStableRef != null)
{
String[] refTokens = sampleStableRef.Split(new char[] { ':' });
String customStableRef = refTokens[0] + ":" + refTokens[1] + ":" + refTokens[2] + ":" + refTokens[3] + ":" + index.ToString();
indexReference = Reference.ParseFromStableRepresentation(doc, customStableRef);
}
break;
}
else
{
}
}
}
return indexReference;
}