Существуют ли секреты получения геометрической информации для базовой плоскости или сетки Revit?

#c# #revit-api

#c# #revit-api

Вопрос:

Я работаю над кодом для использования элементов из нескольких разных категорий Revit, чтобы найти две конечные точки для использования в качестве виртуальной плоскости «обрезки / расширения». У меня это работает для линий деталей и структурного обрамления……

 switch (Ref_Plane_Category){
    case "Lines": {
                LocationCurve xloc = Ref_Plane.Location as LocationCurve;
                End3 = xloc.Curve.GetEndPoint(0);
                End4 = xloc.Curve.GetEndPoint(1); break;
    }
    case "Structural Framing": {
                Options options = new Options();
                AnalyticalModel xmodel = Ref_Plane.GetAnalyticalModel();
                Curve xcurve = xmodel.GetCurve();
                End3 = xcurve.GetEndPoint(0); End4 = xcurve.GetEndPoint(1); break;
    }
  

Однако, когда я использую аналогичные методы для сеток и базовых плоскостей, Revit выдает ошибки (обычно «Ссылка на объект не установлена для экземпляра объекта»). Я исследовал «Snoop», но не кажется очевидным, как добраться до перечисленных значений, которые находятся внутри вкладок, таких как «Plane». Кто-нибудь знает, как я получаю доступ к подобной информации (например, к ЛЮБЫМ двум точкам на сетке или базовой плоскости)? В настоящее время я обхожу извлеченные точки и использую….

 case "Grids": {

                ObjectSnapTypes Snapper = ObjectSnapTypes.Nearest | ObjectSnapTypes.Endpoints;
                End3 = m_doc.Selection.PickPoint(Snapper, "Pick One Point On Grid");
                ObjectSnapTypes Snappur = ObjectSnapTypes.Endpoints | ObjectSnapTypes.Nearest;
                End4 = m_doc.Selection.PickPoint(Snappur, "Pick Another Point On Grid"); break;
}
  

…..но было бы намного лучше найти полезные точки напрямую.

Ответ №1:

Базовые плоскости не имеют конечных точек. На холсте при их создании они это делают, но объект теоретически бесконечен… Вероятно, поэтому вы не можете получить конечную точку программно. То же самое относится и к сеткам. Хотя в упомянутом здесь дополнении есть инструмент, который создает 3D-сетки, поэтому он должен откуда-то получать конечную точку.

Сетки и базовые плоскости имеют как 2D, так и 3D компонент. Возможно, поиск в этом направлении что-то даст. Я осмотрюсь, когда смогу получить доступ к своему рабочему столу.