Изменение положения концов уровней и осей

Автор Тема: Изменение положения концов уровней и осей  (Прочитано 7179 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Новичек в Revit API. И вопрос соответствующий.
По примерам освоил рисование осей и уровней - все, вроде, получается, но: если я могу задавать точки конца и начала осей в плане, то при просмотре модели с фасада, ось (ее начало и конец) отображается как-то самостоятельно, без моего участия...
С уровнями еще непонятней. Тут нет возможности даже и ввести координаты отображения уровня, (ну по примерам так получается). Дело в том, что мне, в итоге, на одном виде надо получить несколько групп уровней, и чтоб они не смешивались друг с другом.
Вопрос. Каким образом я могу управлять этими точками концов отображаемого уровня? То же и по осям. Как менять точки отображаемой части оси на одном виде, если ось создавалась на другом?

Оффлайн Дмитрий Дронов

  • ADN OPEN
  • Сообщений: 20
  • Карма: 3
  • Finder
А что хоть за примеры? Покажите ссылку пожалуйста.
И скриншоты.
Так понимаю нужно копать в сторону "переход к 2D границе"
« Последнее редактирование: 29-09-2015, 01:10:40 от Дмитрий Дронов »

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
А что хоть за примеры? Покажите ссылку пожалуйста.
И скриншоты.
Так понимаю нужно копать в сторону "переход к 2D границе"


Лучше пока отдельно про уровни
Какие примеры? например из SDK… По поводу уровней, например,
c:\Revit 2015 SDK\Samples\LevelsProperty\
там есть и создание уровня и изменение его свойств… но речь там идет только про три свойства:
name, elevation, ID.
Код - C# [Выбрать]
  1.         public void CreateLevel(String levelName, double levelElevation)
  2.         {
  3.             Level newLevel = m_revit.Application.ActiveUIDocument.Document.Create.NewLevel(levelElevation);
  4.             Parameter elevationPara = newLevel.get_Parameter(BuiltInParameter.LEVEL_ELEV);
  5.             elevationPara.SetValueString(levelElevation.ToString());
  6.  
  7.             newLevel.Name = levelName;
  8.         }
  9.  
Подозреваю, что то, что мне нужно, а именно отображение самой линии уровня на экране находится в каких-то других свойствах. Вот в каких? четко про конечные точки данной линии там ничего не нашел... а че-то их (свойств) там очень много, чтобы искать методом "тыка"...
скриншоты во вложениях:
приложение лепит по умолчанию все уровни в кучку слева, а надо бы разнести на несколько групп в данном случае по оси Х.


НА ЗАБЫВАЕМ ФОРМАТИРОВАТЬ КОД
« Последнее редактирование: 29-09-2015, 09:58:21 от Виктор Чекалин »

Отмечено как Решение Владимир П 29-09-2015, 10:27:09

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
В 2016 это достаточно просто. В нем Grid, Level, ReferencePlane наследуются от класса DatumPlane, в нем есть метод SetCurveInView, как в 2015 или раньше пока не подскажу

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Каким образом я могу управлять этими точками концов отображаемого уровня?
Александр верно сказал. В 2016 версии использовать методы нового класса DatumPlane. В более ранних версиях - никак, к сожалению.

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Большое всем спасибо! Понятно. Надо ставить 16-й... Если не сочтете за наглость, может примерчик по теме с DatumPlane укажете? по уровням, по осям?

Оффлайн Виктор Чекалин

  • Administrator
  • *****
  • Сообщений: 694
  • Карма: 111
  • Skype: chekalin-v
Владимир, примерчик есть в примерах Revit SDK 2016 - ...\Revit 2016 SDK\Samples\DatumsModification\
Там есть пример использования метода SetCurveInView
Код - C# [Выбрать]
  1.                    using (Transaction tran = new Transaction(document, "DatumAlignment"))
  2.                    {
  3.                       tran.Start();
  4.  
  5.                       foreach (DatumPlane datum in datumDic.Values)
  6.                       {
  7.                          Curve curve = datum.GetCurvesInView(datum.GetDatumExtentTypeInView(DatumEnds.End0, view),view).ElementAt(0);
  8.                          XYZ direct = (curve as Line).Direction;
  9.                          Curve newCurve = CalculateCurve(curve,baseLine,baseDirect);
  10.                          datum.SetCurveInView(datum.GetDatumExtentTypeInView(DatumEnds.End0, view), view, newCurve);                        
  11.                       }
  12.                       tran.Commit();
  13.                    }

Оффлайн Владимир ПАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 57
  • Карма: 3
Виктору спасибо еще раз!