static private XYZ GetOffset(FamilyInstance familyInstance, XYZ locationPoint)
{
GeometryInstance geometryInstance = null;
BoundingBoxXYZ geometryElementBoundingBox = null;
BoundingBoxXYZ geometrySymbolBoundingBox = null;
var offset = XYZ.Zero;
if (familyInstance.get_Geometry(new Options() { ComputeReferences = false, IncludeNonVisibleObjects = false }) is GeometryElement geometryElement)
{
foreach (GeometryObject obj in geometryElement)
{
geometryElementBoundingBox = geometryElement.GetBoundingBox();
_bbmin = geometryElementBoundingBox.Min;
_bbmax = geometryElementBoundingBox.Max;
geometryInstance = obj as GeometryInstance;
}
if (geometryInstance != null)
{
foreach (GeometryInstance obj in geometryElement)
{
var symbolGeometry = obj.GetSymbolGeometry();
symbolGeometry = symbolGeometry.GetTransformed(_transform);
geometrySymbolBoundingBox = symbolGeometry.GetBoundingBox();
_bbmin = geometrySymbolBoundingBox.Min;
_bbmax = geometrySymbolBoundingBox.Max;
}
}
if (geometrySymbolBoundingBox != null)
{
var bbCenterPoint = new XYZ((geometrySymbolBoundingBox.Min.X + geometrySymbolBoundingBox.Max.X) / 2, (geometrySymbolBoundingBox.Min.Y + geometrySymbolBoundingBox.Max.Y) / 2, geometrySymbolBoundingBox.Min.Z);
offset = bbCenterPoint - locationPoint;
}
}
return offset;
}