Создать PointCloudInstance по общим координатам

Автор Тема: Создать PointCloudInstance по общим координатам  (Прочитано 4796 раз)

0 Пользователей и 2 Гостей просматривают эту тему.

Оффлайн KsarrikАвтор темы

  • ADN OPEN
  • Сообщений: 39
  • Карма: 2
Добрый день. Появилась необходимость вставки облака точек в модель по общим координатам, к сожалению метод Create() не принимает параметр ImportPlacement, чтобы задать координаты создания элемента в отличии от аналогичного метода в классе RevitLinkInstance. Хотя если вставлять облако точек средствами Revit, выбор вставки по общим координатам присутствует. Есть ли какое-то решение?

Отмечено как Решение Ksarrik 05-03-2022, 14:07:19

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Могу где-то ошибаться, но я бы попробовал примерно так:
Код - C# [Выбрать]
  1. var surveyPoint = BasePoint.GetSurveyPoint(doc);
  2.  
  3. var transform = Transform.Identity;
  4. transform.Origin = surveyPoint.Position;
  5.  
  6. PointCloudInstance.Create(doc, pointCloudTypeId, transform);

Оффлайн KsarrikАвтор темы

  • ADN OPEN
  • Сообщений: 39
  • Карма: 2
Спасибо

Оффлайн KsarrikАвтор темы

  • ADN OPEN
  • Сообщений: 39
  • Карма: 2
В дополнение к ответу, оказалось что вставка по общим координатам, это еще поворот на угол истинного севера. Удалось решить следующим кодом, возможно кому-нибудь пригодится:
Код - C# [Выбрать]
  1.                     //получаем точки проекта
  2.                     BasePoint surveyPoint = BasePoint.GetSurveyPoint(doc);
  3.                     BasePoint projectPoint = BasePoint.GetProjectBasePoint(doc);
  4.                     if (surveyPoint != null && projectPoint != null)
  5.                     {
  6.                         Transform transform = null;
  7.  
  8.                         //поворачиваем под углом истинного севера
  9.                         double angleTrueNorth = projectPoint?.get_Parameter(BuiltInParameter.BASEPOINT_ANGLETON_PARAM)?.AsDouble() ?? double.NaN;
  10.                         if (!double.IsNaN(angleTrueNorth))
  11.                         {
  12.                             XYZ axis = new XYZ(0, 0, 1);
  13.                             transform = Transform.CreateRotation(axis, angleTrueNorth);
  14.                         }
  15.                         else
  16.                         {
  17.                             transform = Transform.Identity;
  18.  
  19.                         }
  20.  
  21.                         if (transform != null)
  22.                         {
  23.                             transform.Origin = surveyPoint.Position;//задаем точку вставки
  24.                             PointCloudInstance instance = PointCloudInstance.Create(doc, typeCloud.Id, transform);                          
  25.                         }
  26.  

Оффлайн Александр Игнатович

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Вот точно, да, про поворот у меня что-то из головы вылетело :-) Спасибо!