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

ADN Club => Revit API => Тема начата: Art от 06-10-2018, 20:25:02

Название: Сетка осей
Отправлено: Art от 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?


Название: Re: Сетка осей
Отправлено: enot от 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);


Название: Re: Сетка осей
Отправлено: Art от 08-10-2018, 02:40:15
Прошу так же уточнить, каким образом креатится Model text?
Название: Re: Сетка осей
Отправлено: Александр Пекшев aka Modis от 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);
Название: Re: Сетка осей
Отправлено: Александр Игнатович от 08-10-2018, 10:31:25
каким образом креатится Model text?

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

Ну и насчет нормали Александр прав
Название: Re: Сетка осей
Отправлено: Art от 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 и могу я так вообще делать? Т.к. чертеж по задумке изначально пустой.
Название: Re: Сетка осей
Отправлено: Александр Пекшев aka Modis от 08-10-2018, 15:40:59
TextNote.Create() (http://www.revitapidocs.com/2018.1/7dddec5f-15a3-f835-85ab-0ff677b564db.htm)
При чем тут вообще семейства?  :o
Название: Re: Сетка осей
Отправлено: Александр Игнатович от 08-10-2018, 15:42:29
Art: это способ создания ModelText в семействе
Александр: TextNote и ModelText разные вещи

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