Сообщество программистов Autodesk в СНГ

ADN Club => Revit API => Тема начата: Владимир П от 28-09-2015, 17:46:01

Название: Изменение положения концов уровней и осей
Отправлено: Владимир П от 28-09-2015, 17:46:01
Новичек в Revit API. И вопрос соответствующий.
По примерам освоил рисование осей и уровней - все, вроде, получается, но: если я могу задавать точки конца и начала осей в плане, то при просмотре модели с фасада, ось (ее начало и конец) отображается как-то самостоятельно, без моего участия...
С уровнями еще непонятней. Тут нет возможности даже и ввести координаты отображения уровня, (ну по примерам так получается). Дело в том, что мне, в итоге, на одном виде надо получить несколько групп уровней, и чтоб они не смешивались друг с другом.
Вопрос. Каким образом я могу управлять этими точками концов отображаемого уровня? То же и по осям. Как менять точки отображаемой части оси на одном виде, если ось создавалась на другом?
Название: Re: Изменение положения концов уровней и осей
Отправлено: Дмитрий Дронов от 28-09-2015, 22:05:14
А что хоть за примеры? Покажите ссылку пожалуйста.
И скриншоты.
Так понимаю нужно копать в сторону "переход к 2D границе"
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fjoxi.ru%2FDr8vjvOuXBPa26%3Fd%3D1&hash=41906e492d2d01bca872810911c244d9)
Название: Re: Изменение положения концов уровней и осей
Отправлено: Владимир П от 29-09-2015, 08:45:52
А что хоть за примеры? Покажите ссылку пожалуйста.
И скриншоты.
Так понимаю нужно копать в сторону "переход к 2D границе"
(https://adn-cis.org/forum/proxy.php?request=http%3A%2F%2Fjoxi.ru%2FDr8vjvOuXBPa26%3Fd%3D1&hash=41906e492d2d01bca872810911c244d9)

Лучше пока отдельно про уровни
Какие примеры? например из 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.  
Подозреваю, что то, что мне нужно, а именно отображение самой линии уровня на экране находится в каких-то других свойствах. Вот в каких? четко про конечные точки данной линии там ничего не нашел... а че-то их (свойств) там очень много, чтобы искать методом "тыка"...
скриншоты во вложениях:
приложение лепит по умолчанию все уровни в кучку слева, а надо бы разнести на несколько групп в данном случае по оси Х.


НА ЗАБЫВАЕМ ФОРМАТИРОВАТЬ КОД
Название: Re: Изменение положения концов уровней и осей
Отправлено: Александр Игнатович от 29-09-2015, 09:50:57
В 2016 это достаточно просто. В нем Grid, Level, ReferencePlane наследуются от класса DatumPlane, в нем есть метод SetCurveInView, как в 2015 или раньше пока не подскажу
Название: Re: Изменение положения концов уровней и осей
Отправлено: Виктор Чекалин от 29-09-2015, 10:15:53
Каким образом я могу управлять этими точками концов отображаемого уровня?
Александр верно сказал. В 2016 версии использовать методы нового класса DatumPlane. В более ранних версиях - никак, к сожалению.
Название: Re: Изменение положения концов уровней и осей
Отправлено: Владимир П от 29-09-2015, 10:33:56
Большое всем спасибо! Понятно. Надо ставить 16-й... Если не сочтете за наглость, может примерчик по теме с DatumPlane укажете? по уровням, по осям?
Название: Re: Изменение положения концов уровней и осей
Отправлено: Виктор Чекалин от 29-09-2015, 10:45:29
Владимир, примерчик есть в примерах 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.                    }
Название: Re: Изменение положения концов уровней и осей
Отправлено: Владимир П от 29-09-2015, 15:49:13
Виктору спасибо еще раз!