Сетка осей

Автор Тема: Сетка осей  (Прочитано 2337 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Сетка осей
« : 06-10-2018, 20:25:02 »
Мне нужно отобразить оси на 3D модели. Т.к. стандартные оси на ней не рисуются, видимо придется делать через model line.
Гугл говорит, что данным кодом, она должна создаться, но на самом деле это не так.
Код - C# [Выбрать]
  1.  Transaction t = new Transaction(activedoc, "centerline");
  2.                 t.Start();
  3.                 Line line =  Line.CreateBound(start/ 304.797, end/ 304.797);
  4.                 XYZ origin = new XYZ(0, 0, 0);
  5.                 XYZ normal = new XYZ(1, 1, 0);
  6.                 Plane geomPlane = Plane.CreateByNormalAndOrigin(normal, origin);
  7.                 SketchPlane sketch = SketchPlane.Create(activedoc,geomPlane);
  8.                 activedoc.Create.NewModelCurve(line, sketch);
  9.                 t.Commit();
Где-то ошибка или все же нужно создавать через семейства? Или есть ещё какой-то бажок-способ, чтобы отобразить оси на 3D view?



Оффлайн enot

  • ADN OPEN
  • *****
  • Сообщений: 525
  • Карма: 2
Re: Сетка осей
« Ответ #1 : 06-10-2018, 21:26:39 »
Код - C# [Выбрать]
  1.             Grid one_grid = doc.GetElement(new ElementId(20637)) as Grid;        
  2.             var start = one_grid.Curve.GetEndPoint(0);
  3.             var end = one_grid.Curve.GetEndPoint(1);            
  4.             Transaction t = new Transaction(doc, "create_model_curve");
  5.             t.Start();
  6.             Line line = Line.CreateBound(start , end );
  7.             Plane plane = Plane.CreateByOriginAndBasis(start, XYZ.BasisX, XYZ.BasisY);
  8.             Autodesk.Revit.DB.SketchPlane skp = Autodesk.Revit.DB.SketchPlane.Create(doc, plane);      
  9.             Autodesk.Revit.DB.ModelCurve mline = doc.Create.NewModelCurve(line, skp);
  10.             t.Commit();

или так:
           
Код - C# [Выбрать]
  1.    Autodesk.Revit.DB.SketchPlane skp = Autodesk.Revit.DB.SketchPlane.Create(doc, one_grid.Id);



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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Re: Сетка осей
« Ответ #2 : 08-10-2018, 02:40:15 »
Прошу так же уточнить, каким образом креатится Model text?

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Сетка осей
« Ответ #3 : 08-10-2018, 09:58:16 »
Цитировать
XYZ normal = new XYZ(1, 1, 0);
Это вектор под 45 градусов между осями X и Y! Вы должны указывать такую нормаль:
Код - C# [Выбрать]
  1. XYZ normal = new XYZ(0, 0, 1);

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Сетка осей
« Ответ #4 : 08-10-2018, 10:31:25 »
каким образом креатится Model text?

В семействе doc.FamilyCreate.NewModelText, в проекте создать нельзя, но можно скопировать, в т.ч. из другого файла с помощью ElementTransformUtils, затем повернуть как нужно и задать текст.

Ну и насчет нормали Александр прав

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

  • ADN OPEN
  • Сообщений: 22
  • Карма: 0
Re: Сетка осей
« Ответ #5 : 08-10-2018, 15:32:43 »
А таким способом? В году 2015-2016 им пользовались. Но теперь он не работает или я просто не прав в инициализации FamilyItemFactory? Пользуюсь исключительно готовыми примерами из гугла, которые советовали разработчики или пользователи.
Код - C# [Выбрать]
  1. ModelTextType pMT = new FilteredElementCollector(activedoc).OfClass(typeof(ModelTextType)).First() as ModelTextType;
  2.                 Autodesk.Revit.Creation.FamilyItemFactory s = activedoc.FamilyCreate;
  3.                s.NewModelText("1", pMT, skp, start, HorizontalAlign.Center, 50);

Если такой способ больше не рабочий, объясните, как мне "носить с собой" и "подключить" другой документ, с которого я скопирую объект model text и могу я так вообще делать? Т.к. чертеж по задумке изначально пустой.

Оффлайн Александр Пекшев aka Modis

  • ADN Club
  • *****
  • Сообщений: 1658
  • Карма: 366
  • Отец modplus.org
    • ModPlus
Re: Сетка осей
« Ответ #6 : 08-10-2018, 15:40:59 »
TextNote.Create()
При чем тут вообще семейства?  :o

Отмечено как Решение Art 14-10-2018, 19:18:21

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

  • Administrator
  • *****
  • Сообщений: 1152
  • Карма: 338
  • Skype: alexandr.ignatovich.itc
Re: Сетка осей
« Ответ #7 : 08-10-2018, 15:42:29 »
Art: это способ создания ModelText в семействе
Александр: TextNote и ModelText разные вещи

"Носить с собой" можно маленький проект, например, в ресурсах dll, копирование работает и между проектами тоже