Message 1 of 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I'm trying to determine the origin and normal of a FamilyInstance which has a family with a plane with "Strong Reference". The purpose is to place another familyInstance in such a way that it lies along plane and another reference plane.
The loop runs as many times as there are strongReference planes.
My code is below:
public void GetReferencePlanes(string selectedElementGuid)
{
var doc = uiApplication.ActiveUIDocument.Document;
if (doc.GetElement(selectedElementGuid) is not FamilyInstance familyInstance) { return; }
var instanceGeometry = familyInstance.get_Geometry(new Options() { ComputeReferences = true, });
var references = familyInstance.GetReferences(FamilyInstanceReferenceType.StrongReference);
foreach (var reference in references)
{
var f = doc.GetElement(reference).GetGeometryObjectFromReference(reference);
if (doc.GetElement(reference.ElementId) is not { } referencedElement) { continue; }
//get stable reference
var stableReference = reference.ConvertToStableRepresentation(doc);
var referencedElementType = referencedElement.GetType();
var guid = referencedElement.UniqueId;
var geometryObject = doc.GetElement(reference).GetGeometryObjectFromReference(reference);
//var somePlanarGeometry = familyInstance.GetGeometryObjectFromReference(reference) as PlanarFace; //null
var geometryType = geometryObject.GetType(); //always returns "Autodesk.Revit.DB.GeometryObject"
switch (geometryObject) //none of these are ever hit
{
case Curve curve: Debugger.Break(); break;
case Edge edge: Debugger.Break(); break;
case Face face: Debugger.Break(); break;
case GeometryElement geometryElement: Debugger.Break(); break;
case GeometryInstance geometryInstance: Debugger.Break(); break;
case Mesh mesh: Debugger.Break(); break;
case Point point: Debugger.Break(); break;
case PolyLine polyLine: Debugger.Break(); break;
case Profile profile: Debugger.Break(); break;
case Solid solid: Debugger.Break(); break;
default: break;
}
Debugger.Break();
}
}
Solved! Go to Solution.