Revit API. ReferenceIntersector с TopografySurfaces
Кто-нибудь знает, работает ли ReferenceIntersector с TopografySurfaces? Не могу заставить его работать. Мне нужно найти точку на поверхности, основанную на пересечении с линией.
1 ответ
Вы решили это? Если нет, я дал ему попробовать, и для меня этот Код здесь работает нормально:
public XYZ ProjectPointOnTopographySurface(XYZ point, int direction)
{
// For getting the 3D view
View3D view3D = new FilteredElementCollector(Document)
.OfClass(typeof(View3D))
.Cast<View3D>()
.Where(v => v.Name == "{3D}")
.FirstOrDefault();
XYZ vectorDirection = new XYZ(0, 0, direction);
ElementClassFilter intersectionFilter = new ElementClassFilter(typeof(TopographySurface));
ReferenceIntersector referenceIntersector = new ReferenceIntersector(intersectionFilter, FindReferenceTarget.All, view3D);
ReferenceWithContext referenceWithContext = referenceIntersector.FindNearest(point, vectorDirection);
return referenceWithContext.GetReference().GlobalPoint;
}
Независимо от того, ReferenceIntersector
работает или не работает с поверхностями топографии, вы можете довольно легко решить проблему, которую вы описываете, используя другие средства. Просто спросите поверхность для ее мозаичного представления. Это вернет кучу треугольников. Затем реализуйте свой собственный алгоритм пересечения треугольника с линией. Это должно дать вам все, что вам нужно, правда.